Oracle数据库练习与解答:SQL查询技巧

5星 · 超过95%的资源 需积分: 9 2 下载量 117 浏览量 更新于2024-09-13 1 收藏 30KB DOC 举报
"该资源是一份Oracle数据库的学习练习题及答案,旨在帮助学习者巩固已掌握的Oracle知识,包括用户管理、数据查询、SQL语句编写以及字符串和日期操作等核心技能。" 1. 查看当前登陆的用户命令:可以使用`SELECT USER FROM DUAL;`来查看当前登录的Oracle数据库用户。 2. 登录后切换到超级管理员用户:通过`ALTER SESSION SET CURRENT_SCHEMA = SYS AS SYSDBA;`可以切换到超级管理员用户SYS。 3. 再切换到普通用户:使用`ALTER SESSION SET CURRENT_SCHEMA = 用户名;`命令,将用户名替换为你想切换的普通用户。 4. 查看表结构:可以使用`DESCRIBE 表名;`命令来查看表的结构,包括字段名称、数据类型等信息。 5. 查看emp表中所有员工的工作(job),并消除重复行:使用`SELECT DISTINCT job FROM emp;`来去除重复的工作项。 6. SQL语句示例:显示特定格式的雇员信息,这需要使用`CONCAT`函数和子查询来组合字段,例如: ```sql SELECT CONCAT('雇员编号是:', EMPNO, '的雇员姓名是:', ENAME, ',基本工资是:', SAL, ',职位是', JOB) AS 结果 FROM emp; ``` 7. 查询工资在1500-3000之间的员工信息:使用`WHERE`子句进行区间筛选,例如: ```sql SELECT * FROM emp WHERE sal BETWEEN 1500 AND 3000; ``` 8. 按工资降序、雇用日期升序查询所有雇员信息: ```sql SELECT * FROM emp ORDER BY sal DESC, HIREDATE ASC; ``` 9. 将字符串转换为大写:使用`UPPER()`函数,如`SELECT UPPER('helloworld') FROM DUAL;`。 10. 动态查询ename为'smith'的人的所有信息,输入动态值为小写:使用`LOWER()`函数,例如: ```sql SELECT * FROM emp WHERE LOWER(ename) = 'smith'; ``` 11. 将所有雇员姓名按小写返回:使用`LOWER()`函数应用在查询中,例如: ```sql SELECT LOWER(ename) FROM emp; ``` 12. 将所有雇员姓名首字母大写:使用`INITCAP()`函数,例如: ```sql SELECT INITCAP(ename) FROM emp; ``` 13. 查询所有姓名长度为5的雇员信息:使用`LENGTH()`函数,例如: ```sql SELECT * FROM emp WHERE LENGTH(ename) = 5; ``` 14. 使用“_”替换ename中的所有“A”:可以使用`REPLACE()`函数,例如: ```sql SELECT REPLACE(ename, 'A', '_') FROM emp; ``` 15. 截取每个雇员姓名的前三个字母:使用`SUBSTR()`函数,例如: ```sql SELECT SUBSTR(ename, 1, 3) FROM emp; ``` 16. 截取每个雇员姓名的后三个字母:同样使用`SUBSTR()`函数,但调整参数,例如: ```sql SELECT SUBSTR(ename, -3) FROM emp; ``` 17. 四舍五入数字:使用`ROUND()`函数,例如: ```sql SELECT ROUND(805.53567) FROM DUAL; SELECT ROUND(-805.53567) FROM DUAL; ``` 18. 取余数:使用`MOD()`函数,例如: ```sql SELECT MOD(10, 3) FROM DUAL; ``` 19. 获取当前系统日期:使用`SYSDATE`关键字,例如: ```sql SELECT SYSDATE FROM DUAL; ``` 20. 求出本月最后一天的日期:结合`LAST_DAY()`函数,例如: ```sql SELECT LAST_DAY(SYSDATE) FROM DUAL; ``` 21. 下一个星期一是几号:结合`TRUNC()`和`NEXT_DAY()`函数,例如: ```sql SELECT TRUNC(SYSDATE, 'IW') + 7 - MOD(SYSDATE - TRUNC(SYSDATE, 'IW'), 7) FROM DUAL; ``` 22. 计算3个月之后的日期:结合`ADD_MONTHS()`函数,例如: ```sql SELECT ADD_MONTHS(SYSDATE, 3) FROM DUAL; ``` 23. 入学到现在的天数:需要知道具体的入学日期,然后减去日期,例如: ```sql SELECT SYSDATE - DATE '2012-03-12' FROM DUAL; ``` 24. 格式化当前系统时间为指定格式:使用`TO_CHAR()`函数,例如: ```sql SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM DUAL; ``` 25. 显示当前系统具体时间(24小时制):结合`TO_CHAR()`函数和时间格式,例如: ```sql SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL; ``` 26. 数字格式化为字符串:使用`TO_CHAR()`函数和货币格式,例如: ```sql SELECT TO_CHAR(85098654132168, 'L99,999,999,999,999') FROM DUAL; ``` 27. 查询每个雇员的全部年薪(无comm则设为300元):使用`NVL()`函数,例如: ```sql SELECT EMPNO, ENAME, (SAL * 12) + NVL(COMM, 300) AS 年薪 FROM emp; ``` 28. 将字符串转换成DATE类型数据:使用`TO_DATE()`函数,例如: ```sql SELECT TO_DATE('1983-04-07', 'YYYY-MM-DD') FROM DUAL; ``` 29. 查询语句示例,显示特定格式的结果: ```sql SELECT EMPNO, ENAME, JOB, DECODE(SAL, 300, '无', SAL) AS SALARY FROM emp; ``` 这个查询会显示雇员编号、姓名、职位,如果工资为300则显示"无",否则显示实际工资。