您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

MySQL数据表的查询案例

bubuko 2022/1/25 20:04:48 mysql 字数 6409 阅读 812 来源 http://www.bubuko.com/infolist-5-1.html

在平常的开发或者学习中数据库的查询是我们必须掌握的内容,在这里我整理了一些关于 MySQL 数据库查询的案例,同时针对每个案例做了简单的分析,如果你正在学习数据库相关的内容,可以当做一个参考资料,同时也可以 扫描下方的二维码进入我在荔枝微课中的课程主页,查看更多开发相关的课程,另外您还可以点击 "《 ...

在平常的开发或者学习中数据库的查询是我们必须掌握的内容,在这里我整理了一些关于 MySQL 数据库查询的案例,同时针对每个案例做了简单的分析,如果你正在学习数据库相关的内容,可以当做一个参考资料,同时也可以 扫描下方的二维码进入我在荔枝微课中的课程主页,查看更多开发相关的课程,另外您还可以点击 《学会使用MySQL》《熟悉数据库的查询》查看课程的详细情况。

1.查询员工编号为6的员工姓名、薪水、职位信息

 SELECT ename, sal, job FROM emp WHERE empno = 6;

案例分析

这是一个最简单的查询案例,主要用来考察大家对于查询的理解和掌握情况。

2.查询出职位是销售员的所有员工的员工编号、员工姓、年薪、职位信息。

 SELECT empno, ename, sal*12, job FROM emp WHERE job = '销售员';

案例分析

对于这道题目我们需要注意两点,首先员工的职位是销售员查询的条件,其次就是在查询的时候薪水要乘以12,计算得到员工的年薪。

3.查询名为 mike 的员工编号、员工姓名、薪水、职位信息(同时数据表中有名为 Mike的员工)。

 SELECT empno, ename, sal, job FROM EMP WHERE ename = 'mike';

案例分析

设置这个题目的目的是为了让大家牢记,MySQL中默认是不区分大小写的,这点和其他版本的数据库有所区别的。

4.查询薪水在 2000~5000 之间的员工编号、员工姓名、薪水、职位信息。

 SELECT empno, ename, sal, job FROM EMP WHERE sal BETWEEN 2000 AND 5000;

案例分析

这是一个典型的关于查询范围的题目,我们可以使用 BETWEEN……AND……结构来实现

5.查询薪水不在 3500~5000 之间的员工编号、员工姓名、薪水、职位信息

 SELECT empno, ename, sal, job FROM EMP WHERE NOT sal BETWEEN 3500 AND 5000;

案例分析

这是和第四个题目对应的题目,对指定的范围进行取反,NOT……BETWEEN……AND……就可以得到最终结果了。

6.查询出没有设置员工岗位的员工编号、员工姓名、薪水、职位信息,并且按照薪水降序排列。

 SELECT empno, ename, sal, job FROM EMP WHERE job IS NULL ORDER BY sal DESC;

案例分析

所谓没有设置员工岗位就是在 emp 表中 job 这一列数据值为NULL

7.查询出员工是张姓的员工编号、员工姓名、薪水、职位信息。

 SELECT empno, ename, sal, job FROM emp WHERE ename LIKE '张%';

案例分析

这是一个典型的模糊查询案例,之前介绍模糊查询时候也为大家做过相应的演示。

8.查询出每个部门的平均工资并且按照降序排列。

 SELECT deptno, avg(sal) FROM emp GROUP BY deptno;

案例分析

这是一个明显的分组查询的题目,以 emp 表中的 deptno 列作为分组标识列,然后利用 AVG() 求取分组之后每个部门的平均工资,就可以得到最终的结果了。

9.查询出每个部门员工的人数。

SELECT deptno, count(*) FROM emp GROUP BY deptno;

案例分析

这个题目和上一个题目类似,以 emp 表中的 deptno 列作为分组标识列,然后利用 count() 函数就可以获取每个部门的总人数了。

10.查询出每个岗位最高薪水、最低薪水以及人数。

SELECT job, max(sal), min(sal), count(*) FROM emp GROUP BY job;

案例分析

相比之前两个分组查询来说,要实现这个查询我们需要用到 max()、min()、count(),可以帮助大家更好的理解分组查询。

11.查询所有员工的编号、姓名、薪水、职位、部门名称。

 SELECT empno, ename, sal, job, dname FROM emp, dept WHERE emp.deptno = dept.deptno;

案例分析

这是一个典型的多表查询的案例,之前介绍表连接查询的时候为大家介绍过,实现这个操作的重点是设置表连接查询的条件,过滤掉重复的内容。

12.查询薪水比柴进高的所有员工的编号、姓名、薪水、职位、部门名称。

 SELECT 
      empid, ename, sal, job, dname 
 FROM 
      emp, dept 
 WHERE 
      emp.deptno = dept.deptno AND 
      sal > all(SELECT sal FROM emp WHERE ename = '柴进');

案例分析

在执行查询操作的时候,特别是用到子查询作为查询条件的时候,一定要注意子查询所得结果数目,否则可能会因此造成一些不必要的麻烦。一般来说,如果是数据表的主键作为查询条件的话,得到的结果总是唯一的,而其他列作为查询条件的时候,所得结果可能只有一个,也可能是多个,这点在面试的时候是很容易遇到的,而且一般在面试题中是不会清晰的指明条件列是否是主键的,这时候我们需要按照一般的操作数据库的习惯,做相关的描述,得到的结果相对会好点。

13.查询出每个部门的编号、名称、部门人数、平均工资。

 SELECT 
       d.deptno, d.dname, count(e.empno), avg(e.sal) 
 FROM 
       emp e, dept d 
 WHERE 
       e.deptno = d.deptno
 GROUP BY 
       d.deptno, d.dname;

案例分析

要理解这个查询并不困难,但是相信大家会存在疑惑就是分组的时候为什么要将部门编号、部门名称这两个字段都写进去呢?这点其实之前在介绍分组查询的时候就为大家总结过,分组查询的列中除了聚合函数外,其他查询列都必须定义在 GROUP BY子句中,不然SQL执行的时候是会出现错误的。

14.查询出高于员工平均薪水的员工的编号、姓名、薪水、职位、部门名称。

 SELECT 
       e1.empno, e1.ename, e1.sal, e1.job, d.dname 
 FROM 
       emp e1, dept d 
 WHERE 
      e1.deptno = d.deptno AND 
      e1.sal > (SELECT avg(e2.sal) FROM emp e2);

案例分析

这是一个将子查询作为查询条件的案例,理解起来比较容易,不做解释了。

15.列出至少有一个员工的部门编号、名称,并统计出这些部门的平均工资、最低工资、最高工资

 SELECT 
      e.deptno, d.dname, avg(e.sal), max(e.sal), min(e.sal) 
 FROM 
      emp e, dept d 
 WHERE 
      e.deptno = d.deptno 
 GROUP BY 
      e.deptno, d.dname 
 HAVING 
      count(e.empno) > 1;

案例分析

这是一个关于分组查询的案例,相比之前的题目来说,解决这个问题需要用到 HAVING 关键字,而且我们需要注意,聚合函数不一定总是要出现在SELECT语句中的,我们可以直接在HAVING 中使用。

16.列出员工表中低于自身工资人数至少3人的员工的编号、姓名、薪水以及少于自身工资的总人数

 SELECT 
       e1.empno, e1.ename, e1.sal, 
       (SELECT count(e2.empno) FROM emp e2 WHERE e1.sal > e2.sal) 
 FROM 
       emp e1 
 WHERE 
       (SELECT count(e2.empno) FROM emp e2 WHERE e1.sal > e2.sal) >= 3;

案例分析

这是一个常见的子查询的案例,这个操作的难点在于我们查询的是同一张数据表,但是却要让数据表中某个员工薪水 sal 这一列的值和数据表中这一列整体的值比较,解决这个问题的关键在于我们必须理解在子查询外层的数据表的表名或者别名是可以在子查询中使用的,理解这点之后我们就可以解决这个问题了。

17.列出员工表中最低工资小于3000的部门编号、名称。

 SELECT 
       e.deptno, d.dname 
 FROM 
       emp e, dept d 
 WHERE 
       e.deptno = d.deptno
 GROUP BY 
       e.deptno, d.dname 
 HAVING 
       min(e.sal) < 3000;

案例分析

这也是多表分组查询的一个案例,我们需要注意之前为分组查询的列,除了聚合函数外,其他内容都必须在GROUP BY 语句中,另外就是聚合函数不需要出现在查询的列中也是可以使用的。

技术分享图片

MySQL数据表的查询案例

原文:https://www.cnblogs.com/fatcoding/p/12513416.html


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶