MySQL连接查询

时间:2021-09-24 17:07:35   收藏:0   阅读:34

去除查询结果重复记录[distinct]

注意:原表数据不会被修改,只是查询结果去重
去重需要使用一个关键字:distinct

技术分享图片

#语法错误
#distinct只能出现在所有字段的最前方
select deptno,distinct job from emp;

技术分享图片

技术分享图片

什么是链接查询?

从一张表中单独查询,称为单表查询
emp表和dept表联合起来查询数据,从emp表中取员工名字,从dept表中取部门名字,
这种跨表查询,多张表联合起来查询数据,被称为连接查询

连接查询的分类?

SQL92:1992年的时候出现的语法
SQL99:1999年的时候出现的语法

根据表的连接方式分类:

内连接:

外连接:

技术分享图片

当两张表进行连接查询,没有任何条件限制的时候,最终查询结果条数,是两张表条数的乘积
这种现象被称为:笛卡尔积现象(笛卡尔发现的,这是一个数学现象)

怎么避免笛卡尔积现象
连接时加条件,满足这个条件的记录会被筛选出来
技术分享图片

技术分享图片

最终查询的结果条数是14条,但是匹配的过程中,匹配的次数还是56次,只不过进行了四选一,次数并没有减少

技术分享图片

通过笛卡尔积现象得出,表的连接次数越多效率越低,尽量避免表的连接次数

内连接之等值连接

use cedric;

#案例:查询每个员工所在的部门名称,显示员工名和部门名

select
	d.dname,e.ename
from 
	dept d, emp e
where
	d.DEPTNO = e.DEPTNO;

#sql92缺点:结构不清晰,表的连接条件和后期进一步筛查的条件都放到了where后面

select
	e.ENAME,d.DNAME
from 
	emp e
join 
	dept d
on
	e.DEPTNO = d.DEPTNO;

#sql99优点:表连接的条件是独立的,连接之后如果还需要近一步筛选,再往后继续添加where

/*
SQL99语法:
	select
		...
	from
		a
	join
		b
	on
		a和b的连接条件
	where
		筛选条件
*/

# inner可以省略(带着inner可读性更好,一眼就能看出来是内连接)
select
	e.ENAME,d.DNAME
from
	emp e
inner join
	dept d
on
	e.DEPTNO = d.DEPTNO; #条件是等量关系,所以被称为等值连接

内连接之非等值连接

技术分享图片

内连接之自连接

技术分享图片

外连接

use cedric;

#内连接
select
	e.ename,d.dname
from
	emp e
join
	dept d
on
	e.DEPTNO = d.DEPTNO;
	

#外连接(右外连接)
select
	e.ename,d.dname
from
	emp e
right outer join
	dept d
on
	e.DEPTNO = d.DEPTNO;
	
#right:表示将join关键字右边的这张表看成主表,主要是为了将这张表的数据全部查询出来,捎带着关联查询左边的表  在外连接当中,两张表连接,产生了主次关系

#外连接(左外连接)

# outer是可以省略的,带着可读性强
select
	e.ename,d.dname
from
	dept d 
left outer join 
	emp e
on
	d.DEPTNO = e.DEPTNO;
/*
	带有right的是右外连接,又叫做右连接
	带有left的是左外连接,又叫做左连接
	任何一个右连接都有左连接的写法
	任何一个左连接多有右连接的写法 	
*/

#查询每个员工的上级领导,要求显示所有员工的名字和领导名
select empno,ename,mgr from emp;

select
	a.ename as ‘员工名‘,b.ename as ‘领导名‘
from
	emp a
left join
	emp b
on
	a.mgr = b.empNO;

三张表,四张表怎么连接?

语法:
	select
		...
	from
		a
	join
		b
	on
		a和b的连接条件
	right join
		c
	on
		a和c的连接条件
	left join
		d
	on
		a和d的连接条件

一条SQL中内连接和外连接可以混合,都可以出现

技术分享图片

技术分享图片

原文:https://www.cnblogs.com/cedric1114/p/15310039.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!