Aljabar Relasional dan Query #1: Proyeksi

Memilih kolom tabel basis data relasional

Photo by Darryl Low on Unsplash


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 delapan operasi yang terdiri atas lima operasi dasar dan tiga operasi tambahan.

Lima operasi dasar:
▸ proyeksi
▸ seleksi
▸ produk Cartesian
union
set difference (selisih)

Tiga operasi tambahan yaitu turunan dari operasi dasar:
join
intersection (irisan)
▸ divisi.

Aljabar relasional menjadi dasar bagi query. Query adalah kata dalam bahasa Inggris, merupakan kata benda, bentuk jamaknya queries, secara semantik berarti pertanyaan atau permintaan informasi tentang sesuatu.

A query is a question or a request for information about something. (https://www.merriam-webster.com/dictionary/query)

Sebagai istilah dalam basis data, query berarti permintaan data yang diambil dari basis data. Query pada basis data relasional menggunakan Structured Query Language (SQL).

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 Proyeksi

Proyeksi digunakan untuk memilih kolom atau atribut dari sebuah relasi. Lihat Tabel 1. Operasi proyeksi menghasilkan relasi yang berisi nilai atribut a₁, a₂, … , aₙ tanpa duplikasi tuple dari relasi. Ekspresi aljabar relasionalnya menggunakan operator Π.

Aljabar RelasionalQuery
Πa1, a2, … , an (Relasi)SELECT a1, a2, … , an
FROM Relasi
Tabel 1 Operasi Proyeksi

Contoh Kasus

Berikut adalah contoh kasus tabel mahasiswa yang terdiri atas enam kolom. Dengan operasi proyeksi, kita bisa memilih kolom sesuai dengan kebutuhan. Terlebih dahulu kita buat basis data InfoMhs yang berisi satu tabel Mahasiswa. Pernyataan SQL-nya menggunakan SQL Server.

-- Membuat basis data InfoMhs
CREATE DATABASE InfoMhs
GO
-- Mengaktifkan basis data Simak
USE InfoMhs
GO
-- Membuat tabel Mahasiswa
CREATE TABLE Mahasiswa (
NIM Char(7) PRIMARY KEY,
Nama VarChar(16),
Gender Char(1),
TglLahir Date,
GolDarah VarChar(2),
IPK Decimal(3,2),
CHECK (Gender IN('L','P')),
CHECK (GolDarah IN('A','B','AB','O')),
CHECK (IPK BETWEEN 0.0 AND 4.0)
)
GO
-- Memasukkan data mahasiswa
INSERT INTO Mahasiswa VALUES
('1221234','Rajabasa', 'L','2003-03-25','A', 2.34),
('1120235','Merapi', 'L','2003-02-17','O', 3.55),
('1120236','Mawar Merah', 'P','2004-04-01',NULL,2.10),
('1222237','Semeru', 'L','2004-12-31','A', NULL),
('1322238','Melati Putih','P',NULL, 'B', 1.23),
('1321239','Kutilang', 'L','2004-03-17','O', 3.21),
('1221210','Cempaka', 'P','2003-03-07','O', 0.75),
('1219254','Kilau Intan', 'P',NULL, NULL, 2.00),
('1119300','Nur Cahaya', 'P','2002-04-16','B', NULL),
('1120335','Jayagiri', 'P',NULL, 'O', 3.50);
GO

Query SELECT * FROM Mahasiswa menghasilkan:

NIM     Nama             Gender TglLahir   GolDarah IPK
------- ---------------- ------ ---------- -------- ----
1119300 Nur Cahaya P 2002-04-16 B NULL
1120235 Merapi L 2003-02-17 O 3.55
1120236 Mawar Merah P 2004-04-01 NULL 2.10
1120335 Jayagiri P NULL O 3.50
1219254 Kilau Intan P NULL NULL 2.00
1221210 Cempaka P 2003-03-07 O 0.75
1221234 Rajabasa L 2003-03-25 A 2.34
1222237 Semeru L 2004-12-31 A NULL
1321239 Kutilang L 2004-03-17 O 3.21
1322238 Melati Putih P NULL B 1.23

(10 rows affected)

(1) Daftar golongan darah mahasiswa

Aljabar RelasionalQuery
ΠGolDarah (Mahasiswa)SELECT GolDarah
FROM Mahasiswa
Tabel 2 Proyeksi GolDarah Mahasiswa

Bila dieksekusi, query di atas menghasilkan:

GolDarah
--------
B
O
NULL
O
NULL
O
A
A
O
B

(10 rows affected)

Ternyata hasilnya tidak sesuai dengan yang ada di buku, tetap ada duplikasi data. DBMS tidak mengimplementasikannya dengan cara yang sama seperti yang dijelaskan dalam teori. Sudah dicoba dengan Oracle, MySQL, Access, PostgreSQL, semuanya memberikan data ganda. Untuk meniadakan duplikasi data, pengguna harus memintanya secara eksplisit menggunakan klausa DISTINCT.

SELECT DISTINCT GolDarah
FROM Mahasiswa

Hasilnya sesuai dengan teori.

GolDarah
--------
NULL
A
B
O

(4 rows affected)

(2) Jumlah mahasiswa untuk setiap golongan darah

Tambahkan fungsi agregasi Count(*) disertai dengan klausa GROUP BY.

SELECT GolDarah,
COUNT(*) AS Jumlah
FROM Mahasiswa
GROUP BY GolDarah

Klausa DISTINCT tidak diperlukan lagi. Berikut hasilnya.

GolDarah Jumlah
-------- ------
NULL 2
A 2
B 2
O 4

(4 rows affected)

(3) Daftar gender dan golongan darah

Aljabar RelasionalQuery
ΠGender, GolDarah (Mahasiswa)SELECT DISTINCT Gender, GolDarah
FROM Mahasiswa
Tabel 3 Proyeksi Gender, GolDarah Mahasiswa

Query-nya menghasilkan:

Gender GolDarah
------ --------
L A
L O
P NULL
P B
P O

(5 rows affected)

Urutan kolom yang dihasilkan sesuai dengan urutan dalam pernyataan proyeksi. Urutan kolom pada waktu pendefinisian tabel tidak ada pengaruhnya.

(4) Jumlah mahasiswa untuk setiap gender dan golongan darah

Tambahkan fungsi agregasi Count(*) disertai dengan klausa GROUP BY.

SELECT Gender, GolDarah,
COUNT(*) AS Jumlah
FROM Mahasiswa
GROUP BY Gender, GolDarah

Bila dieksekusi, hasilnya sebagai berikut.

Gender GolDarah Jumlah
------ -------- ------
L A 2
L O 2
P NULL 2
P B 2
P O 2

(5 rows affected)

Penutup

Proyeksi adalah operasi memilih kolom tanpa duplikasi tuple. Kenyataannya DBMS tidak mengimplementasikannya dengan cara yang sama seperti yang dijelaskan dalam teori. Untuk memperoleh hasil tuple unik, pengguna harus memintanya secara eksplisit menggunakan klausa DISTINCT.


Daftar Pustaka

Codd, E.F. (March 1972). “Relational Completeness of Data Base Sublanguages” in Computer Sciences. San Jose, California: IBM Research Laboratory.

Connolly, Thomas M., & Begg, Carolyn E. (2015). Database Systems: A Prac­tical Approach to Design, Implementation, and Management. 6th Edition. Essex, England: Pearson Education.

Coronel, C., Steven, M., Crockett, K., & Blewett, C. (2020). Database Principles: Fundamentals of Design, Implementation, and Management. 3rd Edition. Hampshire, United Kingdom: Cengage Learning

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *