这是继续上一篇练习的一些例子
- 找出EMP表中的姓名(ENAME)第三个字母是A 的员工姓名。
- 找出EMP表员工名字中含有A 和N的员工姓名。
- 找出所有有佣金的员工,列出姓名、工资、佣金,显示结果按工资从小到大,佣金从大到小。
- 列出部门编号为20的所有职位。
- 列出不属于SALES 的部门。
- 显示工资不在1000 到1500 之间的员工信息:名字、工资,按工资从大到小排序。
- 显示职位为MANAGER 和SALESMAN,年薪在15000 和20000 之间的员工的信息:名字、职位、年薪。
- 说明以下两条SQL语句的输出结果:
- SELECT EMPNO,COMM FROM EMP WHERE COMMISNULL;
- SELECT EMPNO,COMM FROM EMPWHERE COMM =NULL;
- 让SELECT 语句的输出结果为
- SELECT * FROM SALGRADE;
- SELECT * FROM BONUS;
- SELECT * FROM EMP;
- SELECT * FROM DEPT;
- ……
列出当前用户有多少张数据表,结果集中存在多少条记录。
- 判断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’的时候发现他能转换为数字,所有就按数字来执行了。