准备:

#建表
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
('jason','male',18,200),
('egon','female',48,201),
('kevin','male',18,201),
('nick','male',28,202),
('owen','male',18,203),
('jerry','female',18,204);

一、拼表

  1、inner join:内连接,select * from emp inner join dep on emp.dep_id = dep.id---将表emp与表dep合并, 保留表emp的dep_id等于表dep的id的合体记录,查询保留下来的记录的所有字段。

  2、left join:左连接,select * from emp letf join dep on emp.dep_id = dep.id---将表emp与表dep合并,保留表emp的所有记录,其中没有与表dep的id对应的记录,相应的dep的所有字段就填上null,查询保留下来的记录的所有字段。

  3、right join:右连接,select * from emp right join dep on emp.dep_id = dep.id---将表emp与表dep合并,保留表dep的所有记录,其中没有与表emp的dep_id对应的记录,相应的emp的所有字段就填上null,查询保留下来的记录的所有字段。

  4、union:全连接,select * from emp letf join dep on emp.dep_id union select * from emp right join dep on emp.dep_id = dep.id---将表emp与表dep合并,保留所有记录,没有对应上的都填上null,查询保留下来的记录的所有字段。

二、子查询

  1、思路:把一个查询语句的结果(虚拟表)当做另一个查询语句的筛选条件的组成部分来使用。

  2、应用实例:select * from emp where dep_id in (select id from dep where name = '技术‘’)---查询表emp中dep_id对应的表dep中name为‘技术’的记录的所有字段,翻译为通俗的语言就是---查询技术部门员工的所有信息。

 

posted on 2020-05-02 05:01  焚音留香  阅读(128)  评论(0编辑  收藏  举报