集合查询
子查询
单行子查询
select * from EMP WHERE deptno = (select deptno from EMP where ename='smith');
多行子查询
in:查询和10号部门的工作相同的雇员的名字,岗位,工资,部门号,但是不包含10自己的
select ename,job,sal,empno from emp where job in
(select distinct job from emp where deptno=10) and deptno<>10;
all:显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号
select ename, sal, deptno from EMP where sal > all
(select sal from EMP where deptno=30);
any:显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号
select ename, sal, deptno from EMP where sal > any
(select sal from EMP where deptno=30);
合并查询
union:该操作符用于取得两个结果集的并集,当使用该操作符时,会自动去掉结果集中的重复行
union all:该操作符用于取得两个结果集的并集,当使用该操作符时,不会去掉结果集中的重复行
表的内连和外连
多表查询必须进行连接才能进行查询,不能直接使用where进行查询
内连接
select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件
前面学习的都是内连接
外连接
左外连接:如果联合查询,左侧的表完全显示我们就说是左外连接
select 字段名 from 表名1 left join 表名2 on 连接条件
右外连接:如果联合查询,右侧的表完全显示我们就说是右外连接
select 字段名 from 表名1 right join 表名2 on 连接条件
连接可以嵌套
eg:
select e.last_name, e.first_name, dm.dept_name
from (employees e left join dept_emp de on e.emp_no = de.emp_no)
left join departments dm on de.dept_no = dm.dept_no;