码迷,mamicode.com
首页 > 数据库 > 详细

(六)Oracle 的 oracle表查询关键字

时间:2019-04-12 19:18:21      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:12月   操作   需要   href   它的   http   style   错误   法规   

参考:http://www.hechaku.com/Oracle/oracle_tables2.html

1、使用逻辑操作符号
问题:查询工资高于500或者是岗位为manager的雇员,同时还要满足他们的姓名首字母为大写的J?

SQL> select * from emp where (sal>500 or job=manager) and ename like J%;

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
      7566 JONES      MANAGER         7839 02-4月 -81           2975                    20
      7900 JAMES      CLERK           7698 03-12月-81            950                    30

已用时间:  00: 00: 00.02
SQL>

2、使用order by字句 默认asc 问题:如何按照工资从低到高的顺序显示雇员的信息?

SQL> select * from emp order by sal;

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-12月-80            800                    20
      7900 JAMES      CLERK           7698 03-12月-81            950                    30
      7876 ADAMS      CLERK           7788 23-5月 -87           1100                    20
      7521 WARD       SALESMAN        7698 22-2月 -81           1250        500         30
      7654 MARTIN     SALESMAN        7698 28-9月 -81           1250       1400         30
      7934 MILLER     CLERK           7782 23-1月 -82           1300                    10
      7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0         30
      7499 ALLEN      SALESMAN        7698 20-2月 -81           1600        300         30
      7782 CLARK      MANAGER         7839 09-6月 -81           2450                    10
      7698 BLAKE      MANAGER         7839 01-5月 -81           2850                    30
      7566 JONES      MANAGER         7839 02-4月 -81           2975                    20
      7788 SCOTT      ANALYST         7566 19-4月 -87           3000                    20
      7902 FORD       ANALYST         7566 03-12月-81           3000                    20
      7839 KING       PRESIDENT            17-11月-81           5000                    10

已选择14行。

已用时间:  00: 00: 00.07
SQL>
问题:按照部门号升序而雇员的工资降序排列
SQL> select * from emp order by deptno,sal desc;

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
      7839 KING       PRESIDENT            17-11月-81           5000                    10
      7782 CLARK      MANAGER         7839 09-6月 -81           2450                    10
      7934 MILLER     CLERK           7782 23-1月 -82           1300                    10
      7788 SCOTT      ANALYST         7566 19-4月 -87           3000                    20
      7902 FORD       ANALYST         7566 03-12月-81           3000                    20
      7566 JONES      MANAGER         7839 02-4月 -81           2975                    20
      7876 ADAMS      CLERK           7788 23-5月 -87           1100                    20
      7369 SMITH      CLERK           7902 17-12月-80            800                    20
      7698 BLAKE      MANAGER         7839 01-5月 -81           2850                    30
      7499 ALLEN      SALESMAN        7698 20-2月 -81           1600        300         30
      7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0         30
      7654 MARTIN     SALESMAN        7698 28-9月 -81           1250       1400         30
      7521 WARD       SALESMAN        7698 22-2月 -81           1250        500         30
      7900 JAMES      CLERK           7698 03-12月-81            950                    30

已选择14行。

已用时间:  00: 00: 00.10
SQL> select * from emp order by sal,deptno desc;

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-12月-80            800                    20
      7900 JAMES      CLERK           7698 03-12月-81            950                    30
      7876 ADAMS      CLERK           7788 23-5月 -87           1100                    20
      7521 WARD       SALESMAN        7698 22-2月 -81           1250        500         30
      7654 MARTIN     SALESMAN        7698 28-9月 -81           1250       1400         30
      7934 MILLER     CLERK           7782 23-1月 -82           1300                    10
      7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0         30
      7499 ALLEN      SALESMAN        7698 20-2月 -81           1600        300         30
      7782 CLARK      MANAGER         7839 09-6月 -81           2450                    10
      7698 BLAKE      MANAGER         7839 01-5月 -81           2850                    30
      7566 JONES      MANAGER         7839 02-4月 -81           2975                    20
      7788 SCOTT      ANALYST         7566 19-4月 -87           3000                    20
      7902 FORD       ANALYST         7566 03-12月-81           3000                    20
      7839 KING       PRESIDENT            17-11月-81           5000                    10

已选择14行。

已用时间:  00: 00: 00.08
SQL>

3、使用列的别名排序 问题:按年薪排序 select ename, (sal+nvl(comm,0))*12 "年薪" from emp order by "年薪" asc; 备注:别名需要使用“”号圈中,英文不需要“”号

SQL> select ename,(sal+nvl(comm,0))*12 "年薪" from emp order by "年薪" asc;

ENAME            年薪
---------- ----------
SMITH            9600
JAMES           11400
ADAMS           13200
MILLER          15600
TURNER          18000
WARD            21000
ALLEN           22800
CLARK           29400
MARTIN          31800
BLAKE           34200
JONES           35700
FORD            36000
SCOTT           36000
KING            60000

已选择14行。

已用时间:  00: 00: 00.06

SQL> select ename as "姓名",(sal+nvl(comm,0))*12 "年薪" from emp order by "年薪" desc;

姓名             年薪
---------- ----------
KING            60000
FORD            36000
SCOTT           36000
JONES           35700
BLAKE           34200
MARTIN          31800
CLARK           29400
ALLEN           22800
WARD            21000
TURNER          18000
MILLER          15600
ADAMS           13200
JAMES           11400
SMITH            9600

已选择14行。

已用时间:  00: 00: 00.06
SQL>

4、聚合函数用法:max,min,avg,sum,count 问题:如何显示所有员工中最高工资和最低工资?

select max(sal),min(sal) from emp e;
最高工资那个人是谁?

    错误写法:select ename, sal from emp where sal=max(sal);

    正确写法:select ename, sal from emp where sal=(select max(sal) from emp);

    注意:select ename, max(sal) from emp;这语句执行的时候会报错,说ora-00937:非单组分组函数。因为max是分组函数,而ename不是分组函数.......

    但是select min(sal), max(sal) from emp;这句是可以执行的。因为min和max都是分组函数,就是说:如果列里面有一个分组函数,其它的都必须是分组函数,否则就出错。这是语法规定的
SQL> select max(sal),min(sal) from emp;

  MAX(SAL)   MIN(SAL)
---------- ----------
      5000        800

已用时间:  00: 00: 00.01
SQL> select ename,sal from emp where sal=(select max(sal) from emp);

ENAME             SAL
---------- ----------
KING             5000

已用时间:  00: 00: 00.04

5、问题:如何显示所有员工的平均工资和工资总和?

select sum(e.sal), avg(e.sal)  from emp e;
    查询最高工资员工的名字,工作岗位

    select ename, job, sal from emp e where sal = (select max(sal) from emp);

    显示工资高于平均工资的员工信息

    select * from emp e where sal > (select avg(sal) from emp);
SQL> select sum(sal), avg(sal) from emp;

  SUM(SAL)   AVG(SAL)
---------- ----------
     29025 2073.21429

已用时间:  00: 00: 00.02


SQL> select ename,job from emp where sal=(select max(sal) from emp);

ENAME      JOB
---------- ---------
KING       PRESIDENT

已用时间:  00: 00: 00.01
SQL> select * from emp where sal>avg(sal);
select * from emp where sal>avg(sal)
                            *1 行出现错误:
ORA-00934: 此处不允许使用分组函数


已用时间:  00: 00: 00.01
SQL> select * from emp where sal>(select avg(sal) from emp);

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
      7566 JONES      MANAGER         7839 02-4月 -81           2975                    20
      7698 BLAKE      MANAGER         7839 01-5月 -81           2850                    30
      7782 CLARK      MANAGER         7839 09-6月 -81           2450                    10
      7788 SCOTT      ANALYST         7566 19-4月 -87           3000                    20
      7839 KING       PRESIDENT            17-11月-81           5000                    10
      7902 FORD       ANALYST         7566 03-12月-81           3000                    20

已选择6行。

已用时间:  00: 00: 00.03

6、group byhaving 子句 group by 用于对查询的结果分组统计, having 子句用于限制分组显示结果。 问题:如何显示每个部门的平均工资和最高工资?

select avg(sal), max(sal), deptno from emp group by deptno;

    (注意:这里暗藏了一点,如果你要分组查询的话,分组的字段deptno一定要出现在查询的列表里面,否则会报错。因为分组的字段都不出现的话,就没办法分组了)

    问题:显示每个部门的每种岗位的平均工资和最低工资?

    select min(sal), avg(sal), deptno, job from emp group by deptno, job;

    问题:显示平均工资低于2000的部门号和它的平均工资?

    select avg(sal), max(sal), deptno from emp group by deptno having avg(sal)< 2000;
SQL> select avg(sal),deptno from emp group by deptno;

  AVG(SAL)     DEPTNO
---------- ----------
1566.66667         30
      2175         20
2916.66667         10

已用时间:  00: 00: 00.02

SQL> select min(sal),avg(sal), deptno from emp group by deptno,job;

  MIN(SAL)   AVG(SAL)     DEPTNO
---------- ---------- ----------
       800        950         20
      1250       1400         30
      2975       2975         20
       950        950         30
      5000       5000         10
      2850       2850         30
      1300       1300         10
      2450       2450         10
      3000       3000         20

已选择9行。

已用时间:  00: 00: 00.04
SQL> select deptno,avg(sal) from emp group by deptno having avg(sal) < 2000;

    DEPTNO   AVG(SAL)
---------- ----------
        30 1566.66667

已用时间:  00: 00: 00.01

 

(六)Oracle 的 oracle表查询关键字

标签:12月   操作   需要   href   它的   http   style   错误   法规   

原文地址:https://www.cnblogs.com/xiangtingshen/p/10697721.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!