SQL查询语句1

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

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

emp表:

dept表:

salgrade表:

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

◆确定要使用的数据表:

●emp表:姓名、薪金。

●dept表:部门名称。

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

◆确定已知的关联字段:

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

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

SELECT sal FROM emp WHERE deptno=30 ;

第二步:如果说现在返回的是多行单列数据,只能够在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表。

但是,一旦引入了新的表(前提:一定存在关联字段或者关联条件),就要在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表进行统计。

SELECT deptno dno, COUNT(empno) count

FROM emp

GROUP BY deptno ;

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

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 ;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. select * from emp; 2. select empno, ename, job from em...
    海纳百川_4d26阅读 1,942评论 0 4
  • 查询是数据的一个重要操作。用户发送查询请求,经编译软件变异成二进制文件供服务器查询,后返回查询结果集给用户,查询会...
    产品小正阅读 1,442评论 0 2
  • 幕课oracle学习笔记 --!!!scott用户 --一.分组查询 --1.常用的分组函数:AVG(平均数),S...
    xiaoxiao苏阅读 1,295评论 0 5
  • 5.多表查询 多表查询 目的:从多张表获取数据 前提:进行连接的多张表中有共同的列 等连接 通过两个表具有相同意义...
    乔震阅读 1,314评论 0 0
  • 宝宝11个月,正好到了学走路还没走稳,吃辅食还未能同大人饮食相同,自己有点自我意识但还未完全有自我意识的时候,...
    Mr_小五先生阅读 390评论 1 1