MySQL学习-多表查询(三)

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第15天,点击查看活动详情

前言

上篇我们学习了一部分多表查询。有兴趣的小伙伴可以阅读(# MySQL学习-多表查询(二))。
下面继续学习MySQL中的多表查询。

多表查询分类

  • 等值连接 VS 非等值连接
  • 自连接 VS 非自连接
  • 内连接 VS 外连接

等值连接

查询两张表时使用等号连接的是等值连接,上一篇中我们查询的示例都是等值连接。这里不多说了。

非等值连接

查询两张表时使用非等号连接的是非等值连接,下面看两个示例。

示例一

查看薪水等级。

SELECT *
FROM job_grades
复制代码
grade_level lowest_sal highest_sal
A 1000 2999
B 3000 5999
C 6000 9999

可以看到薪资里面的ABC三个等级。

示例二

查询员工的姓名,薪资以及对应的薪资等级。

SELECT e.name, e.salary, j.grade_level
FROM employees e, job_grades j
WHERE e.'salary' BETWEEN j.'lowest_sal' AND j.'highest_sal'
复制代码
name salary grade_level
bing 2000 A
dun 8000 C
dong 5600 B

可以使用BETWEEN AND查出员工的薪资等级。

也可以使用以下写法:

SELECT e.name, e.salary, j.grade_level
FROM employees e, job_grades j
WHERE e.'salary' >= j.'lowest_sal' AND e.'salary' <= j.'highest_sal'
复制代码

也可以查出相同的结果。

非自连接

上面示例中不同表的连接都是非自连接。

自连接

自己和自己的连接称为自连接。

示例三

查询员工id和姓名及其管理者的id和姓名。

SELECT emp.employee_id, emp.name, mgr.employee_id, mgr.name
FROM employees emp, employees mgr
WHERE emp.'manager_id' mgr.'employee_id'
复制代码

这样就可以查出结果,这种方式就叫自连接。

内连接

合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行。只包含匹配的行。

外连接

合并具有同一列的两个以上的表的行,结果集中除了包含一个表与另一个表匹配的行外。还包含到了左表或右表中不匹配的行。

外连接的分类

  • 左外连接
  • 右外连接
  • 满外连接

左外连接

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

右外连接

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

今天先学习到这里,明天继续。

猜你喜欢

转载自juejin.im/post/7086816850352275492