1.去除字符串“ aadde gf ”两边的空格
SELECT TRIM(' aadde gf ') FROM DUAL;
2.显示所有员工姓名的前三个字符。
SELECT /*ENAME,*/SUBSTR(ENAME,1,3) FROM EMP;
3.显示正好为5个字符的员工的姓名。
SELECT * FROM EMP WHERE ENAME LIKE '_____';
SELECT * FROM EMP WHERE LENGTH(ENAME) = 5;
4.显示所有员工的姓名,用hahaha替换所有"A"
SELECT ENAME,REPLACE(ENAME,'A','hahaha') FROM EMP;
5.显示1982年和1987年入职的所有员工
SELECT *
FROM EMP
WHERE TO_CHAR(HIREDATE,'YYYY') IN ('1982','1987');
SELECT *
FROM EMP
WHERE TO_CHAR(HIREDATE,'YYYY') = '1982'
OR TO_CHAR(HIREDATE,'YYYY') = '1987';
6.显示所有4月份入职的员工
SELECT * FROM EMP WHERE TO_CHAR(HIREDATE,'MM') = '04';
7.以字符长度为10的方式显示员工姓名,多余的位数在右边以*来填充
SELECT RPAD(ENAME,10,'*') FROM EMP;
8.找出字符串“oracle training”中第二个ra出现的位置
SELECT INSTR('oracle training','ra',1,2) FROM DUAL; --9 从头开始找 第二次ra中r所在的位置
9.显示员工姓名中包含“H”的员工
SELECT * FROM EMP WHERE ENAME LIKE '%H%';
SELECT ENAME FROM EMP WHERE INSTR(ENAME,'H',1) >0 ;
SELECT INSTR(ENAME,'H',1) FROM EMP;
10.求名字中至少有两个A的员工
SELECT * FROM EMP WHERE ENAME LIKE '%A%A%';
SELECT * FROM EMP WHERE INSTR(ENAME,'A',1,2) > 0 ;
11.显示员工姓名中第二个字符是“L”的员工(3)
SELECT * FROM EMP WHERE ENAME LIKE '_L%';
SELECT * FROM EMP WHERE SUBSTR(ENAME,2,1) = 'L';
SELECT * FROM EMP WHERE INSTR(ENAME,'L',2) = 2 ;
12.查询名字中倒数第二位是'T'的员工
SELECT * FROM EMP WHERE ENAME LIKE '%T_';
SELECT * FROM EMP WHERE INSTR(ENAME,'T',-2,1) = LENGTH(ENAME) -1;
13.执行以下内容
CREATE TABLE ZSRY ( --走失人员
XINGMNIG VARCHAR2(50), --姓名
XIAOMING VARCHAR2(50), --小名
CHUOHAO VARCHAR2(50)); --绰号
INSERT INTO ZSRY VALUES('苏大强','强强','老苏头');
INSERT INTO ZSRY VALUES('','','狗剩');
INSERT INTO ZSRY VALUES('赵四','','尼古拉斯赵四');
INSERT INTO ZSRY VALUES('马冬梅','','');
COMMIT;
查询走失人员的名字,优先查询姓名,其次小名,最后是绰号
SELECT XINGMNIG,XIAOMING,CHUOHAO FROM ZSRY;
14.用三种方法查询入职时间在1980年或者1981年的员工信息
SELECT *
FROM EMP
WHERE TO_CHAR(HIREDATE,'YYYY') = '1980'
OR TO_CHAR(HIREDATE,'YYYY') = '1981';
SELECT *
FROM EMP
WHERE TO_CHAR(HIREDATE,'YYYY') IN ('1980','1981');
SELECT *
FROM EMP
WHERE HIREDATE BETWEEN TO_DATE('19800101','YYYYMMDD') AND TO_DATE('19811231','YYYYMMDD');
SELECT *
FROM EMP
WHERE TO_CHAR(HIREDATE,'YYYY') =any ('1980','1981');
15.按照岗位类型的不同,统计各类型人数。
岗位类型: 管理岗-PRESIDENT和MANAGER 技术岗- ANALYST 其他岗位
SELECT CASE WHEN JOB IN('PRESIDENT','MANAGER ') THEN '管理岗'
WHEN JOB = 'ANALYST ' THEN '技术岗'
ELSE '其他岗位'
END 岗位类型,
COUNT(*) 人数
FROM EMP
GROUP BY CASE WHEN JOB IN('PRESIDENT','MANAGER ') THEN '管理岗'
WHEN JOB = 'ANALYST ' THEN '技术岗'
ELSE '其他岗位'
END;
SELECT * FROM EMP;
16.查询首字母大写,中间小写,末位字母大写的方式显示所有员工的姓名
SELECT ENAME,
UPPER(SUBSTR(ENAME,1,1))||
LOWER(SUBSTR(ENAME,2,LENGTH(ENAME)-2))||
UPPER(SUBSTR(ENAME,-1,1)) ENAME_NEW
FROM EMP;
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;
18.查询所有员工姓名,岗位,合计月收入和部门编号,查询结果按照中文命名,且PRSIDENT岗位排在最前,
其他岗位按升序排列
SELECT ENAME 姓名,JOB 岗位,SAL+NVL(COMM,0) 合计月收入,DEPTNO 部门编号
FROM EMP
ORDER BY CASE WHEN JOB = 'PRESIDENT' THEN 1 ELSE 2 END,JOB;