union.out 7.5 KB
Newer Older
1
--
2
-- UNION (also INTERSECT, EXCEPT)
3 4 5 6 7 8 9
--
-- Simple UNION constructs
SELECT 1 AS two UNION SELECT 2;
 two 
-----
   1
   2
T
Thomas G. Lockhart 已提交
10 11
(2 rows)

12 13 14 15
SELECT 1 AS one UNION SELECT 1;
 one 
-----
   1
T
Thomas G. Lockhart 已提交
16 17
(1 row)

18 19 20 21 22
SELECT 1 AS two UNION ALL SELECT 2;
 two 
-----
   1
   2
T
Thomas G. Lockhart 已提交
23 24
(2 rows)

25 26 27 28 29
SELECT 1 AS two UNION ALL SELECT 1;
 two 
-----
   1
   1
T
Thomas G. Lockhart 已提交
30 31
(2 rows)

32 33 34 35 36 37
SELECT 1 AS three UNION SELECT 2 UNION SELECT 3;
 three 
-------
     1
     2
     3
T
Thomas G. Lockhart 已提交
38 39
(3 rows)

40 41 42 43 44
SELECT 1 AS two UNION SELECT 2 UNION SELECT 2;
 two 
-----
   1
   2
T
Thomas G. Lockhart 已提交
45 46
(2 rows)

47 48 49 50 51 52
SELECT 1 AS three UNION SELECT 2 UNION ALL SELECT 2;
 three 
-------
     1
     2
     2
T
Thomas G. Lockhart 已提交
53 54
(3 rows)

55 56 57 58 59
SELECT 1.1 AS two UNION SELECT 2.2;
 two 
-----
 1.1
 2.2
T
Thomas G. Lockhart 已提交
60 61
(2 rows)

62 63 64 65 66 67
-- Mixed types
SELECT 1.1 AS two UNION SELECT 2;
 two 
-----
 1.1
   2
T
Thomas G. Lockhart 已提交
68 69
(2 rows)

70 71 72 73
SELECT 1 AS two UNION SELECT 2.2;
 two 
-----
   1
74
 2.2
T
Thomas G. Lockhart 已提交
75 76
(2 rows)

77
SELECT 1 AS one UNION SELECT 1.0;
78 79 80
 one 
-----
   1
T
Thomas G. Lockhart 已提交
81 82
(1 row)

83 84 85 86 87
SELECT 1.1 AS two UNION ALL SELECT 2;
 two 
-----
 1.1
   2
T
Thomas G. Lockhart 已提交
88 89
(2 rows)

90
SELECT 1.0 AS two UNION ALL SELECT 1;
91 92
 two 
-----
93
 1.0
94
   1
T
Thomas G. Lockhart 已提交
95 96
(2 rows)

97
SELECT 1.1 AS three UNION SELECT 2 UNION SELECT 3;
98 99
 three 
-------
100
   1.1
101 102
     2
     3
T
Thomas G. Lockhart 已提交
103 104
(3 rows)

105
SELECT 1.1 AS two UNION SELECT 2 UNION SELECT 2.0;
106 107
 two 
-----
108
 1.1
109
   2
T
Thomas G. Lockhart 已提交
110 111
(2 rows)

112
SELECT 1.1 AS three UNION SELECT 2 UNION ALL SELECT 2;
113 114
 three 
-------
115
   1.1
116 117
     2
     2
T
Thomas G. Lockhart 已提交
118 119
(3 rows)

120 121 122 123 124 125 126
SELECT 1.1 AS two UNION (SELECT 2 UNION ALL SELECT 2);
 two 
-----
 1.1
   2
(2 rows)

127 128 129 130
--
-- Try testing from tables...
--
SELECT f1 AS five FROM FLOAT8_TBL
T
Thomas G. Lockhart 已提交
131 132
UNION
SELECT f1 FROM FLOAT8_TBL;
133 134 135 136 137 138 139
         five          
-----------------------
 -1.2345678901234e+200
               -1004.3
                -34.84
 -1.2345678901234e-200
                     0
T
Thomas G. Lockhart 已提交
140 141
(5 rows)

142
SELECT f1 AS ten FROM FLOAT8_TBL
T
Thomas G. Lockhart 已提交
143 144
UNION ALL
SELECT f1 FROM FLOAT8_TBL;
145 146 147 148 149 150 151 152 153 154 155 156
          ten          
-----------------------
                     0
                -34.84
               -1004.3
 -1.2345678901234e+200
 -1.2345678901234e-200
                     0
                -34.84
               -1004.3
 -1.2345678901234e+200
 -1.2345678901234e-200
T
Thomas G. Lockhart 已提交
157 158
(10 rows)

159
SELECT f1 AS nine FROM FLOAT8_TBL
T
Thomas G. Lockhart 已提交
160 161
UNION
SELECT f1 FROM INT4_TBL;
162 163 164 165 166 167 168 169 170 171 172
         nine          
-----------------------
 -1.2345678901234e+200
           -2147483647
               -123456
               -1004.3
                -34.84
 -1.2345678901234e-200
                     0
                123456
            2147483647
T
Thomas G. Lockhart 已提交
173 174
(9 rows)

175
SELECT f1 AS ten FROM FLOAT8_TBL
T
Thomas G. Lockhart 已提交
176 177
UNION ALL
SELECT f1 FROM INT4_TBL;
178 179 180 181 182 183 184 185 186 187 188 189
          ten          
-----------------------
                     0
                -34.84
               -1004.3
 -1.2345678901234e+200
 -1.2345678901234e-200
                     0
                123456
               -123456
            2147483647
           -2147483647
T
Thomas G. Lockhart 已提交
190 191
(10 rows)

192
SELECT f1 AS five FROM FLOAT8_TBL
T
Thomas G. Lockhart 已提交
193 194 195 196
  WHERE f1 BETWEEN -1e6 AND 1e6
UNION
SELECT f1 FROM INT4_TBL
  WHERE f1 BETWEEN 0 AND 1000000;
197 198 199 200 201 202 203
         five          
-----------------------
               -1004.3
                -34.84
 -1.2345678901234e-200
                     0
                123456
T
Thomas G. Lockhart 已提交
204 205
(5 rows)

206
SELECT f1 AS five FROM VARCHAR_TBL
T
Thomas G. Lockhart 已提交
207 208
UNION
SELECT f1 FROM CHAR_TBL;
209 210 211 212 213 214 215
 five 
------
 a
 a   
 ab
 ab  
 abcd
T
Thomas G. Lockhart 已提交
216 217
(5 rows)

218
SELECT f1 AS three FROM VARCHAR_TBL
T
Thomas G. Lockhart 已提交
219 220
UNION
SELECT TRIM(TRAILING FROM f1) FROM CHAR_TBL;
221 222 223 224 225
 three 
-------
 a
 ab
 abcd
T
Thomas G. Lockhart 已提交
226 227
(3 rows)

228
SELECT f1 AS eight FROM VARCHAR_TBL
T
Thomas G. Lockhart 已提交
229 230
UNION ALL
SELECT f1 FROM CHAR_TBL;
231 232 233 234 235 236 237 238 239 240
 eight 
-------
 a
 ab
 abcd
 abcd
 a   
 ab  
 abcd
 abcd
T
Thomas G. Lockhart 已提交
241 242
(8 rows)

243
SELECT f1 AS five FROM TEXT_TBL
T
Thomas G. Lockhart 已提交
244 245 246 247
UNION
SELECT f1 FROM VARCHAR_TBL
UNION
SELECT TRIM(TRAILING FROM f1) FROM CHAR_TBL;
248 249 250 251 252 253 254
       five        
-------------------
 a
 ab
 abcd
 doh!
 hi de ho neighbor
T
Thomas G. Lockhart 已提交
255 256
(5 rows)

257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296
--
-- INTERSECT and EXCEPT
--
SELECT q2 FROM int8_tbl INTERSECT SELECT q1 FROM int8_tbl;
        q2        
------------------
              123
 4567890123456789
(2 rows)

SELECT q2 FROM int8_tbl INTERSECT ALL SELECT q1 FROM int8_tbl;
        q2        
------------------
              123
 4567890123456789
 4567890123456789
(3 rows)

SELECT q2 FROM int8_tbl EXCEPT SELECT q1 FROM int8_tbl;
        q2         
-------------------
 -4567890123456789
               456
(2 rows)

SELECT q2 FROM int8_tbl EXCEPT ALL SELECT q1 FROM int8_tbl;
        q2         
-------------------
 -4567890123456789
               456
(2 rows)

SELECT q2 FROM int8_tbl EXCEPT ALL SELECT DISTINCT q1 FROM int8_tbl;
        q2         
-------------------
 -4567890123456789
               456
  4567890123456789
(3 rows)

297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316
SELECT q1 FROM int8_tbl EXCEPT SELECT q2 FROM int8_tbl;
 q1 
----
(0 rows)

SELECT q1 FROM int8_tbl EXCEPT ALL SELECT q2 FROM int8_tbl;
        q1        
------------------
              123
 4567890123456789
(2 rows)

SELECT q1 FROM int8_tbl EXCEPT ALL SELECT DISTINCT q2 FROM int8_tbl;
        q1        
------------------
              123
 4567890123456789
 4567890123456789
(3 rows)

317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334
--
-- Mixed types
--
SELECT f1 FROM float8_tbl INTERSECT SELECT f1 FROM int4_tbl;
 f1 
----
  0
(1 row)

SELECT f1 FROM float8_tbl EXCEPT SELECT f1 FROM int4_tbl;
          f1           
-----------------------
 -1.2345678901234e+200
               -1004.3
                -34.84
 -1.2345678901234e-200
(4 rows)

335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408
--
-- Operator precedence and (((((extra))))) parentheses
--
SELECT q1 FROM int8_tbl INTERSECT SELECT q2 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl;
        q1         
-------------------
               123
  4567890123456789
               456
  4567890123456789
               123
  4567890123456789
 -4567890123456789
(7 rows)

SELECT q1 FROM int8_tbl INTERSECT (((SELECT q2 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl)));
        q1        
------------------
              123
 4567890123456789
(2 rows)

(((SELECT q1 FROM int8_tbl INTERSECT SELECT q2 FROM int8_tbl))) UNION ALL SELECT q2 FROM int8_tbl;
        q1         
-------------------
               123
  4567890123456789
               456
  4567890123456789
               123
  4567890123456789
 -4567890123456789
(7 rows)

SELECT q1 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl EXCEPT SELECT q1 FROM int8_tbl;
        q1         
-------------------
 -4567890123456789
               456
(2 rows)

SELECT q1 FROM int8_tbl UNION ALL (((SELECT q2 FROM int8_tbl EXCEPT SELECT q1 FROM int8_tbl)));
        q1         
-------------------
               123
               123
  4567890123456789
  4567890123456789
  4567890123456789
 -4567890123456789
               456
(7 rows)

(((SELECT q1 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl))) EXCEPT SELECT q1 FROM int8_tbl;
        q1         
-------------------
 -4567890123456789
               456
(2 rows)

--
-- Subqueries with ORDER BY & LIMIT clauses
--
-- In this syntax, ORDER BY/LIMIT apply to the result of the EXCEPT
SELECT q1,q2 FROM int8_tbl EXCEPT SELECT q2,q1 FROM int8_tbl
ORDER BY q2,q1;
        q1        |        q2         
------------------+-------------------
 4567890123456789 | -4567890123456789
              123 |               456
(2 rows)

-- This should fail, because q2 isn't a name of an EXCEPT output column
SELECT q1 FROM int8_tbl EXCEPT SELECT q2 FROM int8_tbl ORDER BY q2 LIMIT 1;
409
ERROR:  Attribute "q2" not found
410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430
-- But this should work:
SELECT q1 FROM int8_tbl EXCEPT (((SELECT q2 FROM int8_tbl ORDER BY q2 LIMIT 1)));
        q1        
------------------
              123
 4567890123456789
(2 rows)

--
-- New syntaxes (7.1) permit new tests
--
(((((select * from int8_tbl)))));
        q1        |        q2         
------------------+-------------------
              123 |               456
              123 |  4567890123456789
 4567890123456789 |               123
 4567890123456789 |  4567890123456789
 4567890123456789 | -4567890123456789
(5 rows)