Aljabar Relasional dan Query #6: Set Difference (Selisih)

Apakah klausa MINUS dan EXCEPT itu sama?

M. Ramadhan
Telematika
4 min readDec 11, 2021

--

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.

Diagram Venn selisih, R–S

Query

PostgreSQL, SQL Server, dan SQLite menggunakan klausa EXCEPT sebagai operator selisih. Sintaks querynya adalah sebagai berikut.

Klausa MINUS berlaku untuk Oracle dan MySQL.

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.

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: DosenKaryawan
Berikut adalah query dan hasilnya terurut berdasarkan primary key.

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.

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.

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.

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.

--

--

M. Ramadhan
Telematika

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