数据库实验

本文详细列举了使用SQL查询进行各种员工信息和薪资条件筛选、分组统计的例子,包括单表查询、多表连接、分组函数以及等级查询,展示了在IT技术中如何通过SQL操作数据库获取所需数据。
摘要由CSDN通过智能技术生成


USE dept_emp; 

-- 单表查询
-- 1.选择部门30中的所有员工
    SELECT * FROM `emp_list` WHERE ename ;
-- 2.列出所有办事员的姓名,编号和部门编号
    SELECT emp_list.ename,emp_list.empno,emp_list.deptno
    FROM emp_list
    WHERE job = '办事员';
-- 3.找出佣金高于薪金的员工
    SELECT *
    FROM emp_list
    WHERE mgr + sal > sal;
-- 4.找出没有佣金的员工
    SELECT *
    FROM emp_list
    WHERE emp_list.mgr is null;
-- 5.找出佣金高于薪金的60%的员工
    SELECT *
    FROM emp_list
    WHERE emp_list.mgr > emp_list.sal * 0.6;
-- 6.找出部门10中所有人事部长和部门20中所有办事员的详细资料
    SELECT emp_list.job,emp_list.deptno,emp_list.ename,emp_list.empno,emp_list.comm,emp_list.hiredate
    FROM emp_list
    WHERE job = '人事部长' AND deptno = 10 and 20;
-- 7.找出收取佣金的员工
    SELECT *
    FROM emp_list
    WHERE emp_list.mgr is not null;
-- 8.找出不收取佣金或收取的佣金低于100的员工
    SELECT *
    FROM emp_list
    WHERE emp_list.mgr IS NULL OR emp_list.mgr < 100;
-- 9.找出姓张的员工的信息
    SELECT emp_list.`ename`
    FROM emp_list
    WHERE `ename` LIKE '张%'
-- 10.显示员工的姓名和受雇日期,新的员工排在最前面
    SELECT `ename`, `hiredate`
    FROM emp_list
    ORDER BY hiredate DESC;
-- 11.按工作的降序排序,若工作相同则按薪金排序
    SELECT *
    FROM emp_list
    ORDER BY emp_list.job DESC , emp_list.sal;
-- 12.查出不姓刘的员工的信息
    SELECT emp_list.`ename`
    FROM emp_list
    WHERE `ename` NOT LIKE  '刘%';
-- 13.取出姓李的员工
    SELECT emp_list.`ename`
    FROM emp_list
    WHERE `emp_list`.ename LIKE '李%'
-- 多表查询
-- 1. 查询出每一位雇员的编号、姓名、职位、部门名称、位置
    SELECT emp_list.empno,emp_list.ename,emp_list.job,dept_list.dname
    FROM  emp_list CROSS JOIN dept_list;
-- 2.要求查询出每一位雇员的姓名、职位、领导的姓名
    SELECT ename AS employee_name, job, dname AS leader_name  
    FROM emp_list  
    JOIN dept_list l ON e.leader_id = l.id;
-- 3.查询出每个雇员的编号、姓名、基本工资、职位、领导的姓名、部门名称及位置。
    SELECT emp_list.empno,emp_list.ename,emp_list.mgr,emp_list.job,emp_list.sal,dept_list.dname,dept_list.loc
    FROM emp_list CROSS JOIN dept_list
-- 4.列出在部门"销售部"工作的员工的姓名,假定不知道销售部的部门编号。 
    SELECT emp_list.ename
    FROM emp_list CROSS JOIN dept_list
    WHERE dept_list.dname = (SELECT dept_list.deptno FROM dept_list WHERE dept_list.dname = '销售部');
-- 5.列出与"李兴"从事相同工作的所有员工。
    SELECT emp_list.ename
    FROM emp_list
    WHERE emp_list.job = (SELECT emp_list.job FROM emp_list WHERE ename = '李兴');
-- 6.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。 
    SELECT e.ename,e.sal FROM emp e WHERE e.sal >ALL(SELECT el.sal FROM emp el WHERE deptno=30);
-- 7.列出受雇日期早于其直接上级的所有员工。
    SELECT e.* FROM emp e WHERE ((SELECT el.hiredate FROM emp el WHERE e.mgr=el.empno)-e.hiredate)>0;
-- 分组函数查询
-- 1.按照部门编号分组,求出每个部的人数,平均工资
    SELECT deptno,COUNT(empno),AVG(sal)
    FROM emp
    GROUP BY deptno;
-- 2.按照职位分组,求出每个职位的最高和最低工资
    SELECT job,MAX(sal),MIN(sal)
    FROM emp
    GROUP BY job;
-- 3.计算出每个各职位的平均工资
    SELECT job,AVG(sal)
    FROM emp
    GROUP BY job
-- 4.查询出每个部门的名称、部门的人数、平均工资
    SELECT d.dname,COUNT(e.empno),AVG(e.sal)
    FROM dept d,emp e 
    WHERE e.deptno = d.deptno
    GROUP BY d.dname;
-- left outer join on
    SELECT d.dname,COUNT(e.empno),AVG(e.sal)
    FROM dept d LEFT OUTER JOIN emp e
    ON e.deptno = d.deptno
    GROUP BY d.dname ORDER BY e.empno DESC 
-- 5.要求统计出每个部门的详细信息,并且要求这些部门的平均工资高于2000;
    SELECT d.dname,AVG(e.sal)a
    FROM dept d LEFT OUTER JOIN emp e
    ON d.deptno = e.deptno
    GROUP BY d.dname HAVING a>2000;
-- 6.要求查询出工资比华仔还要高的全部雇员信息
    SELECT * FROM emp WHERE sal>(SELECT sal FROM emp WHERE ename='华仔');
-- 7.要求查询出高于公司平均工资的全部雇员信息
    SELECT * FROM emp WHERE sal>(
    SELECT AVG(sal) FROM emp);
-- 8.查询出每个部门的编号、名称、位置、部门人数、平均工资
    SELECT d.dname,COUNT(e.deptno) c,AVG(e.sal)
    FROM dept d LEFT OUTER JOIN emp e
    ON d.deptno = e.deptno 
    GROUP BY d.dname ORDER BY c;
-- 9.列出至少有一个员工的所有部门。 
    SELECT d.deptno, d.dname FROM dept d WHERE 
    (SELECT COUNT(e.empno) FROM emp e WHERE e.deptno=d.deptno)>1;
-- 等级查询
-- 1.查询每个工资等级各有多少员工
    SELECT s.grade,COUNT(*) 
    FROM emp e JOIN salgrade s 
    ON e.sal BETWEEN s.losal AND hisal 
    GROUP BY s.grade;
-- 2.查询部门中(所有人)的平均工资等级
    SELECT e.deptno,AVG(s.grade) avggrade 
    FROM emp e JOIN salgrade s 
    ON e.sal BETWEEN s.losal AND hisal 
    GROUP BY e.deptno 
    ORDER BY e.deptno;
 

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值