MySQL系列(六)之多表查询

表数据准备

#建表
create table dep(
	id int,
	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
);

#插入数据
insert into dep values
	(200,'技术'),
	(201,'人力资源'),
	(202,'销售'),
	(203,'运营');

insert into emp(name,sex,age,dep_id) values
	('steven','male',18,200),
	('sammi','female',48,201),
	('kevin','male',18,201),
	('nick','male',28,202),
	('owen','male',18,203),
	('jerry','female',18,204);

表查询

# inner join  内连接
# 只拼接两张表中公有的数据部分
select * from emp inner join dep on emp.dep_id = dep.id;
# where 写法默写是内联接(等同于inner join)
select * from emp,dep where emp.dep_id = dep.id;

# left join   左连接
# 左表所有的数据都展示出来 没有对应的项就用NULL
select * from emp left join dep on emp.dep_id = dep.id;

# right join  右连接
# 右表所有的数据都展示出来 没有对应的项就用NULL
select * from emp right join dep on emp.dep_id = dep.id;

# union		全连接  左右两表所有的数据都展示出来
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;

子查询

将一个查询语句的结果当做另外一个查询语句的条件去用

# 查询部门是技术或者人力资源的员工信息
1 先获取部门的id号
select id from dep where name='技术' or name = '人力资源';
2 再去员工表里面筛选出对应的员工
select name from emp where dep_id in (200,201);
3 最终结果
select * from emp where dep_id in (select id from dep where name='技术' or name = '人力资源');

版权声明:本文为weixin_51730169原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。