外连接
左外连接的会将左表的信息进行全部展示,同理右外连接会将右表的信息进行全部展示
#查询1:查询员工表所有员工的姓名,对应的部门名称(左连接) select tb_emp.name, tb_dept.name from tb_emp LEFT OUTER JOIN tb_dept ON tb_emp.dept_id = tb_dept.id; #查询2=查询3 #查询2:查询员工表所有员工的姓名,对应的部门名称(右连接) select tb_emp.name, tb_dept.name from tb_dept LEFT OUTER JOIN tb_emp ON tb_emp.dept_id = tb_dept.id; #查询3:部门表,所有部门的名称,和对应的员工名称(右连接) SELECT tb_dept.NAME,tb_emp.NAME FROM tb_emp RIGHT OUTER JOIN tb_dept ON tb_emp.dept_id = tb_dept.id; #查询3=查询4 #查询4:部门表,所有部门的名称,和对应的员工名称(左连接) SELECT tb_dept.NAME,tb_emp.NAME FROM tb_dept left OUTER JOIN tb_emp ON tb_emp.dept_id = tb_dept.id;
嵌套查询
标量子查询
#查询1:查询教研部的所有员工信息
#1.查询dept_id = 2 的员工信息
select *
from tb_emp
where dept_id = 2;
#2.查询教研部的id
select id
from tb_dept
where name = '教研部';
#得到完整式子
select *
from tb_emp
where tb_emp.dept_id = (select id from tb_dept where name = '教研部');
#查询2:查询在半无忌入职时间2000-01-02之后的员工信息
#1 查询在2000-01-02时间之后入职的员工
select *
from tb_emp
where entrydate > 2000 - 01 - 02;
#2 查询半无忌的入职时间
select entrydate
from tb_emp
where name = '半无忌';
#3 合并
select *
from tb_emp
where entrydate > (select entrydate from tb_emp where name = '半无忌');
列子查询
#查询1:查询教研部和咨询部的所有员工信息
select *
from tb_emp
where dept_id = (select tb_dept.id from tb_dept where name = '咨询部')
OR dept_id = (select tb_dept.id from tb_dept where name = '教研部');
行子查询
#查询1:查询与“鹤驰客”入职日期、职位都相同的员工信息
select *
from tb_emp
where entrydate = (select entrydate from tb_emp where name = '鹤驰客')
AND job = (select job from tb_emp where name = '鹤驰客')
AND name != '鹤驰客';
#优化后版本
select *
from tb_emp
where (entrydate, job) = (select entrydate, job from tb_emp where name = '鹤驰客')
AND name != '鹤驰客';
表子查询
#查询1:查询入职日期是“2013-09-05”之后的员工信息,及其部门名称
#步骤1:查询入职日期是“2013-09-05”之后的员工信息
select *
from tb_emp
where entrydate >= '2013-09-05';
#步骤2:查询员工对应的部门名称
select tb_dept.name
from tb_dept,
tb_emp
where tb_dept.id = tb_emp.dept_id;
#组合方式1:未使用嵌套
select tb_emp.*, tb_dept.name
from tb_dept,
tb_emp
where entrydate >= '2013-09-05'
AND tb_dept.id = tb_emp.dept_id;
#组合方式2:使用嵌套
select e.*, tb_dept.name
from (select *
from tb_emp
where entrydate >= '2013-09-05') as e,
tb_dept
where tb_dept.id = e.dept_id;