SQL查询语句1

复杂查询 = 简单查询 + 限定查询 + 查询排序 + 多表查询 + 分组统计查询 + 子查询。

面对所有的复杂查询,一定要熟悉分析步骤,因为在以后的工作之中,表绝对不可能只是dept或者是emp。

emp表:

SQL查询语句1_第1张图片

dept表:

SQL查询语句1_第2张图片

salgrade表:

SQL查询语句1_第3张图片

1、列出 薪金 高于 在部门30工作的所有员工的薪金 的员工姓名和薪金、部门名称、部门人数。

◆确定要使用的数据表:

●emp表:姓名、薪金。

●dept表:部门名称。

●emp表:统计出部门人数。

◆确定已知的关联字段:

●雇员和部门:emp.deptno = dept.deptno

第一步:找出 在部门30 工作的所有雇员的工资,返回多行单列

SELECT sal FROM emp WHERE deptno=30 ;

SQL查询语句1_第4张图片

第二步:如果说现在返回的是多行单列数据,只能够在WHERE子句里面使用子查询。

但是,此时需要使用判断符号(IN、ANY、ALL),应该使用>ALL,找到员工的姓名、薪金。

SELECT e.ename, e.sal

FROM emp e

WHERE sal>ALL(

SELECT sal FROM emp WHERE deptno=30 ) ;

第三步:此时,只是实现了雇员信息的查询,还需要查找到部门信息,那么,需要在FROM子句之后引入dept表。

SQL查询语句1_第5张图片

但是,一旦引入了新的表(前提:一定存在关联字段或者关联条件),就要在WHERE子句里面增加:消除掉显示的笛卡尔积的条件。

SELECT e.ename, e.sal, d.dname

FROM emp e, dept d

WHERE sal>ALL(

SELECT sal FROM emp WHERE deptno=30 )

AND e.deptno=d.deptno ;

第四步:随后要统计部门人数,但是,对于部门人数,可以先在子查询之中完成统计,例如:先按照deptno字段分组,对emp表进行统计。

SQL查询语句1_第6张图片

SELECT deptno dno, COUNT(empno) count

FROM emp

GROUP BY deptno ;

第五步:以上的查询返回的多行多列的数据,按照使用原则来讲,应该在FROM子句之中,使用它。

SQL查询语句1_第7张图片

SELECT e.ename, e.sal, d.dname, temp.count

FROM emp e, dept d, (

SELECT deptno dno, COUNT(empno) count

FROM emp

GROUP BY deptno ) temp

WHERE sal>ALL(

SELECT sal FROM emp WHERE deptno=30 )

AND e.deptno=d.deptno

AND temp.dno=d.deptno ;

SQL查询语句1_第8张图片

你可能感兴趣的:(SQL查询语句1)