Artikel ini memberikan gambaran umum tentang RIGHT JOIN
dalam SQL, serta beberapa contoh dasar.
Juga dikenal sebagai RIGHT OUTER JOIN
, RIGHT JOIN
mengembalikan baris yang memiliki data di tabel kanan (kanan JOIN
kata kunci), meskipun tidak ada baris yang cocok di tabel kiri.
Sintaks
Anda menentukan hak bergabung di FROM
ayat. Anda dapat menggunakan salah satu RIGHT JOIN
atau RIGHT OUTER JOIN
sintaks.
Menggunakan RIGHT JOIN
sintaks:
SELECT *
FROM Table1 RIGHT JOIN Table2
ON Table1.Column = Table2.Column;
Menggunakan RIGHT OUTER JOIN
sintaks:
SELECT *
FROM Table1 RIGHT OUTER JOIN Table2
ON Table1.Column = Table2.Column;
Keduanya melakukan hal yang persis sama. Hanya saja bagian OUTER
kata kunci adalah opsional.
Contoh
Berikut adalah beberapa contoh untuk ditunjukkan.
Contoh Data
Pertama, berikut adalah tabel yang akan kita gunakan untuk contoh.
PetTypes
tabel:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | | 4 | Rabbit | +-------------+-----------+ (4 rows affected)
Pets
tabel:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+ (8 rows affected)
Owners
tabel:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | 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 | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
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.
Kueri Bergabung yang Tepat
Berikut adalah contoh melakukan penggabungan kanan terhadap dua tabel tersebut.
SELECT
p.PetName,
pt.PetType
FROM Pets p
RIGHT JOIN PetTypes pt
ON p.PetTypeId = pt.PetTypeId;
Hasil:
+-----------+-----------+ | PetName | PetType | |-----------+-----------| | Tweet | Bird | | Fluffy | Cat | | Scratch | Cat | | Meow | Cat | | Fetch | Dog | | Wag | Dog | | Fluffy | Dog | | Bark | Dog | | NULL | Rabbit | +-----------+-----------+ (9 rows affected)
Gabung yang tepat menyebabkan kita mendapatkan PetType
nilai yang tidak sesuai dengan PetName
. Secara khusus, tidak ada kelinci sebagai hewan peliharaan. Tapi join yang tepat menyebabkan Rabbit
untuk dikembalikan, meskipun tidak ada hewan peliharaan di Pets
tabel jenis itu. Ini menghasilkan NULL
nilai dalam PetName
kolom melawan Rabbit
.
Ini hanya terjadi karena Rabbit
berada di tabel kanan (yaitu di kanan RIGHT JOIN
kata kunci).
Inilah yang terjadi jika kita mengganti urutan tabel dalam kueri kita.
SELECT
p.PetName,
pt.PetType
FROM PetTypes pt
RIGHT JOIN Pets p
ON p.PetTypeId = pt.PetTypeId;
Hasil:
+-----------+-----------+ | PetName | PetType | |-----------+-----------| | Fluffy | Cat | | Fetch | Dog | | Scratch | Cat | | Wag | Dog | | Tweet | Bird | | Fluffy | Dog | | Bark | Dog | | Meow | Cat | +-----------+-----------+ (8 rows affected)
Kali ini Rabbit
tidak dikembalikan. Itu karena tabelnya (PetTypes
) berada di sisi kiri gabungan.
Kita perlu mengubahnya menjadi gabungan kiri atau gabungan penuh jika kita ingin Rabbit
untuk dikembalikan menggunakan urutan tabel ini.
Gabung Kanan di 3 Tabel
Berikut adalah contoh melakukan penggabungan kanan pada ketiga tabel.
SELECT
p.PetName,
pt.PetType,
CONCAT(o.FirstName, ' ', o.LastName) AS PetOwner
FROM Pets p RIGHT JOIN PetTypes pt
ON p.PetTypeId = pt.PetTypeId
RIGHT JOIN Owners o
ON p.OwnerId = o.OwnerId;
Hasil:
+-----------+-----------+----------------+ | PetName | PetType | PetOwner | |-----------+-----------+----------------| | Tweet | Bird | Homer Connery | | Scratch | Cat | Bart Pitt | | Bark | Dog | Bart Pitt | | Fluffy | Cat | Nancy Simpson | | Fetch | Dog | Nancy Simpson | | Wag | Dog | Nancy Simpson | | Fluffy | Dog | Boris Trump | | Meow | Cat | Boris Trump | | NULL | NULL | Woody Eastwood | +-----------+-----------+----------------+ (9 rows affected)
Kali ini kami memiliki pemilik hewan peliharaan yang tidak memiliki hewan peliharaan.
Kami dapat kembali mengacak urutan meja, dan kami akan mendapatkan hasil yang berbeda.
SELECT
p.PetName,
pt.PetType,
CONCAT(o.FirstName, ' ', o.LastName) AS PetOwner
FROM Pets p RIGHT JOIN Owners o
ON p.OwnerId = o.OwnerId
RIGHT JOIN PetTypes pt
ON p.PetTypeId = pt.PetTypeId;
Hasil:
+-----------+-----------+---------------+ | PetName | PetType | PetOwner | |-----------+-----------+---------------| | Tweet | Bird | Homer Connery | | Fluffy | Cat | Nancy Simpson | | Scratch | Cat | Bart Pitt | | Meow | Cat | Boris Trump | | Fetch | Dog | Nancy Simpson | | Wag | Dog | Nancy Simpson | | Fluffy | Dog | Boris Trump | | Bark | Dog | Bart Pitt | | NULL | Rabbit | | +-----------+-----------+---------------+ (9 rows affected)
Kali ini kita mendapatkan jenis pet tambahan (Rabbit
), tetapi bukan pemilik tambahan.
Jika Anda bertanya-tanya mengapa PetOwner
terakhir bukan NULL
(seperti terakhir PetName
is), itu karena ini adalah hasil dari rangkaian string. Saya menggunakan T-SQL CONCAT()
berfungsi untuk menggabungkan nama depan dan belakang pemilik.