sql >> Database >  >> RDS >> SQLite

SQLite FULL OUTER JOIN-emulatie

Samenvatting :in deze tutorial leer je hoe je SQLite volledige outer join emuleert met behulp van de UNION en LEFT JOIN clausules.

Inleiding tot SQL FULL OUTER JOIN clausule

In theorie is het resultaat van de FULL OUTER JOIN is een combinatie van een LEFT JOIN en een RIGHT JOIN . De resultaatset van de volledige outer join heeft NULL waarden voor elke kolom van de tabel die geen overeenkomende rij heeft in de andere tabel. Voor de overeenkomende rijen, de FULL OUTER JOIN produceert een enkele rij met waarden uit kolommen van de rijen in beide tabellen.

De volgende afbeelding illustreert het resultaat van de FULL OUTER JOIN clausule:

Zie de volgende cats en dogs tabellen.

-- create and insert data into the dogs table
CREATE TABLE dogs (
    type       TEXT,
    color TEXT
);

INSERT INTO dogs(type, color) 
VALUES('Hunting','Black'), ('Guard','Brown');

-- create and insert data into the cats table
CREATE TABLE cats (
    type       TEXT,
    color TEXT
);

INSERT INTO cats(type,color) 
VALUES('Indoor','White'), 
      ('Outdoor','Black');Code language: SQL (Structured Query Language) (sql)

De volgende instructie gebruikt de FULL OUTER JOIN clausule om gegevens op te vragen van de dogs en cats tabellen.

SELECT *
FROM dogs 
FULL OUTER JOIN cats
    ON dogs.color = cats.color;Code language: SQL (Structured Query Language) (sql)

Het volgende toont het resultaat van de bovenstaande verklaring:

Type Kleur Type Kleur
Jagen Zwart Buiten Zwart
Bewaker Bruin NULL NULL
NULL NULL Binnen Wit

Helaas ondersteunt SQLite de RIGHT JOIN . niet clausule en ook de FULL OUTER JOIN clausule. U kunt echter eenvoudig de FULL OUTER JOIN . emuleren door de LEFT JOIN . te gebruiken clausule.

Emuleert SQLite volledige outer join

De volgende instructie emuleert de FULL OUTER JOIN clausule in SQLite:

SELECT d.type,
         d.color,
         c.type,
         c.color
FROM dogs d
LEFT JOIN cats c USING(color)
UNION ALL
SELECT d.type,
         d.color,
         c.type,
         c.color
FROM cats c
LEFT JOIN dogs d USING(color)
WHERE d.color IS NULL;Code language: SQL (Structured Query Language) (sql)

Hoe de zoekopdracht werkt.

  • Omdat SQLilte de RIGHT JOIN niet ondersteunt clausule gebruiken we de LEFT JOIN clausule in de tweede SELECT statement in plaats daarvan en verander de posities van de cats en dogs tabellen.
  • De UNION ALL clausule behoudt de dubbele rijen uit de resultaatsets van beide zoekopdrachten.
  • De WHERE clausule in de tweede SELECT statement verwijdert rijen die al waren opgenomen in de resultatenset van de eerste SELECT verklaring.

In deze zelfstudie hebt u geleerd hoe u de UNION ALL . gebruikt en LEFT JOIN clausules om de SQLite FULL OUTER JOIN te emuleren clausule.


  1. Waarom zou ik mysql_*-functies niet gebruiken in PHP?

  2. Hoe automatisch identiteit voor een Oracle-database genereren via Entity Framework?

  3. Refactor externe sleutel naar velden

  4. Hoe de LOWER()-functie werkt in MySQL