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

Bergabunglah dengan 3 Tabel di SQL

Di SQL, Anda dapat menggabungkan tiga tabel atau lebih dengan menambahkan gabungan lain setelah yang pertama.

Anda juga dapat menjalankan gabungan bersarang dengan menetapkan satu gabungan sebagai kondisi bergabung untuk yang lain.

Sintaks

Cara paling umum untuk menggabungkan tiga tabel adalah seperti ini:

SELECT *FROM Table1 INNER JOIN Table2 ON ConditionINNER JOIN Table3 ON Condition; 

Ini menggunakan gabungan dalam, tetapi Anda dapat menentukan jenis gabungan yang diinginkan seperti gabungan lainnya. Anda juga dapat menggabungkan jenis gabungan jika diperlukan (contoh di bawah).

Anda juga dapat menggunakan gabungan bersarang dengan menetapkan satu gabungan sebagai kondisi bergabung untuk gabungan lainnya. Seperti ini:

SELECT *FROM Table1 JOIN (Table2 JOIN Table3 ON Condition)ON Condition; 

Contoh Data – 3 Tabel

Misalkan kita memiliki tiga tabel berikut.

Pelanggan tabel:

+-------------+----------------+-------------- --+----------------+| ID Pelanggan | Nama Pelanggan | PostalCityId | Nomor Telepon ||--------------+----------------+--------------- -+----------------|| 1 | Homer McKenzie | 19586 | (308) 555-0100 || 2 | Marge Pratt | 33475 | (406) 555-0100 || 3 | Vlad Bernanke | NULL | (480) 555-0100 || 4 | Bart Pitt | 21692 | (316) 555-0100 || 5 | Lisa McQueen | 12748 | (212) 555-0100 || 6 | Steve Simpson | 17054 | (701) 555-0100 || 7 | Vinn Allen | 12152 | (423) 555-0100 || 8 | Veejay Smith | 3673 | (303) 555-0100 || 9 | Kasey Chin | 23805 | (201) 555-0100 || 10 | Borat Lee | 37403 | (701) 555-0100 |+--------------+----------------+---------- ------+----------------+(10 baris terpengaruh)

Kota tabel:

+----------+----------------+------------------ --+--------------+| Id Kota | Nama Kota | Id ProvinsiProvinsi | Populasi ||----------+----------------+------------------- +--------------|| 3673 | Busur Mar | 6 | 866 || 12152 | Frankewing | 44 | NULL || 12748 | Gasport | 33 | 1248 || 21692 | Pondok Obat | 17 | 2009 || 26483 | Lembah Peeples | 3 | 428 || 33475 | Silvanit | 27 | 103 || 17054 | Jessie | 35 | 25 || 19586 | Lisco | 28 | NULL || 37403 | Wimbledon | 35 | 216 |+----------+----------------+------------------- +--------------+(9 baris terpengaruh)

Provinsi Negara tabel:

+-------------------+---------------------+---- -----------------+-------------+--------------+| Id ProvinsiProvinsi | KodeProvinsi Negara | NamaProvinsi Negara | ID Negara | Populasi ||-------------------+---------------------+----- ----------------+-------------+--------------|| 3 | AZ | Arizona | 230 | 6891688 || 6 | CO | Colorado | 230 | 5698265 || 17 | KS | Kansas | 230 | 2893957 || 28 | NE | Nebraska | 230 | 1943256 || 31 | NJ | Jersey Baru | 230 | 8899339 || 33 | NY | New York | 230 | 20437172 || 35 | ND | Dakota Utara | 230 | 723393 || 44 | TN | Tennessee | 230 | 6495978 |+-------------------+---------------------+----- ----------------+-------------+--------------+(8 baris terpengaruh )

Contoh 1 – Gabung Dalam 3 Tabel

Jenis gabungan yang paling populer adalah gabungan dalam, jadi kita akan mulai dengan itu.

Berikut adalah contoh menggabungkan ketiga tabel di atas dengan dua gabungan bagian dalam.

PILIH s.StateProvinceName, ci.CityName, cu.CustomerNameFROM StateProvinces sINNER GABUNG KOTA SEBAGAI ciON ci.StateProvinceID =s.StateProvinceIDINNER GABUNG Pelanggan cu DI cu.PostalCityId =cicode>CityId; 

Hasil:

+---------------------+----------------+------- ---------+| NamaProvinsi Negara | Nama Kota | NamaPelanggan ||---------------------+----------------+-------- --------|| Nebraska | Lisco | Homer McKenzie || Kansas | Pondok Obat | Bart Pitt || New York | Gasport | Lisa McQueen || Dakota Utara | Jessie | Steve Simpson || Tennessee | Frankewing | Vinn Allen || Colorado | Busur Mar | Veejay Smith || Dakota Utara | Wimbledon | Borat Lee |+---------------------+----------------+------- ---------+(7 baris terpengaruh)

Contoh 2 – Menggabungkan Jenis Penggabungan

Anda dapat menggabungkan jenis gabungan saat menggabungkan tiga tabel atau lebih.

Berikut adalah contoh menggabungkan gabungan dalam dengan gabungan kiri.

PILIH s.StateProvinceName, ci.CityName, cu.CustomerNameFROM StateProvinces sINNER GABUNG KOTA SEBAGAI ciON ci.StateProvinceID =s.StateProvinceIDLEFT GABUNG Pelanggan cu DI cu.PostalCityId =cicode>CityId; 

Hasil:

---------------------+----------------+-------- --------+| NamaProvinsi Negara | Nama Kota | NamaPelanggan ||---------------------+----------------+-------- --------|| Colorado | Busur Mar | Veejay Smith || Tennessee | Frankewing | Vinn Allen || New York | Gasport | Lisa McQueen || Kansas | Pondok Obat | Bart Pitt || Arizona | Lembah Peeples | NULL || Dakota Utara | Jessie | Steve Simpson || Nebraska | Lisco | Homer McKenzie || Dakota Utara | Wimbledon | Borat Lee |+---------------------+----------------+------- ---------+(8 baris terpengaruh)

Dalam hal ini, kami memiliki kota (Peeples Valley) yang belum memiliki pelanggan.

Alasan kita sekarang dapat melihat informasi tersebut adalah karena gabungan kiri mengembalikan baris yang memiliki data di tabel kiri, meskipun tidak ada baris yang cocok di tabel kiri.

Contoh sebelumnya yang menggabungkan dua gabungan dalam tidak mengembalikan baris ini, karena gabungan dalam membuang baris yang tidak cocok dari kedua tabel. Itu hanya mengembalikan baris ketika ada setidaknya satu baris di kedua tabel yang cocok dengan kondisi gabungan.

Data Sampel Baru – 3 Tabel Berbeda

Untuk contoh lainnya, kami akan menggunakan tabel berikut.

Tipe Hewan Peliharaan tabel:

+-------------+------------+| PetTypeId | PetType ||-------------+------------|| 1 | Burung || 2 | Kucing || 3 | Anjing || 4 | Kelinci |+-------------+------------+(4 baris terpengaruh)

Hewan peliharaan 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)

Pemilik tabel:

+-----------+-------------+------------+------- ---------+-------------------+| ID Pemilik | Nama Depan | Nama Belakang | Telepon | 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 | Kayu Timur | (308) 555-0112 | [email protected] |+------------+-------------+------------+---- ------------+-------------------+

Perhatikan bahwa:

  • PetTypeId kolom Hewan peliharaan tabel adalah kunci asing dari PetTypeId dari Tipe Hewan Peliharaan tabel (yang merupakan kunci utama dari tabel tersebut).
  • OwnerId kolom Hewan peliharaan tabel adalah kunci asing dari OwnerId kolom Pemilik meja.

Contoh 3 – Kiri Gabung 3 Tabel

Mari kita lakukan penggabungan tiga tabel menggunakan dua gabungan kiri.

Berikut adalah contoh menjalankan dua gabungan kiri terhadap tabel tersebut.

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

Hasil:

+-----------+-----------+----------------+| Nama Hewan Peliharaan | Jenis Hewan Peliharaan | PetOwner ||-----------+-----------+----------------|| Tweet | Burung | Homer Connery || Gores | Kucing | Bart Pitt || Kulit | Anjing | Bart Pitt || Halus | Kucing | Nancy Simpson || Ambil | Anjing | Nancy Simpson || goyang | Anjing | Nancy Simpson || Halus | Anjing | Boris Trump || meong | Kucing | Boris Trump || NULL | NULL | Woody Eastwood |+-----------+-----------+----------------+(9 baris terpengaruh) 

Di sini, kami memiliki pemilik hewan peliharaan yang tidak memiliki hewan peliharaan. Kami dapat memverifikasinya dengan melihat Pets.OwnerId kolom, dan melihat bahwa tidak ada nilai yang sesuai dengan OwnerId Woody Eastwood di Pemilik tabel.

Contoh 4 – Menggabungkan 3 Tabel dengan Kanan

Gabung kanan adalah kebalikan dari Gabung kiri. Berikut ini contoh menggunakan tiga tabel yang sama.

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

Hasil:

+-----------+-----------+---------------+| Nama Hewan Peliharaan | Jenis Hewan Peliharaan | PetOwner ||-----------+------------+---------------|| Tweet | Burung | Homer Connery || Halus | Kucing | Nancy Simpson || Gores | Kucing | Bart Pitt || meong | Kucing | Boris Trump || Ambil | Anjing | Nancy Simpson || goyang | Anjing | Nancy Simpson || Halus | Anjing | Boris Trump || Kulit | Anjing | Bart Pitt || NULL | Kelinci | |+-----------+-----------+---------------+(9 baris terpengaruh)

Kali ini kami mendapatkan jenis hewan peliharaan tambahan (Kelinci ), tetapi bukan pemilik tambahan. Ini karena gabungan kanan mengembalikan baris yang memiliki data di tabel kanan, meskipun tidak ada baris yang cocok di tabel kiri.

Omong-omong, alasan PetOwner terakhir bukan NULL (seperti terakhir PetName is) adalah karena ini adalah hasil dari rangkaian string. Saya menggunakan T-SQL CONCAT() berfungsi untuk menggabungkan nama depan dan belakang pemilik.

Contoh 5 – Gabung Penuh 3 Tabel

Gabung penuh seperti memiliki kiri dan kanan bergabung menjadi satu. Ini mengembalikan semua baris, selama ada data yang cocok di salah satu tabel.

SELECT p.PetName, pt.PetType, CONCAT(o.FirstName, ' ', o.LastName) SEBAGAI PetOwnerFROM Owners o FULL JOIN Pets p PADA p.OwnerId =o.OwnerIdFULL JOIN PetTypes pt ON p. PetTypeId =pt.PetTypeId; 

Hasil:

+-----------+-----------+----------------+| Nama Hewan Peliharaan | Jenis Hewan Peliharaan | PetOwner ||-----------+-----------+----------------|| Tweet | Burung | Homer Connery || Gores | Kucing | Bart Pitt || Kulit | Anjing | Bart Pitt || Halus | Kucing | Nancy Simpson || Ambil | Anjing | Nancy Simpson || goyang | Anjing | Nancy Simpson || Halus | Anjing | Boris Trump || meong | Kucing | Boris Trump || NULL | NULL | Woody Eastwood || NULL | Kelinci | |+-----------+-----------+----------------+(10 baris terpengaruh) 

Kali ini kita mendapatkan kombinasi dari hasil yang kita dapatkan pada dua contoh sebelumnya.

Contoh 6 – Penggabungan Bersarang

Seperti yang disebutkan, Anda juga dapat melakukan penggabungan bersarang.

Berikut ini contoh gabungan bersarang.

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

Hasil:

+-----------+-----------+----------------+| Nama Hewan Peliharaan | Jenis Hewan Peliharaan | PetOwner ||-----------+-----------+----------------|| Tweet | Burung | Homer Connery || Gores | Kucing | Bart Pitt || Kulit | Anjing | Bart Pitt || Halus | Kucing | Nancy Simpson || Ambil | Anjing | Nancy Simpson || goyang | Anjing | Nancy Simpson || Halus | Anjing | Boris Trump || meong | Kucing | Boris Trump || NULL | NULL | Woody Eastwood |+-----------+-----------+----------------+(9 baris terpengaruh) 

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menjelajahi Pengujian Unit Java dengan Kerangka Uji JUnit

  2. Bagaimana Cara Menambahkan Kunci Asing di SQL?

  3. Jika Anda menggunakan tampilan terindeks dan MERGE, harap baca ini!

  4. Cara Menemukan Catatan dengan NULL di Kolom

  5. Menggunakan Folder Kerja ke Basis Data Kontrol Sumber