多表查询两种方法
时间:2022-01-30 作者:goOJBK
目录
-
一:多表查询的两种方法
- 1.为什么要用多表查询?
- 2.多表查询的两种方法:
-
二:数据准备
- 1.建表
- 2.插入数据
-
三:多表查询方法之连表操作
- 1.笛卡尔积(以下组合方式)
- 2.连表操作
- 域名r join 内连接
- 域名 join 左连接
- 域名t join 右连接
- 域名n 全连接
-
四:多表查询方法之子查询
- 1.子查询
一:多表查询的两种方法
1.为什么要用多表查询?
因为我们在涉及表的时候肯定不止一张表。
2.多表查询的两种方法:
连表操作 : 先将查询涉及到的表拼接成一张大表 之后基于单表查询
子查询 :其实就是分步操作,将一张表的查询结果当做另外一条SQL语句的查询条件
二:数据准备
1.建表
员工部门表
create table dep(
id int primary key auto_increment,
name varchar(20)
);
员工详细信息表
create table emp(
id int primary key auto_increment,
name varchar(20),
sex enum(\'male\',\'female\') not null default \'male\',
age int,
dep_id int
);
2.插入数据
员工部门表
insert into dep values
(200,\'技术\'),
(201,\'人力资源\'),
(202,\'销售\'),
(203,\'运营\'),
(205,\'安保\');
员工详细信息表
insert into emp(name,sex,age,dep_id) values
(\'jason\',\'male\',18,200),
(\'tony\',\'female\',48,201),
(\'kevin\',\'male\',18,201),
(\'nick\',\'male\',28,202),
(\'owen\',\'male\',18,203),
(\'jerry\',\'female\',18,204);
三:多表查询方法之连表操作
连表操作:
先将查询涉及到的表拼接成一张大表 之后基于单表查询
from emp,dep : 后面可以跟多个表名,逗号隔开,使两张表拼接起来
1.笛卡尔积(以下组合方式)
将员工与部门拼接在了一起,但是出现了重复
select * from emp,dep;
筛选两表id对应 错误(需要字段名前面加表名限制)
select * from emp,dep where dep_id=id;
查询两张表拼接 id之间的对应关系(只获得姓名与部门)
select 域名,域名 from emp,dep where 域名id=域名;
- 上述操作并不是合理的连表操作
"""
涉及到多表操作的时候 为了避免表字段重复
需要在字段名的前面加上表名限制
"""
2.连表操作
域名r join 内连接
inner join 内连接:只连接两表中都存在(有对应关系)的数据
select * from emp inner join dep on 域名id = 域名;
域名 join 左连接
left join 左连a接:以左表为基准展示左表所有的数据没有对应则NULL填充
select * from emp left join dep on 域名id = 域名;
域名t join 右连接
right join 右连接:以右表为基准展示右表所有的数据没有对应则NULL填充
select * from emp right join dep on 域名id = 域名;
域名n 全连接
union 全连接:展示左右两表中所有的数据没有对应则NULL填充
select * from emp left join dep on 域名id = 域名
union
select * from emp right join dep on 域名id = 域名;
四:多表查询方法之子查询
子查询:其实就是分步操作
将一张表的查询结果当做另外一条SQL语句的查询条件
1.子查询
1.查询部门是技术或者人力资源的员工信息
1.先查询技术和人力资源的部门编号
select id from dep where name in (\'技术\',\'人力资源\');
2.根据部门编号去员工表中筛选出对应的员工数据
select * from emp where dep_id in (200,201);
3.子查询:将SQL语句括号括起来即可充当查询条件
select * from emp where dep_id in (select id from dep where name in (\'技术\',\'人力资源\'));