--基础题
1.查询20号部门的员工姓名、岗位、薪资
SELECT ENAME,JOB,SAL/*,DEPTNO*/
FROM EMP
WHERE DEPTNO = 20;
2.查询工资超过3000的员工的姓名、薪资
SELECT ENAME,SAL
FROM EMP
WHERE SAL >3000;
3.查询10号部门以外的员工的所有信息
SELECT * FROM EMP
WHERE DEPTNO <>10;
4.查询员工姓名为SMITH的员工的所有信息
SELECT * FROM EMP WHERE ENAME = 'SMITH';
SELECT * FROM EMP WHERE ENAME LIKE 'SMITH'; --模糊查询 效率偏低 不建议
5.查询1981年2月20号入职的员工的姓名和薪资
SELECT ENAME,SAL,HIREDATE FROM EMP WHERE HIREDATE = TO_DATE('19810220','YYYYMMDD'); --统一成日期类型
SELECT ENAME,SAL FROM EMP WHERE TO_CHAR(HIREDATE,'YYYYMMDD') = '19810220'; --统一成字符型
6.查询入职日期早于1982年1月1日的所有员工的姓名、入职日期
SELECT ENAME,HIREDATE
FROM EMP
WHERE TO_CHAR(HIREDATE,'YYYYMMDD') < '19820101';
SELECT ENAME,HIREDATE
FROM EMP
WHERE HIREDATE < TO_DATE('19820101','YYYYMMDD');
SELECT ENAME,HIREDATE
FROM EMP
WHERE TO_CHAR(HIREDATE,'YYYY') < '1982';
7.找出奖金(COMM字段)大于0的员工信息
/*SELECT * FROM EMP WHERE COMM IS NOT NULL;*/
SELECT * FROM EMP WHERE NVL(COMM,0)>0;
SELECT * FROM EMP WHERE COMM >0 /*AND COMM IS NOT NULL*/;
8.查询姓名中包含S的员工的姓名、岗位
SELECT ENAME,JOB
FROM EMP
WHERE ENAME LIKE '%S%';
9.查询员工姓名以S开头,且姓名总长度为5位的员工的所有信息
SELECT * FROM EMP WHERE ENAME LIKE 'S____';
10.查询员工姓名前两位是SM,后两位是TH,中间一位不清楚具体字母的员工的所有信息
SELECT * FROM EMP WHERE ENAME LIKE 'SM_TH';
11.查询员工姓名至少有四位,且倒数第三位是I的员工的所有信息
SELECT * FROM EMP WHERE ENAME LIKE '%_I__';
12.查询岗位是MANAGER或SALESMAN的员工信息
SELECT * FROM EMP WHERE JOB IN('MANAGER','SALESMAN');
SELECT * FROM EMP WHERE JOB ='MANAGER' OR JOB = 'SALESMAN';
13.查询SMITH和SCOTT的详细信息
SELECT * FROM EMP WHERE ENAME IN('SMITH','SCOTT');
SELECT * FROM EMP WHERE ENAME = 'SMITH' OR ENAME = 'SCOTT';
14.查询10号或20号部门的员工信息
SELECT * FROM EMP WHERE DEPTNO IN(10,20);
15.查找工资在1000-3000之间的员工姓名、工作、工资(包含1000和3000)
SELECT ENAME,JOB,SAL
FROM EMP
WHERE SAL BETWEEN 1000 AND 3000;
SELECT ENAME,JOB,SAL
FROM EMP
WHERE SAL >= 1000 AND SAL <= 3000;
16.查询入职时间在1980年或1981年的员工信息
SELECT *
FROM EMP
WHERE TO_CHAR(HIREDATE,'YYYY') IN ('1980','1981');
SELECT *
FROM EMP
WHERE TO_CHAR(HIREDATE,'YYYY') = '1980'
OR TO_CHAR(HIREDATE,'YYYY') = '1981';
SELECT *
FROM EMP
WHERE HIREDATE BETWEEN TO_DATE('19800101','YYYYMMDD') AND TO_DATE('19811231','YYYYMMDD');
17.查询员工姓名,员工薪资,薪资等级(1000以下为低级,1000-3000为中级,3000以上为高级)
SELECT ENAME,SAL,
CASE WHEN SAL <1000 THEN '低级'
WHEN SAL BETWEEN 1000 AND 3000 THEN '中级'
WHEN SAL > 3000 THEN '高级'
END 薪资等级
FROM EMP;
--综合题
1.统计未按要求录入大写名字的员工
SELECT * FROM EMP;
UPDATE EMP SET ENAME='SMiTH' WHERE ENAME = 'SMITH';
SELECT * FROM EMP WHERE ENAME <> UPPER(ENAME);
SELECT ENAME,UPPER(ENAME) FROM EMP;
2.查找姓名总共有5位、且不是以A开头的员工信息
SELECT *
FROM EMP
WHERE ENAME LIKE '_____' AND ENAME NOT LIKE 'A%';
3.查出10号部门的办事员和30号部门的经理
SELECT * FROM EMP WHERE DEPTNO = 10 AND JOB = 'CLERK' OR DEPTNO = 30 AND JOB = 'MANAGER';
SELECT *
FROM EMP
WHERE(DEPTNO,JOB) IN ((10,'CLERK'),(30,'MANAGER'));
4.查出10号部门的所有人、30号部门的部门经理以及所有岗位是分析师的员工
SELECT *
FROM EMP
WHERE DEPTNO = 10 OR (DEPTNO = 30 AND JOB = 'MANAGER') OR JOB = 'ANALYST';
5.查出10号及30号部门的办事员及经理
SELECT *
FROM EMP
WHERE DEPTNO IN (10,30) AND JOB IN ('CLERK','MANAGER');
6.找出奖金(COMM)高于工资的员工
SELECT * FROM EMP WHERE COMM > SAL;
7.查询姓名中只有一个A字母的员工(有别的字符,但A只有一个)
SELECT *
FROM EMP
WHERE ENAME LIKE '%A%' --查到含有A字母的
AND ENAME NOT LIKE '%A%A%'; --直到没有两个A字母的 3个同样不满足
8.年终时:有佣金的员工佣金翻倍,无佣金的员工获得薪资的10%作为佣金奖励,
现查询员工姓名,薪资、佣金调整信息,按员工编号升序排列,其中调整信息包括:
有佣金的以:“原佣金为:,调整后佣金为:”格式展示
无佣金的以:“新增佣金:”格式展示
SELECT ENAME 姓名,
SAL 薪资,
COMM,
CASE WHEN COMM IS NOT NULL THEN '原佣金为:'||COMM||',调整后佣金为:' ||COMM*2
ELSE '新增佣金为:'||SAL *0.1
END 佣金调整信息
FROM EMP
ORDER BY EMPNO ASC;