1.多表查询
多表查询:基于两个或两个以上表或视图进行的查询。在实际开发中,单表查询不可能满足所有的业务需求,这时就需要进行多表查询。
-- 查询员工姓名、工资及其所在部门的名称
select e.ename, e.sal, d.dname from emp e, dept d where e.deptno = d.deptno;
-- 查询员工名称、工资及其所在部门的名称,并按部门名称排序。
select e.ename, e.sal, d.dname from emp e, dept d where e.deptno = d.deptno order by d.dname;
-- 查询部门编号为10的员工姓名、工资及其部门名称
select e.ename, e.sal, d.dname from emp e, dept d where e.deptno=d.deptno and d.deptno='10';
-- 查询员工姓名、工资及其工资级别
select e.ename, e.sal, s.grade from emp e, salgrade s where e.sal between s.losal and s.hisal;
注意:
(1)在进行多表查询的时候,如果不带任何查询条件,查询结果会出现【笛卡尔集】,如果想要避免出现【笛卡尔集】,多表查询的条件不能小于(表的个数-1)。
(2)在进行多表查询的时候,如果不同的表中列名相同,要加上表名作为前缀进行区分,列名不同时可以不加。但是为了增强可读性,建议都加上表名或别名。
2.子查询
子查询:是指嵌入在其它 sql语句中的 select 语句,也叫做嵌套查询;分为单行子查询、多行子查询、多列子查询。
2.1 单行子查询
单行子查询:只返回一行数据的子查询,查询结果是单行单列。
-- 查询与SMITH同一部门的所有员工信息
select * from emp where deptno = (select deptno from emp where ename = 'SMITH');
-- 查询与SMITH同一部门的所有员工信息,将SMITH排除在外
select * from emp where deptno = (select deptno from emp where ename = 'SMITH') and ename <> 'SMITH';
select * from emp where deptno = (select deptno from emp where ename = 'SMITH') and ename != 'SMITH';
说明:Oracle数据库中不等号的标准格式为<>
2.2 多行子查询
多行子查询:返回多行数据的子查询,查询结果是多行单列。
(1)多行子查询中使用in操作符
-- 查