Join (Web Database)
Join (Web Database)
Dalam menampilkan sebuah data seringkali kita perlu menggunakan lebih dari 1 tabel, 2
tabel, bahkan lebih, karena data yang akan ditampilkan terletak pada beberapa tabel. Setiap tabel
biasanya memiliki keterkaitan melalui primary key dan foreign key nya. Keyword JOIN
digunakan di SQL statement untuk men-query data dari 2 atau lebih tabel, berdasarkan
relationship antar kolom di tabel-tabel.
Untuk mencoba contoh-contoh perintah join, silahkan eksekusi query create+insert
dibawah ini:
CREATE TABLE Karyawan
(
nama varchar (100),
email varchar (100),
kode_jabatan char (5),
kode_dept char (5)
)
CREATE TABLE Jabatan
(
kode_jabatan char (5),
jabatan varchar (100),
salary int
)
CREATE TABLE Departemen
(
kode_dept char (5),
dept varchar (100),
alamat varchar (100)
)
INSERT INTO Karyawan VALUES ('Fajar','fajarcihuy@yahoo.com', 'JB001',
'DP001')
INSERT INTO Karyawan VALUES ('Jonsis','jonsisasoy@yahoo.com', 'JB002',
'DP002')
INSERT INTO Karyawan VALUES ('Nita','nitaoenyoe@yahoo.com', null,
'DP003')
INSERT INTO Jabatan VALUES ('JB001','Direktur', 15000000)
INSERT INTO Jabatan VALUES ('JB002','Direktur Utama', 20000000)
INSERT INTO Jabatan VALUES (null,'Sekretaris', 10000000)
INSERT INTO Departemen VALUES ('DB001','Akunting', 'Jalan Luwuk')
INSERT INTO Departemen VALUES ('DB002','IT', 'Jalan Bogor')
INSERT INTO Departemen VALUES ('DB003','Layanan', 'Jalan Bekazeh')
Tabel Karyawan
Tabel Jabatan
Tabel Departemen
CROSS JOIN
Cross join seringkali disebut juga sebagai Cartesian Product. Bila menggunakan cross
join, maka akan menampilkan hasil yang didasarkan pada semua kemungkinan
kombinasi baris dalam kedua atau lebih set data. Banyaknya record cross join = jumlah
record tabel pertama x jumlah record tabel kedua
Contoh: Tampilkan semua data pada tabel karyawan dan departemen
Command:
SELECT * from Karyawan CROSS JOIN Departemen
Hasil:
Keterangan :
Cross join menggabungkan lebih dari satu tabel tanpa syarat apapun (tabel karyawan dan
departemen). Jika tabel karyawan memiliki 3 baris dan tabel departemen juga memiliki 3
baris, maka hasil cross join adalah 9 baris.
2.
Hasil:
Keterangan :
Menampilkan field nama, email, jabatan, dan salary berdasarkan kesamaan kode_jabatan
pada kedua tabel yang masing-masing memiliki data pada fieldnya. Jika ada data yang
tidak ada nilainya, maka tidak akan ditampilkan. Dalam kasus ini, data karyawan atas
nama Nita tidak ditampilkan karena kode_jabatannya null.
3.
Hasil:
Keterangan:
Pada hasil di atas, terdapat nilai null karena sintaks left outer join menjadikan tabel yang
sebelah kiri atau yang pertama kali disebut (tabel: karyawan) sebagai referensi. Dan jika
tidak ada nilainya berdasarkan tabel jabatan, maka data tetap akan di tampilkan, namun
nilai nya adalah null. Dalam kasus ini, salary karyawan atas nama Nita tetap ditampilkan,
namun nilainya null.
b. Left Outer Join dengan klausa where
Command:
SELECT a.nama, a.email, b.salary
FROM Karyawan a LEFT JOIN Jabatan b on
a.kode_jabatan=b.kode_jabatan
WHERE b.salary IS NULL
Hasil:
Keterangan:
Sama seperti left outer join sebelumnya, namun dalam kasus ini ditambahkan klausa
where dimana data yang ditampilkan hanya karyawan yang salarynya bernilai null.
4.
Hasil:
Keterangan:
Pada hasil di atas, terdapat nilai null karena sintaks right outer join menjadikan tabel yang
sebelah kanan atau yang kedua kali disebut (tabel: jabatan) sebagai referensi. Dan jika
ada tabel sebelah kiri yang memiliki nilai, maka data tetap akan di tampilkan, namun
nilainya akan null. Dalam kasus ini, nama dan email karyawan atas nama Nita tetap
ditampilkan, namun nilainya null.
b. Right Outer Join dengan klausa where
Command:
SELECT a.nama, a.email, b.jabatan, b.salary
FROM Karyawan a RIGHT JOIN Jabatan b on
a.kode_jabatan=b.kode_jabatan
WHERE a.nama IS NULL OR a.email IS NULL
Hasil:
Keterangan:
Sama seperti right outer join sebelumnya, namun dalam kasus ini ditambahkan klausa
where dimana data yang ditampilkan hanya karyawan yang nama dan emailnya bernilai
null.
5.
Hasil:
Keterangan:
Full outer join menghasilkan semua data yang ditemukan dan cocok satu sama lain pada
kedua tabel, jika ada yang tidak cocok, bagian yang tidak ada tersebut akan berisi null.
Jadi bisa dikatakan, full outer join ini akan menampilkan semua data yang ada di kedua
tabel termasuk yang tidak cocok satu sama lain.
b. Full Outer Join dengan klausa where
Command:
SELECT a.nama, a.email, b.jabatan, b.salary
FROM Karyawan a FULL JOIN Jabatan b on
a.kode_jabatan=b.kode_jabatan
WHERE a.nama IS NULL or a.email IS NULL
Hasil:
Keterangan:
Sama seperti full outer join sebelumnya, namun dalam kasus ini ditambahkan klausa
where dimana data yang ditampilkan hanya karyawan yang nama dan emailnya bernilai
null.