sql >> Database >  >> RDS >> SQLite

SQLite Join

Samenvatting :in deze zelfstudie leert u over verschillende soorten SQLite-joins om gegevens uit twee of meer tabellen op te vragen.

Voor de demonstratie gebruiken we de artists en albums tabellen uit de voorbeelddatabase.

Een artiest kan nul of veel albums hebben, terwijl een album van één artiest is.

Gegevens opvragen van beide artists en albums tabellen, kunt u een INNER JOIN . gebruiken , LEFT JOIN , of CROSS JOIN clausule. Elke join-clausule bepaalt hoe SQLite gegevens uit de ene tabel gebruikt om te matchen met rijen in een andere tabel.

Merk op dat SQLite de RIGHT JOIN niet rechtstreeks ondersteunt en FULL OUTER JOIN .

SQLite INNER JOIN

De volgende verklaring retourneert de albumtitels en hun artiestennamen:

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

Hier is de gedeeltelijke output:

In dit voorbeeld is de INNER JOIN clausule komt overeen met elke rij uit de albums tabel met elke rij van de artists tabel op basis van de deelnamevoorwaarde (artists.ArtistId = albums.ArtistId ) opgegeven na de ON zoekwoord.

Als de join-voorwaarde true (of 1) is, worden de kolommen met rijen van beide albums en artists tabellen zijn opgenomen in de resultatenset.

Deze query gebruikt tabelaliassen (l voor de albums tabel en r voor artists tabel) om de zoekopdracht in te korten:

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

Als de kolomnamen van gekoppelde tabellen hetzelfde zijn, bijvoorbeeld ArtistId , kunt u de USING syntaxis als volgt:

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

De clausule USING(ArtistId) komt overeen met de clausule ON artists.ArtistId = albums.ArtistId .

SQLite LEFT JOIN

Deze verklaring selecteert de artiestennamen en albumtitels van de artists en albums tabellen met de LEFT JOIN clausule:

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

Hier is de uitvoer:

De LEFT JOIN clausule selecteert gegevens vanaf de linkertabel (artists ) en overeenkomende rijen in de rechtertabel (albums ) op basis van de deelnamevoorwaarde (artists.ArtistId = albums.ArtistId ) .

De linker join retourneert alle rijen van de artists tabel (of linkertabel) en de overeenkomende rijen uit de albums tafel (of rechter tafel).

Als een rij uit de linkertabel geen overeenkomende rij in de rechtertabel heeft, bevat SQLite kolommen van de rijen in de linkertabel en NULL voor de kolommen van de rechtertabel.

Gelijk aan de INNER JOIN clausule, kunt u de USING syntaxis voor de join-voorwaarde als volgt:

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

Als je artiesten wilt vinden die geen albums hebben, kun je een WHERE . toevoegen clausule zoals getoond in de volgende vraag:

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)

Deze foto toont de gedeeltelijke output:

Over het algemeen kunt u met dit type zoekopdracht rijen vinden die beschikbaar zijn in de linkertabel, maar geen overeenkomstige rijen in de rechtertabel hebben.

Merk op dat LEFT JOIN en LEFT OUTER JOIN zijn synoniemen.

SQLite CROSS JOIN

De CROSS JOIN clausule maakt een Cartesiaans product van rijen uit de samengevoegde tabellen.

In tegenstelling tot de INNER JOIN en LEFT JOIN clausules, een CROSS JOIN heeft geen lidmaatschapsvoorwaarde. Hier is de basissyntaxis van de CROSS JOIN clausule:

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

De CROSS JOIN combineert elke rij uit de eerste tabel (table1 ) met elke rij uit de tweede tabel (table2 ) om de resultatenset te vormen.

Als de eerste tabel N . heeft rijen, de tweede tabel heeft M rijen, zal het eindresultaat NxM . hebben rijen.

Een praktisch voorbeeld van de CROSS JOIN clausule is om twee sets gegevens te combineren voor het vormen van een eerste gegevensset voor verdere verwerking. U heeft bijvoorbeeld een lijst met producten en maanden, en u wilt een plan maken wanneer u welke producten kunt verkopen.

Het volgende script maakt de products en calendars tabellen:

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)

Deze zoekopdracht gebruikt de CROSS JOIN clausule om de producten te combineren met de maanden:

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

Hier is de uitvoer:

In deze zelfstudie hebt u verschillende soorten SQLite-joins geleerd waarmee u query's kunt uitvoeren vanuit meerdere tabellen.


  1. cd:-M:ongeldige optie

  2. SQL Server 2016:sys.dm_exec_function_stats

  3. Verschillende weergave van UUID in Java Hibernate en SQL Server

  4. PostgreSQL-ondersteuning inschakelen in PHP op Mac OS X