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)的姓名、编号和部门编号
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 限定数据不要重复
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 行。