第7 讲 SQL 子查询 子查询是嵌套在一个select 语句中的另一个select 语句。当需要从一个表中检索信息,检索条件值又是来自该表本身的内部数据时,子查询非常有用。 子查询可以嵌入以下SQL 子句中:where 子句、having 子句和 from 子句。 例:查询工资比编号为 7566 雇员工资高的雇员姓名。 SQL>select ename from emp where sal> (select sal from emp where empno=7566) order by ename; 说明: (1)子查询要用括号括起来; (2)将子查询放在比较运算符的右边; (3)不要在子查询中使用order by子句,select 语句中只能有一个order by子句,并且它只能是主 select 语句的最后一个子句。 1、单行子查询 内部select 语句只返回一行结果的查询(单列)。主查询的where 子句使用单行子查询返回结果要采用单行比较运算符(=、>、>=、<、<=、<>)。 1.1 Where 子句中使用单行子查询 例:显示和雇员 scott 同部门的雇员姓名、工资和部门编号。 SQL>select ename,sal,deptno from emp where deptno= (select deptno from emp where ename='SCOTT'); ENAME SAL DEPTNO ---------- --------- ------ SMITH 800.00 20 JONES 2975.00 20 SCOTT 3000.00 20 ADAMS 1100.00 20 FORD 3000.00 20 练习:显示和雇员 SCOTT 从事相同工作,并且工资大于 JAMES 的雇员姓名、工作和工资。 SQL>select ename,job,sal from emp where job= (select job from emp where ename='SCOTT') and sal> (select sal from emp where ename='JAMES'); ENAME JOB SAL ---------- --------- --------- SCOTT ANALYST 3000.00 FORD ANALYST 3000.00 1.2 单行子查询中使用组函数 例:显示工资最低的雇员姓名、工作和工资。 SQL> select ename,job,sal from emp where sal=(select min(sal) from emp); ENAME JOB SAL ---------- --------- --------- SMITH CLERK 800.00 练习 1:显示工资最高的雇员姓名、工作和工资。 练习 2:显示工资高于平均工资的雇员姓名、工作、工资和工资等级。 SQL>select e.ename as 姓名, e.job as 工作, e.sal as 工资, s.grade as 工资等级 from emp e,salgrade s where e.sal>(select avg(sal) from emp) and e.sal between s.losal and s.hisal; 姓名 工作 工资...