| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| # Prepare testing relations |
| CREATE TABLE a(w INT, x LONG, y DOUBLE, z VARCHAR(16)); |
| CREATE TABLE b(w INT, x LONG); |
| CREATE TABLE c(x LONG, y DOUBLE); |
| CREATE TABLE d(y DOUBLE, z VARCHAR(16)); |
| |
| INSERT INTO a VALUES(0, 0, 0, 'C0'); |
| INSERT INTO a VALUES(1, 10, 100, 'C1'); |
| INSERT INTO a VALUES(2, 20, 200, 'C2'); |
| INSERT INTO a VALUES(3, 30, 300, 'C3'); |
| INSERT INTO a VALUES(4, 40, 400, 'C4'); |
| INSERT INTO a VALUES(5, 50, 500, 'C5'); |
| INSERT INTO a VALUES(6, 60, 600, 'C6'); |
| INSERT INTO a VALUES(7, 70, 700, 'C7'); |
| INSERT INTO a VALUES(8, 80, 800, 'C8'); |
| INSERT INTO a VALUES(9, 90, 900, 'C9'); |
| INSERT INTO a VALUES(10, 100, 1000, 'C10'); |
| INSERT INTO a VALUES(11, 110, 1100, 'C11'); |
| INSERT INTO a VALUES(12, 120, 1200, 'C12'); |
| INSERT INTO a VALUES(13, 130, 1300, 'C13'); |
| INSERT INTO a VALUES(14, 140, 1400, 'C14'); |
| INSERT INTO a VALUES(15, 150, 1500, 'C15'); |
| INSERT INTO a VALUES(16, 160, 1600, 'C16'); |
| INSERT INTO a VALUES(17, 170, 1700, 'C17'); |
| INSERT INTO a VALUES(18, 180, 1800, 'C18'); |
| INSERT INTO a VALUES(19, 190, 1900, 'C19'); |
| |
| INSERT INTO b |
| SELECT w, x + (w/2)%2 |
| FROM a |
| WHERE w % 2 = 0; |
| |
| INSERT INTO c |
| SELECT x, y + (x/3)%3-1 |
| FROM a |
| WHERE x % 3 = 0; |
| |
| INSERT INTO d |
| SELECT y, z |
| FROM a; |
| -- |
| == |
| |
| |
| # Join queries |
| SELECT a.w, b.x, c.y, d.z |
| FROM a JOIN b ON a.w = b.w |
| JOIN c ON a.x = c.x |
| JOIN d ON a.y = d.y; |
| -- |
| +-----------+--------------------+------------------------+----------------+ |
| |w |x |y |z | |
| +-----------+--------------------+------------------------+----------------+ |
| | 0| 0| -1| C0| |
| | 6| 61| 601| C6| |
| | 12| 120| 1200| C12| |
| | 18| 181| 1799| C18| |
| +-----------+--------------------+------------------------+----------------+ |
| == |
| |
| SELECT a.w, b.x, c.y |
| FROM a JOIN b ON (a.w = b.w OR a.x > b.x) |
| JOIN c ON (a.x = c.x AND a.y > c.y) |
| JOIN d ON (a.y = d.y OR a.z > d.z) |
| GROUP BY a.w, b.x, c.y |
| ORDER BY a.w, b.x, c.y; |
| -- |
| +-----------+--------------------+------------------------+ |
| |w |x |y | |
| +-----------+--------------------+------------------------+ |
| | 0| 0| -1| |
| | 9| 0| 899| |
| | 9| 21| 899| |
| | 9| 40| 899| |
| | 9| 61| 899| |
| | 9| 80| 899| |
| | 18| 0| 1799| |
| | 18| 21| 1799| |
| | 18| 40| 1799| |
| | 18| 61| 1799| |
| | 18| 80| 1799| |
| | 18| 101| 1799| |
| | 18| 120| 1799| |
| | 18| 141| 1799| |
| | 18| 160| 1799| |
| | 18| 181| 1799| |
| +-----------+--------------------+------------------------+ |
| == |
| |
| SELECT a1.w, b1.x, c1.y, d1.z |
| FROM a AS a1 JOIN b AS b1 ON a1.w = b1.w |
| JOIN c AS c1 ON a1.x = c1.x |
| JOIN d AS d1 ON a1.y = d1.y |
| WHERE a1.x = b1.x |
| AND a1.y = c1.y |
| AND a1.z = d1.z; |
| -- |
| +-----------+--------------------+------------------------+----------------+ |
| |w |x |y |z | |
| +-----------+--------------------+------------------------+----------------+ |
| | 12| 120| 1200| C12| |
| +-----------+--------------------+------------------------+----------------+ |
| == |
| |
| SELECT a1.w, b1.x, c1.y, d1.z |
| FROM a AS a1 JOIN b AS b1 ON a1.x <> b1.x |
| JOIN c AS c1 ON a1.y <> c1.y |
| JOIN d AS d1 ON a1.z = d1.z |
| WHERE a1.w = b1.w |
| AND a1.x = c1.x; |
| -- |
| +-----------+--------------------+------------------------+----------------+ |
| |w |x |y |z | |
| +-----------+--------------------+------------------------+----------------+ |
| | 6| 61| 601| C6| |
| | 18| 181| 1799| C18| |
| +-----------+--------------------+------------------------+----------------+ |
| == |
| |
| SELECT a.w AS "a.w", b.x AS "b.x", c.y AS "c.y", d.z AS "d.z" |
| FROM a LEFT JOIN b ON a.w = b.w |
| LEFT JOIN c ON a.x = c.x |
| LEFT JOIN d ON a.y = d.y |
| ORDER BY a.w; |
| -- |
| +-----------+--------------------+------------------------+----------------+ |
| |a.w |b.x |c.y |d.z | |
| +-----------+--------------------+------------------------+----------------+ |
| | 0| 0| -1| C0| |
| | 1| NULL| NULL| C1| |
| | 2| 21| NULL| C2| |
| | 3| NULL| 300| C3| |
| | 4| 40| NULL| C4| |
| | 5| NULL| NULL| C5| |
| | 6| 61| 601| C6| |
| | 7| NULL| NULL| C7| |
| | 8| 80| NULL| C8| |
| | 9| NULL| 899| C9| |
| | 10| 101| NULL| C10| |
| | 11| NULL| NULL| C11| |
| | 12| 120| 1200| C12| |
| | 13| NULL| NULL| C13| |
| | 14| 141| NULL| C14| |
| | 15| NULL| 1501| C15| |
| | 16| 160| NULL| C16| |
| | 17| NULL| NULL| C17| |
| | 18| 181| 1799| C18| |
| | 19| NULL| NULL| C19| |
| +-----------+--------------------+------------------------+----------------+ |
| == |
| |
| SELECT a.w AS "a.w", b.x AS "b.x", c.y AS "c.y", d.z AS "d.z" |
| FROM a LEFT JOIN b ON a.w = b.w |
| LEFT JOIN c ON b.x = c.x |
| LEFT JOIN d ON c.y = d.y |
| ORDER BY a.w; |
| -- |
| +-----------+--------------------+------------------------+----------------+ |
| |a.w |b.x |c.y |d.z | |
| +-----------+--------------------+------------------------+----------------+ |
| | 0| 0| -1| NULL| |
| | 1| NULL| NULL| NULL| |
| | 2| 21| NULL| NULL| |
| | 3| NULL| NULL| NULL| |
| | 4| 40| NULL| NULL| |
| | 5| NULL| NULL| NULL| |
| | 6| 61| NULL| NULL| |
| | 7| NULL| NULL| NULL| |
| | 8| 80| NULL| NULL| |
| | 9| NULL| NULL| NULL| |
| | 10| 101| NULL| NULL| |
| | 11| NULL| NULL| NULL| |
| | 12| 120| 1200| C12| |
| | 13| NULL| NULL| NULL| |
| | 14| 141| NULL| NULL| |
| | 15| NULL| NULL| NULL| |
| | 16| 160| NULL| NULL| |
| | 17| NULL| NULL| NULL| |
| | 18| 181| NULL| NULL| |
| | 19| NULL| NULL| NULL| |
| +-----------+--------------------+------------------------+----------------+ |
| == |
| |
| SELECT b.x AS "b.x", c1.x AS "c1.x", c2.x AS "c2.x" |
| FROM b LEFT JOIN c c1 ON (b.x = c1.x) |
| LEFT JOIN c c2 ON (b.x = c2.x AND c2.x > 10) |
| ORDER BY b.x; |
| -- |
| +--------------------+--------------------+--------------------+ |
| |b.x |c1.x |c2.x | |
| +--------------------+--------------------+--------------------+ |
| | 0| 0| NULL| |
| | 21| NULL| NULL| |
| | 40| NULL| NULL| |
| | 61| NULL| NULL| |
| | 80| NULL| NULL| |
| | 101| NULL| NULL| |
| | 120| 120| 120| |
| | 141| NULL| NULL| |
| | 160| NULL| NULL| |
| | 181| NULL| NULL| |
| +--------------------+--------------------+--------------------+ |
| == |
| |
| SELECT a.w AS "a.w", b.x AS "b.x", c.y AS "c.y", d.z AS "d.z" |
| FROM a RIGHT JOIN b ON a.w = b.w |
| JOIN c ON a.x = c.x |
| LEFT JOIN d ON a.y = d.y |
| WHERE b.x > 10 |
| AND c.y < 1000; |
| -- |
| +-----------+--------------------+------------------------+----------------+ |
| |a.w |b.x |c.y |d.z | |
| +-----------+--------------------+------------------------+----------------+ |
| | 6| 61| 601| C6| |
| +-----------+--------------------+------------------------+----------------+ |
| == |
| |
| # Semi-join w/o residual predicates |
| SELECT SUM(x) |
| FROM a |
| WHERE w IN (SELECT w FROM b); |
| -- |
| +--------------------+ |
| |SUM(x) | |
| +--------------------+ |
| | 900| |
| +--------------------+ |
| == |
| |
| # Semi-join w/ residual predicates |
| SELECT SUM(x) |
| FROM a |
| WHERE EXISTS ( |
| SELECT * |
| FROM b |
| WHERE a.w = b.w |
| AND a.x < b.x |
| ); |
| -- |
| +--------------------+ |
| |SUM(x) | |
| +--------------------+ |
| | 500| |
| +--------------------+ |
| == |
| |
| # Anti-join w/o residual predicates |
| SELECT SUM(x) |
| FROM a |
| WHERE w NOT IN (SELECT w FROM b); |
| -- |
| +--------------------+ |
| |SUM(x) | |
| +--------------------+ |
| | 1000| |
| +--------------------+ |
| == |
| |
| # Anti-join w residual predicates |
| SELECT SUM(x) |
| FROM a |
| WHERE NOT EXISTS ( |
| SELECT * |
| FROM b |
| WHERE a.w = b.w |
| AND a.x < b.x |
| ); |
| -- |
| +--------------------+ |
| |SUM(x) | |
| +--------------------+ |
| | 1400| |
| +--------------------+ |
| == |