]> granicus.if.org Git - postgresql/blob - src/test/regress/sql/union.sql
0f846091cd10c298c41e87b5326e397e6866a3dc
[postgresql] / src / test / regress / sql / union.sql
1 --
2 -- UNION (also INTERSECT, EXCEPT)
3 --
4
5 -- Simple UNION constructs
6
7 SELECT 1 AS two UNION SELECT 2;
8
9 SELECT 1 AS one UNION SELECT 1;
10
11 SELECT 1 AS two UNION ALL SELECT 2;
12
13 SELECT 1 AS two UNION ALL SELECT 1;
14
15 SELECT 1 AS three UNION SELECT 2 UNION SELECT 3;
16
17 SELECT 1 AS two UNION SELECT 2 UNION SELECT 2;
18
19 SELECT 1 AS three UNION SELECT 2 UNION ALL SELECT 2;
20
21 SELECT 1.1 AS two UNION SELECT 2.2;
22
23 -- Mixed types
24
25 SELECT 1.1 AS two UNION SELECT 2;
26
27 SELECT 1 AS two UNION SELECT 2.2;
28
29 SELECT 1 AS one UNION SELECT 1.0::float8;
30
31 SELECT 1.1 AS two UNION ALL SELECT 2;
32
33 SELECT 1.0::float8 AS two UNION ALL SELECT 1;
34
35 SELECT 1.1 AS three UNION SELECT 2 UNION SELECT 3;
36
37 SELECT 1.1::float8 AS two UNION SELECT 2 UNION SELECT 2.0::float8;
38
39 SELECT 1.1 AS three UNION SELECT 2 UNION ALL SELECT 2;
40
41 SELECT 1.1 AS two UNION (SELECT 2 UNION ALL SELECT 2);
42
43 --
44 -- Try testing from tables...
45 --
46
47 SELECT f1 AS five FROM FLOAT8_TBL
48 UNION
49 SELECT f1 FROM FLOAT8_TBL;
50
51 SELECT f1 AS ten FROM FLOAT8_TBL
52 UNION ALL
53 SELECT f1 FROM FLOAT8_TBL;
54
55 SELECT f1 AS nine FROM FLOAT8_TBL
56 UNION
57 SELECT f1 FROM INT4_TBL;
58
59 SELECT f1 AS ten FROM FLOAT8_TBL
60 UNION ALL
61 SELECT f1 FROM INT4_TBL;
62
63 SELECT f1 AS five FROM FLOAT8_TBL
64   WHERE f1 BETWEEN -1e6 AND 1e6
65 UNION
66 SELECT f1 FROM INT4_TBL
67   WHERE f1 BETWEEN 0 AND 1000000;
68
69 SELECT CAST(f1 AS char(4)) AS three FROM VARCHAR_TBL
70 UNION
71 SELECT f1 FROM CHAR_TBL;
72
73 SELECT f1 AS three FROM VARCHAR_TBL
74 UNION
75 SELECT CAST(f1 AS varchar) FROM CHAR_TBL;
76
77 SELECT f1 AS eight FROM VARCHAR_TBL
78 UNION ALL
79 SELECT f1 FROM CHAR_TBL;
80
81 SELECT f1 AS five FROM TEXT_TBL
82 UNION
83 SELECT f1 FROM VARCHAR_TBL
84 UNION
85 SELECT TRIM(TRAILING FROM f1) FROM CHAR_TBL;
86
87 --
88 -- INTERSECT and EXCEPT
89 --
90
91 SELECT q2 FROM int8_tbl INTERSECT SELECT q1 FROM int8_tbl;
92
93 SELECT q2 FROM int8_tbl INTERSECT ALL SELECT q1 FROM int8_tbl;
94
95 SELECT q2 FROM int8_tbl EXCEPT SELECT q1 FROM int8_tbl;
96
97 SELECT q2 FROM int8_tbl EXCEPT ALL SELECT q1 FROM int8_tbl;
98
99 SELECT q2 FROM int8_tbl EXCEPT ALL SELECT DISTINCT q1 FROM int8_tbl;
100
101 SELECT q1 FROM int8_tbl EXCEPT SELECT q2 FROM int8_tbl;
102
103 SELECT q1 FROM int8_tbl EXCEPT ALL SELECT q2 FROM int8_tbl;
104
105 SELECT q1 FROM int8_tbl EXCEPT ALL SELECT DISTINCT q2 FROM int8_tbl;
106
107 --
108 -- Mixed types
109 --
110
111 SELECT f1 FROM float8_tbl INTERSECT SELECT f1 FROM int4_tbl;
112
113 SELECT f1 FROM float8_tbl EXCEPT SELECT f1 FROM int4_tbl;
114
115 --
116 -- Operator precedence and (((((extra))))) parentheses
117 --
118
119 SELECT q1 FROM int8_tbl INTERSECT SELECT q2 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl;
120
121 SELECT q1 FROM int8_tbl INTERSECT (((SELECT q2 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl)));
122
123 (((SELECT q1 FROM int8_tbl INTERSECT SELECT q2 FROM int8_tbl))) UNION ALL SELECT q2 FROM int8_tbl;
124
125 SELECT q1 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl EXCEPT SELECT q1 FROM int8_tbl;
126
127 SELECT q1 FROM int8_tbl UNION ALL (((SELECT q2 FROM int8_tbl EXCEPT SELECT q1 FROM int8_tbl)));
128
129 (((SELECT q1 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl))) EXCEPT SELECT q1 FROM int8_tbl;
130
131 --
132 -- Subqueries with ORDER BY & LIMIT clauses
133 --
134
135 -- In this syntax, ORDER BY/LIMIT apply to the result of the EXCEPT
136 SELECT q1,q2 FROM int8_tbl EXCEPT SELECT q2,q1 FROM int8_tbl
137 ORDER BY q2,q1;
138
139 -- This should fail, because q2 isn't a name of an EXCEPT output column
140 SELECT q1 FROM int8_tbl EXCEPT SELECT q2 FROM int8_tbl ORDER BY q2 LIMIT 1;
141
142 -- But this should work:
143 SELECT q1 FROM int8_tbl EXCEPT (((SELECT q2 FROM int8_tbl ORDER BY q2 LIMIT 1)));
144
145 --
146 -- New syntaxes (7.1) permit new tests
147 --
148
149 (((((select * from int8_tbl)))));
150
151