MYSQL数据库练习题(一)

/*
sql
  ddl--表
  dml--数据
  dcl--权限

-- mysql   sqlserver  oracle   db2
-- sql:标准    方言
-- ddl   dml  dcl
-- ddl  CREATE  DROP   ALTER   DESCRIBE
-- dml  insert  DELETE  UPDATE  SELECT
-- dcl 

*/
-- 1.选择部门30中的雇员
-- select * from emp where deptno = 30
-- 2.列出所有经理的姓名,编号和部门.
-- SELECT ENAME,EMPNO,JOB FROM emp where JOB = 'MANAGER'
-- 3.列出佣金高于薪金的雇员. 
-- SELECT * FROM emp WHERE COMM > SAL 
-- 4.找出佣金高于或等于薪金50%的雇员
-- SELECT * FROM emp WHERE COMM >= SAL *0.5 
-- 5.找出部门10中所有经理和部门20中所有办事员的详细信息
-- SELECT * FROM emp WHERE DEPTNO = 10 AND JOB = 'MANAGER' OR DEPTNO = 20 AND JOB = 'CLERK'
-- 6.找出部门10中所有经理和部门20中所有办事员以及即不是经理又不是办事员但薪金
--   大于或等于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 > 0
-- SELECT JOB FROM emp WHERE COMM IS NOT NULL AND COMM != 0 GROUP BY JOB
-- 8.找出收取佣金并且收取的佣金低于200的雇员
-- SELECT * FROM emp WHERE COMM >0 AND COMM < 200
-- SELECT * FROM emp WHERE COMM BETWEEN 0 AND 200
-- 9.找出各月最后一天受雇的所有雇员.
-- SELECT * FROM emp WHERE HIREDATE = LAST_DAY(HIREDATE)
-- ???10.找出早于25年之前受雇的所有雇员.
-- SELECT * FROM emp WHERE DATEDIFF(SYSDATE(),HIREDATE) > 25 * 365
-- ???11.查询只有首字母大写的所有雇员姓名.
-- select ENAME  from EMP where ASCII(SUBSTRING(ENAME,1,1)) >= 65 
-- and 
-- ASCII(SUBSTRING(ENAME,1,1))<=90
-- 12.查询所有雇员的信息,按照姓名排序. 
-- SELECT * FROM emp ORDER BY ENAME ASC
-- 13.查询所有雇员的信息,按薪金正序排序.
-- SELECT * FROM emp ORDER BY SAL ASC
-- 14.查询所有经理,并按薪金正序和雇员姓名正序排序. 
-- SELECT * FROM EMP WHERE JOB = 'MANAGER' ORDER BY SAL,ENAME
-- 15.查询姓名是MILLER的雇员.
-- SELECT * FROM EMP WHERE ENAME = 'MILLER'
-- 16.查询薪金1500和3000,或者佣金高于500的雇员.
 -- SELECT * FROM EMP WHERE SAL = '1500' OR SAL = '3000' OR COMM > 500
-- 17.查询每个工种的人数. 
-- SELECT JOB,COUNT(JOB) FROM EMP GROUP BY JOB
-- 18.查询每个工种的人数.并按工种的人数排序.
-- SELECT JOB,COUNT(JOB) FROM EMP GROUP BY JOB ORDER BY COUNT(JOB)
-- 19.查询MANAGER的平均工资。
-- SELECT AVG(SAL) FROM EMP WHERE JOB = 'MANAGER'
-- SELECT ROUND(AVG(SAL),2) FROM EMP WHERE JOB = 'MANAGER'
-- 20.查询每个工种的人数,和平均工资,并按平均工资进行排序
-- SELECT JOB,COUNT(JOB),AVG(SAL) A FROM EMP GROUP BY JOB ORDER BY A
-- 21.查询部门名称是SALES的所有员工
-- SELECT * FROM DEPT WHERE DNAME = 'SALES'
-- 22.查询部门名称是RESERCH的所有员工的平均工资
-- SELECT AVG(SAL) FROM EMP WHERE DEPTNO IN (SELECT DEPTNO FROM DEPT WHERE DNAME = 'RESEARCH')
-- 23.查询每个工种中雇员的最高薪金
-- SELECT JOB,MAX(SAL) FROM EMP GROUP BY JOB
-- 24.查询职务是经理的雇员的最低薪金;
-- SELECT MIN(SAL) FROM EMP WHERE JOB = 'MANAGER'
-- 25.新增两条记录
 --  empno为57,ENAME是ANDY,JOB是MANAGER,SAL是3300,HIREDATE是'12-8月-90',DEPTNO是20;
-- 
--   empno为58,ENAME是JACK,JOB是MANAGER,SAL是3000,HIREDATE是'12-9月-90',DEPTNO是20;
-- INSERT INTO EMP VALUES (57,'ANDY','MANAGER',NULL,'1990-09-12',3300,NULL,20);
-- INSERT INTO EMP VALUES (58,'JACK','MANAGER',NULL,'1990-09-12',3000,NULL,20)
-- 修改EMPNO为57的记录,将薪金涨20%,DEPTNO改成30;
-- UPDATE EMP SET SAL = SAL * 1.2,DEPTNO = 30 WHERE EMPNO = 57
--  删除EMPNO为58记录.
-- DELETE FROM EMP WHERE EMPNO = 58
-- *26.查询平均工资高于1500的所有职务的名称和平均工资金额. 
-- SELECT JOB,AVG(SAL) FROM EMP GROUP BY JOB HAVING AVG(SAL) > 1500 
-- 27.查询每个员工的详细信息.包括部门编号,
-- 	部门名称及部门所在城市.
-- SELECT * FROM EMP E,DEPT D WHERE D.DEPTNO = E.DEPTNO
-- *28.按部门分组,查询出部门名称,及部门中员工的平均工资. 
-- SELECT E.DEPTNO,D.DNAME,E.A FROM 
-- (SELECT DEPTNO,AVG(SAL) A FROM EMP GROUP BY DEPTNO) E
-- LEFT JOIN DEPT D ON E.DEPTNO = E.DEPTNO
-- 29.查询所有员工中工资数在前五的员工详细信息。
-- 	并从高到低进行排序。
-- SELECT * FROM EMP ORDER BY SAL DESC LIMIT 0,5
-- 30.查询所有经理中工资第三高的员工的详细信息。
-- SELECT * FROM EMP WHERE JOB = 'MANAGER' ORDER BY SAL DESC LIMIT 2,1
-- 31.找出所有员工中薪金第五高到第八高的员工信息。
-- SELECT * FROM EMP ORDER BY SAL DESC LIMIT 4,4
-- 32.查询出SCOTT的上级领导的详细信息。
-- SELECT * FROM EMP WHERE EMPNO IN
-- (SELECT MGR FROM EMP WHERE ENAME = 'SCOTT')
-- 33.查询出没有员工的部门。
-- SELECT * FROM EMP E RIGHT JOIN DEPT D ON E.DEPTNO = D.DEPTNO
-- WHERE E.DEPTNO IS NULL GROUP BY D.DEPTNO
-- 34.查询出平均工资高于2000的部门信息。
-- SELECT DEPTNO,AVG(SAL) FROM EMP GROUP BY DEPTNO HAVING AVG(SAL) > 2000
-- 35.向EMP表中插入一条记录 
-- 	7999,'SCOTT',2000,'MANAGER',sysdate
-- 	查询出所的员工的 员工编号,
-- 	员工姓名,工资,职位,部门名称(包含未分配部门的员工,例如后插入的SCOTT)
-- INSERT INTO EMP VALUES(7999,'SCOTT','MANAGER',NULL,SYSDATE(),2000,NULL,NULL)
-- SELECT * FROM EMP
-- 36.找到同名的所有员工
-- SELECT ENAME,COUNT(ENAME) FROM EMP GROUP BY ENAME 
-- HAVING COUNT(ENAME) >1 
-- 37.找出所有同名的员工后,
-- 	通过一条语句只保留同名员工中的一个,其余的则删除掉。FOR
-- SELECT * FROM EMP WHERE ENAME IN 
-- (SELECT ENAME FROM EMP GROUP BY ENAME HAVING COUNT(ENAME) > 1)



你可能感兴趣的:(第二阶段)