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 | example@sqldat.com | | 2 | Bart | Pitt | (231) 465-3497 | example@sqldat.com | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | example@sqldat.com | +-----------+-------------+------------+----------------+-------------------+
Perhatikan bahwa:
PetTypeIdkolomPetstabel adalah kunci asing dariPetTypeIddariPetTypestabel (yang merupakan kunci utama dari tabel tersebut).OwnerIdkolomPetstabel adalah kunci asing dariOwnerIdkolomOwnersmeja.
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.