sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan UNION fungerer i PostgreSQL

I PostgreSQL er UNION operator kombinerer resultaterne fra flere forespørgsler til et enkelt resultatsæt.

Syntaks

Den officielle syntaks lyder sådan her:

query1 UNION [ALL] query2

UNION operatør tilføjer resultatet af query2 til resultatet af query1 (selvom der ikke er nogen garanti for, at det er den rækkefølge, som rækkerne faktisk returneres i).

Duplikerede rækker elimineres, medmindre UNION ALL bruges.

Eksempel

Antag, at vi har følgende 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 bruge UNION operatør for at returnere alle lærere og elever:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Resultat:

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

Som standard er UNION operatør anvender implicit en DISTINCT operation. Med andre ord returnerer det kun distinkte værdier som standard. Så ovenstående resultater indeholder kun én af hver af Warren, Cathy og Bill. Dette er på trods af, at de kombinerede tabeller faktisk indeholder to Warrens, to Cathys og tre Bills (der er to lærere, der hedder Cathy, en lærer og en kunde, der hedder Warren, og to, der hedder Bill, samt en elev, der hedder Bill).

Her er et eksempel, der eksplicit bruger 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)

Samme resultat.

Medtag dubletter

Vi kan bruge ALL søgeord for at inkludere duplikerede værdier i resultaterne:

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)

Denne gang fik vi tolv rækker i stedet for de otte, som vi fik i vores første eksempel.

Vi kan se, at begge Cathys blev returneret, og alle tre regninger blev returneret.


  1. Entity Framework Core 2.0:Sådan konfigureres abstrakt basisklasse én gang

  2. Sundhedstjek på Exadata ved hjælp af Exachk Utility

  3. Returner ISO-ugenummeret fra en dato i SQL Server (T-SQL)

  4. Sådan dræber du alle aktive og inaktive oracle-sessioner for brugeren