SQLite
 sql >> Teknologi Basis Data >  >> RDS >> SQLite

Gabung SQLite

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara menarik data dari database dan melihatnya sebagai ListView

  2. Database sqlite memperbarui baris android

  3. Buat Database di SQLite

  4. 2 Cara Mengembalikan Stempel Waktu Unix di SQLite

  5. Pastikan Kursor diinisialisasi dengan benar sebelum mengakses data darinya