Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana merepresentasikan pembagian relasional (ekspresi aljabar dasar) dalam hal SQL

Mengingat DDL ini untuk tabel yang sesuai dengan relasi Anda yang relevan:

create table Boats(
  bid int,
  bname varchar(50),
  color varchar(50)
);

create table Reserves(
  sid int,
  bid int,
  day date
);

Anda dapat mentransliterasikan rumus pembagian (3) ke dalam sintaks Oracle SQL dengan cukup mudah, meskipun bertele-tele:

-- All sailors who reserved at least one boat
SELECT DISTINCT sid
FROM Reserves

MINUS 

-- All sailors who reserved at least one boat, but not all of them
SELECT sid
FROM (
  -- all combinations of a sailor who reserved any boat with any boat
  -- available to be reserved:
  SELECT Reserves.sid, Boats.bid
  FROM
    Reserves
    CROSS JOIN
    Boats

  MINUS

  -- all combinations of sailor and boat for actual reservations made
  SELECT sid, bid
  FROM Reserves
) sids

Seperti yang ditentukan, itu hanya menggunakan CROSS JOIN dan MINUS operasi, sehingga sesuai langsung dengan rumus aljabar relasional. Namun, dalam aplikasi database dunia nyata, seseorang pasti akan mendapatkan hasil yang sama melalui kueri yang sama sekali berbeda.

Perhatikan juga bahwa database SQL dapat dan memang melanggar prinsip aljabar relasional formal bahwa relasi tidak mengandung tupel duplikat. Itulah alasan untuk SELECT DISTINCT pada subquery pertama. Pemilihan berbeda yang diterapkan secara strategis di tempat lain dalam kueri mungkin membuatnya lebih efisien, tetapi tidak akan mengubah hasilnya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Membuat Variabel Record Datatype yang ditentukan Pengguna Di Oracle Database

  2. SSIS:Oracle Beberapa baris ke satu kolom output tanpa STRAGG

  3. Pernyataan SQL untuk menggunakan daftar nilai yang telah ditentukan sebelumnya sebagai tabel SQL

  4. Oracle:temukan angka terbesar dalam satu string

  5. CHR() Fungsi di Oracle