子查询和连接表
程序员文章站
2022-05-07 22:59:04
...
有如下两张表:部门表和教师表
1、查询出招生部门所有男老师姓名(子查询放在where语句中)
select tname, deptno from teacher where gender='男' and
deptno in (select deptno from dept where dname='招生部');
select tname,deptno from teacher t inner join dept p
on p.deptno=t.deptno where gender='男' and dname='招生部'
2、查询出所有老师的姓名和部门(子查询放在列中)
select tname,deptno,(select dname from dept where
dept.deptno=teacher.deptno) dname from teacher;
3、查询出所有在招生部,人力部的老师列表
select tname,deptno from teacher where deptno in
(select deptno from dept where dept.deptno=teacher.deptno
and dname in ('招生部','人力部'));
连接查询:
表连接的执行顺序:先执行where条件,再连接;
内连接,左外连接和右外连接的区别:
内连接:满足on连接条件的数据才显示出来;
左外连接:即使不满足on连接条件,也会把所有左边的数据显示出来;
右外连接同理;
例如:
查询出所有老师的姓名和部门
1、使用内连接
select t.tname,d.dname from teacher t inner join dept d on
t.deptno=d.deptno;
这样查询得到的结果如下
得到71条数据;
2、使用左外连接
select t.tname,d.dname from teacher t left join dept d on
t.deptno=d.deptno;
得到77条数据;
自连接:
示例
查询出所有老师的姓名及其导师
select t1.tname as '老师' ,t2.tname as ‘导师’ from teacher t1
inner join teacher t2 on t1.mgrno=t2.tno;
因为是两张相同表进行连接,所以叫自连接;
三表连接:
示例
查询出所有老师的姓名,部门及其导师
select t1.tname as '老师' ,t2.tname as ‘导师’ dept.dname from
teacher t1 inner join teacher t2 on t1.mgrno=t2.tno
left join dept on t1.deptno=dept.deptno;