查询排序(2)

Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645

1.选择部门 30 中的所有员工

SQL> select *
  2  from emp
  3  where deptno = 30;

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300         30
      7521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500         30
      7654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400         30
      7698 BLAKE                MANAGER                  7839 01-5月 -81           2850                    30
      7844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0         30
      7900 JAMES                CLERK                    7698 03-12月-81            950                    30

已选择 6 行。

2.列出所有办事员(CLERK)的姓名、编号和部门编号

查询排序(2)_第1张图片

3.找出佣金高于薪金的 60% 的员工

因为佣金使用的是 com 字段,而薪金是 sal,应当使用基本的算术运算 comm>salm0.6 作为查询条件

注意 com 本身包含有 null,nul 进行任何数学计算结果都是 null

SQL> select *
  2  from emp
  3  where comm > sal * 0.6;

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400         30

4.找出部门 10 中所有经理(MANAGER)和部门 20 中所有办事员(CLERK)的详细资料

第一组条件是部门 10 中所有经理,可以使用“deptno=10 AND job='MANAGER'”条件实现;第二组条件是部门 20 中所有办事员,可以使用“deptno=20 AND job='CLERK'”条件实现。因为这两组条件有一组满足即可,所以它们之间使用 OR 进行连接

SQL> select *
  2  from emp
  3  where (deptno=10 and job='MANSGER') or (deptno=20 and job='CLERK');

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7369 SMITH                CLERK                    7902 17-12月-80            800                    20

5.找出部门 10 中所有经理(MANAGER),部门 20 中所有办事员 (CLERK),既不是经理又不是办事员但其薪金大于或等于 20 的所有员工的详细资料

第一组条件是部门 10 中所有经理,可以使用 “deptno=10 AND job='MANAGER'”条件实现;第二组条件是部门 20 中所有办事员,可以使用 “deptno=20 AND job='CLERK'”条件实现; 第三组条件是指那些既不是经理又不是办事员但其薪金大于或等于 2000,可以使用“job NOT IN('MANAGER','CLERK') AND sal>=2000”条件来实现。而且这三个条件又需要使用 OR 进行连接

SQL> select *
  2  from emp
  3  where (deptno=10 and job='MANSGER') or (deptno=20 and job='CLERK') or (job not in('MANAGER','CLERK'));

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7369 SMITH                CLERK                    7902 17-12月-80            800                    20
      7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300         30
      7521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500         30
      7654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400         30
      7839 KING                 PRESIDENT                     17-11月-81           5000                    10
      7844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0         30
      7902 FORD                 ANALYST                  7566 03-12月-81           3000                    20

已选择 7 行。

6.找出收取佣金的员工的职位

首先是收取佣金的员工,使用条件 com IS NOT NULL(注 意不能写成 comm=NULL) 。此外,由于结果要实现的是不同的工作,因为工作会有重复数据,因此使 用 DISTINCT 限定数据不要重复

查询排序(2)_第2张图片

7.找出不收取佣金或收取的佣金低于 100 的员工的职位

答案不一样没有关系,代码一样就行了

SQL> select distinct job
  2  from emp
  3  where comm in null or comm < 100;

JOB
------------------
SALESMAN

 8.显示姓名字母中不带有“R”的员工的姓名

要显示姓名中不带有“R”的员工,应该使用通配符“%” ,因为是查询不存在的,所以使用“NOT LIKE” 

SQL> select *
  2  from emp
  3  where ename not like'%R%';

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7369 SMITH                CLERK                    7902 17-12月-80            800                    20
      7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300         30
      7566 JONES                MANAGER                  7839 02-4月 -81           2975                    20
      7698 BLAKE                MANAGER                  7839 01-5月 -81           2850                    30
      7839 KING                 PRESIDENT                     17-11月-81           5000                    10
      7900 JAMES                CLERK                    7698 03-12月-81            950                    30
      8989 HELLO

已选择 7 行。

9.显示姓名字段的任何位置包含“A”的所有员工的姓名,显示的结果按照基本工资由高到低排序,如果基本工资相同,则按照雇佣年限由早到晚排序,如果雇佣日期相同,则按照职位排序

SQL> select *
  2  from emp
  3  where ename like '%R%'
  4  order by sal desc, hiredate, job;

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7902 FORD                 ANALYST                  7566 03-12月-81           3000                    20
      7782 CLARK                MANAGER                  7839 09-6月 -81           2450                    10
      7844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0         30
      7934 MILLER               CLERK                    7782 23-1月 -82           1300                    10
      7521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500         30
      7654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400         30

已选择 6 行。

你可能感兴趣的:(Oracle从小白到总裁,数据库,oracle,sql)