前几节内容中我们为大家介绍了MySQL中数据表查询的基础知识,为了帮助大家更好的理解数据查询的知识,在这里特意整理了一些练习题,希望可以对大家有所帮助。
准备工作
如上就是我们本节测试题目用到的测试表 emp, 当然这张数据表仅供大家参考,具体这张数据表的建表语句如下
CREATE TABLE emp(
empid int primary key auto_increment,
ename varchar(32) not null,
sex int default 0,
sal double default 0.0,
job varchar(32),
deptid int not null,
foreign key(deptid) references dept(deptid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '员工表';
同时在这里我也为大家整理了一些数据表的测试数据,大家可以将这些插入语句粘贴下来,然后直接插入到数据表中
INSERT INTO emp (ename, sex, sal, job, deptid) VALUES ('宋清', 0, 30000.00, '人事部主任', 3);
INSERT INTO emp (ename, sex, sal, job, deptid) VALUES ('吴用', 0, 20000.00, '人事部秘书', 3);
INSERT INTO emp (ename, sex, sal, job, deptid) VALUES ('公孙胜', 0, 10000.00, '人事部秘书', 3);
INSERT INTO emp (ename, sex, sal, job, deptid) VALUES ('王定六', 0, 3000.00, '销售员', 1);
INSERT INTO emp (ename, sex, sal, job, deptid) VALUES ('陶宗旺', 0, 2000.00, '销售员', 1);
INSERT INTO emp (ename, sex, sal, job, deptid) VALUES ('张青', 0, 4000.00, '销售部副主任', 1);
INSERT INTO emp (ename, sex, sal, job, deptid) VALUES ('孙二娘', 1, 3500.00, '销售部副主任', 1);
INSERT INTO emp (ename, sex, sal, job, deptid) VALUES ('扈三娘', 1, 4000.00, '销售部主任', 1);
INSERT INTO emp (ename, sex, sal, job, deptid) VALUES ('卢俊义', 0, 8000.00, '财务部主任', 2);
INSERT INTO emp (ename, sex, sal, job, deptid) VALUES ('柴进', 0, 5000.00, '财务部副主任', 2);
到这里为止,我们的准备工作已经完成了,如下为大家提供的练习题目正是使用的这张数据表和测试数据。
测试题目
1. 查询员工编号为6的员工姓名、性别、薪水、职位信息。
【分析】
这是一个最简单的单表查询的案例,我们只要正确的书写列名,以 empid = 6 为查询条件就可以得到期望的答案了。
【答案】
SELECT ename, sex, sal, job FROM emp WHERE empid = 6;
2. 查询出职位是销售员的所有员工的员工编号、员工姓名、性别、年薪、职位信息。
【分析】
对于这道题目我们需要注意两点,首先员工的职位是销售员查询的条件,其次就是在查询的时候薪水要乘以12,计算得到员工的年薪。
【答案】
SELECT empid, ename, sex, sal*12, job FROM emp WHERE job = '销售员';
3. 查询名为 mike 的员工编号、员工姓名、性别、薪水、职位信息(同时数据表中有名为 Mike的员工)。
【分析】
设置这个题目的目的是为了让大家牢记,MySQL中默认是不区分大小写的,这点和其他版本的数据库有所区别的。
【答案】
SELECT empid, ename, sex, sal, job FROM EMP WHERE ename = 'mike';
4. 查询薪水在 2000~5000 之间的员工编号、员工姓名、性别、薪水、职位信息。
【分析】
这是一个典型的关于查询范围的题目,我们可以使用 BETWEEN……AND……结构来实现
【答案】
SELECT empid, ename, sex, sal, job FROM EMP WHERE sal BETWEEN 2000 AND 5000;
【拓展】
除了使用BETWEEN……AND……结构外,我们还可以使用一般操作符和AND关键字实现。
SELECT empid, ename, sex, sal, job FROM EMP WHERE sal >= 2000 AND sal
5. 查询薪水不在 3500~5000 之间的员工编号、员工姓名、性别、薪水、职位信息。
【分析】
这是和第四个题目对应的题目,对指定的范围进行取反,NOT……BETWEEN……AND……就可以得到最终结果了。
【答案】
SELECT empid, ename, sex, sal, job FROM EMP WHERE NOT sal BETWEEN 3500 AND 5000;
【拓展】
除了使用NOT……BETWEEN……AND……结构外,我们还可以使用一般操作符和OR关键字实现。
SELECT empid, ename, sex, sal, job FROM EMP WHERE sal 5000;
6. 查询出没有设置员工岗位的员工编号、员工姓名、性别、薪水、职位信息,并且按照薪水降序排列。
【分析】
所谓没有设置员工岗位就是在 emp 表中 job 这一列数据值为NULL
【答案】
SELECT empid, ename, sex, sal, job FROM EMP WHERE job IS NULL ORDER BY sal DESC;
7. 查询出员工是张姓的员工编号、员工姓名、性别、薪水、职位信息。
【分析】
这是一个典型的模糊查询案例,之前介绍模糊查询时候也为大家做过相应的演示。
【答案】
SELECT empid, ename, sex, sal, job FROM emp WHERE ename LIKE '张%';
8. 查询出每个部门的平均工资并且按照降序排列。
【分析】
这是一个明显的分组查询的题目,以 emp 表中的 deptid 列作为分组标识列,然后利用 AVG() 求取分组之后每个部门的平均工资,就可以得到最终的结果了。
【答案】
SELECT deptid, avg(sal) FROM emp GROUP BY deptid;
9. 查询出每个部门员工的人数。
【分析】
这个题目和上一个题目类似,以 emp 表中的 deptid 列作为分组标识列,然后利用 count() 函数就可以获取每个部门的总人数了。
【答案】
SELECT deptid, count(*) FROM emp GROUP BY deptid;
10. 查询出每个岗位最高薪水、最低薪水以及人数。
【分析】
相比之前两个分组查询来说,要实现这个查询我们需要用到 max()、min()、count(),可以帮助大家更好的理解分组查询。
【答案】
SELECT job, max(sal), min(sal), count(*) FROM emp GROUP BY job;
PS:关于MySQL数据库的基础内容已经为大家介绍完了,如果您如想要了解更多MySQL数据库操作内容的话,可以点击公众号中的菜单查看相关的视频课程,希望这些内容可以为您提供一定的帮助,当然也欢迎您将这些内容转发给您周围的同事或朋友,感谢您的支持和帮助!
领取专属 10元无门槛券
私享最新 技术干货