JavaEE鸿蒙应用开发HTML&JS+前端Python+大数据开发人工智能开发电商视觉设计软件测试新媒体+短视频直播运营产品经理集成电路应用开发(含嵌入式)Linux云计算+运维开发C/C++拍摄剪辑+短视频制作PMP项目管理认证电商运营Go语言与区块链大数据PHP工程师Android+物联网iOS.NET

测试高薪必看:5步教测试人员如何快速破解数据库查询题

来源:黑马程序员

浏览6594人

2020.03.05

Mysql查询题,不仅出境评率高,而且非常影响薪资谈判,所以地位非常重要
1. 几乎所有的软件测试题都会有Mysql查询练习,薪资高的大公司,由于应聘者多,所以甄选出更优秀的测试人员,往往会设置一两道特别难的Mysql查询题。
2. 如果我们其他题目都答的很好,但是Mysql查询难题答的不好,和可能在面试竞争中被PK下去,导致自己和心仪的公司失之交臂。就算是竞争对手不强侥幸获胜,也会让我们在后面薪资谈判上吃亏。
3. 反之,如果Mysql查询难题练习不仅正确,而且解题快,那么就会给用人单位留下技术强悍的好印象,从而立刻甩开其他竞争者。不仅薪资谈判上会占据有利地位,也有利于自己在公司未来的发展。

但尴尬的是,很多测试新手拿到题目之后却往往确不知道如何解题,更别说Mysql查询难题了。为让大家更好掌握数据库查询题技巧,特撰写技术文章给大家介绍。本文主要分为以下几个步骤:

1. 第一步, 准备建表语句
2. 第二步,将建表语句输入到navicat中建立三个表
3. 第三步,了解查询题做题三步骤
4. 第四步,做题验证步骤
5. 第五步,总结

#### 一. 第一步 —— 准备建表语句

1.准备sql数据

```
-- 员工表 employees
-- 工资表 salary
-- 部门表 departments
create table departments (
deptid int(10) primary key,
deptname varchar(20) not null -- 部门名称
);
insert into departments values ('1001', '市场部');
insert into departments values ('1002', '测试部');
insert into departments values ('1003', '开发部');

create table employees (
empid int(10) primary key,
empname varchar(20) not null, -- 姓名
sex varchar(4) default null, -- 性别
deptid int(20) default null, -- 部门编号
jobs varchar(20) default null, -- 岗位
politicalstatus varchar(20) default null, -- 政治面貌
leader int(10) default null
);

insert into employees values ('1', '王昭君', '女', '1003', '开发', '群众', '9');
insert into employees values ('2', '诸葛亮', '男', '1003', '开发经理', '群众', null);
insert into employees values ('3', '张飞', '男', '1002', '测试', '团员', '4');
insert into employees values ('4', '白起', '男', '1002', '测试经理', '党员', null);
insert into employees values ('5', '大乔', '女', '1002', '测试', '党员', '4');
insert into employees values ('6', '孙尚香', '女', '1001', '市场', '党员', '12');
insert into employees values ('7', '百里玄策', '男', '1001', '市场', '团员', '12');
insert into employees values ('8', '小乔', '女', '1002', '测试', '群众', '4');
insert into employees values ('9', '百里守约', '男', '1003', '开发', '党员', '9');
insert into employees values ('10', '妲己', '女', '1003', '开发', '团员', '9');
insert into employees values ('11', '李白', '男', '1002', '测试', '团员', '4');
insert into employees values ('12', '孙膑', '男', '1001', '市场经理', '党员', null);

create table salary (
sid int(10) primary key,
empid int(10) not null,
salary int(10) not null -- 工资
);

insert into salary values ('1', '7', '2100');
insert into salary values ('2', '6', '2000');
insert into salary values ('3', '12', '5000');
insert into salary values ('4', '9', '1999');
insert into salary values ('5', '10', '1900');
insert into salary values ('6', '1', '3000');
insert into salary values ('7', '2', '5500');
insert into salary values ('8', '5', '2000');
insert into salary values ('9', '3', '1500');
insert into salary values ('10', '8', '4000');
insert into salary values ('11', '11', '2600');
insert into salary values ('12', '4', '5300');
```

## 二.第二步——将建表语句输入到navicat中建立三个表

#### 1)新建数据库test
1580800639142.png 
#### 2)将sql语句输入到查询编辑器中,运行

1583387345874707.png
#### 3)创建数据表并黏贴到excel中
1580803071724.png

1580805968822.png

## 三. 第三步 —— 了解查询题做题三步骤

```
-- 1.看题目字段来源于哪些表,如果是多表,就用内连接
-- (暂不用子查询,除非自己能明确能用子查询或题意要求用子查询)

-- 2.根据题意:灵活选择查询命令,多个查询命令排除先后顺序是
--  where过滤[的]
--  分组(1)显性:每,各 2)隐性:过滤总数[如人数或其他聚合函数]
--  haiving(的)
--  排序[最高的]
--  取值[前几名]

-- 3. 根据题意,select取字段
```
## 四. 第四步 ——做题验证步骤

#### 问题1:列出市场部的所有女职工的姓名和政治面貌

1)做题步骤
1580805038050.png
2)得到题目答案

> ```
> select deptname,count(*) from departments as d inner join employees as e on d.deptid=e.deptid where politicalstatus='党员' group by deptname
> ```

#### 2.显示工资最高的前3名职工的职工号和姓名

1)做题步骤

1580805712905.png 
2)得到题目的答案

> ```
> select e.empid,empname,salary from salary as s inner join employees as e on s.empid=e.empid order by salary desc limit 3
> ```

## 五、总结

```
-- 1.看题目字段来源于哪些表,如果是多表,就用内连接
-- (暂不用子查询,除非自己能明确能用子查询或题意要求用子查询)

-- 2.根据题意:灵活选择查询命令,多个查询命令排除先后顺序是
--  where过滤[的]
--  分组(1)显性:每,各 2)隐性:过滤总数[如人数或其他聚合函数]
--  haiving(的)
--  排序[最高的]
--  取值[前几名]

-- 3. 根据题意,select取字段
```
按照上面的做题步骤,赶紧来试试下面这几道题吧:

1. 列出市场部的所有女职工的姓名和政治面貌
2. 显示所有职工的姓名、部门名和工资数
3. 列出工资在1000-2000之间的所有职工姓名