sql >> Databasteknik >  >> RDS >> SQLite

SQLite Join

Sammanfattning :i den här handledningen kommer du att lära dig om olika typer av SQLite-kopplingar för att söka efter data från två eller flera tabeller.

För demonstrationen kommer vi att använda artists och albums tabeller från exempeldatabasen.

En artist kan ha noll eller många album medan ett album tillhör en artist.

För att fråga data från båda artists och albums tabeller, kan du använda en INNER JOIN , LEFT JOIN , eller CROSS JOIN klausul. Varje join-sats bestämmer hur SQLite använder data från en tabell för att matcha med rader i en annan tabell.

Observera att SQLite inte direkt stöder RIGHT JOIN och FULL OUTER JOIN .

SQLite INNER JOIN

Följande påstående returnerar albumtitlarna och deras artistnamn:

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

Här är den partiella utmatningen:

I det här exemplet är INNER JOIN klausul matchar varje rad från albums tabell med varje rad från artists tabell baserad på kopplingsvillkoret (artists.ArtistId = albums.ArtistId ) som anges efter ON nyckelord.

Om sammanfogningsvillkoret utvärderas till sant (eller 1), kolumnerna med rader från båda albums och artists tabeller ingår i resultatuppsättningen.

Den här frågan använder tabellalias (l för albums tabell och r för artists tabell) för att förkorta frågan:

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

Om kolumnnamnen för sammanfogade tabeller är desamma, t.ex. ArtistId , kan du använda USING syntax enligt följande:

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

Klausulen USING(ArtistId) är likvärdig med klausulen ON artists.ArtistId = albums.ArtistId .

SQLite LEFT JOIN

Detta uttalande väljer artistnamn och albumtitlar från artists och albums tabeller med LEFT JOIN klausul:

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

Här är resultatet:

LEFT JOIN satsen väljer data från den vänstra tabellen (artists ) och matchande rader i den högra tabellen (albums ) baserat på anslutningsvillkoret (artists.ArtistId = albums.ArtistId ).

Den vänstra kopplingen returnerar alla rader från artists tabell (eller vänster tabell) och de matchande raderna från albums tabell (eller höger tabell).

Om en rad från den vänstra tabellen inte har en matchande rad i den högra tabellen, inkluderar SQLite kolumner av raderna i den vänstra tabellen och NULL för kolumnerna i den högra tabellen.

Liknar INNER JOIN sats, kan du använda USING syntax för joinvillkoret enligt följande:

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

Om du vill hitta artister som inte har några album kan du lägga till en WHERE klausul som visas i följande fråga:

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)

Den här bilden visar den partiella utmatningen:

I allmänhet låter den här typen av fråga dig hitta rader som är tillgängliga i den vänstra tabellen men som inte har motsvarande rader i den högra tabellen.

Observera att LEFT JOIN och LEFT OUTER JOIN är synonymer.

SQLite CROSS JOIN

CROSS JOIN sats skapar en kartesisk produkt av rader från de sammanfogade tabellerna.

Till skillnad från INNER JOIN och LEFT JOIN satser, en CROSS JOIN har inget anslutningsvillkor. Här är den grundläggande syntaxen för CROSS JOIN klausul:

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

CROSS JOIN kombinerar varje rad från den första tabellen (table1 ) med varje rad från den andra tabellen (table2 ) för att bilda resultatuppsättningen.

Om den första tabellen har N rader har den andra tabellen M rader kommer det slutliga resultatet att ha NxM rader.

Ett praktiskt exempel på CROSS JOIN är att kombinera två uppsättningar data för att bilda en initial datauppsättning för vidare bearbetning. Du har till exempel en lista över produkter och månader, och du vill göra en plan när du kan sälja vilka produkter.

Följande skript skapar products och calendars tabeller:

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)

Den här frågan använder CROSS JOIN klausul för att kombinera produkterna med månaderna:

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

Här är resultatet:

I den här handledningen har du lärt dig olika typer av SQLite-kopplingar som låter dig fråga från flera tabeller.


  1. Förstå Always ON Availability Group mellan Linux-baserade SQL Server-instanser. Del 1

  2. Hur man får en lista över alla språk i SQL Server (T-SQL)

  3. Vilken MySQL-datatyp ska användas för latitud/longitud med 8 decimaler?

  4. Hur man dockar/avdockar frågefönster och andra flikar i SQL Server Management Studio (SSMS) - SQL Server/TSQL självstudie del 21