Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

SQL Benar Bergabung

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 kolom Pets tabel adalah kunci asing dari PetTypeId dari PetTypes tabel (yang merupakan kunci utama dari tabel tersebut).
  • OwnerId kolom Pets tabel adalah kunci asing dari OwnerId kolom Owners 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jatuhkan vs Potong dalam SQL

  2. Penghitung PerfMon Knee-Jerk :Harapan Hidup Halaman

  3. Cara Menutupi Tabel dan Mempertahankan Integritas Referensial

  4. Merancang Database untuk Portal Pekerjaan Online

  5. Alasan Lain untuk Menggunakan petunjuk NOEXPAND di Edisi Perusahaan