P27 多表查询的分类:非等值连接、自连接、内、外连接

3.多表查询的分类

#7.多表查询的分类
/*
角度1:等值连接 vs 非等值连接

角度2:自连接 vs 非自连接

角度3:内连接 vs 外连接
*/

等值连接 vs 非等值连接

SELECT *
FROM job_grades; #非等值连接,薪资是在一个范围内然后定等级

SELECT last_name,salary,grade_level
FROM employees e,job_grades j
WHERE e.`salary` BETWEEN j.`lowest_sal` AND highest_sal;

非等值连接,薪资是在一个范围内然后定等级

在这里插入图片描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8sjnyElx-1637744565279)(C:\Users\63096\AppData\Roaming\Typora\typora-user-images\image-20211124155527544.png)]

自连接 vs 非自连接

SELECT *FROM employees;
#自连接的例子:都在一张表,自己连接自己
#练习:查询员工id,员工姓名,及其管理者的id和姓名
#查询语句中出现了多个表中都存在的字段,则必须指明此字段所在的表
SELECT emp.employee_id,emp.last_name,mgr.employee_id,mgr.last_name
FROM employees emp, employees mgr
WHERE emp.`manager_id`=mgr.`employee_id`;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RXAvSDxa-1637744565281)(C:\Users\63096\AppData\Roaming\Typora\typora-user-images\image-20211124160351212.png)]

内连接 vs 外连接

内连接
#内连接:合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行
# 通俗来说就是只满足他俩匹配的
SELECT employee_id,department_name
FROM employees e,departments d
WHERE e.`department_id`=d.`department_id`; #有一个人没有部门所以只有106
外连接
#外连接的分类:左外连接、右外连接、满外连接

#左外连接:两个表在连接过程中除了返回满足连接条件的行以外还返回左表中不满足条件的
#          行,这种连接称为左外连接。

#右外连接:两个表在连接过程中除了返回满足连接条件的行以外还返回右表中不满足条件的
#          行,这种连接称为右外连接。
左外连接
#SQL92语法实现外连接:使用+ ---MySQL不支持SQL92语法中外连接的写法
SELECT employee_id,department_name
FROM employees e,departments d #(需要左外连接,因为左边的107,右边106)
WHERE e.`department_id`=d.`department_id`(+);

#SQL99语法中使用JOIN...ON的方式实现多表的查询。这种方式也能解决外连接的问题
#SQL99语法实现外连接:
#练习:查询所有的员工的last_name,department_name信息
#左外连接:(左边多,有人没有部门)
select last_name,department_name
from employees e left outer join departments d
on e.`department_id`=d.`department_id`;
右外连接
#右外连接:(右边多,有些部门没有人)
SELECT last_name,department_name
FROM employees e RIGHT OUTER JOIN departments d
ON e.`department_id`=d.`department_id`;
满外连接
#满外连接:把两边和中间的全加上 1+106+16
#mysql不支持FULL OUTER JOIN
SELECT last_name,department_name
FROM employees e FULL OUTER JOIN departments d
ON e.`department_id`=d.`department_id`;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值