Join Query
Posted in Sistem Basis Data on March 22nd, 2011 by nur ichsan – Comments Off on Join Query Tags: Query SQLBuat dua buat table seperti gambar dibawah ini :
Inner Join
disebut juga basic join, karena akan menggabungkan tabel dengan mengembalikan nilai asalnya.
select * from Employee A inner join Departement B On A.DepartmentID=B.DepartmentID
keyword ON digunakan untuk menspesifikasikan tabel yang akan di JOIN. Query diatas bisa akan menghasilkan output yang sama dengan query sebagai berikut :
select * from Employee, Departement where Employee.DepartmentID=Department.DepartmentID
hanya saja jika menggunakan query diatas maka jika tabel banyak di JOIN maka query akan panjang penulisannya dan dari segi waktu proses akan lebih cepat menggunakan JOIN. Hasil dari eksekusi query diatas adalah sebagai berikut :
Employee.LastName | Employee.DepartmentID | Department.DepartmentName | Department.DepartmentID |
---|---|---|---|
Robinson | 34 | Clerical | 34 |
Jones | 33 | Engineering | 33 |
Smith | 34 | Clerical | 34 |
Steinberg | 33 | Engineering | 33 |
Rafferty | 31 | Sales | 31 |
karena John dan Marketing bernilai Null maka data tidak dapat ditampilkan. Keduanya dapat ditampilkan menggunakan Cross JOIN.
Left JOIN
Data yang berada pada tabel sebelah kiri akan ditampilkan semuanya walaupun tidak ada pada tabel kanan. Jika menggunakan Left JOIN maka John akan tetap ditampilkan walaupun tidak ada pada tabel kanan.
select * from Employee A left join Departement B On A.DepartmentID=B.DepartmentID
Employee.LastName | Employee.DepartmentID | Department.DepartmentName | Department.DepartmentID |
---|---|---|---|
Jones | 33 | Engineering | 33 |
Rafferty | 31 | Sales | 31 |
Robinson | 34 | Clerical | 34 |
Smith | 34 | Clerical | 34 |
John | NULL | NULL | NULL |
Steinberg | 33 | Engineering | 33 |
select * from Employee A right join Departement B On A.DepartmentID=B.DepartmentID
Employee.LastName | Employee.DepartmentID | Department.DepartmentName | Department.DepartmentID |
---|---|---|---|
Smith | 34 | Clerical | 34 |
Jones | 33 | Engineering | 33 |
Robinson | 34 | Clerical | 34 |
Steinberg | 33 | Engineering | 33 |
Rafferty | 31 | Sales | 31 |
NULL | NULL | Marketing | 35 |
Cross JOIN
Akan menampilkan semua data pada kedua tabel. Jika tabel kanan berisi 6 rows dan tabel kiri beisi 4 rows maka hasil dari JOIN yang dilakukan sebanyak 24 rows.
select * from Employee A cross join Departement B On A.DepartmentID=B.DepartmentID
Query diatas mempunyai fungsi yang sama dengan dengan query dibawah ini :
select * from Employee, Department
Employee.LastName | Employee.DepartmentID | Department.DepartmentName | Department.DepartmentID |
---|---|---|---|
Rafferty | 31 | Sales | 31 |
Jones | 33 | Sales | 31 |
Steinberg | 33 | Sales | 31 |
Smith | 34 | Sales | 31 |
Robinson | 34 | Sales | 31 |
John | NULL | Sales | 31 |
Rafferty | 31 | Engineering | 33 |
Jones | 33 | Engineering | 33 |
Steinberg | 33 | Engineering | 33 |
Smith | 34 | Engineering | 33 |
Robinson | 34 | Engineering | 33 |
John | NULL | Engineering | 33 |
Rafferty | 31 | Clerical | 34 |
Jones | 33 | Clerical | 34 |
Steinberg | 33 | Clerical | 34 |
Smith | 34 | Clerical | 34 |
Robinson | 34 | Clerical | 34 |
John | NULL | Clerical | 34 |
Rafferty | 31 | Marketing | 35 |
Jones | 33 | Marketing | 35 |
Steinberg | 33 | Marketing | 35 |
Smith | 34 | Marketing | 35 |
Robinson | 34 | Marketing | 35 |
John | NULL | Marketing | 35 |
Full JOIN
Pada dasarnya adalah gabungan antara Left dan Right JOIN. Jadi data-data yang ada pada kedua tabel akan ditampilkan semuanya walau tidak ada pada tabel lainnya.
select * from Employee A Full join Departement B On A.DepartmentID=B.DepartmentID
Jika menggunakan Left dan Right JOIN maka query nya sebagai berikut :
select * from Employee A left join Departement B On A.DepartmentID=B.DepartmentIDUNIONselect * from Employee A right join Departement B On A.DepartmentID=B.DepartmentID
Employee.LastName | Employee.DepartmentID | Department.DepartmentName | Department.DepartmentID |
---|---|---|---|
Smith | 34 | Clerical | 34 |
Jones | 33 | Engineering | 33 |
Robinson | 34 | Clerical | 34 |
John | NULL | NULL | NULL |
Steinberg | 33 | Engineering | 33 |
Rafferty | 31 | Sales | 31 |
NULL | NULL | Marketing | 35 |
Semoga Bermanfaat.
*NB : Query diatas saya jalankan pada Microsoft SQL Server