MySQL学习笔记6:多表查询的分类(尚硅谷)

本文详细介绍了SQL中的多表查询,包括等值连接和非等值连接的实例,如员工与部门的等值连接查询,以及员工薪水评级的非等值连接查询。同时,阐述了自连接和非自连接的概念,并通过例子展示了自连接查询,如查询员工与其上司信息。最后,讨论了内连接、左外连接、右外连接和满外连接的定义及应用,举例说明如何查询员工与部门信息,以及获取所有员工和部门的完整数据。
摘要由CSDN通过智能技术生成


多表查询可分为3个角度

角度一:等值连接 & 非等值连接

1、等值连接

需求:查询员工号,员工姓名,部门名。

SELECT emp.employeeId,emp.employeeName,dept.departmentName
FROM employees emp,departments dept
WHERE emp.departmentId = dept.departmentId

2、非等值连接

需求:查询员工号,员工姓名,员工薪水,员工薪水的评级。

SELECT emp.employeeId,emp.employeeName,emp.salary,job.grade_level
FROM employees emp,job_grades job
WHERE emp.salary BETWEEN job.lowest_sal AND job.highest_sal

注意:规定在 job_grades 表中,1000元到2000元为C档工资,2000元到5000元为B档工资,5000元到10000元为A档工资。

角度二:自连接 & 非自连接

(一张表自己跟自己所连接为自连接,如果跨表连接为非自连接)

1、自连接

需求:查询员工编号、员工姓名、员工上司编号、员工上司的姓名。
(这几个字段都在同一张表中)

SELECT emp.employeeId,emp.employeeName,mgr.employeeId,mgr.employeeName
FROM employees emp,employees mgr
WHERE emp.managerId = mgr.employeeId

2、非自连接

同上述等值连接例子

角度三:内连接 & 外连接

1、内连接

定义:合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行(交集)

需求:查询员工编号、部门名称。

SELECT emp.employeeId,dept.departmentName
FROM employees emp,departments dept
WHERE emp.departmentId = dept.departmentId

2、外连接

定义:合并具有同一列的两个以上的表的行,结果集中除了包含一个表与另一个表匹酊的行之外,还查询到了左表或右表中不匹配的行。(并集)
根据定义可知:外连接还可分为 左外连接右外连接满外连接

左外连接:

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

需求:查询所有员工的姓名、部门名称。(左外连接)

SELECT emp.employeeId,dept.departmentName
FROM employees emp LEFT JOIN departments dept
ON emp.departmentId = dept.departmentId

右外连接

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

需求:查询员工的姓名、所有部门名称。(左外连接)

SELECT emp.employeeId,dept.departmentName
FROM employees emp RIGHT JOIN departments dept
ON emp.departmentId = dept.departmentId

满外连接

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

需求:查询所有员工的姓名、所有部门名称。(左外连接)

SELECT emp.employeeId,dept.departmentName
FROM employees emp FULL JOIN departments dept
ON emp.departmentId = dept.departmentId

注:mysql不支持 FULL JOIN 这种写法。

7种SQL JOIN 的实现

alt

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值