UNION per combinare più Resultset

Introduzione

La clausola MYSQL UNION permette di combinare in un unico Resultset due o più Resultset provenienti da altrettante Query SELECT.
Ci sono alcune regole che è necessario seguire per utilizzare la clausola UNION:

  • Il numero di colonne che compaiono nelle corrispondenti istruzioni SELECT deve essere uguale.
  • Le colonne debbono apparire nelle corrispondenti posizioni di ogni istruzione SELECT e debbono avere lo stesso tipo di dati o un tipo di dati convertibile.

Per impostazione predefinita, la clausola UNION elimina le righe duplicate dal risultato, anche se non si usa la clausola DISTINCT esplicitamente. Se, invece, si desidera avere tutte le righe, comprese quelle duplicate, è possibile usare esplicitamente la clausola UNION ALL.

Se i nomi di colonna della prima e delle successive istruzioni SELECT, pur trovandosi nelle giuste posizioni per il tipo di dati, non sono uguali, MySQL utlizzerà i nomi di colonna nella prima istruzione SELECT come le etichette per l'uscita.

Le tabelle che useremo negli esempi di questo settore sono queste mostrate qui di seguito.

Per la tabella sql_rubrica
Field Type Null Key Default Extra
id int(10) NO PRI auto_increment
codice varchar(50) NO
cognome varchar(250) NO
nome varchar(250) NO
indirizzo varchar(250) NO
cap varchar(250) NO
citta varchar(250) NO
prov varchar(10) NO
data_nascita date NO
telefono varchar(250) NO
I campi della tabella sql_rubrica:
id, codice, cognome, nome, indirizzo, cap, citta, prov, data_nascita, telefono
Per la tabella sql_agenda
Field Type Null Key Default Extra
id int(10) NO PRI auto_increment
cognome varchar(250) NO
nome varchar(250) NO
indirizzo varchar(250) NO
id_citta int(10) NO
data_nascita date NO
telefono varchar(250) NO
I campi della tabella sql_agenda:
id, cognome, nome, indirizzo, id_citta, data_nascita, telefono
Per la tabella sql_mag_fornitori
Field Type Null Key Default Extra
id_fornitore int(10) NO PRI auto_increment
rag_sociale varchar(150) NO
indirizzo varchar(200) NO
telefono varchar(50) NO
I campi della tabella sql_mag_fornitori:
id_fornitore, rag_sociale, indirizzo, telefono
Per la tabella sql_citta
Field Type Null Key Default Extra
id int(10) NO PRI auto_increment
cap varchar(10) YES
citta varchar(250) YES
prov varchar(10) YES
I campi della tabella sql_citta:
id, cap, citta, prov

Gli SQL per generare queste tabelle sono questi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
-- phpMyAdmin SQL Dump
-- version 2.10.3
-- http://www.phpmyadmin.net
-- 
-- Host: localhost
-- Generato il: 25 Gen, 2015 at 01:43 PM
-- Versione MySQL: 5.0.51
-- Versione PHP: 5.2.6

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

-- 
-- Database: `myDB`
-- 

-- --------------------------------------------------------

-- 
-- Struttura della tabella `sql_agenda`
-- 

DROP TABLE IF EXISTS `sql_agenda`;
CREATE TABLE IF NOT EXISTS `sql_agenda` (
  `id` int(10) NOT NULL auto_increment,
  `cognome` varchar(250) NOT NULL,
  `nome` varchar(250) NOT NULL,
  `indirizzo` varchar(250) NOT NULL,
  `id_citta` int(10) NOT NULL,
  `data_nascita` date NOT NULL,
  `telefono` varchar(250) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=31 ;

-- 
-- Dump dei dati per la tabella `sql_agenda`
-- 

INSERT INTO `sql_agenda` (`id`, `cognome`, `nome`, `indirizzo`, `id_citta`, `data_nascita`, `telefono`) VALUES 
(1, 'Migliavacca', 'Luigi', 'VIA P. FIMIANI TRIVIO', 21, '2004-01-22', '084 41655'),
(2, 'Rizzi', 'Carlo', 'VIA SABIN, 34/2', 21, '2007-11-22', '07 9940508'),
(3, 'Liberali', 'Franca', 'VIA DEL TUSCOLANO, 1', 2, '2004-08-20', '036 348719'),
(4, 'Di Maggio', 'Mario', 'TERMINAL CONTENITORI MOLO VII', 22, '2009-05-21', '051 18752'),
(5, 'Scicchitano', 'Andrea', 'VIA SABIN, 34/2', 22, '1997-01-12', '07 74891'),
(6, 'Edelvisi', 'Maurizio', 'VIA MATTEO RICCI, 12', 22, '1987-07-02', '079 89428'),
(7, 'Gerardini', 'Silvano', 'Z.I SAMBUCETO', 22, '2009-08-12', '012 164848'),
(8, 'Pasotti', 'Alessio', 'VIA SABIN, 34/2', 13, '1987-11-14', '05 9552713'),
(9, 'Calvi', 'Giovanni', 'VIA SABIN, 34/2', 18, '1987-07-26', '044 5602773'),
(10, 'Poggi', 'Giuseppe', 'VIA SABIN, 34/2', 2, '1987-01-25', '08 0640120'),
(11, 'Curti', 'Oreste', 'STRADA MARCHESANE, 43_4', 22, '1988-06-26', '027 42781'),
(12, 'Borsotti', 'Mirella', 'VIA DEL TUSCOLANO, 1', 22, '1987-07-19', '09 379786'),
(13, 'Franchinotti', 'Anna', 'VIA BREDINA, 6', 2, '2009-05-10', '062 8880'),
(14, 'Pischedda', 'Giovanni', 'VIA MATTEO RICCI, 12', 14, '1999-08-08', '07 628585'),
(15, 'Maini', 'Marilena', 'MACRON TICHON STREET, 27', 6, '2002-03-20', '02 6638'),
(16, 'Boscati', 'Andrea', 'VIA MATTEO RICCI, 12', 22, '1994-08-27', '02 7115'),
(17, 'Bazzotti', 'Pietro', 'VIA SABIN, 34/2', 2, '1987-07-17', '05 0484'),
(18, 'Scicchitano', 'Pierluigi', 'STRADA MARCHESANE, 434', 2, '2003-05-02', '06 55850'),
(19, 'Dionisio', 'Andrea', 'VIA DEL TUSCOLANO, 1', 20, '2000-01-28', '06 0798'),
(20, 'Traina', 'Giovanni', 'VIA SABIN, 34/2', 22, '2005-06-06', '037 20398'),
(21, 'Orlandi', 'Enrico', 'STRADA MARCHESANE, 434', 22, '2001-02-13', '012 6780'),
(22, 'Odelli', 'Giuseppe', 'VIA CAVOUR', 8, '1987-07-16', '06 957871'),
(23, 'Poggi', 'Claudio', 'STRADA MARCHESANE, 434', 22, '2004-09-05', '05 7983'),
(24, 'Ravizzola', 'Stefano', 'VIA CAVOUR', 9, '1988-04-16', '06 1865'),
(25, 'Zama', 'Walter', 'VIA DEL TUSCOLANO, 1', 1, '1999-08-13', '07 01730'),
(26, 'Branda', 'Anna Maria', 'VIA DEL TUSCOLANO, 1', 5, '1999-08-22', '06 0798'),
(27, 'Broccardo', 'Andrea', 'VIA MARCHESANE, 232', 2, '2002-11-22', '037 20398'),
(28, 'Castagna', 'Attilio', 'VIA SABIN, 34/2', 5, '2001-08-20', '012 6780'),
(29, 'Sarmento', 'Morena', 'VIA DEL TUSCOLANO, 1', 5, '1999-05-21', '06 957871'),
(30, 'Carribi', 'Domenica', 'VIA GRAMSCI, 14 A', 5, '1989-01-28', '05 7983');

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
-- phpMyAdmin SQL Dump
-- version 2.10.3
-- http://www.phpmyadmin.net
-- 
-- Host: localhost
-- Generato il: 25 Gen, 2015 at 01:44 PM
-- Versione MySQL: 5.0.51
-- Versione PHP: 5.2.6

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

-- 
-- Database: `myDB`
-- 

-- --------------------------------------------------------

-- 
-- Struttura della tabella `sql_mag_fornitori`
-- 

DROP TABLE IF EXISTS `sql_mag_fornitori`;
CREATE TABLE IF NOT EXISTS `sql_mag_fornitori` (
  `id_fornitore` int(10) NOT NULL auto_increment,
  `rag_sociale` varchar(150) NOT NULL,
  `indirizzo` varchar(200) NOT NULL,
  `telefono` varchar(50) NOT NULL,
  PRIMARY KEY  (`id_fornitore`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;

-- 
-- Dump dei dati per la tabella `sql_mag_fornitori`
-- 

INSERT INTO `sql_mag_fornitori` (`id_fornitore`, `rag_sociale`, `indirizzo`, `telefono`) VALUES 
(1, 'Barilla', 'Paperopoli', '458/78948'),
(2, 'De Cecco', 'Topolinia', '12/48794'),
(3, 'Sadam', 'Gotham', '0548/784851'),
(4, 'Quadra', 'Smallville', '12/4578954'),
(5, 'Zaccagnini', 'Aulide', '46/789548'),
(6, 'D''angelo', 'Itaca', '458/7894587'),
(7, 'raffsale', 'Aineia', '12/784658'),
(8, 'saleit', 'Troia', '458/7841546');

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
-- phpMyAdmin SQL Dump
-- version 2.10.3
-- http://www.phpmyadmin.net
-- 
-- Host: localhost
-- Generato il: 25 Gen, 2015 at 01:43 PM
-- Versione MySQL: 5.0.51
-- Versione PHP: 5.2.6

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

-- 
-- Database: `myDB`
-- 

-- --------------------------------------------------------

-- 
-- Struttura della tabella `sql_rubrica`
-- 

DROP TABLE IF EXISTS `sql_rubrica`;
CREATE TABLE IF NOT EXISTS `sql_rubrica` (
  `id` int(10) NOT NULL auto_increment,
  `codice` varchar(50) NOT NULL,
  `cognome` varchar(250) NOT NULL,
  `nome` varchar(250) NOT NULL,
  `indirizzo` varchar(250) NOT NULL,
  `cap` varchar(250) NOT NULL,
  `citta` varchar(250) NOT NULL,
  `prov` varchar(10) NOT NULL,
  `data_nascita` date NOT NULL,
  `telefono` varchar(250) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=31 ;

-- 
-- Dump dei dati per la tabella `sql_rubrica`
-- 

INSERT INTO `sql_rubrica` (`id`, `codice`, `cognome`, `nome`, `indirizzo`, `cap`, `citta`, `prov`, `data_nascita`, `telefono`) VALUES 
(1, '201_parente_000', 'Migliavacca', 'Luigi', 'VIA FIMIANI TRIVIO, 21', '35031', 'Varena', 'AE', '2004-01-22', '084 41655'),
(2, '002_fam_010', 'Rizzi', 'Carlo', 'VIA SABIN, 34/2', '35031', 'Varena', 'AE', '2007-11-22', '07 9940508'),
(3, '002_fam_020', 'Liberali', 'Franca', 'VIA DEL TUSCOLANO, 1', '67030', 'Abbadia Lariana', 'AB', '2004-02-20', '036 348719'),
(4, '003_fam_001', 'Di Maggio', 'Mario', 'VIA DANTE ALIGHIERI', '51021', 'Ville di Fano', 'RF', '2009-05-21', '051 18752'),
(5, '003_fam_002', 'Scicchitano', 'Andrea', 'VIA SABIN, 34/2', '51021', 'Ville di Fano', 'RF', '1997-01-12', '07 74891'),
(6, '003_fam_010', 'Edelvisi', 'Maurizio', 'VIA MATTEO RICCI, 12', '51021', 'Ville di Fano', 'RF', '1987-07-02', '079 89428'),
(7, '003_fam_020', 'Gerardini', 'Silvano', 'VIA SAMBUCETO', '51021', 'Ville di Fano', 'RF', '2009-08-12', '012 164848'),
(8, '500_conosc_000', 'Pasotti', 'Alessio', 'VIA SABIN, 34/2', '22050', 'Correzzana', 'FS', '1987-11-14', '05 9552713'),
(9, '004_fam_001', 'Calvi', 'Giovanni', 'VIA SABIN, 34/2', '53021', 'Marsiliana', 'AB', '1987-07-26', '044 5602773'),
(10, '004_fam_002', 'Poggi', 'Giuseppe', 'VIA SABIN, 34/2', '67030', 'Abbadia Lariana', 'AB', '1987-01-25', '08 0640120'),
(11, '004_fam_010', 'Curti', 'Oreste', 'STRADA MARCHESANE, 43_4', '51021', 'Ville di Fano', 'RF', '1988-06-26', '027 42781'),
(12, '004_fam_021', 'Borsotti', 'Mirella', 'VIA DEL TUSCOLANO, 1', '51021', 'Ville di Fano', 'RF', '1987-07-19', '09 379786'),
(13, '004_fam_020', 'Franchinotti', 'Anna', 'VIA BREDINA, 6', '67030', 'Abbadia Lariana', 'AB', '2009-05-10', '062 8880'),
(14, '500_conosc_000', 'Pischedda', 'Giovanni', 'VIA MATTEO RICCI, 12', '22059', 'Falconara Alta', 'FS', '1999-08-08', '07 628585'),
(15, '004_fam_030', 'Maini', 'Marilena', 'VIA GIOVANNI PASCOLI, 27', '57020', 'Borgo S. Dalmazzo', 'BO', '2002-03-20', '02 6638'),
(16, '005_fam_001', 'Boscati', 'Andrea', 'VIA MATTEO RICCI, 12', '51021', 'Ville di Fano', 'RF', '1994-08-27', '02 7115'),
(17, '005_fam_010', 'Bazzotti', 'Pietro', 'VIA SABIN, 34/2', '67030', 'Abbadia Lariana', 'AB', '1987-07-17', '05 0484'),
(18, '005_fam_020', 'Scicchitano', 'Pierluigi', 'STRADA MARCHESANE, 434', '67030', 'Abbadia Lariana', 'AB', '2003-05-02', '06 55850'),
(19, '005_fam_030', 'Dionisio', 'Andrea', 'VIA DEL TUSCOLANO, 1', '51023', 'San Leonardo in Passiria', 'RF', '2000-01-28', '06 0798'),
(20, '005_fam_040', 'Traina', 'Giovanni', 'VIA SABIN, 34/2', '51021', 'Ville di Fano', 'RF', '2005-06-06', '037 20398'),
(21, '204_parente_000', 'Orlandi', 'Enrico', 'STRADA MARCHESANE, 434', '51021', 'Ville di Fano', 'RF', '2001-02-13', '012 6780'),
(22, '204_parente_000', 'Odelli', 'Giuseppe', 'VIA CAVOUR', '73020', 'Cereseto', 'BO', '1987-07-16', '06 957871'),
(23, '204_parente_000', 'Poggi', 'Claudio', 'STRADA MARCHESANE, 434', '51021', 'Ville di Fano', 'RF', '2004-09-05', '05 7983'),
(24, '006_fam_001', 'Ravizzola', 'Stefano', 'VIA CAVOUR', '71021', 'Coccanile', 'BO', '1988-04-16', '06 1865'),
(25, '006_fam_002', 'Zama', 'Walter', 'VIA DEL TUSCOLANO, 1', '21049', 'AbanoTerme', 'AT', '1999-08-13', '07 01730'),
(26, '006_fam_010', 'Branda', 'Anna Maria', 'VIA DEL TUSCOLANO, 1', '94014', 'Bevagna', 'TA', '1999-08-22', '06 0798'),
(27, '006_fam_020', 'Broccardo', 'Andrea', 'VIA MARCHESANE, 232', '67030', 'Abbadia Lariana', 'AB', '2002-11-22', '037 20398'),
(28, '001_fam_000', 'Castagna', 'Attilio', 'VIA SABIN, 34/2', '94014', 'Bevagna', 'TA', '2001-08-20', '012 6780'),
(29, '201_parente_000', 'Sarmento', 'Morena', 'VIA DEL TUSCOLANO, 1', '94014', 'Bevagna', 'TA', '1999-05-21', '06 957871'),
(30, '200_parente_000', 'Carribi', 'Domenica', 'VIA GRAMSCI, 14 A', '94014', 'Bevagna', 'TA', '1989-01-28', '05 7983');


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
-- phpMyAdmin SQL Dump
-- version 2.10.3
-- http://www.phpmyadmin.net
-- 
-- Host: localhost
-- Generato il: 26 Gen, 2015 at 10:13 AM
-- Versione MySQL: 5.0.51
-- Versione PHP: 5.2.6

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

-- 
-- Database: `myDB`
-- 

-- --------------------------------------------------------

-- 
-- Struttura della tabella `sql_citta`
-- 

DROP TABLE IF EXISTS `sql_citta`;
CREATE TABLE IF NOT EXISTS `sql_citta` (
  `id` int(10) NOT NULL auto_increment,
  `cap` varchar(10) NOT NULL,
  `citta` varchar(250) default NULL,
  `prov` varchar(10) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=33 ;

-- 
-- Dump dei dati per la tabella `sql_citta`
-- 

INSERT INTO `sql_citta` (`id`, `cap`, `citta`, `prov`) VALUES 
(1, '35031', 'AbanoTerme', 'PD'),
(2, '23821', 'Abbadia Lariana', 'LC'),
(3, '56011', 'Agropoli', 'GH'),
(4, '56011', 'Agropoli', 'GH'),
(5, '06031', 'Bevagna', 'PG'),
(6, '12011', 'Borgo S. Dalmazzo', 'CN'),
(7, '18037', 'Castel Vittorio', 'IM'),
(8, '43050', 'Cereseto', 'PR'),
(9, '44030', 'Coccanile', 'FE'),
(10, '89030', 'Condofuri', 'RC'),
(11, '89030', 'Condofuri', 'RC'),
(12, '60013', 'Corinaldo', 'AN'),
(13, '20050', 'Correzzana', 'MB'),
(14, '60015', 'Falconara Alta', 'AN'),
(15, '17010', 'Giusvalla', 'SV'),
(16, '17010', 'Giusvalla', 'SV'),
(17, '17010', 'Giusvalla', 'SV'),
(18, '58010', 'Marsiliana', 'GR'),
(19, '55060', 'Massarosa', 'LU'),
(20, '39013', 'Moso in passiria', 'BZ'),
(21, '38030', 'Varena', 'TN'),
(22, '67010', 'Ville di Fano', 'AQ'),
(23, '56017', 'Agnano', 'PI'),
(24, '80125', 'Agnano', 'NA'),
(25, '36078', 'Castelvecchio', 'VI'),
(26, '61040', 'Castelvecchio', 'PU'),
(27, '67020', 'Castelvecchio calvisio', 'AQ'),
(28, '21030', 'Cuvio', 'VA'),
(29, '21020', 'Daverio', 'VA'),
(30, '80070', 'Fusaro', 'NA'),
(31, '80075', 'Monterone', 'NA'),
(32, '12345', 'città', '');

 

 



settore tecnico il sito di lorettabweb il Forum di sostegno
il forum il forum il forum