Ringkasan :dalam tutorial ini, Anda akan belajar tentang berbagai jenis gabungan SQLite untuk mengkueri data dari dua tabel atau lebih.
Untuk demonstrasi, kami akan menggunakan artists dan albums tabel dari database sampel.
Seorang artis dapat memiliki nol atau banyak album sementara sebuah album dimiliki oleh satu artis.
Untuk menanyakan data dari kedua artists dan albums tabel, yang Anda gunakan dapat menggunakan INNER JOIN , LEFT JOIN , atau CROSS JOIN ayat. Setiap klausa gabungan menentukan bagaimana SQLite menggunakan data dari satu tabel untuk dicocokkan dengan baris di tabel lain.
Perhatikan bahwa SQLite tidak secara langsung mendukung RIGHT JOIN dan FULL OUTER JOIN .
SQLite INNER JOIN
Pernyataan berikut mengembalikan judul album dan nama artis mereka:
SELECT
Title,
Name
FROM
albums
INNER JOIN artists
ON artists.ArtistId = albums.ArtistId;
Code language: SQL (Structured Query Language) (sql) Berikut adalah sebagian outputnya:
Dalam contoh ini, INNER JOIN klausa cocok dengan setiap baris dari albums tabel dengan setiap baris dari artists tabel berdasarkan kondisi join (artists.ArtistId = albums.ArtistId ) ditentukan setelah ON kata kunci.
Jika kondisi gabungan bernilai true (atau 1), kolom baris dari kedua albums dan artists tabel disertakan dalam kumpulan hasil.
Kueri ini menggunakan alias tabel (l untuk albums tabel dan r untuk artists tabel) untuk mempersingkat kueri:
SELECT
l.Title,
r.Name
FROM
albums l
INNER JOIN artists r ON
r.ArtistId = l.ArtistId;
Code language: SQL (Structured Query Language) (sql)
Jika nama kolom dari tabel yang digabungkan sama, mis., ArtistId , Anda dapat menggunakan USING sintaks sebagai berikut:
SELECT
Title,
Name
FROM
albums
INNER JOIN artists USING(ArtistId);Code language: SQL (Structured Query Language) (sql)
Klausa USING(ArtistId) setara dengan klausa ON artists.ArtistId = albums.ArtistId .
SQLite LEFT JOIN
Pernyataan ini memilih nama artis dan judul album dari artists dan albums tabel menggunakan LEFT JOIN klausa:
SELECT
Name,
Title
FROM
artists
LEFT JOIN albums ON
artists.ArtistId = albums.ArtistId
ORDER BY Name;
Code language: SQL (Structured Query Language) (sql) Berikut adalah outputnya:
LEFT JOIN klausa memilih data mulai dari tabel kiri (artists ) dan baris yang cocok di tabel kanan (albums ) berdasarkan kondisi bergabung (artists.ArtistId = albums.ArtistId ) .
Gabung kiri mengembalikan semua baris dari artists tabel (atau tabel kiri) dan baris yang cocok dari albums tabel (atau tabel kanan).
Jika baris dari tabel kiri tidak memiliki baris yang cocok di tabel kanan, SQLite menyertakan kolom baris di tabel kiri dan NULL untuk kolom tabel kanan.
Mirip dengan INNER JOIN klausa, Anda dapat menggunakan USING sintaks untuk kondisi join sebagai berikut:
SELECT
Name,
Title
FROM
artists
LEFT JOIN albums USING (ArtistId)
ORDER BY
Name;Code language: SQL (Structured Query Language) (sql)
Jika Anda ingin mencari artis yang tidak memiliki album, Anda dapat menambahkan WHERE klausa seperti yang ditunjukkan dalam kueri berikut:
SELECT
Name,
Title
FROM
artists
LEFT JOIN albums ON
artists.ArtistId = albums.ArtistId
WHERE Title IS NULL
ORDER BY Name;
Code language: SQL (Structured Query Language) (sql) Gambar ini menunjukkan sebagian output:
Umumnya, jenis kueri ini memungkinkan Anda menemukan baris yang tersedia di tabel kiri tetapi tidak memiliki baris yang sesuai di tabel kanan.
Perhatikan bahwa LEFT JOIN dan LEFT OUTER JOIN adalah sinonim.
SQLite CROSS JOIN
CROSS JOIN klausa menciptakan produk Cartesian dari baris dari tabel yang digabungkan.
Berbeda dengan INNER JOIN dan LEFT JOIN klausa, CROSS JOIN tidak memiliki kondisi bergabung. Berikut adalah sintaks dasar dari CROSS JOIN klausa:
SELECT
select_list
FROM table1
CROSS JOIN table2;
Code language: SQL (Structured Query Language) (sql)
CROSS JOIN menggabungkan setiap baris dari tabel pertama (table1 ) dengan setiap baris dari tabel kedua (table2 ) untuk membentuk kumpulan hasil.
Jika tabel pertama memiliki N baris, tabel kedua memiliki M baris, hasil akhirnya akan memiliki NxM baris.
Contoh praktis CROSS JOIN klausa adalah untuk menggabungkan dua set data untuk membentuk satu set data awal untuk diproses lebih lanjut. Misalnya, Anda memiliki daftar produk dan bulan, dan Anda ingin membuat rencana kapan Anda dapat menjual produk mana.
Skrip berikut membuat products dan calendars tabel:
CREATE TABLE products(
product text NOT null
);
INSERT INTO products(product)
VALUES('P1'),('P2'),('P3');
CREATE TABLE calendars(
y int NOT NULL,
m int NOT NULL
);
INSERT INTO calendars(y,m)
VALUES
(2019,1),
(2019,2),
(2019,3),
(2019,4),
(2019,5),
(2019,6),
(2019,7),
(2019,8),
(2019,9),
(2019,10),
(2019,11),
(2019,12);
Code language: SQL (Structured Query Language) (sql)
Kueri ini menggunakan CROSS JOIN klausa untuk menggabungkan produk dengan bulan:
SELECT *
FROM products
CROSS JOIN calendars;
Code language: SQL (Structured Query Language) (sql) Berikut adalah outputnya:
Dalam tutorial ini, Anda telah mempelajari berbagai jenis gabungan SQLite yang memungkinkan Anda melakukan kueri dari beberapa tabel.