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.