函数练习题

news/2024/7/6 4:25:02 标签: oracle, sql, 数据库


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;


http://www.niftyadmin.cn/n/1357271.html

相关文章

子查询练习题

1.找出工资高于SMITH的员工姓名&#xff0c;工资 1&#xff09;查询工资高于XXX的员工姓名和薪资 SELECT ENAME,SAL FROM EMP WHERE SAL > XXX; 2&#xff09;查询SMITH的薪资XXX SELECT SAL FROM EMP WHERE ENAME SMITH; 3) 拼接 SELECT ENAME,SAL FROM EMP WHERE SAL &…

表连接练习题

以上是表信息 ⬆ 1.查询SCORE表中最高分学生的学号和课程号。 1) 查询分数为XXX的学生的学号和课程 SELECT SNO,CNO FROM SCORES WHERE SCORE XXX; 2&#xff09;查询最高成绩XXX SELECT MAX(SCORE) FROM SCORES; 3) 合并 SELECT SNO,CNO FROM SCORES WHERE SCORE (SEL…

存储过程———>>> 包(两个存储过程一个存储函数)

/*包*/ SCOTT.EMP DBMS_OUTPUT.PUT_LINE() CREATE OR REPLACE PACKAGE PKG_BAO IS --过程&#xff1a;加工部门信息-- PROCEDURE SP_DEPT_INFO ( I_DEPTNO IN NUMBER , --部门编号 O_RESULT OUT NUMBER --运行结果 0-运行成功 1-运行失败 ); --过程&…

创建日志表

CREATE TABLE ETL_LOG ( --日志表 SP_NAME VARCHAR2(30) , --程序名称 STEP_CODE NUMBER(10) , --步骤编号 STEP_DESC VARCHAR2(300) , --步骤描述 SQL_SENTENCE CLOB , --运行的代码 RESULTT VARCHAR2(100) , --运行结果 TS …

存储过程内部调用另一个存储过程

CALL SP_EMP_REBUILED(); --偶尔用&#xff08;LINUX调用数据库中存储过程&#xff09; SQL>EXECUTE SP_EMP_REBUILED; --基本不用 SQL>EXEC SP_EMP_REBUILED; --基本不用 BEGIN SP_EMP_REBUILED; --自动化脚本中常用&#xff08;存储过程内部调用另一个存储过程/LINU…

存储过程权限不足解决方法

TEST窗口执行 --手动调用时常用&#xff08;用于手动调用存储过程&#xff09; --权限不足的解决方法 CONNECT RESOURCE DBA --通过角色赋予给用户的权限&#xff0c;在执行存储过程&#xff08;函数&#xff09;时继承不到 GRANT CREATE TABLE TO SCOTT;