Aljabar Relasional dan Query #6: Set Difference (Selisih)
Apakah klausa MINUS dan EXCEPT itu sama?
Daftar Isi
• Pendahuluan
• Operasi Selisih
▹ Aljabar Relasional
▹ Query
▹ Contoh
• EXCEPT dan MINUS Error(?)
▹ Subquery
▹ Left Outer Join
▹ Right Outer Join
• Penutup
• Daftar Pustaka
Pendahuluan
Aljabar relasional adalah bahasa teoritis yang mengoperasikan satu atau beberapa relasi dan menghasilkan relasi lain tanpa mengubah relasi asli. Keluaran sebuah operasi dapat menjadi masukan operasi lainnya. Menurut Codd (1972), ada 8 operasi yaitu 5 operasi dasar: seleksi, proyeksi, produk Cartesian, union, set difference (selisih) dan 3 operasi tambahan (turunan dari operasi dasar): join, intersection (irisan), divisi.
Query adalah kata dalam bahasa Inggris, merupakan kata benda, bentuk jamaknya queries, secara semantik berarti pertanyaan atau permintaan informasi tentang sesuatu. Sebagai istilah dalam basis data, query berarti permintaan data atau informasi yang diambil dari basis data. Pada basis data relasional — Structured Query Language (SQL) sebagai bahasa bakunya — query menggunakan pernyataan SELECT
.
A query is a question or a request for information about something (https://www.merriam-webster.com/dictionary/query)
A query is a request for data or information from a database table or combination of tables. This data may be generated as results returned by Structured Query Language (SQL).
https://www.techopedia.com/definition/5736/query)
Operasi Selisih
Aljabar Relasional
Operasi selisih — menggunakan tanda kurang sebagai operatornya — menghasilkan relasi yang berisi tuple yang ada dalam suatu relasi tetapi tidak ada dalam relasi lain. Sebagai contoh, ekspresi aljabar relasional R–S menghasilkan relasi yang berisi tuple yang ada dalam relasi R tetapi tidak ada dalam relasi S. Pada operasi selisih tidak berlaku hukum komutatif.
R–S ≠ S–R.
Query
PostgreSQL, SQL Server, dan SQLite menggunakan klausa EXCEPT
sebagai operator selisih. Sintaks querynya adalah sebagai berikut.
SELECT DaftarEkspresi FROM tabel
EXCEPT
SELECT DaftarEkspresi FROM tabel
Klausa MINUS
berlaku untuk Oracle dan MySQL.
SELECT DaftarEkspresi FROM tabel
MINUS
SELECT DaftarEkspresi FROM tabel
Bila diperlukan, pernyataan SELECT
boleh dikombinasikan dengan operasi lain: proyeksi, seleksi, produk Cartesian, inner join, outer join, dsb. Daftar ekspresi dapat berupa kolom tabel, konstanta, perhitungan, fungsi skalar, fungsi agregasi. Yang penting, kolom dalam setiap pernyataan SELECT
harus union compatible yaitu:
• jumlah kolom sama
• urutan kolom sama dengan tipe data sama atau kompatibel.
Contoh
Berikut adalah contoh data yang ada dalam tabel Dosen dan Karyawan.
SELECT * FROM Dosen
NID Nama
---- ----------
123 Mawar
234 Sabar
456 Budi
678 Melati
(4 row(s) affected)SELECT * FROM Karyawan
NIK Nama
---- ----------
012 Budi
234 Sabar
345 Cempaka
567 Sentosa
678 Melati
(5 row(s) affected)
Daftar dosen tidak tetap yaitu dosen yang bukan karyawan. Data yang diminta ada di dalam tabel Dosen tetapi tidak ada di dalam tabel Karyawan.
Ekspresi aljabar relasional: Dosen − Karyawan
Berikut adalah query dan hasilnya terurut berdasarkan primary key.
SELECT NID, Nama FROM Dosen
EXCEPT
SELECT NIK, Nama FROM Karyawan-- Hasilnya terurut berdasarkan primary key (kolom NID)
NID Nama
---- ----------
123 Mawar
456 Budi
(2 rows affected)SELECT Nama, NID FROM Dosen
EXCEPT
SELECT Nama, NIK FROM KaryawanNama NID
---------- ----
Mawar 123
Budi 456
(2 rows affected)
EXCEPT dan MINUS
Error(?)
Bila DBMS yang digunakan tidak mengenal klausa EXCEPT
maupun MINUS
, gunakan subquery, left outer join atau right outer join.
Subquery
Operasi selisih dapat dilakukan dengan menggunakan subquery. Daftar dosen tidak tetap adalah dosen yang NID-nya tidak ada di dalam kolom NIK Karyawan. Ekspresi aljabar relasionalnya adalah sebagai berikut.
Berikut adalah query dan hasilnya.
SELECT * FROM Dosen
WHERE NID NOT IN
(SELECT NIK FROM Karyawan)NID Nama
---- ----------
123 Mawar
456 Budi
(2 rows affected)
Left Outer Join
Operasi selisih dapat juga dilakukan dengan menggunakan left outer join yang diselekasi dan diproyeksi. Berikut adalah ekspresi aljabar relasionalnya.
Query dan hasilnya adalah sebagai berikut.
SELECT Dosen.*
FROM Dosen LEFT OUTER JOIN
Karyawan ON NID = NIK
WHERE NIK IS NULLNID Nama
---- ----------
123 Mawar
456 Budi
(2 rows affected)
Right Outer Join
Operasi selisih dapat pula dilakukan dengan menggunakan right outer join yang diselekasi dan diproyeksi. Ekspresi aljabar relasionalnya ditulis sebagai berikut.
Berikut adalah query dan hasilnya.
SELECT Dosen.*
FROM Karyawan RIGHT OUTER JOIN
Dosen ON NIK = NID
WHERE NIK IS NULLNID Nama
---- ----------
123 Mawar
456 Budi
(2 rows affected)
Penutup
Untuk operasi selisih, PostgreSQL, SQL Server, dan SQLite menggunakan klausa EXCEPT
, sedangkan Oracle dan MySQL menggunakan klausa MINUS
. DBMS yang tidak mengenal kedua klausa tersebut dapat menggunakan subquery, left outer join atau right outer join yang diselekasi dan diproyeksi.
Daftar Pustaka
Codd, E.F. (March 1972). “Relational Completeness of Data Base Sublanguages” in Computer Sciences. San Jose, California: IBM Research Laboratory.