• mysql单表查询&&多表查询(职员表14+9)


    dept(deptno,dname,loc)
    emp(empno,ename,job,mgr,hiredate,sal,COMM,deptno)
    salgrade(grade,losal,hisal)
    stu(sid,sname,age,gander,province,tuition)
    

     

    单表查询题目
    ====================================================
    dept(deptno,dname,loc)
    emp(empno,ename,job,mgr,hiredate,sal,COMM,deptno)
    salgrade(grade,losal,hisal)
    stu(sid,sname,age,gander,province,tuition)
    1. 查询出部门编号为30的所有员工
    SELECT
    stu.sname
    FROM
    stu
    WHERE
    stu.sid = 30
    
    2. 所有销售员的姓名、编号和部门编号。
    SELECT
    emp.empno,
    emp.ename,
    emp.deptno
    FROM
    emp
    WHERE
    emp.job = '销售员'
    
    3. 找出奖金高于工资的员工。
    SELECT
    emp.ename
    FROM
    emp
    WHERE
    emp.COMM > emp.sal
    
    4. 找出奖金高于工资60%的员工。
    SELECT
    emp.ename
    FROM
    emp
    WHERE
    emp.COMM > emp.sal*0.6
    5. 找出部门编号为10中所有经理,和部门编号为20中所有销售员的详细资料。
    SELECT
    emp.empno,
    emp.ename,
    emp.job,
    emp.hiredate,
    emp.sal,
    emp.deptno
    FROM
    emp
    WHERE
    (emp.job = '经理' AND
    emp.deptno = 20) OR
    (emp.job = '销售员' AND
    emp.deptno = 10)
    
    6. 找出部门编号为10中所有经理,部门编号为20中
    所有销售员,还有即不是经理又不是销售员但其
    工资大或等于20000的所有员工详细资料。
    SELECT
    emp.empno,
    emp.ename,
    emp.job,
    emp.hiredate,
    emp.sal,
    emp.deptno
    FROM
    emp
    WHERE
    (emp.job = '经理' AND
    emp.deptno = 20) OR
    (emp.job = '销售员' AND
    emp.deptno = 10)OR(emp.job != '经理' AND emp.job != '销售员' AND 
    emp.sal>=20000)
    
    7. 无奖金或奖金低于1000的员工。
    SELECT
    emp.empno,
    emp.ename,
    emp.job
    FROM emp
    WHERE
    emp.COMM < 1000 OR
    emp.COMM IS NULL
    8. 查询名字由三个字组成的员工。
    SELECT emp.ename
    FROM emp
    WHERE emp.ename LIKE '___'
    9.查询2000年入职的员工。
    SELECT emp.ename
    FROM emp
    WHERE emp.hiredate LIKE '2000-__-__'
    #'2000%'
    10. 查询所有员工详细信息,用编号升序排序
    SELECT
    emp.empno,
    emp.ename,
    emp.job,
    emp.mgr,
    emp.hiredate,
    emp.sal,
    emp.COMM,
    emp.deptno
    FROM
    emp
    ORDER BY
    emp.empno ASC
    11. 查询所有员工详细信息,用工资降序排序,如果工资相同
    使用入职日期升序排序
    SELECT
    emp.empno,
    emp.ename,
    emp.job,
    emp.mgr,
    emp.hiredate,
    emp.sal,
    emp.COMM,
    emp.deptno
    FROM
    emp
    ORDER BY
    emp.sal DESC,
    emp.hiredate ASC
    
    12. 查询每个部门的平均工资
    SELECT
    emp.deptno,AVG(sal)
    FROM
    emp
    GROUP BY
    emp.deptno
    
    13. 查询每个部门的雇员数量。
     SELECT
    emp.deptno,COUNT(1)
    FROM
    emp
    GROUP BY
    emp.deptno
    14. 查询每种工作的最高工资、最低工资、人数
    SELECT
    emp.job,MAX(sal),MIN(sal),COUNT(1) AS 人数
    FROM
    emp
    GROUP BY
    emp.job
    
    

    多表查询题目
    ====================================================
    dept(deptno,dname,loc)
    emp(empno,ename,job,mgr,hiredate,sal,COMM,deptno)
    salgrade(grade,losal,hisal)
    stu(sid,sname,age,gander,province,tuition)



    1. 查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。 SELECT dept.deptno,dept.dname,dept.loc,COUNT(emp.deptno) AS 部门人数 FROM dept,emp WHERE dept.deptno=emp.deptno GROUP BY dept.deptno 2. 列出所有员工的姓名及其直接上级的姓名。 SELECT e.ename, IFNULL(m.ename, 'BOSS') AS lead FROM emp e LEFT JOIN emp m ON e.mgr=m.empno; 3. 列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。 SELECT e.empno, e.ename, d.dname FROM emp AS e INNER JOIN emp AS m ON e.mgr = m.empno LEFT JOIN dept AS d ON e.deptno = d.deptno WHERE e.hiredate < m.hiredate 4. 列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。 SELECT e.*, d.dname FROM emp e RIGHT JOIN dept d ON e.deptno=d.deptno; 5. 列出最低薪金大于15000的各种工作及从事此工作的员工人数。 SELECT e.job,COUNT(*) AS 员工人数 FROM emp e GROUP BY job HAVING MIN(sal)>15000 6. 列出在销售部工作的员工的姓名,假定不知道销售部的部门编号。 SELECT e.ename FROM emp e WHERE (SELECT e.deptno FROM dept WHERE dname='销售部' ) 7. 列出薪金高于公司平均薪金的所有员工信息,所在部门名称,上级领导,工资等级。 SELECT e.*,d.dname,s.grade FROM emp e NATURAL LEFT JOIN dept d LEFT JOIN emp m ON m.empno=e.mgr LEFT JOIN salgrade s ON e.sal BETWEEN s.losal AND s.hisal WHERE e.sal > (SELECT AVG(sal) FROM emp) 8.列出与庞统从事相同工作的所有员工及部门名称。 SELECT e.*, d.dname FROM emp e, dept d WHERE e.deptno=d.deptno AND e.job=(SELECT job FROM emp WHERE ename='庞统'); 9.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金、部门名称。 SELECT e.ename, e.sal, d.dname FROM emp e, dept d WHERE e.deptno=d.deptno AND sal > ALL(SELECT sal FROM emp WHERE deptno=30)
  • 相关阅读:
    在sed中怎么样产生控制字符^M
    递归遍历目录的shell脚本
    递归法遍历目录查找文件
    【30.01%】【hdu 3397】Sequence operation
    【23.68%】【hdu 2871】Memory Control
    【33.18%】【hdu 5877】Weak Pair (3种解法)
    【38.96%】【hdu 1540】Tunnel Warfare
    【26.8%】【CF 46D】Parking Lot
    【35.20%】【CF 706D】Vasiliy's Multiset
    【33.20%】【LA 4320】【Ping pong】
  • 原文地址:https://www.cnblogs.com/zjfjava/p/6012542.html
Copyright © 2020-2023  润新知