首页 > 数据库技术 > 详细

MySQL的多表查询学习笔记

时间:2019-08-27 09:47:52      阅读:87      评论:0      收藏:0      [点我收藏+]

 

一、案例准备  

技术分享图片
create table dept(
id int primary key auto_increment,
name varchar(20)
);
View Code
技术分享图片
insert into dept values(null, 财务部);
insert into dept values(null, 人事部);
insert into dept values(null, 科技部);
insert into dept values(null, 销售部);
View Code
技术分享图片
create table emp(
id int primary key auto_increment,
name varchar(20),
dept_id int
);
View Code
技术分享图片
insert into emp values(null, 张三, 1);
insert into emp values(null, 李四, 2);
insert into emp values(null, 老王, 3);
insert into emp values(null, 刘能, 5);
View Code

需求:查询出部门信息和部门所对应的员工信息

二、笛卡尔积查询、内连接查询、左右外连接查询及全外连接查询

①笛卡尔积查询

两张表相乘得出来的结果:select * from dept, emp;

如果左边表有m条记录,右边有n条记录,则查询出来的结果就是m*n条。这些查询结果中包含大量错误的结果,通常不会使用这种查询。

技术分享图片

②内连接查询

左边表有且右边表也有的记录

SQL:select * from dept d inner join emp e on e.dept_id=d.id;

技术分享图片

③左外连接查询:在内连接查询的基础上,加上左边表有而右边表没有的记录

查询出部门所对应的员工信息, 同时列出那些没有员工的部门

SQL:select * from dept d left join emp e on e.dept_id=d.id;

技术分享图片

④右外连接查询:在内连接查询的基础上,加上右边表有而左边表没有的记录

查询出部门所对应的员工信息, 同时列出那些没有部门的员工

SQL:select * from dept d right join emp e on e.dept_id=d.id;

技术分享图片

⑤全外连接查询:在内连接查询的基础上,加上左边表有而右边表没有的记录 和 右边表有而左边表没有的记录。

  查询出部门所对应的员工信息,同时列出那些没有员工的部门及些没有部门的员工

SQL:select * from dept d full join emp e on e.dept_id=d.id;(错误:mysql不支持全外连接查询

技术分享图片

  通过union关键字来模拟全外连接查询

SQL

select * from dept left join emp on emp.dept_id = dept.id
union
select * from dept right join emp on emp.dept_id = dept.id;

技术分享图片

 

MySQL的多表查询学习笔记

原文:https://www.cnblogs.com/rmxd/p/11416328.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!