准备:
#建表 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为‘技术’的记录的所有字段,翻译为通俗的语言就是---查询技术部门员工的所有信息。