1、介绍
多表查询就是同时查询两个或者两个以上的表,因为有的时候,用户在查看数据的时候,需要显示的数据来自多张表,多表查询有以下分类:
(1)交叉连接查询(产生笛卡尔积)
语法:select * from A,B;
(2)内连接查询(使用的关键字是:inner join --inner可以省略)
隐式内连接(SQL92标准):select * from A,B where 条件;
显式内连接(SQL99标准):select * from A inner join B on 条件;
(3)外连接查询(使用的关键字是outer join -- outer可以省略)
左外连接:left outer join
select * from A left outer join B on 条件;
右外连接:right outer join
select * from A right outer join B on 条件;
(4)满外连接:full outer join
select * from A full outer join B on 条件;
(5)子查询
select 的嵌套
(6)表自关联
将一直表当成多张表来用
2、数据准备
(1)创建表并插入数据
创建表:
向表中插入数据:
(2)交叉连接查询
1))交叉连接查询返回被连接的多张表所有数据行的笛卡尔积。
2))笛卡尔积可以理解为一张表的每一行与其他表的任意一行进行匹配。
3))假如A表有m行数据,B表有n行数据。A表与B表进行交叉连接查询时,则返回m*n行数据。
4))笛卡尔积会产生很多冗余的数据,但后期的其他查询可以在该集合的基础上进行条件筛选。
格式:select * from 表1,表2...;
注意:select后面也可以指定列。
实现:
(3)内连接查询(求交集)
格式:
隐式内连接(SQL92标准):select * from A, B where 条件;
注意:select后面也可以跟指定的列。当有多张表时,表名与表名之间用逗号隔开。
显式内连接(SQL99标准):select * from A inner join B on 条件;
注意:select后面也可以跟指定的列。当有多张表时,表名与表名之间用inner join 相隔。
操作:
------查询每个部门的所属员工
-----查询研发部和销售部的所属员工
------查询每个部门的员工数,并升序排序