ToB企服应用市场:ToB评测及商务社交产业平台

标题: day10-习题 [打印本页]

作者: 宝塔山    时间: 2022-10-12 03:48
标题: day10-习题
习题

1.Homework01

  1. (1)        D -- 没有在别名上加引号(ps:别名的as可以省略)
  2. (2)        B -- 判断null或非空不能用不等于号
  3. (3)        C
复制代码
2.Homework02

练习
  1. -- 2.写出查看dept表和emp表的结构的sql语句
  2. DESC dept;
  3. DESC emp;
  4. -- 3.使用简单查询语句完成
  5. -- 3.1 显示所有部门名称
  6. SELECT dname FROM dept;
  7. -- 3.2 显示所有雇员名及其全年收入 13月(工资+补助),并指定列别名“年收入”
  8. SELECT ename,(sal+IFNULL(comm ,0.0))*13 AS '年收入' FROM emp;
  9. -- 4.限制查询数据
  10. -- 4.1显示工资超过2850的雇员的姓名和工资
  11. SELECT ename,sal FROM emp
  12.         WHERE sal>2850;
  13. -- 4.2显示工资不在1500到2850之间的员工名和工资
  14. SELECT ename,sal FROM emp
  15.         WHERE sal>2850 OR sal<1500;
  16. -- 4.3显示编号为7566的雇员姓名及所在的部门编号
  17. SELECT ename,deptno FROM emp
  18.         WHERE empno=7566;
  19. -- 4.4显示部门10和30中工资超过1500的员工名及工资
  20. SELECT ename,sal FROM emp
  21.         WHERE deptno IN (10,30) AND sal >1500;
  22. -- 4.5显示无管理者的雇员名及岗位
  23. SELECT ename,job FROM emp
  24.         WHERE mgr IS NULL;
  25. -- 5.排序数据
  26. -- 5.1显示在1991-2-1到1991-5-1之间雇用的员工名,岗位以及雇用日期,
  27. -- 并以雇用日期进行排序
  28. SELECT ename,job,hiredate FROM emp
  29.         WHERE hiredate>='1991-02-01' AND hiredate<='1991-05-01'
  30.         ORDER BY hiredate;
  31. -- 显示获得补助的所有员工名,工资以及补助,并以工资降序进行排序
  32. SELECT ename,sal,comm FROM emp
  33.         WHERE comm IS NOT NULL
  34.         ORDER BY sal DESC;
复制代码
5.Homework05

根据emp员工表,dept部门表,工资=薪金+佣金,写出正确的sql
  1. SELECT * FROM emp;
  2. -- 1. 选择部门30中的所有员工
  3. SELECT * FROM emp
  4.         WHERE deptno = 30;
  5. -- 2. 列出所有办事员(CLERK)的姓名,编号和部门编号
  6. SELECT ename,empno,deptno FROM emp
  7.         WHERE job = 'CLERK';
  8.        
  9. -- 3. 找出佣金高于薪金的员工
  10. SELECT ename FROM emp
  11.         WHERE IFNULL(comm,0)>sal;
  12.        
  13. -- 4. 找出佣金高于薪金60%的员工
  14. SELECT ename FROM emp
  15.         WHERE IFNULL(comm,0)>(sal*0.6);
  16.        
  17. -- 5. 找出部门10中所有经理(MANAGER)和部门20中的所有办事员(CLERK)的详细资料
  18. SELECT * FROM emp
  19.         WHERE (deptno = 10 AND job= 'MANAGER')OR
  20.                 (deptno = 20 AND job= 'CLERK');
  21.        
  22. -- 6. 找出部门10中所有经理(MANAGER),部门20中的所有办事员(CLERK),
  23. -- 还有既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料
  24. SELECT * FROM emp
  25.         WHERE (deptno = 10 AND job= 'MANAGER')OR
  26.                 (deptno = 20 AND job= 'CLERK')OR
  27.                 (job NOT IN ('MANAGER','CLERK') AND sal>=2000);
  28.                
  29. -- 7. 找出收取佣金的员工的不同工作
  30. SELECT DISTINCT job FROM emp
  31.         WHERE comm IS NOT NULL;
  32.        
  33. -- 8. 找出不收取佣金或收取佣金低于100的员工
  34. SELECT ename FROM emp
  35.         WHERE comm IS NULL OR IFNULL(comm,0) <100;
  36.        
  37. -- 9. 找出各月倒数第三天受雇的所有员工
  38. -- 关于最后一天 last_day(日期)可以返回该日期所在月份的最后一天
  39. SELECT * FROM emp
  40.         WHERE LAST_DAY(hiredate)-2 = hiredate;
  41. -- 10. 找出早于12年前受雇的员工
  42. SELECT * FROM emp
  43.         WHERE hiredate < DATE_SUB(NOW(),INTERVAL 12 YEAR);
  44. -- 11. 以首字母小写的方式显示所有员工的姓名
  45. -- 先截取首字母,将其小写 LCASE (LEFT(ename,1))
  46. -- 再截取剩下的字母 RIGHT(ename, (LENGTH(ename)-1))
  47. -- 将两者拼起来 CONCAT
  48. SELECT CONCAT(LCASE(LEFT(ename,1)),RIGHT(ename, (LENGTH(ename)-1))) FROM emp       
  49. -- 或者
  50. SELECT CONCAT( LCASE(LEFT(ename,1)) ,SUBSTRING(ename,2)) FROM emp;
  51. -- 12. 显示正好为5个字符的员工的姓名
  52. SELECT ename FROM emp
  53.         WHERE ename LIKE '_____';
  54. -- 或者
  55. SELECT ename FROM emp
  56.         WHERE LENGTH(ename)=5;
复制代码
6.Homework06

根据emp员工表,dept部门表,工资=薪金+佣金,写出正确的sql
  1. -- 根据emp员工表,写出正确的sql语句
  2. SELECT * FROM emp;
  3. -- 13. 显示不带有R的员工的姓名
  4. SELECT ename FROM emp
  5.         WHERE ename NOT LIKE '%R%';
  6.        
  7. -- 14. 显示所有员工姓名的前三个字符
  8. SELECT LEFT(ename,3) FROM emp;
  9. -- 15. 显示所有员工的姓名,用a替换所有的A
  10. SELECT REPLACE(ename,'A','a') FROM emp;
  11. -- 16. 显示满10年服务年限的员工的姓名和受雇日期
  12. SELECT ename,hiredate FROM emp
  13.         WHERE (DATEDIFF(NOW(),hiredate)/365)>10;
  14.        
  15. -- 17. 显示员工的详细资料,按姓名排序
  16. SELECT * FROM emp
  17.         ORDER BY ename;
  18. -- 18. 显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面
  19. SELECT ename,hiredate FROM emp
  20.         ORDER BY hiredate;
  21. -- 19. 显示所有的员工的姓名,工作和薪金,按工作降序排序,若工作相同则按薪金排序
  22. SELECT ename,job,sal FROM emp
  23.         ORDER BY job DESC,sal;
  24. -- 20. 显示所有员工的姓名,加入公司的年份和月份,
  25. -- 按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面
  26. SELECT ename,CONCAT(YEAR(hiredate),'-',MONTH(hiredate))FROM emp
  27.         ORDER BY MONTH(hiredate),YEAR(hiredate);
  28. -- 21. 显示在一个月为30天的情况所有员工的日薪金,忽略余数
  29. SELECT ename,FLOOR(sal/30) FROM emp
  30.         WHERE LAST_DAY(hiredate) LIKE '____-__-30';
  31.        
  32. -- 22. 找出在(任何年份的)2月受聘的所有员工
  33. SELECT * FROM emp
  34.         WHERE hiredate LIKE '____-02-__';
  35.        
  36. -- 23. 对于每个员工,显示其加入公司的天数
  37. SELECT ename,DATEDIFF(NOW(),hiredate) FROM emp;
  38. -- 24. 显示姓名字段的任何位置包含A的所有员工的姓名
  39. SELECT ename FROM emp
  40.         WHERE ename LIKE '%A%';
  41. -- 25. 以年月日的方式显示所有员工的服务年限(大概)
  42. SELECT ename,
  43.         (DATEDIFF(NOW(),hiredate)-DATEDIFF(NOW(),hiredate)%365)/365 AS '年',
  44.         (DATEDIFF(NOW(),hiredate)%365-DATEDIFF(NOW(),hiredate)%365%31)/31 AS '月',
  45.         DATEDIFF(NOW(),hiredate)%31 AS '天'
  46.         FROM emp
  47.        
  48. -- 或者
  49. SELECT ename,
  50.         FLOOR((DATEDIFF(NOW(),hiredate)/365)) AS '年',
  51.         FLOOR(DATEDIFF(NOW(),hiredate)%365/31) AS '月',
  52.         DATEDIFF(NOW(),hiredate)%31 AS '天'
  53.         FROM emp       
复制代码
7.Homework07

设学校环境如下:一个系有若干个专业,每一个专业一年只招一个班,每个班有若干个学生。先要建立关于系、学生和班级的数据库,关系模式为:
班CLASS  (班号classid,专业名subject,系名deptname,入学年份enrolltime,人数num)
学生STUDENT(学号studentid,姓名name,年龄age,班号classid)
系DEPARTMENT(系号departmentid,系名deptname)
试用sql语言完成下面功能:
  1. CLASS(
  2.     101,软件,计算机,1995,20;
  3.     102,微电子,计算机,1996,30;
  4.     111,无机化学,化学,1995,29;
  5.     112,高分子化学,化学,1996,25;
  6.     121,统计数学,数学,1995,20;
  7.     131,现代语言,中文,1996,20;
  8.     141,国际贸易,经济,1997,30;
  9.     142,国际金融,经济,1996,14;      
  10.      )
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4