习题1.Homework01
文章插图
(1) D -- 没有在别名上加引号(ps:别名的as可以省略)(2) B -- 判断null或非空不能用不等于号(3) C
2.Homework02- 写出查看dept表和emp表的结构的sql语句
- 使用简单查询语句完成
- 显示所有部门名称
- 显示所有雇员名及其全年收入 13月(工资+补助),并指定列别名“年收入”
- 限制查询数据
- 显示工资超过2850的雇员的姓名和工资
- 显示工资不在1500到2850之间的员工名和工资
- 显示编号为7566的雇员姓名及所在的部门编号
- 显示部门10和30中工资超过1500的员工名及工资
- 显示无管理者的雇员名及岗位
- 排序数据
- 显示在1991-2-1到1991-5-1之间雇用的员工名,岗位以及雇用日期,并以雇用日期进行排序
- 显示获得补助的所有员工名,工资以及补助,并以工资降序进行排序
练习
-- 2.写出查看dept表和emp表的结构的sql语句DESC dept;DESC emp;-- 3.使用简单查询语句完成-- 3.1 显示所有部门名称SELECT dname FROM dept;-- 3.2 显示所有雇员名及其全年收入 13月(工资+补助),并指定列别名“年收入”SELECT ename,(sal+IFNULL(comm ,0.0))*13 AS '年收入' FROM emp;-- 4.限制查询数据-- 4.1显示工资超过2850的雇员的姓名和工资SELECT ename,sal FROM emp WHERE sal>2850;-- 4.2显示工资不在1500到2850之间的员工名和工资SELECT ename,sal FROM emp WHERE sal>2850 OR sal<1500;-- 4.3显示编号为7566的雇员姓名及所在的部门编号SELECT ename,deptno FROM emp WHERE empno=7566;-- 4.4显示部门10和30中工资超过1500的员工名及工资SELECT ename,sal FROM emp WHERE deptno IN (10,30) AND sal >1500;-- 4.5显示无管理者的雇员名及岗位SELECT ename,job FROM emp WHERE mgr IS NULL;-- 5.排序数据-- 5.1显示在1991-2-1到1991-5-1之间雇用的员工名,岗位以及雇用日期,-- 并以雇用日期进行排序SELECT ename,job,hiredate FROM emp WHERE hiredate>='1991-02-01' AND hiredate<='1991-05-01' ORDER BY hiredate;-- 显示获得补助的所有员工名,工资以及补助,并以工资降序进行排序SELECT ename,sal,comm FROM emp WHERE comm IS NOT NULL ORDER BY sal DESC;
3.Homework03根据emp表写出正确的sql- 选择部门30中的所有员工
- 列出所有办事员(CLERK)的姓名,编号和部门编号
- 找出佣金高于薪金的员工
- 找出佣金高于薪金60%的员工
- 找出部门10中所有经理(MANAGER)和部门20中的所有办事员(CLERK)的详细资料
- 找出部门10中所有经理(MANAGER),部门20中的所有办事员(CLERK),还有既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料
- 找出收取佣金的员工的不同工作
- 找出不收取佣金或收取佣金低于100的员工
- 找出各月倒数第三天受雇的所有员工
- 找出早于12年前受雇的员工
- 以首字母小写的方式显示所有员工的姓名
- 显示正好为5个字符的员工的姓名
练习
SELECT * FROM emp;-- 1. 选择部门30中的所有员工SELECT * FROM emp WHERE deptno = 30;-- 2. 列出所有办事员(CLERK)的姓名,编号和部门编号SELECT ename,empno,deptno FROM emp WHERE job = 'CLERK';-- 3. 找出佣金高于薪金的员工SELECT ename FROM emp WHERE IFNULL(comm,0)>sal; -- 4. 找出佣金高于薪金60%的员工SELECT ename FROM emp WHERE IFNULL(comm,0)>(sal*0.6); -- 5. 找出部门10中所有经理(MANAGER)和部门20中的所有办事员(CLERK)的详细资料SELECT * FROM emp WHERE (deptno = 10 AND job= 'MANAGER')OR(deptno = 20 AND job= 'CLERK');-- 6. 找出部门10中所有经理(MANAGER),部门20中的所有办事员(CLERK),-- 还有既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料SELECT * FROM emp WHERE (deptno = 10 AND job= 'MANAGER')OR(deptno = 20 AND job= 'CLERK')OR(job NOT IN ('MANAGER','CLERK') AND sal>=2000);-- 7. 找出收取佣金的员工的不同工作SELECT DISTINCT job FROM emp WHERE comm IS NOT NULL;-- 8. 找出不收取佣金或收取佣金低于100的员工SELECT ename FROM emp WHERE comm IS NULL OR IFNULL(comm,0) <100;-- 9. 找出各月倒数第三天受雇的所有员工-- 关于最后一天 last_day(日期)可以返回该日期所在月份的最后一天SELECT * FROM emp WHERE LAST_DAY(hiredate)-2 = hiredate;-- 10. 找出早于12年前受雇的员工SELECT * FROM emp WHERE hiredate < DATE_SUB(NOW(),INTERVAL 12 YEAR);-- 11. 以首字母小写的方式显示所有员工的姓名-- 先截取首字母,将其小写 LCASE (LEFT(ename,1))-- 再截取剩下的字母 RIGHT(ename, (LENGTH(ename)-1))-- 将两者拼起来 CONCATSELECT CONCAT(LCASE(LEFT(ename,1)),RIGHT(ename, (LENGTH(ename)-1))) FROM emp-- 或者SELECT CONCAT( LCASE(LEFT(ename,1)) ,SUBSTRING(ename,2)) FROM emp; -- 12. 显示正好为5个字符的员工的姓名SELECT ename FROM emp WHERE ename LIKE '_____';-- 或者SELECT ename FROM emp WHERE LENGTH(ename)=5;
经验总结扩展阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-