Note_Tech

All technological notes.


Project maintained by simonangel-fong Hosted on GitHub Pages — Theme by mattgraham

SQL - JOIN

Back


JOIN Statement

sql-join


CROSS JOIN:Cartesian Join 笛卡尔连接


-- Traditional Method
SELECT table1.column1 , table1.column2, table2.column1...
FROM table1, table2;


-- Cross Join
SELECT table1.column1 , table1.column2, table2.column1...
FROM table1
CROSS JOIN table2;


INNER JOIN

inner_join


Equality Join

-- Equality Join
-- Traditional Method
SELECT table1.column1, table2.column2, ...
FROM table1, table2
WHERE table1.common_col = table2.common_col;

-- JOIN ON
SELECT *
FROM tb_1
INNER JOIN tb_2
ON tb_1.col_match = tb_2.col_match;


Non-Equality Joins

-- Non-Equality Joins
-- Traditional Method
SELECT A.column1, B.column2, ...
FROM table1 A, table2 B
WHERE A.common_col BETWEEN B.max_col AND B.min_col;

-- JOIN ON
SELECT A.column1, B.column2, ...
FROM table1 A INNER JOIN table2 B
ON A.common_col BETWEEN B.max_col AND B.min_col;


OUTER JOIN


FULL OUTER JOIN

full_join

-- return any data in both table, non-matched data filled by null
SELECT tb_1.col, tb_2.col
FROM tb_1
FULL OUTER JOIN tb_2
ON tb_1.col_match = tb_2.col_match


-- return unique data in both table, except intersection
-- 即排除重合的集合, 是inner join的逆命题
SELECT *
FROM tb_1
FULL OUTER JOIN tb_2
ON tb_1.col_match = tb_2.col_match
WHERE tb_1.id IS null
OR tb_2.id IS null;



LEFT OUTER JOIN

left_join

-- present all data in the left table
-- present match data in the right table
SELECT *
FROM tb_1       -- tb_1 is the left table
LEFT OUTER JOIN tb_2
ON tb_1.col_match = tb_2.col_match;

SELECT *
FROM tb_1
LEFT JOIN tb_2      -- LEFT JOIN = LEFT OUTER JOIN
ON tb_1.col_match = tb_2.col_match;

-- return unique data in the left table
SELECT *
FROM tb_1
LEFT OUTER JOIN tb_2
ON tb_1.col_match = tb_2.col_match
WHERE tb_2.id IS null;


RIGHT OUTER JOIN

right_join


SELECT A.column, B.column...
FROM table1 A Right OUTER JOIN table2 B
ON A.common_col = B.common_col;


Self-Joins

-- Self-Join
-- Traditional Method
SELECT A.column1, A.column2, ...
FROM table1 A, table1 B --自联结, 两个表名相同
WHERE A.common_ref = B.common_id;

-- JOIN ON
SELECT A.column1, B.column2, ...
FROM table1 A
INNER JOIN table1 B
ON A.common_ref = B.common_id
AND A.id !=B.id;


Join Three or More Tables

-- Traditional Method
SELECT A.column, B.column, C.column, ...
FROM table1 A, table2 B, table3 C
WHERE A.common_col1 = B.common_col1 -- 联结表A和表B
AND B.common_col2 = C.common_col2; -- 联结表A和表B

-- JOIN Method
SELECT A.column, B.column, C.column
FROM table1 A JOIN table2 B
ON A.common_col1 = B.common_col1 --联结不同表
JOIN talbe3 C
ON B.common_col2 = C.common_col2 --联结不同表
WHERE condition; --筛选条件


TOP