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

Gabung Dalam SQL

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

SQL INNER JOIN mengembalikan baris ketika ada setidaknya satu baris di kedua tabel yang cocok dengan kondisi gabungan. Itu membuang baris yang tidak cocok dari kedua tabel. Ini adalah tipe gabungan default.

Sintaks

Ada dua cara untuk menentukan gabungan dalam:di FROM klausa (menggunakan INNER JOIN sintaks), atau menggunakan WHERE ayat.

Untuk menentukan gabungan dalam di FROM klausa:

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

Untuk menentukan gabungan dalam di WHERE klausa:

SELECT *
FROM Table1, Table2 
WHERE Table1.Column = Table2.Column; 

Berikut adalah contoh masing-masing.

Contoh

Di sini, kami memiliki contoh untuk setiap metode dalam menentukan gabungan dalam.

Contoh Data

Pertama, berikut adalah tabel yang akan kita gunakan untuk contoh.

PetTypes tabel:

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

Pets 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)

Owners tabel:

+-----------+-------------+------------+------- ---------+-------------------+| ID Pemilik   | Nama Depan   | Nama Belakang   | Telepon          | Email             ||-----------+-------------+------------+-------- --------+-------------------|| 1         | Beranda       | 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              |+-----------+-------------+------------+-------- --------+-------------------+

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.

Contoh menggunakan Sintaks INNER JOIN

Berikut adalah contoh dasar untuk menentukan gabungan dalam menggunakan INNER JOIN sintaks.

SELECT 
    p.PetName,
    pt.PetType
FROM Pets p INNER JOIN PetTypes pt
ON p.PetTypeId = pt.PetTypeId; 

Hasil:

-----------+-----------+| Nama Hewan Peliharaan | PetType ||-----------+------------|| Halus | Kucing || Ambil | Anjing || Gores | Kucing || goyang | Anjing || Tweet | Burung || Halus | Anjing || Kulit | Anjing || meong | Cat |+-----------+------------+(8 baris terpengaruh)

Untuk menentukan gabungan dalam di FROM klausa, kami menggunakan INNER JOIN . Kami juga menggunakan ON kata kunci untuk menentukan predikat yang akan dievaluasi untuk setiap pasangan baris yang digabungkan.

Terlepas dari jenis gabungan, kami memenuhi syarat nama kolom kami dengan nama tabel. Alasan kami melakukan ini adalah untuk menghindari ambiguitas mengenai nama kolom di antara tabel. Kedua tabel dapat memiliki kolom dengan nama yang sama (seperti dalam contoh kami), dan dalam kasus seperti itu, DBMS tidak akan tahu kolom mana yang Anda maksud. Mengawali nama kolom dengan nama tabelnya memastikan bahwa Anda mereferensikan kolom yang benar, dan mencegah kesalahan apa pun yang dapat diakibatkan oleh ambiguitas tentang kolom mana yang Anda maksud.

Dalam contoh ini, kedua tabel memiliki PetTypeId kolom. Pets.PetTypeId kolom adalah kunci asing untuk PetTypes.PetTypeId kolom, yang merupakan kunci utama untuk tabel itu.

Dalam contoh ini, kita dapat melihat bahwa semua hewan peliharaan dikembalikan, tetapi tidak semua jenis hewan peliharaan dikembalikan. Tidak ada kelinci di Pets tabel, dan Rabbits jenis hewan peliharaan tidak dikembalikan.

Alasan Rabbits jenis tidak dikembalikan karena INNER JOIN hanya mengembalikan baris ketika setidaknya ada satu baris di kedua tabel yang cocok dengan kondisi gabungan. Dalam hal ini, Rabbits hanya dalam satu tabel (PetTypes tabel).

Jenis Bergabung adalah Opsional

Perhatikan bahwa jenis gabungan adalah opsional. Oleh karena itu, sebagian besar (jika tidak semua) DBMS memungkinkan Anda untuk menghilangkan INNER kata kunci. Ketika Anda menghilangkan ini (yaitu hanya menentukan JOIN ), diasumsikan sebagai gabungan dalam.

Oleh karena itu, kita dapat menulis ulang contoh di atas menjadi ini:

SELECT
    Pets.PetName,
    PetTypes.PetType
FROM Pets
JOIN PetTypes
ON Pets.PetTypeId = PetTypes.PetTypeId; 

Memformat

Seperti pernyataan SQL lainnya, Anda dapat menggunakan spasi dan indentasi, dll untuk memformat kueri Anda.

Misalnya, FROM klausa dapat berada di satu baris utuh jika Anda mau:

SELECT
    Pets.PetName,
    PetTypes.PetType
FROM Pets JOIN PetTypes ON Pets.PetTypeId = PetTypes.PetTypeId; 

Saat Anda menulis tabel yang lebih besar yang menggabungkan beberapa tabel, indentasi dapat sangat membantu.

Contoh menggunakan Klausa WHERE

Gabung di atas juga dapat disebut sebagai gabungan yang seimbang . Equi-join adalah join yang hanya berisi perbandingan kesetaraan dalam predikat join.

Berikut adalah contoh menentukan gabungan dalam menggunakan WHERE klausa:

SELECT
    p.PetName,
    pt.PetType
FROM 
    Pets p, 
    PetTypes pt
WHERE p.PetTypeId = pt.PetTypeId; 

Hasil:

+-----------+-----------+| Nama Hewan Peliharaan   | PetType   ||-----------+------------|| Halus    | Kucing       || Ambil     | Anjing       || Gores   | Kucing       || Goyang       | Anjing       || Tweet     | Burung      || Halus    | Anjing       || Kulit kayu      | Anjing       || Meong      | Cat       |+-----------+-----------+(8 baris terpengaruh)

Ini mengembalikan hasil yang sama seperti contoh sebelumnya.

Di sini, kami hanya menyediakan daftar tabel yang dipisahkan koma, dan kemudian WHERE kondisi. Jika kami menghilangkan WHERE kondisi, kami akan berakhir dengan CROSS JOIN .

Banyak pemula menemukan sintaks di atas jauh lebih mudah dipahami daripada INNER JOIN sintaksis. Jangan ragu untuk menggunakan sintaks ini jika Anda mau, namun, ketahuilah bahwa sebagian besar profesional SQL lebih suka menggunakan INNER JOIN sintaks dari contoh sebelumnya..

Inner Join pada 3 Tabel

Berikut adalah contoh melakukan inner join pada 3 tabel.

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

Hasil:

+-----------+-----------+---------------+| Nama Hewan Peliharaan   | Jenis Hewan Peliharaan   | PetOwner      ||-----------+-----------+---------------|| Halus    | Kucing       | Nancy Simpson || Ambil     | Anjing       | Nancy Simpson || Gores   | Kucing       | Bart Pitt     || Goyang       | Anjing       | Nancy Simpson || Tweet     | Burung      | Homer Connery || Halus    | Anjing       | Boris Trump   || Kulit kayu      | Anjing       | Bart Pitt     || Meong      | Kucing       | Boris Trump   |+-----------+-----------+---------------+(8 baris terpengaruh) 

Dalam contoh ini, kami membawa Owners tabel ke dalam campuran karena kami membutuhkan kueri ini untuk mengembalikan informasi tentang pemiliknya.

Untuk menggunakan tabel ketiga, yang kami lakukan hanyalah menambahkan INNER JOIN... ON argumen beserta detail tabel/kolom yang relevan.

Dalam hal ini, saya menggunakan CONCAT() T-SQL berfungsi untuk menggabungkan dua kolom, tetapi ini tidak relevan dengan gabungan.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Berapa Banyak RAM yang Dibutuhkan Server Database Baru Anda?

  2. SQL Lanjutan:LINTAS BERLAKU dan BERLAKU LUAR

  3. Pengantar Kait

  4. Pivoting, Unpivoting, dan Pemisahan Kolom di Power BI Query Editor

  5. 9 sistem manajemen database teratas untuk template Joomla