多表联查
多表联查可以使用三种方式进行查询,分别是笛卡尔积、连接查询、子查询;其中连接查询分为内连接、左外连接、右外连接。
笛卡尔积
语法格式:
SELECT * FROM dept,emp WHERE 两张表的关联关系
示例代码:
SELECT * FROM dept,emp WHERE dept.deptno = emp.deptno AND dept.dname = 'research
连接查询
连接查询可分为内连接、左外连接、右外连接。
工作中常用的是 小表 LEFT JOIN 大表 用小表驱动大表
左边写小表右边写大表
内连接 INNER JOIN
内连接会取两个表的交集
语法为:
SELECT * FROM emp e INNER JOIN dept dON 两张表的连接条件 WHERE 筛选条件
示例代码:
-- 查询在部门research工作的员工信息SELECT * FROM emp e INNER JOIN dept dON e.deptno = d.deptnoSELECT * FROM emp e INNER JOIN dept dON e.deptno = d.deptno WHERE d.dname = 'research'
左(外)连接 LEFT JOIN
左外连接查询将会查询左表所有数据和右边满足条件的数据
语法为:
SELECT * FROM emp e LEFT JOIN dept dON 两张表的连接条件 WHERE 筛选条件
示例代码:
-- 查询在部门research工作的员工信息SELECT * FROM emp e LEFT JOIN dept dON e.deptno = d.deptnoSELECT * FROM emp e LEFT JOIN dept dON e.deptno = d.deptno WHERE d.dname = 'research'
右(外)连接 RIGHT JOIN
右外连接查询将会查询右表所有数据和左边满足条件的数据
语法为:
SELECT * FROM emp e RIGHT JOIN dept dON 两张表的连接条件 WHERE 筛选条件
示例代码:
-- 查询在部门research工作的员工信息SELECT * FROM emp e RIGHT JOIN dept dON e.deptno = d.deptnoSELECT * FROM emp e RIGHT JOIN dept dON e.deptno = d.deptno WHERE d.dname = 'research'
子查询(嵌套查询)
子查询将会把两个查询语句进行嵌套,在外面的查询语句为父查询或外层查询,在里面的查询语句为子查询或内层查询,将子查询的查询结果作为条件进行再次查询即父查询。
语法格式:
SELECT 需要查询的记录 FROM 表名WHERE 字段名 = (SELECT 字段名 FROM 表名WHERE 筛选条件)
示例代码:
-- 查询部门名称为accounting的所有信息-- 1.根据部门名称查询部门编号SELECT deptno FROM WHERE dname = 'accounting'-- 2.根据查询到的编号进行员工信息查询SELECT * FROM emp WHERE depton = 1SELECT * FROM empWHERE deptno = (SELECT deptno FROM deptWHERE dname = 'accounting')
SQL语句执行顺序
(1) FROM [left_table] 选择表(2) ON <join_condition> 链接条件(3) <join_type> JOIN <right_table> 链接(4) WHERE <where_condition> 条件过滤(5) GROUP BY <group_by_list> 分组(6) AGG_FUNC(column or expression),... 聚合(7) HAVING <having_condition> 分组过滤(8) SELECT (9) DISTINCT column,... 选择字段、去重(9) ORDER BY <order_by_list> 排序(10) LIMIT count OFFSET count; 分页
select 字段名 from 表名 left join 表名 on 连接条件 orderby 字段名 desc(降序) asc(升序)
