MySQL的DQL语言:6、连接查询

本文深入探讨了MySQL中的连接查询,包括SQL92标准的等值连接、非等值连接和自连接,以及SQL99标准的内连接、外连接和交叉连接。通过多个实例,详细解释了各种连接查询的使用,如筛选、分组、排序和三表连接等操作,旨在帮助读者理解并掌握不同类型的SQL连接查询。
摘要由CSDN通过智能技术生成

连接查询

含义:又称多表查询,当查询的字段来自多个表时,就会用到连接查询

笛卡尔乘积现象:表1有m行,表2有n行,结果=m*n行
发生原因:没有有效的连接条件
如何避免:添加有效的连接条件
如下:
#未加条件时
select name,boyName from boys,beauty; # 此时出现的表有m*n行,用boys表中的数据去挨个匹配beauty表中的数据
#添加条件后
select name,boyName from boys,beauty where beauty.boyfriend_id = boys.id;

连接查询的分类:
	按年代分类:
		sql92标准:仅仅支持内连接
		sql99标准【推荐】:支持内连接 + 外连接(左外和右外) + 交叉连接
	按功能分类:
		内连接
			等值连接
			非等值连接
			自连接
		外连接
			左外连接
			右外连接
			全外连接
		交叉连接

一、sql 92 标准

1、多表等值连接的结果为多表的交集部分
2、n表连接至少需要n-1个条件
3、多表连接的顺序没有要求
4、一般需要为表起别名
5、可以搭配前面介绍的所有子句,如排序、筛选、分组等

1、等值连接

案例1:查询女生名和男生名对应的男生名
select 
	name,boyName 
from 
	boys,beauty 
where 
	beauty.boyfriend_id = boys.id;
案例2:查询员工名和对应的部门名
select
	last_name,department_name
from
	employees,departments
where
	employees.department_id = departments.department_id;
为表起别名
作用:
	1、提高语句的简洁度
	2、区分有歧义的字段

起别名是在from后,表名后添加,as 别名 (as可以省略)
【注】如果为表起了别名,则查询的字段就不能使用原先的表名去限定(生成虚拟视图)
查询员工名、工种号、工种名
select 
	e.last_name,e.job_id,j.job_title
from
	employees e,jobs j
where
	e.job_id = j.job_id;
添加筛选条件
案例1:查询有奖金的员工名和部门名
select
	e.last_name,d.department_name,commission_pct
from
	employees e,departments d
where
	e.department_id = d.department_id and
	commission_pct is not null;
# 条件之间使用and连接
案例2:查询城市名中第二个字符为o的部门名和城市名
select
	d.department_name,l.city
from
	departments d,locations l
where
	d.location_id = l.location_id and
	city like '_o%';
添加分组
案例1:查询每个城市的部门个数
select 
	count(*) 个数,city
from
	departments d,locations l
where
	d.location_id = l.location_id
group by
	city;
案例2:查询有奖金的每个部门的部门名和部门的领导编号和该部门的最低工资
select 
	d.department_name,d.manager_id,min(salary)
from
	departments d,employees e
where
	d.department_id = e.department_id and
	commission_pct is not null;
group by
	department_name,d.manager_id;
添加排序
查询每个工种的工种名和员工的个数,按员工个数降序
select 
	job_title,count(*)
from
	jobs j,employees e
where
	e.job_id = j
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值