image.png
--内连接
-- 没有主从表之分,只会将两个表中相等的值列出在结果集中
查询员工编号(empno)为7788的员工姓名(ename)和所在部门的名称(dname)
empno=7788 ename =scott -->emp表
empno=7788 deptno=20 -->emp表 dname=RESEARCH -->dept
select ename,dname from emp inner join dept on emp.deptno=dept.deptno and empno=7788;
--左外连接
-- 主表、从表 left join 前面的是主表,后面的是从表,会遍历主表中的每一个条记录,
查询所有部门的名称(dname)和该部门对应的员工姓名(ename)
select * from dept left join emp on dept.deptno=emp.deptno;
查询所有员工的名称(dname)和员工所所在部门的名称(dname)
select * from emp left join dept on dept.deptno=emp.deptno;
--右外连接
-- 主表、从表 right join 前面的是从表,后面的是主表,会遍历主表中的每一个条记录,
查询所有部门的名称(dname)和该部门对应的员工姓名(ename)
select dname,ename from emp right join dept on dept.deptno=emp.deptno;
自连接
查询所有员工和他上级领导的姓名
select * from emp;
select e.ename 员工,p.ename 上级领导 from emp e left join emp p on e.mgr=p.empno;
-- 子查询
-- 单行子查询
-- 案例:#查询和scott在同一部门的所有员工信息
select * from emp where deptno=(select deptno from emp where ename='SCOTT');
-- 1:scott所在部门编号
select deptno from emp where ename='SCOTT';
-- 2:找到员工和scott部门编号一致的
select * from emp where deptno=(select deptno from emp where ename='SCOTT');
-- 多行子查询
查询薪水和20号部门员工相等的不在20号部门员工的信息
select * from emp where sal in (select sal from emp where deptno=20) and deptno!=20;
-- 1:20号部门每个员工的薪水
select sal from emp where deptno=20;
-- 2:找到薪水一样,但是不在20部门的员工
select * from emp where sal in (select sal from emp where deptno=20) and deptno!=20;











网友评论