MySQL 关联查询(内连接、外连接)

关联查询:查询的目标是两张表或两张表以上。

MySQL 中文文档 | MySQL 中文网 (mysqlzh.com)

SQL92语法

SQL语言在1992年推出的一套标准语法(关联查询中没有新的关键字)

SQL99语法

SQL语言在1999年推出的一套新的标准语法(最新的sql语言版本,关联查询中添加了一系列新的关键字:inner join;on;)

Sql92 语法和 Sql99 语法的区别:99 语法可以做到表的连接和查询条件分离,特别是多个表进行连接的时候,会比 sql92更清晰。

内连接

相当于查询A表、B表交集部分数据

  • 隐式内连接:
SELECT 字段列表 FROM 表1,表2 WHERE 条件...;
  • 显式内连接:
SELECT 字段列表 FROM 表1 [INNER] JION 表2 ON 连接条件...;
案例
-- 内连接演示
-- 1.查询每一个员工的姓名,及关联的部门的名称(隐式内连接实现)
-- 表结构:emp,dept
-- 连接条件:emp.dept_id = dept.id
select emp.name, dept.name from emp,dept where emp.dept_id = dept.id;
select e.name, d.name from emp e,dept d where e.dept_id = d.id; #给表起别名

-- 2.查询每一个员工的姓名,及关联的部门的名称(显式内连接实现)
select emp.name, dept.name from emp inner join dept on emp.dept_id = dept.id;
select e.name, d.name from emp e inner join dept d on e.dept_id = d.id;
select e.name, d.name from emp e join dept d on e.dept_id = d.id;

外连接

  • 左外连接:查询左表所有数据,以及两张表交集部分数据
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件...;
  • 右外连接:查询右表所有数据,以及两张表交集部分数据
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件...;

左连接以左面的表为准和右边的表比较,和左表相等的不相等都会显示出来,右表符合条件的显示,不符合条件的不显示。右连接恰恰相反。

案例
-- 外连接演示
-- 1.查询emp表的所有数据,和对应的部门信息(左外连接)
-- 表结构:emp,dept
-- 连接条件:emp.dept_id = dept.id
select e.*, d.name from emp e left outer join dept d on e.dept_id = d.id;
select e.*, d.name from emp e left join dept d on e.dept_id = d.id;

-- 2.查询dept表的所有数据,和对应的员工信息(右外连接)
select d.*,e.* from emp e right join dept d on d.id = e.dept_id;
select d.*,e.* from dept d left join emp e on d.id = e.dept_id;

自连接

SELECT 字段列表 FROM 表A 别名A1 JOIN 表A 别名A2 ON 条件...;

案例

-- 自连接查询
-- 1.查询员工及其所属领导的名字
select e1.name, e2.name from emp e1 , emp e2 where e1.managerid = e2.id;

-- 2.查询所有员工 emp 及其领导的名字 emp,如果员工没有领导,也需要查询出来
select e1.name, e2.name from emp e1 left join emp e2 on e1.managerid = e2.id;

 

posted @ 2022-07-26 17:49  鹿先森JIAN  阅读(651)  评论(0编辑  收藏  举报