UNION în MySQL

Legarea tabelelor (JOIN) Toate versiunile MySQL și MariaDB

Pune unul sub altul rezultatele a două sau mai multe interogări SELECT.

Sintaxă
SELECT ... UNION SELECT ...;
SELECT ... UNION ALL SELECT ...;

Ce face UNION

UNION lipește rândurile din mai multe interogări într-un singur rezultat. Interogările trebuie să aibă același număr de coloane, în aceeași ordine. Numele coloanelor sunt luate din primul SELECT.

UNION elimină rândurile duplicate. UNION ALL le păstrează și este mai rapid, pentru că nu caută duplicate.

Exemple

Exemplul 1: Toate adresele de e-mail din două tabele

CREATE TABLE clienti (email VARCHAR(100));
CREATE TABLE abonati (email VARCHAR(100));
INSERT INTO clienti VALUES ('ana@exemplu.ro'), ('dan@exemplu.ro');
INSERT INTO abonati VALUES ('dan@exemplu.ro'), ('ioana@exemplu.ro');

SELECT email FROM clienti
UNION
SELECT email FROM abonati
ORDER BY email;

SELECT email FROM clienti
UNION ALL
SELECT email FROM abonati
ORDER BY email;

Rezultat

+------------------+
| email            |
+------------------+
| ana@exemplu.ro   |
| dan@exemplu.ro   |
| ioana@exemplu.ro |
+------------------+
+------------------+
| email            |
+------------------+
| ana@exemplu.ro   |
| dan@exemplu.ro   |
| dan@exemplu.ro   |
| ioana@exemplu.ro |
+------------------+

Greșeli frecvente

  • Interogările au număr diferit de coloane și primești eroarea The used SELECT statements have a different number of columns.
  • Folosești UNION când știi că nu există duplicate. UNION ALL face aceeași treabă mai repede.

Comenzi înrudite

  • SELECT: Citește date dintr-un tabel. Este comanda SQL folosită cel mai des.
  • DISTINCT: Elimină rândurile duplicate din rezultat.
  • INNER JOIN: Combină rândurile din două tabele care au o valoare comună, de exemplu comenzile cu clienții lor.