02-005 MySQL_基础_连接查询

连接查询

又叫多表查询,查询的字段来自多个表
笛卡尔乘积现象:表一m行,表二n行,结果m*n行。
出现原因:没有有效的连接条件。

分类

1.按年份分类:sql92(仅支持内连接),sql99(推荐,支持内连接、外连接【左右】、交叉连接)
2.按功能分类:

内连接:
	等值连接;
	非等值连接;
	自连接;
外连接:
	左外连接;
	右外连接;
	全外连接;
交叉连接:

sql92标准

1.等值连接

select last_name,department_name ,d.department_id
from employees e,departments d
where e.department_id = d.department_id

两表有相同字段查询时加个表限定,不然有歧义;
可以给表起别名,起别名则字段不能用原来的表名限定;
两表顺序可以调换;
可以加筛选条件,AND;
可以加分组;
可以加排序;
可以三表连接;

特点:
①多表等值连接的结果是交集部分;
②n表连接至少n-1个连接条件;
③多表顺序无影响;
④给表起别名;
⑤之前的子句都可以使用。

2.非等值连接
不是等于的,例如

#查询员工工资和对应级别
select salary , grade_level
from employees e,job_grades j
where e.salary between j.min and j.max;

3.自连接
把一张表当做两张或者多张表来查询,例如

select e.employee_id,e.last_name , m.employee_id,m.last_name
from employees e,employees m
where e.manager_id = m.employee_id;

sql99标准

语法:
select 【查询列表】
from 表1 别名【连接类型】
join 表2
on 【连接条件】
where 【筛选条件】
group by 【分组条件】
having 【筛选条件】
order by 【排序列表】
inner left right full cross

1.等值连接
select last_name,department_name,job_name
from employees e
inner join departments d on e.department_id = d.department_id
inner join jobs j on e.job_id = j.job_id
order by department_name
注意多表的连接条件
inner可以省略
和sql92都是多表交集
2.非等值连接
select count() , grade_level
from employees e
join job_grades j
on e.salary between j.min and j.max
group by count(**)>2
order by grade_level desc
3.自连接
select e.employee_id,e.last_name , m.employee_id,m.last_name
from employees e
join employees m
on e.manager_id = m.employee_id;
4.外连接
特点
用于查询一个表中有数据,一个表中没有
①外连接查询的结果为主表中的全部数据,
如果从表中有匹配的值,则显示匹配的值,
如果从表中没有匹配的值,则显示null,
外连接查询结果 = 内连接查询结果+主表中有的值而从表中没有的
②主表判断:left join 左侧的表,right join 右侧的表
③左外右外交换两表可以实现同样的效果
④全外连接 = 内连接结果+表一中有而表二中没有+表二中有而表一中没有(MySQL不支持)
⑤交叉连接 A cross join B 产生笛卡尔乘积。
举例:
左外连接:
select b.name ,bo.

from boys bo
left outer join beauty b
on b.boyfriend_id = bo.id
where b.id is null;
右外连接:
select b.name ,bo.*
from beauty b
right outer join boys bo
on b.boyfriend_id = bo.id
where b.id is null;

上面两条语句实现同样的查询效果。

学习整理于MySQL 基础+高级篇.

扫描二维码关注公众号,回复: 8736147 查看本文章
发布了53 篇原创文章 · 获赞 0 · 访问量 402

猜你喜欢

转载自blog.csdn.net/weixin_40778497/article/details/103540871