sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur UNION fungerar i PostgreSQL

I PostgreSQL, UNION operatorn kombinerar resultaten från flera frågor till en enda resultatuppsättning.

Syntax

Den officiella syntaxen ser ut så här:

query1 UNION [ALL] query2

UNION operatorn lägger till resultatet av query2 till resultatet av query1 (även om det inte finns någon garanti för att det är den ordning som raderna faktiskt returneras i).

Dubblettrader elimineras om inte UNION ALL används.

Exempel

Anta att vi har följande tabeller:

SELECT * FROM Teachers;
SELECT * FROM Students;

Resultat:

 teacherid | teachername 
-----------+-------------
         1 | Warren
         2 | Ben
         3 | Cathy
         4 | Cathy
         5 | Bill
         6 | Bill

 studentid | studentname 
-----------+-------------
         1 | Faye
         2 | Jet
         3 | Spike
         4 | Ein
         5 | Warren
         6 | Bill

Vi kan använda UNION operatör för att returnera alla lärare och elever:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Resultat:

 teachername 
-------------
 Spike
 Ben
 Ein
 Cathy
 Jet
 Faye
 Bill
 Warren
(8 rows)

Som standard är UNION operatorn tillämpar implicit en DISTINCT drift. Med andra ord returnerar den endast distinkta värden som standard. Så ovanstående resultat innehåller bara ett vardera av Warren, Cathy och Bill. Detta trots att de kombinerade tabellerna faktiskt innehåller två Warrens, två Cathys och tre Bills (det finns två lärare som heter Cathy, en lärare och en kund som heter Warren, och två som heter Bill, samt en elev som heter Bill).

Här är ett exempel som uttryckligen använder DISTINCT operatör:

SELECT TeacherName FROM Teachers
UNION DISTINCT
SELECT StudentName FROM Students;

Resultat:

 teachername 
-------------
 Spike
 Ben
 Ein
 Cathy
 Jet
 Faye
 Bill
 Warren
(8 rows)

Samma resultat.

Inkludera dubbletter

Vi kan använda ALL sökord för att inkludera dubbletter av värden i resultaten:

SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;

Resultat:

 teachername 
-------------
 Warren
 Ben
 Cathy
 Cathy
 Bill
 Bill
 Faye
 Jet
 Spike
 Ein
 Warren
 Bill
(12 rows)

Den här gången fick vi tolv rader istället för de åtta som vi fick i vårt första exempel.

Vi kan se att båda Cathys returnerades och alla tre räkningarna returnerades.


  1. ScaleGrid lanserar stöd för Google Cloud Platform (GCP) för Managed Database Hosting

  2. Hur ditt småföretag kan dra nytta av cloud computing

  3. Hur man utför en UPSERT så att jag kan använda både nya och gamla värden i uppdateringsdelen

  4. Hur man identifierar PostgreSQL-prestandaproblem med långsamma frågor