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

参考: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 by 和 having 子句 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

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

时间: 2024-10-10 21:48:42

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

Oracle数据库锁表查询以及解锁进程

Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?本文我们主要就介绍一下这部分内容. 锁表查询的代码有以下的形式: select count(*) from v$locked_object; select * from v$locked_object; 查看哪个表被锁 1.select b.owner,b.object_name,a.session_id,a.locked_mode 2. from v$locked_object a,dba

Oracle的单表查询语句

使用Oracle 数据库的测试表单: --单表查询数据 语法 select (查询) * 所有 /查询的字段,多个字段 ,隔开 from (来自) 表名称 --查询所有员工的信息 select * from scott.emp; select * from dept; --查询所有员工的编号,姓名和职位 指定字段名查找数据 select empno,ename,job from emp; --查询所有员工的编号,姓名和年薪 select * from emp; select empno,enam

ORACLE EBS常用表查询语句

1. OU.库存组织 SELECT hou.organization_id ou_org_id, --org_id hou.name ou_name, --ou 名称 ood.organization_id org_org_id, -- 库存组织 id ood.organization_code org_org_code, -- 库存组织代码 msi.secondary_inventory_name, -- 子库存名称 msi.description -- 子库存描述 FROM hr_organ

Oracle查询优化-多表查询

--合并结果集 --1.union all SELECT * FROM emp WHERE empno=7369 UNION ALL--单纯合并 SELECT * FROM emp WHERE empno=7369; --2.union SELECT * FROM emp WHERE empno=7369 UNION --将重复结果集合并 SELECT * FROM emp WHERE empno=7369; --------------使用命令窗口执行,查看union与or的执行计划 SQL>

oracle的多表查询与表的连接

一.多表查询 在任何多表查询中一定会产生笛卡尔积的问题,但是,笛卡尔积产生的结果对于用户来说是毫无意义的,是重复的无用数据.因此我们需要消除笛卡尔积,那么在多表查询的时候,就必须要有关联字段. 范例:emp.deptno=dept.deptno;两张表中的关联字段将消除笛卡尔积 SELECT * FROM emp, dept WHERE emp.deptno=dept.deptno; 多表的查询,建议多做些习题增加熟练度. 二.表的连接 内连接:之前利用了WHERE子句消除了笛卡尔积,这个是内连

Oracle数据库锁表查询

--查看数据库最大连接数 select value from v$parameter where name = 'processes'; --更改数据库连接数 alter system set processes = 3000 scope = spfile; --查看被锁的表 select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id

Oracle【多表查询操作(SQL92&amp;SQL99)】

多表联合查询:需要获取的数据分布在多张表中 SQL92: 1 --笛卡尔积:将多个表的数据进行一一对应,所得的结果为多表的笛卡尔积 2 select * from emp; 3 select * from dept; 4 select * from emp,dept;--进行全排列 14*5=70 1 --等值连接:先笛卡尔积,然后筛选,筛选条件为等值筛选 2 --查询员工的姓名,工作,薪资,部门名称 3 --可直接在select子句中使用字段获取数据,但效率低,建议字段前明确表名 4 sele

【Oracle】锁表查询与解锁

在PL/SQL中执行以下内容: 如下语句 查询锁定的表: SELECT l.session_id sid, s.serial#, l.locked_mode,l.oracle_username, l.os_user_name,s.machine, s.terminal, o.object_name, s.logon_time FROM v$locked_object l, all_objects o, v$session s WHERE l.object_id = o.object_id AND

MySQL数据库学习笔记(六)----MySQL多表查询之外键、表连接、子查询、索引

注:本文转自:http://www.cnblogs.com/smyhvae/p/4042303.html 本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的.所以说,如果谈到了外键,一定是至少涉及到两张表.例如下面这两张表: 上面有两