sql >> Databáze >  >> RDS >> PostgreSQL

Jak UNION funguje v PostgreSQL

V PostgreSQL, UNION operátor kombinuje výsledky z více dotazů do jediné sady výsledků.

Syntaxe

Oficiální syntaxe vypadá takto:

query1 UNION [ALL] query2

UNION operátor připojí výsledek query2 na výsledek query1 (ačkoli neexistuje žádná záruka, že toto je pořadí, ve kterém jsou řádky skutečně vráceny).

Duplicitní řádky jsou odstraněny, pokud není UNION ALL se používá.

Příklad

Předpokládejme, že máme následující tabulky:

SELECT * FROM Teachers;
SELECT * FROM Students;

Výsledek:

 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

Můžeme použít UNION operátor vrátit všechny učitele a studenty:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Výsledek:

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

Ve výchozím nastavení UNION operátor implicitně aplikuje DISTINCT úkon. Jinými slovy, ve výchozím nastavení vrací pouze odlišné hodnoty. Výše uvedené výsledky tedy obsahují pouze jeden Warren, Cathy a Bill. A to i přesto, že kombinované stoly ve skutečnosti obsahují dva Warreny, dvě Cathy a tři Billy (jsou tam dva učitelé Cathy, učitel a zákazník jménem Warren a dva Bill a jeden student Bill).

Zde je příklad, který explicitně používá DISTINCT operátor:

SELECT TeacherName FROM Teachers
UNION DISTINCT
SELECT StudentName FROM Students;

Výsledek:

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

Stejný výsledek.

Zahrnout duplikáty

Můžeme použít ALL klíčové slovo pro zahrnutí duplicitních hodnot do výsledků:

SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;

Výsledek:

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

Tentokrát jsme dostali dvanáct řádků místo osmi, které jsme dostali v našem prvním příkladu.

Vidíme, že obě Cathy byly vráceny a všechny tři účty byly vráceny.


  1. Jak funguje funkce EXPORT_SET() v MySQL

  2. Použít plovoucí nebo desetinné číslo pro dolarovou částku účetní aplikace?

  3. Uložit pole PHP do MySQL?

  4. ORA-20008:Vypršel časový limit