MySQL UNION Tutorial

SQL Operator UNION sluzi kako bi kombinovali izvestaje nastale na osnovu dve ili vise SQL SELECT komandi.

Posto se UNION komanda koristi za vezivanje rezultata SELECT komande na vise tabela, to nam govori da redovi u tim tabelama moraju biti iste strukture u smislu da nazivi kolona budi isti, i da tip podataka bude iste. Dakle, kolone u tabelama nad kojima se vrsi UNION operacija moraju biti "kompatabilne", inace sama UNION komanda niti ima smisla, niti ce raditi kako treba.

Postoji dva tipa UNION komande, prva je obicni UNION koji ne dozvoljava duplirane unose, a drugi je UNION ALL koji dozvoljava duplirane unose.

Zadavanje komande je veoma jednostavno:

SELECT kolona (ili vise kolona, odvojenih zarezom) FROM tabela1
UNION (ili UNION ALL)
SELECT kolona (ili vise kolona, odvojenih zarezom) FROM tabela2

Pre nego sto predjemo na UNION primer, moramo napraviti dve tabele, u koje cemo smestati imena (na primer - klijenata...)

Pravimo tabele...

mysql> CREATE TABLE klijenti_beograd (
    -> k_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    -> naziv CHAR (30));
Query OK, 0 rows affected (0.31 sec)

mysql> describe klijenti_beograd;
+-------+----------+------+-----+---------+----------------+
| Field | Type     | Null | Key | Default | Extra          |
+-------+----------+------+-----+---------+----------------+
| k_id  | int(11)  | NO   | PRI | NULL    | auto_increment |
| naziv | char(30) | YES  |     | NULL    |                |
+-------+----------+------+-----+---------+----------------+
2 rows in set (0.02 sec)
mysql> CREATE TABLE klijenti_kragujevac (
    -> k_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    -> naziv CHAR (30));
Query OK, 0 rows affected (0.14 sec)

mysql> describe klijenti_kragujevac;
+-------+----------+------+-----+---------+----------------+
| Field | Type     | Null | Key | Default | Extra          |
+-------+----------+------+-----+---------+----------------+
| k_id  | int(11)  | NO   | PRI | NULL    | auto_increment |
| naziv | char(30) | YES  |     | NULL    |                |
+-------+----------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

Popunjavamo tabele podacima...

mysql> insert into klijenti_beograd (k_id, naziv)
    -> VALUES ('NULL', 'AGROPLAN');
Query OK, 1 row affected, 1 warning (0.13 sec)

mysql> insert into klijenti_beograd (k_id, naziv)
    -> VALUES ('NULL', 'INTERKOP');
Query OK, 1 row affected, 1 warning (0.03 sec)

mysql> insert into klijenti_beograd (k_id, naziv)
    -> VALUES ('NULL', 'GENEMAX');
Query OK, 1 row affected, 1 warning (0.05 sec)
mysql> insert into klijenti_kragujevac (k_id, naziv)
    -> VALUES ('NULL', 'KGSPED');
Query OK, 1 row affected, 1 warning (0.05 sec)

mysql> insert into klijenti_kragujevac (k_id, naziv)
    -> VALUES ('NULL', 'KGPUT');
Query OK, 1 row affected, 1 warning (0.03 sec)

mysql> insert into klijenti_kragujevac (k_id, naziv)
    -> VALUES ('NULL', 'KG LOGISTIKA');
Query OK, 1 row affected, 1 warning (0.03 sec)

mysql> insert into klijenti_kragujevac (k_id, naziv)
    -> VALUES ('NULL', 'AGROPLAN');
Query OK, 1 row affected, 1 warning (0.16 sec)

mysql>

Stanje tabela nakon popune...

Sadrzaj tabele klijenti_beograd:

mysql> SELECT * FROM klijenti_beograd;
+------+----------+
| k_id | naziv    |
+------+----------+
|    1 | AGROPLAN |
|    2 | INTERKOP |
|    3 | GENEMAX  |
+------+----------+
3 rows in set (0.00 sec)

mysql>

Sadrzaj tabele klijenti_kragujevac:

mysql> SELECT * FROM klijenti_kragujevac;
+------+--------------+
| k_id | naziv        |
+------+--------------+
|    1 | KGSPED       |
|    2 | KGPUT        |
|    3 | KG LOGISTIKA |
|    4 | AGROPLAN     |
+------+--------------+
4 rows in set (0.00 sec)

mysql>

UNION tabela u MySQL-u

mysql> SELECT naziv FROM klijenti_beograd
    -> UNION
    -> SELECT naziv FROM klijenti_kragujevac;
+--------------+
| naziv        |
+--------------+
| AGROPLAN     |
| INTERKOP     |
| GENEMAX      |
| KGSPED       |
| KGPUT        |
| KG LOGISTIKA |
+--------------+
6 rows in set (0.03 sec)

mysql>

UNION ALL u MySQL-u (objedinjavanje svih redova)

mysql> SELECT naziv FROM klijenti_beograd
    -> UNION ALL
    -> SELECT naziv FROM klijenti_kragujevac;
+--------------+
| naziv        |
+--------------+
| AGROPLAN     |
| INTERKOP     |
| GENEMAX      |
| KGSPED       |
| KGPUT        |
| KG LOGISTIKA |
| AGROPLAN     |
+--------------+
7 rows in set (0.00 sec)

mysql>