Mysql多表查询
多表查询
先创建两个表
create table dep(
id int primary key auto_increment,
name varchar(20)
)auto_increment=200;
create table emp1(
id int primary key auto_increment,
name varchar(20),
sex enum('male','female') not null default 'male',
age int,
dep_id int);
插入数据
insert into dep(name) values
('技术'),
('人力资源'),
('销售'),
('运营');
insert into emp1(name,sex,age,dep_id)values
('大海','male',18,200),
('夏洛','male',48,201),
('西施','female',38,201),
('顾安','male',28,202),
('周瑜','male',18,200),
('诸葛','male',18,204)
;
普通查询:
select * from emp1,dep where emp1.dep_id=dep.id;
查看技术部门的人员:
select * from emp1,dep where emp1.dep_id=dep.id and dep.name='技术';
1.表链接
多表连表最好不要用 where 过滤
1.1内连接:只取两张表有对应关系的内容的记录
语法:
select * from 表名 inner join 表名 on 条件
实例:
select *from emp1 inner join dep on emp1.dep_id = dep.id;
select *from emp1 inner join dep on emp1.dep_id = dep.id where dep.name='技术’;
1.2左连接:在内连接的基础上保留左边没有对应关系的记录
语法:
select * from 表名 left 表名 on 条件;
实例:
select * from emp1 left join dep on emp1.dep_id=dep.id;
2.2右链接:在内连接的基础上保留右边没有对应关系的记录
语法:
select * from 表名 right 表名 on 条件;
实例:
select * from emp1 right join dep on emp1.dep_id=dep.id;
1.3全链接union
实例:
select * from emp1 left join dep on emp1.dep_id=dep.id
union
select * from emp1 right join dep on emp1.dep_id = dep.id;
2.子查询:
多表查询的思路就是把表连起来查询
子查询:就是将一个查询语句的结果用括号括起来当做另一个查询的条件去用
先搞定一张表,再用这张表的条件去查询别的表
多表查询
2.1.直接把表连接起来
select * from emp1 join dep on emp1.dep_id = dep.id;
2.2.然后在加上dep.name = '技术'
select * from emp1 join dep on emp1.dep_id = dep.id where dep.name = '技术';
3.子查询
1.先找到技术在的部门id
select id from dep where name = '技术';
2.通过找到的部门id去找员工表
select * from emp1 where dep_id = 200;
select * from emp1 where dep_id = (select id from dep where name = '技术');
3.技术部门和人力资源都有那些员工
select id from dep where name = '技术' or name = '人力资源';
select * from emp1 where dep_id in (200,201);
select * from emp1 where dep_id in (select id from dep where name = '技术' or name = '人力资源');
浙公网安备 33010602011771号