MySQL学习笔记Day7(多表查询中的连接查询和联合查询)

昨天博主去vivo日常实习面试了,作为处女面,只能说深刻意识到了自己的不足,接着加油吧!

连接查询

内连接

内连接查询的是两张表中交集的部分,分为隐式内连接和显示内连接。

隐式内连接:

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

这里的条件一般就是去除无效的笛卡尔积。

显示内连接:

select 字段名 from 表1 inner join 表2 on 条件

这里的条件一般也是去除无效的笛卡尔积。

两者的区别主要在于语法上的实现不同,并且显示内连接更符合现在的编写规范。

对比如下:

select emp.name, dept.name from emp, dept where emp.dept_id = dept.id

select emp.name, dept.name from emp inner join dept on emp.dept_id = dept.id

两者实现的功能是一样的。

外连接

分为左外连接和右外连接。如果用集合的方式去演示的话,左外连接是A,右外连接是B,同时可以查询到A∩B。

左外连接与右外连接(上下语句)

select 字段名 from 表1 left outer join 表2 on 条件

select 字段名 from 表1 right outer join 表2 on 条件

这里的outer可以省略。

注意:left就是通过左边查右边的交集,right是通过右边查左边的交集。在工程上一般使用left(左外),因为右外可以转换成左外。只需要把右外的两张表掉个个就行了。

自连接

顾名思义,就是一张表自己连接自己,这种连接可以是内连接外连接,可以是左外、右外。

那么什么情况下要用到自连接呢?

比如一个企业有四个员工ABCD,A是B和C的领导,B是D的领导,但同时ABCD都是一个企业的员工。也就是说在一张表中,ABCD既作为员工存在,又可能作为领导存在,运用单表查询是查不出对应的复杂关系的。

因为自连接可以是内连接可以是外连接,所以要根据不同的情况去选择不同的语法。

比如:

select a.name, b.name from emp a, emp b where a.managerid = b.id

这条语句的意思就是在emp表中查询员工的姓名和对应领导的姓名。

下面做个比较:

select a.name, b.name from emp a left join emp b on a.managerid = b.id

这条语句和上面的语句区别在哪里呢?

不难看出来,一个是内连接,一个是左外连接。但是在具体的情况里好像并没有什么不同呀?

实则不然,内连接是查询两张数据表的交集部分,在这个情况下,只能查询出有领导的员工而不能查询出无领导的员工。而外连接就可以解决这个问题,比如一个公司的老板是没有所属领导的,通过内连接会忽略老板,但是通过外连接就能查询出老板的信息了。

联合查询

很简单的理解一下,就是把查询出来的结果合并到一起。

select 字段名 from 表名 where 条件
union [all]
select 字段名 from 表名 where 条件

all可加可不加,加了的话是不会去重的,意思就是重复查询的数据会直接保留,但是如果不加all,就会自动去重。

对于单张表来说,和单表查询的where条件语句没有太大区别,就是查询的数据顺序不太一样。

注意:如果查询的列数不一致会报错哦!

你可能感兴趣的:(学习,笔记)