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

SQL Kiri Gabung

Artikel ini memberikan gambaran umum tentang LEFT JOIN dalam SQL, serta beberapa contoh dasar.

LEFT JOIN , atau LEFT OUTER JOIN , menampilkan baris yang memiliki data di tabel kiri (kiri dari JOIN kata kunci), meskipun tidak ada baris yang cocok di tabel kanan.

Sintaks

Anda menentukan gabungan kiri di FROM ayat. Anda dapat menggunakan salah satu LEFT JOIN atau LEFT OUTER JOIN sintaks.

Menggunakan LEFT JOIN sintaks:

SELECT *
FROM Table1 LEFT JOIN Table2 
ON Table1.Column = Table2.Column;

Menggunakan LEFT OUTER JOIN sintaks:

SELECT *
FROM Table1 LEFT 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 Gabung Kiri

Berikut adalah contoh melakukan gabungan kiri terhadap dua tabel tersebut.

SELECT 
    p.PetName,
    pt.PetType
FROM PetTypes pt
LEFT JOIN Pets p
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 kiri menyebabkan kita mendapatkan PetType nilai yang tidak sesuai dengan PetName . Tidak ada kelinci sebagai hewan peliharaan. Tapi join kiri 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 kiri (yaitu kiri LEFT JOIN kata kunci). Oke, pemformatan saya membuatnya lebih "di atas" daripada "kiri", tetapi Anda mendapatkan gambarannya.

Inilah yang terjadi jika kita mengganti urutan tabel dalam kueri kita.

SELECT 
    p.PetName,
    pt.PetType
FROM Pets p
LEFT JOIN PetTypes pt
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 kanan gabungan.

Kita perlu mengubahnya menjadi gabungan kanan atau gabungan penuh jika kita ingin Rabbit untuk dikembalikan menggunakan urutan tabel ini.

Kiri Gabung di 3 Tabel

Berikut adalah contoh melakukan join kiri pada ketiga tabel.

SELECT 
    p.PetName,
    pt.PetType,
    CONCAT(o.FirstName, ' ', o.LastName) AS PetOwner
FROM Owners o LEFT JOIN Pets p
    ON p.OwnerId = o.OwnerId
LEFT JOIN PetTypes pt
    ON p.PetTypeId = pt.PetTypeId;

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 PetTypes pt LEFT JOIN Pets p
    ON p.PetTypeId = pt.PetTypeId
LEFT JOIN Owners o 
    ON p.OwnerId = o.OwnerId;

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. Pantau kinerja basis data dengan Monitor Infrastruktur Uptime

  2. Pemantauan &Manajemen Database Tingkat Lanjut untuk TimescaleDB

  3. Cara Mengekspor Data ke File Datar dengan Utilitas BCP dan Mengimpor data dengan Sisipan Massal

  4. Menggunakan ODBC dengan Salesforce dan OneLogin Single Sign On (SSO)

  5. Python REST API Dengan Flask, Connexion, dan SQLAlchemy – Bagian 3