目錄
一:多表查詢的兩種方法
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 emp.name,dep.name from emp,dep where emp.dep_id=dep.id;
- 上述操作並不是合理的連表操作
"""
涉及到多表操作的時候 為了避免表字段重復
需要在字段名的前面加上表名限制
"""
2.連表操作
3.inner join 內連接
inner join 內連接:只連接兩表中都存在(有對應關系)的數據
select * from emp inner join dep on emp.dep_id = dep.id;
4.left join 左連接
left join 左連a接:以左表為基准展示左表所有的數據沒有對應則NULL填充
select * from emp left join dep on emp.dep_id = dep.id;
5.right join 右連接
right join 右連接:以右表為基准展示右表所有的數據沒有對應則NULL填充
select * from emp right join dep on emp.dep_id = dep.id;
6.union 全連接
union 全連接:展示左右兩表中所有的數據沒有對應則NULL填充
select * from emp left join dep on emp.dep_id = dep.id
union
select * from emp right join dep on emp.dep_id = dep.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 ('技術','人力資源'));