多表查询

  • 一、内连接
  • 1、隐式内连接
  • 2、显示内连接
  • 二、外连接
  • 1、左外连接
  • 2、右外连接
  • 三、自连接
  • 四、联合查询
  • 五、子连接
  • 1、概念
  • 2、分类
  • (1)标量子查询
  • (2)列子查询
  • (3)行子查询
  • (4)表子查询
  • 六、多表关系


一、内连接

1、隐式内连接

select 字段列表 from 表1,表2 where 条件…

2、显示内连接

select 字段列表 from 表1 [inner] join 表2 on 连接条件;

内连接查询的是两张表交集的部分

二、外连接

1、左外连接

select 字段列表 from 表1 left [outer] join 表2 on 连接条件;

左外连接查询的是表1所有数据包含两表交集部分的数据

2、右外连接

select 字段列表 from 表1 right [outer] join 表2 on 连接条件;

右外连接查询的是表2所有数据包含两表交集部分的数据

三、自连接

select 字段列表 from 表a 别名a join 表a 别名b on 条件…

自连接查询可以是内连接查询也可以是外连接查询

四、联合查询

select 字段列表 from 表1…
union [all]
select 字段列表 from 表2…;

1、对于联合查询的多张表的列数必须保持一致字段类型也必须保持一致
2、union all将全部数据直接合并在一起,union 合并后去重

五、子连接

1、概念

SQL语句中嵌套select语句,称为嵌套查询 ,又称子查询
select * from t1 where column1=(select column1 from t2);

子查询外部可以是insert/update/delete/select的任何一个

2、分类

(1)标量子查询

  • 子查询结果为单个值
  • 常用操作符:= <> > >= < <=

例:查询“销售部”所有员工信息
select * from emp where dept_id=(select id from dept where name=“销售部”);

(2)列子查询

  • 子查询结果为一列(可以为多行)
  • 常用操作符:in、not in、any、some 、all

例:查询“销售部”和“市场部”的所有员工信息
select * from emp where dept_id in(select id from dept where name=“销售部” or name=“市场部”);

(3)行子查询

  • 子查询结果为一行(可以为多列)
  • 常用操作符:=、<>、in、not in

例:查询“张无忌”的薪资及直属领导相同的员工信息
select * from emp where (salary,managerid)=(select salary,managerid from emp where name=“张无忌”);

(4)表子查询

  • 子查询结果为多行多列
  • 常用操作符:in

例:查询与“张三”,“李四”的职位和薪资相同的员工信息
select * from emp where (job,salary)in(select job,salary from emp where name=“张三” or name=“李四”);

六、多表关系

1、一对多:多的一方建立外键,指向一的一方的主键
2、多对多:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
3、一对一:在任意一方加入外键,关联另一方的主键,并设置外键为唯一的(unique)