Oracle SQL:经典入门级查询练习 (2)

时间:2022-04-08 00:27:42

这是继续上一篇练习的一些例子

  1. 找出EMP表中的姓名(ENAME)第三个字母是A 的员工姓名。
  2. 找出EMP表员工名字中含有A 和N的员工姓名。
  3. 找出所有有佣金的员工,列出姓名、工资、佣金,显示结果按工资从小到大,佣金从大到小。
  4. 列出部门编号为20的所有职位。
  5. 列出不属于SALES 的部门。
  6. 显示工资不在1000 到1500 之间的员工信息:名字、工资,按工资从大到小排序。
  7. 显示职位为MANAGER 和SALESMAN,年薪在15000 和20000 之间的员工的信息:名字、职位、年薪。
  8. 说明以下两条SQL语句的输出结果:
  9. SELECT EMPNO,COMM FROM EMP WHERE COMMISNULL;
  10. SELECT EMPNO,COMM FROM EMPWHERE COMM =NULL;
  11. 让SELECT 语句的输出结果为
  12. SELECT * FROM SALGRADE;
  13. SELECT * FROM BONUS;
  14. SELECT * FROM EMP;
  15. SELECT * FROM DEPT;
  16. ……
  17. 列出当前用户有多少张数据表,结果集中存在多少条记录。 

  18. 判断SELECT ENAME,SAL FROM EMP WHERE SAL > '1500'是否抱错,为什么?
 
--答案解析如下:
--找出EMP表中的姓名(ENAME)第三个字母是A 的员工姓名。
SELECT ename FROM emp WHERE ename LIKE '__A%';

--找出EMP表员工名字中含有A 和N的员工姓名。
SELECT ename FROM emp WHERE ename LIKE '%A%N%' OR ename LIKE '%N%A%';

--找出所有有佣金的员工,列出姓名、工资、佣金,显示结果按工资从小到大,佣金从大到小。
SELECT ename,sal,comm FROM emp ORDER BY sal ASC ,comm DESC;

--列出部门编号为20的所有职位。
SELECT job FROM emp WHERE deptno=20;

--列出不属于SALES 的部门。
SELECT deptno,dname FROM dept WHERE dname!='SALES'
SELECT deptno,dname FROM dept WHERE dname NOT IN 'SALES';

--显示工资不在1000 到1500 之间的员工信息:名字、工资,按工资从大到小排序。
SELECT ename,sal FROM emp WHERE sal BETWEEN 1000 AND 1500 ORDER BY sal ASC;
SELECT ename,sal FROM emp WHERE sal>1000 AND sal<=1500 ORDER BY sal ASC;

--显示职位为MANAGER 和SALESMAN,年薪在15000 和20000 之间的员工的信息:名字、职位、年薪。
SELECT ename ,job,(sal+NVL(comm,0))*12 FROM emp WHERE job IN ('MANAGER','SALESMAN');

--说明以下两条SQL语句的输出结果: */
SELECT EMPNO,COMM FROM EMP WHERE COMM IS NULL; --查询没有薪金的雇员编号和薪金

SELECT EMPNO,COMM FROM EMP WHERE COMM = NULL; --查询薪金等于NULL的雇员编号和薪金
--说明:IS NULL是判断某个字段是否为空,为空并不等价于为空字符串或为数字0;
--而 =NULL 是判断某个值是否等于 NULL,NULL = NULL和NULL <> NULL都为 FALSE。

--让SELECT 语句的输出结果为
SELECT * FROM SALGRADE;
SELECT * FROM BONUS;
SELECT * FROM EMP;
SELECT * FROM DEPT;
--列出当前用户有多少张数据表,结果集中存在多少条记录。
SELECT 'SELECT * FROM ' || tab.tname || ';' FROM tab;
--其中的||表示的是字符串的连接

--判断SELECT ENAME,SAL FROM EMP WHERE SAL > '1500'是否抱错,为什么?
--不会报错,这个句子和SELECT ENAME,SAL FROM EMP WHERE SAL > 1500;等价,执行语句的时候,系统解析到‘1500’的时候发现他能转换为数字,所有就按数字来执行了。