Artikel ini memberikan gambaran umum tentang INNER JOIN
dalam SQL, serta beberapa contoh dasar.
SQL INNER JOIN
mengembalikan baris ketika ada setidaknya satu baris di kedua tabel yang cocok dengan kondisi gabungan. Itu membuang baris yang tidak cocok dari kedua tabel. Ini adalah tipe gabungan default.
Sintaks
Ada dua cara untuk menentukan gabungan dalam:di FROM
klausa (menggunakan INNER JOIN
sintaks), atau menggunakan WHERE
ayat.
Untuk menentukan gabungan dalam di FROM
klausa:
SELECT *
FROM Table1 INNER JOIN Table2
ON Table1.Column = Table2.Column;
Untuk menentukan gabungan dalam di WHERE
klausa:
SELECT *
FROM Table1, Table2
WHERE Table1.Column = Table2.Column;
Berikut adalah contoh masing-masing.
Contoh
Di sini, kami memiliki contoh untuk setiap metode dalam menentukan gabungan dalam.
Contoh Data
Pertama, berikut adalah tabel yang akan kita gunakan untuk contoh.
PetTypes
tabel:
+-------------+------------+| PetTypeId | PetType ||-------------+------------|| 1 | Burung || 2 | Kucing || 3 | Anjing || 4 | Kelinci |+-------------+------------+(4 baris terpengaruh)
Pets
tabel:
+---------+-------------+-----------+---------- --+------------+| ID Hewan Peliharaan | PetTypeId | ID Pemilik | Nama Hewan Peliharaan | DOB ||---------+-------------+-----------+----------- +------------|| 1 | 2 | 3 | Halus | 2020-11-20 || 2 | 3 | 3 | Ambil | 16-08-2019 || 3 | 2 | 2 | Gores | 01-10-2018 || 4 | 3 | 3 | goyang | 15-03-2020 || 5 | 1 | 1 | Tweet | 28-11-2020 || 6 | 3 | 4 | Halus | 17-09-2020 || 7 | 3 | 2 | Kulit | NULL || 8 | 2 | 4 | meong | NULL |+---------+-------------+-----------+----------- +------------+(8 baris terpengaruh)
Owners
tabel:
+-----------+-------------+------------+------- ---------+-------------------+| ID Pemilik | Nama Depan | Nama Belakang | Telepon | Email ||-----------+-------------+------------+-------- --------+-------------------|| 1 | Beranda | Connery | (308) 555-0100 | [email protected] || 2 | Bart | Pitt | (231) 465-3497 | [email protected] || 3 | Nancy | Simpson | (489) 591-0408 | NULL || 4 | Boris | Trump | (349) 611-8908 | NULL |+-----------+-------------+------------+-------- --------+-------------------+
Perhatikan bahwa:
PetTypeId
kolomPets
tabel adalah kunci asing dariPetTypeId
dariPetTypes
tabel (yang merupakan kunci utama dari tabel tersebut).OwnerId
kolomPets
tabel adalah kunci asing dariOwnerId
kolomOwners
meja.
Contoh menggunakan Sintaks INNER JOIN
Berikut adalah contoh dasar untuk menentukan gabungan dalam menggunakan INNER JOIN
sintaks.
SELECT
p.PetName,
pt.PetType
FROM Pets p INNER JOIN PetTypes pt
ON p.PetTypeId = pt.PetTypeId;
Hasil:
-----------+-----------+| Nama Hewan Peliharaan | PetType ||-----------+------------|| Halus | Kucing || Ambil | Anjing || Gores | Kucing || goyang | Anjing || Tweet | Burung || Halus | Anjing || Kulit | Anjing || meong | Cat |+-----------+------------+(8 baris terpengaruh)
Untuk menentukan gabungan dalam di FROM
klausa, kami menggunakan INNER JOIN
. Kami juga menggunakan ON
kata kunci untuk menentukan predikat yang akan dievaluasi untuk setiap pasangan baris yang digabungkan.
Terlepas dari jenis gabungan, kami memenuhi syarat nama kolom kami dengan nama tabel. Alasan kami melakukan ini adalah untuk menghindari ambiguitas mengenai nama kolom di antara tabel. Kedua tabel dapat memiliki kolom dengan nama yang sama (seperti dalam contoh kami), dan dalam kasus seperti itu, DBMS tidak akan tahu kolom mana yang Anda maksud. Mengawali nama kolom dengan nama tabelnya memastikan bahwa Anda mereferensikan kolom yang benar, dan mencegah kesalahan apa pun yang dapat diakibatkan oleh ambiguitas tentang kolom mana yang Anda maksud.
Dalam contoh ini, kedua tabel memiliki PetTypeId
kolom. Pets.PetTypeId
kolom adalah kunci asing untuk PetTypes.PetTypeId
kolom, yang merupakan kunci utama untuk tabel itu.
Dalam contoh ini, kita dapat melihat bahwa semua hewan peliharaan dikembalikan, tetapi tidak semua jenis hewan peliharaan dikembalikan. Tidak ada kelinci di Pets
tabel, dan Rabbits
jenis hewan peliharaan tidak dikembalikan.
Alasan Rabbits
jenis tidak dikembalikan karena INNER JOIN
hanya mengembalikan baris ketika setidaknya ada satu baris di kedua tabel yang cocok dengan kondisi gabungan. Dalam hal ini, Rabbits
hanya dalam satu tabel (PetTypes
tabel).
Jenis Bergabung adalah Opsional
Perhatikan bahwa jenis gabungan adalah opsional. Oleh karena itu, sebagian besar (jika tidak semua) DBMS memungkinkan Anda untuk menghilangkan INNER
kata kunci. Ketika Anda menghilangkan ini (yaitu hanya menentukan JOIN
), diasumsikan sebagai gabungan dalam.
Oleh karena itu, kita dapat menulis ulang contoh di atas menjadi ini:
SELECT
Pets.PetName,
PetTypes.PetType
FROM Pets
JOIN PetTypes
ON Pets.PetTypeId = PetTypes.PetTypeId;
Memformat
Seperti pernyataan SQL lainnya, Anda dapat menggunakan spasi dan indentasi, dll untuk memformat kueri Anda.
Misalnya, FROM
klausa dapat berada di satu baris utuh jika Anda mau:
SELECT
Pets.PetName,
PetTypes.PetType
FROM Pets JOIN PetTypes ON Pets.PetTypeId = PetTypes.PetTypeId;
Saat Anda menulis tabel yang lebih besar yang menggabungkan beberapa tabel, indentasi dapat sangat membantu.
Contoh menggunakan Klausa WHERE
Gabung di atas juga dapat disebut sebagai gabungan yang seimbang . Equi-join adalah join yang hanya berisi perbandingan kesetaraan dalam predikat join.
Berikut adalah contoh menentukan gabungan dalam menggunakan WHERE
klausa:
SELECT
p.PetName,
pt.PetType
FROM
Pets p,
PetTypes pt
WHERE p.PetTypeId = pt.PetTypeId;
Hasil:
+-----------+-----------+| Nama Hewan Peliharaan | PetType ||-----------+------------|| Halus | Kucing || Ambil | Anjing || Gores | Kucing || Goyang | Anjing || Tweet | Burung || Halus | Anjing || Kulit kayu | Anjing || Meong | Cat |+-----------+-----------+(8 baris terpengaruh)
Ini mengembalikan hasil yang sama seperti contoh sebelumnya.
Di sini, kami hanya menyediakan daftar tabel yang dipisahkan koma, dan kemudian WHERE
kondisi. Jika kami menghilangkan WHERE
kondisi, kami akan berakhir dengan CROSS JOIN
.
Banyak pemula menemukan sintaks di atas jauh lebih mudah dipahami daripada INNER JOIN
sintaksis. Jangan ragu untuk menggunakan sintaks ini jika Anda mau, namun, ketahuilah bahwa sebagian besar profesional SQL lebih suka menggunakan INNER JOIN
sintaks dari contoh sebelumnya..
Inner Join pada 3 Tabel
Berikut adalah contoh melakukan inner join pada 3 tabel.
SELECT
p.PetName,
pt.PetType,
CONCAT(o.FirstName, ' ', o.LastName) AS PetOwner
FROM Pets p INNER JOIN PetTypes pt
ON p.PetTypeId = pt.PetTypeId
INNER JOIN Owners o
ON p.OwnerId = o.OwnerId;
Hasil:
+-----------+-----------+---------------+| Nama Hewan Peliharaan | Jenis Hewan Peliharaan | PetOwner ||-----------+-----------+---------------|| Halus | Kucing | Nancy Simpson || Ambil | Anjing | Nancy Simpson || Gores | Kucing | Bart Pitt || Goyang | Anjing | Nancy Simpson || Tweet | Burung | Homer Connery || Halus | Anjing | Boris Trump || Kulit kayu | Anjing | Bart Pitt || Meong | Kucing | Boris Trump |+-----------+-----------+---------------+(8 baris terpengaruh)Dalam contoh ini, kami membawa
Owners
tabel ke dalam campuran karena kami membutuhkan kueri ini untuk mengembalikan informasi tentang pemiliknya.Untuk menggunakan tabel ketiga, yang kami lakukan hanyalah menambahkan
INNER JOIN... ON
argumen beserta detail tabel/kolom yang relevan.Dalam hal ini, saya menggunakan
CONCAT()
T-SQL berfungsi untuk menggabungkan dua kolom, tetapi ini tidak relevan dengan gabungan.