Aljabar Relasional dan Query #7: Irisan

Menggunakan intersect, subquery, inner join, produk Cartesian atau cross join yang diseleksi dan diproyeksi

M. Ramadhan
Telematika
4 min readNov 27, 2023

--

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.

Diagram Venn Irisan R⋂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: DosenKaryawan atau KaryawanDosen.
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: DosenKaryawan

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.

--

--

M. Ramadhan
Telematika

I’m a database designer and developer, childhood in Menggala, living in Palembang.