Biasanya, Anda menarik data dari dua atau lebih tabel menggunakan WHERE
klausa dalam kueri. Tetapi dalam sistem basis data relasional (RDBMS), ini dapat dicapai dengan menggunakan SELECT
single tunggal pertanyaan. Ini adalah kekuatan sebenarnya dari sistem database relasional. Dalam panduan ini, Anda mempelajari tentang SQL Joins, cara yang ampuh untuk membandingkan dan memilih baris dan tabel.
Apa itu SQL Join?
Dalam SQL, sebuah join
klausa memperluas kemampuan membandingkan dan memilih baris dari tabel. Ini menggunakan proses aljabar menggabungkan baris dari dua atau lebih tabel berdasarkan kolom terkait dalam tabel tersebut. Menurut definisi SQL standar ANSI, ada lima jenis Gabung –Cross Joins , Gabungan Dalam , Gabungan Kiri (Luar) , Gabungan Kanan(Luar) , dan Gabungan Penuh (Luar) . Gabung ini diimplementasikan di semua sistem basis data relasional dan tercakup dalam bagian di bawah ini.
Catatan Gabung dapat dilakukan pada sejumlah tabel dalam kueri tertentu. Untuk singkatnya dan kejelasan, panduan ini membahas Gabung yang diterapkan pada dua tabel.
Panduan ini menggunakan dua tabel, Employees
dan Address
, masing-masing, untuk mendemonstrasikan SQL Joins. Masing-masing tabel ini berisi definisi kolom dan data berikut:
-
Meja Karyawan
EmployeeId EmployeeName 1 John 2 Maria 3 Robert -
Tabel Alamat
Id State 1 New York 2 New Jersey 3 Idaho 4 Hawaii
Catatan Kecuali disebutkan sebaliknya, semua perintah dalam panduan ini bekerja dengan baik di kedua MySQL dan PostgreSQL database.
SQL Cross Bergabung
Juga dikenal sebagai Gabung Kartesius , Cross Joins terjadi ketika Anda menentukan beberapa tabel sebagai sumber untuk SELECT
. Anda daftar kolom. Dalam hal ini, Anda meninggalkan WHERE
klausa bergabung dengan ekspresi untuk mencocokkan baris. Himpunan hasil berisi satu baris untuk setiap kombinasi baris di antara tabel. Dalam skenario dua tabel, setiap baris dalam satu tabel dipasangkan dengan setiap baris tabel lainnya. Produk yang dihasilkan dikenal sebagai Produk Cartesian dari dua tabel. Sintaks untuk Cross Join adalah sebagai berikut:
(# Rows in Table A) TIMES (# of Rows in Table B)
CatatanDalam teori himpunan, Produk Cartesian adalah operasi perkalian yang menghasilkan semua pasangan terurut dari himpunan yang diberikan. Misalnya, pertimbangkan untuk mengatur
A
dengan elemen{a,b}
dan aturB
dengan elemen{1,2,3}
. Hasil Kali Kartesius dariA
danB
dilambangkan denganAxB
dan hasilnya adalah sebagai berikut:AxB ={(a,1), (a,2), (a,3), (b,1), (b,2), (b,3)}
Sintaks SQL untuk Cross Join adalah sebagai berikut:
SELECT ColumnName_1,
ColumnName_2,
ColumnName_N
FROM [Table_1]
CROSS JOIN [Table_2]
Dari sintaks di atas, Column_1
, Column_2
, Column_N
mewakili kolom dalam tabel, dan CROSS JOIN
klausa berfungsi untuk menggabungkan dua tabel, Table_1
dan Table_2
. Dari contoh tabel di atas, jika Anda perlu melakukan Cross Join pada Employees
dan Address
tabel, gunakan kode SQL berikut:
SELECT EmployeeName, State
FROM Employees
CROSS JOIN Address
Output dari kode SQL di atas menyerupai berikut ini:
+--------------+--------------+
| EmployeeName | State |
+---------------+-------------+
| John | New York |
| John | New Jersey |
| John | Idaho |
| John | Hawaii |
| John | New York |
| Mary | New York |
| Mary | New Jersey |
| Mary | Idaho |
| Mary | Hawaii |
| Robert | New York |
| Robert | New Jersey |
| Robert | Idaho |
| Robert | Hawaii |
+------------+----------------+
Gabung Dalam SQL
Inner Join mengembalikan baris yang memiliki nilai yang cocok di kedua tabel. Jika tidak ada catatan yang cocok, maka tidak ada baris yang dikembalikan dalam hasil.
Sintaks SQL untuk Inner Join adalah sebagai berikut:
SELECT ColumnName_1,
ColumnName_2,
ColumnName_N
FROM Table_1
INNER JOIN Table_2
ON Table_1.key = Table_2.key;
Pada contoh di atas, key
adalah kunci masing-masing dari tabel. Jika Anda perlu melakukan inner join pada Employees
dan Address
tabel, gunakan kode SQL berikut:
SELECT EmployeeName, State
FROM Employees
INNER JOIN Address
ON Employees.EmployeeId = Address.Id
Output dari kode SQL di atas menyerupai berikut ini:
+--------------+--------------+
| EmployeeName | State |
+---------------+-------------+
| John | New York |
| Mary | New Jersey |
+------------+----------------+
SQL Left (Luar) Bergabung
Gabung Kiri mengembalikan satu set lengkap baris dari tabel kiri bersama dengan baris yang cocok dari tabel kanan. Jika tidak ada record yang cocok, maka NULL
nilai dikembalikan dari tabel kanan.
Catatan Beberapa implementasi database relasional menggunakan kata kunci “Left Outer Join”, sebagai lawan dari “Left Join”, tetapi secara fungsional setara.
Sintaks SQL untuk Left Join adalah sebagai berikut:
SELECT * FROM Table_1
LEFT JOIN Table_2
ON Table_1.key = Table_2.key
Pada contoh di atas, key
adalah kunci masing-masing dari tabel. Jika Anda perlu melakukan join kiri pada Employees
dan Address
tabel, gunakan kode SQL berikut:
SELECT EmployeeName, State
FROM Employees
LEFT JOIN Address
ON Employees.EmployeeId = Address.Id
Output dari kode SQL di atas adalah sebagai berikut:
+--------------+--------------+
| EmployeeName | State |
+---------------+-------------+
| John | New York |
| Mary | New Jersey |
| Robert | NULL |
+------------+----------------+
SQL Kanan (Luar) Gabung
Gabung Kanan mengembalikan satu set lengkap baris dari tabel kanan dan baris yang cocok dari tabel kiri. Ini juga dikenal sebagai Gabung Luar Kanan. Jika tidak ada record yang cocok, maka NULL
nilai dikembalikan dari tabel kanan, untuk baris yang terpengaruh di tabel kiri.
Catatan Beberapa implementasi database relasional menggunakan kata kunci “Right Outer Join”, sebagai lawan dari “Right Join”, tetapi secara fungsional setara.
Sintaks SQL untuk Right Join adalah sebagai berikut:
SELECT * FROM Table_1
RIGHT JOIN Table_2
ON Table_1.key = Table_2.key
Dari kode di atas, key
adalah kunci masing-masing dari tabel. Jika Anda perlu melakukan join yang benar pada Employees
dan Address
tabel, gunakan kode SQL berikut:
SELECT EmployeeName, State
FROM Employees
RIGHT JOIN Address
ON Employees.EmployeeId = Address.Id
Output dari kode SQL di atas adalah sebagai berikut:
+--------------+--------------+
| EmployeeName | State |
+---------------+-------------+
| John | New York |
| Mary | New Jersey |
| NULL | Idaho |
| NULL | Hawaii |
+------------+----------------+
Gabung SQL Penuh (Luar)
Gabung Penuh mengembalikan semua baris dari tabel kiri, semua baris dari tabel kanan. Ini juga dikenal sebagai Full Outer Join. Gabung Penuh juga mengembalikan semua catatan yang cocok dari kedua tabel jika tersedia. Jika tidak ada record yang cocok, maka NULL
nilai dikembalikan dari tabel kiri. Itu juga mengembalikan NULL
nilai dari tabel kanan.
Catatan Beberapa implementasi basis data relasional menggunakan kata kunci “Full Outer Join”, sebagai lawan dari “Full Join”, tetapi keduanya secara fungsional setara.
Sintaks SQL untuk Full Join adalah sebagai berikut:
SELECT * FROM Table1
FULL JOIN Table2
ON Table1.key = Table2.key
Pada kode di atas, key
adalah kunci masing-masing dari tabel. Jika Anda perlu melakukan join penuh pada Employees
dan Address
tabel, gunakan kode SQL berikut:
SELECT EmployeeName, State
FROM Employees
FULL JOIN Address
ON Employees.EmployeeId = Address.Id
Output dari kode SQL di atas adalah sebagai berikut:
+--------------+--------------+
| EmployeeName | State |
+---------------+-------------+
| John | New York |
| Mary | New Jersey |
| Robert | NULL |
| NULL | Idaho |
| NULL | Hawaii |
+------------+----------------+
Catatan Selama perhitungan Gabung, jika Anda membandingkan data tabel denganNULL
nilai, mereka tidak cocok satu sama lain. Oleh karena itu,NULL
nilai hanya dikembalikan sebagai bagian dari hasil Gabung dan diabaikan selama perhitungan Gabung.
Perbandingan Kinerja SQL Joins
Mempertimbangkan tabel contoh di atas, Inner Join biasanya yang tercepat dari lima klausa Join dalam hal kinerja database. Gabung Kiri dan Gabung Kanan adalah yang tercepat berikutnya tergantung pada ukuran kedua tabel. Gabung Penuh biasanya lebih lambat daripada Gabung Kiri atau Gabung Kanan. Cross Join, bergantung pada produk Cartesian dari dua tabel, biasanya paling lambat dalam hal kinerja database. Hirarki kinerja yang ditentukan mungkin berbeda tergantung pada panjang kolom tabel, tipe data kolom, dan definisi kunci.
Kesimpulan
Penggunaan SQL Joins memperluas fungsionalitas untuk dapat membandingkan baris tabel, melalui WHERE
tradisional pertanyaan klausa. Gabung adalah mekanisme yang berharga untuk menerapkan logika aljabar ke dua atau lebih tabel.