什么是多表关联查询,有几种多表关联的查询方式,分别是什么?
对多张具有一定关系的表中的数据进行查询。
直接查询
SELECT * FROM emp, dept;
关联查询 查询多张表中都有的数据
SELECT * FROM emp, dept WHERE emp.dept_id = dept.id;
子查询
子查询通俗来讲,就是查询中有查询。
1)单行子查询 查询结果为单个
SELECT * FROM emp
WHERE dept_id = (SELECT id FROM dept WHERE dname = '常委');
2)多行子查询 查询结果为多个
SELECT * FROM emp
WHERE dept_id IN
(SELECT id FROM dept WHERE dname IN ("班委","常委");
连接查询
1)内连接查询[扩展]
INNER JOIN与一般的连表查询一致,即使用逗号隔开的查询方式。
Inner join(相等联接或内联接)
sql语句如下:
SELECT * FROM a INNER JOIN b ON a.aID =b.bID
等同于以下SQL句:
SELECT * FROM a,b WHERE a.aID = b.bID
2)外连接查询
特点:外连接有一主一次。
外联接可以是左向外联接、右向外联接或完整外部联接。
a) 左外连接查询(LEFT OUTER JOIN -> LEFT JOIN)
左外连接左表为主,那么左表中所有的记录无论满足不满足条件,都打印出来。不满足条件的值用null填补。
SELECT * FROM dept d LEFT JOIN emp e ON d.id = e.dept_id;
b) 右外连接查询(RIGHT OUTER JOIN -> RIGHT JOIN)
右外连接右表为主,那么右表中所有的记录无论满足不满足条件,都打印出来。不满足条件的值用null填补。
SELECT * FROM dept d RIGHT JOIN emp e ON d.id = e.dept_id;
3)全连接查询[扩展]
所谓全连接其实就是左右连接的并集,即内连接的结果,加上左表和右表中不满足条件的所有行。其实mysql并不认识全连接语法。此概念在其他数据库中有的存在。
from 表1 full [outer] join 表2 on 连接条件;
4)扩展:hash查询