SQL中的表联查 7种JOIN连接

tb_dept表:
SQL中的表联查 7种JOIN连接
tb_emp表:
SQL中的表联查 7种JOIN连接

一、内链接:取tb_emp表和tb_dept表的共有部分

SQL中的表联查 7种JOIN连接
sql语句:

SELECT a.,b. FROM tb_emp a INNER JOIN tb_dept b ON a.dept_id = b.id;

执行结果:
SQL中的表联查 7种JOIN连接

二、左链接:取tb_emp表和tb_dept表的共有部分和tb_emp表的独有部分

SQL中的表联查 7种JOIN连接
sql语句:

SELECT a.,b. FROM tb_emp a LEFT JOIN tb_dept b ON a.dept_id = b.id;

执行结果:
SQL中的表联查 7种JOIN连接

三、右链接:取tb_emp表和tb_dept表的共有部分和tb_dept表的独有部分

SQL中的表联查 7种JOIN连接
sql语句:

SELECT a.,b. FROM tb_emp a RIGHT JOIN tb_dept b ON a.dept_id = b.id;

执行结果:
SQL中的表联查 7种JOIN连接

四、左链接:取tb_emp表独有部分

SQL中的表联查 7种JOIN连接sql语句:

SELECT a.,b. FROM tb_emp a LEFT JOIN tb_dept b ON a.dept_id = b.id WHERE b.id IS NULL;

执行结果:
SQL中的表联查 7种JOIN连接

五、左链接:取tb_dept表独有部分

SQL中的表联查 7种JOIN连接
sql语句:

SELECT a.,b. FROM tb_emp a RIGHT JOIN tb_dept b ON a.dept_id = b.id WHERE a.dept_id IS NULL;

执行结果:
SQL中的表联查 7种JOIN连接

六、全链接:取tb_emp表和tb_dept表全部元素,且去除重复

SQL中的表联查 7种JOIN连接
sql语句:

SELECT a.,b. FROM tb_emp a LEFT JOIN tb_dept b ON a.dept_id = b.id
UNION
SELECT a.,b. FROM tb_emp a RIGHT JOIN tb_dept b ON a.dept_id = b.id;

执行结果:
SQL中的表联查 7种JOIN连接

如果用 UNION ALL,则会不去重,将2张表合并

sql语句:

SELECT a.,b. FROM tb_emp a LEFT JOIN tb_dept b ON a.dept_id = b.id
UNION ALL
SELECT a.,b. FROM tb_emp a RIGHT JOIN tb_dept b ON a.dept_id = b.id;

执行结果:
SQL中的表联查 7种JOIN连接

七、全链接:取tb_emp表独有部分和tb_dept表独有部分的并集

SQL中的表联查 7种JOIN连接
sql语句:

SELECT a.,b. FROM tb_emp a LEFT JOIN tb_dept b ON a.dept_id = b.id WHERE b.id IS NULL
UNION
SELECT a.,b. FROM tb_emp a RIGHT JOIN tb_dept b ON a.dept_id = b.id WHERE a.dept_id IS NULL;

执行结果:
SQL中的表联查 7种JOIN连接