sql >> Databáze >  >> RDS >> SQLite

Připojte se k SQLite

Shrnutí :v tomto tutoriálu se dozvíte o různých typech SQLite spojení pro dotazování na data ze dvou nebo více tabulek.

Pro demonstraci použijeme artists a albums tabulky z ukázkové databáze.

Interpret může mít nula nebo mnoho alb, zatímco album patří jednomu interpretovi.

Chcete-li dotazovat data od obou artists a albums tabulky, můžete použít INNER JOIN , LEFT JOIN nebo CROSS JOIN doložka. Každá klauzule spojení určuje, jak SQLite používá data z jedné tabulky ke shodě s řádky v jiné tabulce.

Pamatujte, že SQLite přímo nepodporuje RIGHT JOIN a FULL OUTER JOIN .

SQLite INNER JOIN

Následující příkaz vrátí názvy alb a jejich jména interpretů:

SELECT 
    Title,
    Name
FROM 
    albums
INNER JOIN artists 
    ON artists.ArtistId = albums.ArtistId;
Code language: SQL (Structured Query Language) (sql)

Zde je částečný výstup:

V tomto příkladu INNER JOIN klauzule odpovídá každému řádku z albums tabulka s každým řádkem z artists tabulka na základě podmínky spojení (artists.ArtistId = albums.ArtistId ) zadaný za ON klíčové slovo.

Pokud se podmínka spojení vyhodnotí jako pravdivá (nebo 1), sloupce řádků z obou albums a artists tabulky jsou součástí sady výsledků.

Tento dotaz používá aliasy tabulek (l pro albums tabulka a r pro artists table) pro zkrácení dotazu:

SELECT
    l.Title, 
    r.Name
FROM
    albums l
INNER JOIN artists r ON
    r.ArtistId = l.ArtistId;
Code language: SQL (Structured Query Language) (sql)

V případě, že jsou názvy sloupců spojených tabulek stejné, např. ArtistId , můžete použít USING syntaxe takto:

SELECT
   Title, 
   Name
FROM
   albums
INNER JOIN artists USING(ArtistId);Code language: SQL (Structured Query Language) (sql)

Klauzule USING(ArtistId) je ekvivalentní klauzuli ON artists.ArtistId = albums.ArtistId .

SQLite LEFT JOIN

Toto prohlášení vybírá jména interpretů a názvy alb z artists a albums tabulky pomocí LEFT JOIN klauzule:

SELECT
    Name, 
    Title
FROM
    artists
LEFT JOIN albums ON
    artists.ArtistId = albums.ArtistId
ORDER BY Name;
Code language: SQL (Structured Query Language) (sql)

Zde je výstup:

LEFT JOIN klauzule vybírá data začínající z levé tabulky (artists ) a odpovídající řádky v pravé tabulce (albums ) na základě podmínky připojení (artists.ArtistId = albums.ArtistId ).

Levé spojení vrátí všechny řádky od artists tabulka (nebo levá tabulka) a odpovídající řádky z albums tabulka (nebo pravá tabulka).

Pokud řádek z levé tabulky nemá odpovídající řádek v pravé tabulce, SQLite zahrnuje sloupce řádků v levé tabulce a NULL pro sloupce pravé tabulky.

Podobné jako INNER JOIN klauzule, můžete použít USING syntaxe podmínky spojení takto:

SELECT
   Name, 
   Title
FROM
   artists
LEFT JOIN albums USING (ArtistId)
ORDER BY
   Name;Code language: SQL (Structured Query Language) (sql)

Pokud chcete najít interprety, kteří nemají žádná alba, můžete přidat WHERE klauzule, jak je znázorněno v následujícím dotazu:

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)

Tento obrázek ukazuje částečný výstup:

Obecně vám tento typ dotazu umožňuje najít řádky, které jsou dostupné v levé tabulce, ale nemají odpovídající řádky v pravé tabulce.

Všimněte si, že LEFT JOIN a LEFT OUTER JOIN jsou synonyma.

SQLite CROSS JOIN

CROSS JOIN klauzule vytvoří kartézský součin řádků ze spojených tabulek.

Na rozdíl od INNER JOIN a LEFT JOIN klauzule, CROSS JOIN nemá podmínku připojení. Zde je základní syntaxe CROSS JOIN klauzule:

SELECT
    select_list
FROM table1
CROSS JOIN table2;
Code language: SQL (Structured Query Language) (sql)

CROSS JOIN kombinuje každý řádek z první tabulky (table1 ) s každým řádkem z druhé tabulky (table2 ), čímž vytvoříte sadu výsledků.

Pokud má první tabulka N řádků, druhá tabulka má M řádků, konečný výsledek bude mít NxM řádky.

Praktický příklad CROSS JOIN klauzule je kombinovat dva soubory dat pro vytvoření počátečního souboru dat pro další zpracování. Máte například seznam produktů a měsíců a chcete si vytvořit plán, kdy můžete které produkty prodat.

Následující skript vytvoří products a calendars tabulky:

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)

Tento dotaz používá CROSS JOIN doložka pro spojení produktů s měsíci:

SELECT * 
FROM products
CROSS JOIN calendars;
Code language: SQL (Structured Query Language) (sql)

Zde je výstup:

V tomto tutoriálu jste se naučili různé druhy SQLite spojení, které vám umožňují dotazovat se z více tabulek.


  1. Musí deklarovat proměnnou @myvariable error s parametrizovaným dotazem ADO

  2. Vytvoření uživatele PostgreSQL a jeho přidání do databáze

  3. Dotaz na kontrolu velikosti tabulky v databázi Oracle

  4. Funkce WIDTH_BUCKET() v Oracle