Aljabar Relasional dan Query #7: Irisan
Menggunakan intersect, subquery, inner join, produk Cartesian atau cross join yang diseleksi dan diproyeksi
Daftar Isi
· Pendahuluan
· Operasi Irisan
▹ Ekspresi Aljabar Relasional: R⋂S
▹ Query
▹ Contoh
· INTERSECT Error(?)
▹ Subquery
▹ Inner Join
▹ Produk Cartesian atau Crosss 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.
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
.
Operasi Irisan
Konsep irisan mirip dengan konsep matematis irisan, di mana hanya elemen yang dimiliki oleh semua himpunan yang terlibat yang akan dimasukkan dalam hasil akhir. Irisan pada aljabar relasional dan query merujuk pada operasi yang memungkinkan pengguna menemukan elemen-elemen yang dimiliki oleh semua himpunan tersebut.
Ekspresi Aljabar Relasional: R⋂S
Operasi irisan — menggunakan simbol ⋂ sebagai operatornya — menghasilkan relasi yang berisi tuple yang ada dalam relasi R dan relasi S.
Pada operasi irisan berlaku:
• hukum komutatif: R⋂S = S⋂R
• hukum asosiatif: (R⋂S)⋂T = R⋂(S⋂T)
Query
Sintaks querynya adalah sebagai berikut.
SELECT DaftarEkspresi FROM tabel
INTERSECT
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 dan tipe datanya 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 tetap yaitu dosen yang juga karyawan. Data yang diminta ada di dalam tabel Dosen dan tabel Karyawan.
Ekspresi aljabar relasional: Dosen⋂Karyawan atau Karyawan⋂Dosen.
Berikut adalah query dan hasilnya terurut berdasarkan primary key.
SELECT NID, Nama FROM Dosen
INTERSECT
SELECT NIK, Nama FROM Karyawan
-- Hasilnya terurut berdasarkan primary key (kolom NID)
NID Nama
---- ----------
234 Sabar
678 Melati
(2 rows affected)
SELECT Nama, NID FROM Dosen
EXCEPT
SELECT Nama, NIK FROM Karyawan
-- Hasilnya tetap terurut berdasarkan primary key
Nama NID
---------- ----
Sabar 234
Melati 678
(2 rows affected)
-- Alternatif lain
SELECT NIK, Nama FROM Karyawan
INTERSECT
SELECT NID, Nama FROM Dosen
-- Hasilnya terurut berdasarkan primary key (kolom NIK)
NIK Nama
---- ----------
234 Sabar
678 Melati
(2 rows affected)
INTERSECT
Error(?)
Bila DBMS yang digunakan tidak mengenal klausa INTERSECT
, gunakan subquery, inner join, produk Cartesian atau cross join yang diseleksi dan diproyeksi.
Subquery
Operasi irisan dapat dilakukan dengan menggunakan subquery. Daftar dosen tetap adalah dosen yang NID-nya ada di dalam kolom NIK Karyawan. Ekspresi aljabar relasionalnya adalah sebagai berikut.
Berikut adalah query dan hasilnya.
SELECT * FROM Dosen
WHERE NID IN
(SELECT NIK FROM Karyawan)
-- Memberikan hasil yang sama
NID Nama
---- ----------
234 Sabar
678 Melati
(2 rows affected)
Inner Join
Operasi irisan dapat juga dilakukan dengan menggunakan operasi inner join yang diproyeksi. Pilih hanya kolom Dosen dari operasi inner join: Dosen⨝Karyawan
Query dan hasilnya adalah sebagai berikut.
SELECT Dosen.*
FROM Dosen INNER JOIN
Karyawan ON NID = NIK
-- Hasilnya sama
NID Nama
---- ----------
234 Sabar
678 Melati
(2 rows affected)
Produk Cartesian atau Crosss Join
Operasi irisan dapat juga dilakukan dengan menggunakan produk Cartesian yang diseleksi dan diproyeksi.
Query dan hasilnya adalah sebagai berikut.
SELECT Dosen.*
FROM Dosen, Karyawan
Where NID = NIK
-- Alternatif lain
SELECT Dosen.*
FROM Dosen CROSS JOIN Karyawan
WHERE NID = NIK
-- Hasilnya sama
NID Nama
---- ----------
234 Sabar
678 Melati
(2 rows affected)
Penutup
Untuk operasi irisan, sebagian besar DBMS menggunakan klausa EXCEPT
. DBMS yang tidak mengenal klausa tersebut dapat menggunakan subquery, inner join atau produk Cartesian yang diseleksi dan diproyeksi.
Daftar Pustaka
Codd, E.F. (March 1972). “Relational Completeness of Data Base Sublanguages” in Computer Sciences. San Jose, California: IBM Research Laboratory.