测试高薪必备:3步教测试人员破解子查询

news/2024/6/18 4:43:31 标签: 压力测试, 测试工具, 单元测试

测试人员由于工作原因要经常检查数据库的数据是否正确,这个时候就需要频繁使用多表查询。
在多表查询中,应用最多的就是内连接,其次就是子查询。
为什么子查询是在工作中应用也有这么广泛的应用呢?原因在于子查询非常方便灵活,所以在测试工作中会经常使用。
但尴尬的是,正式因为子查询太灵活,很多测试新手使用并不能很好掌握导致放弃,所以特撰写本文来分享子查询的应用规律。本文主要分为以下几个步骤:

  1. 第一步, 准备建表语句
  2. 第二步,将建表语句输入到navicat中建立三个表(实际中只用了2个表)
  3. 第三步,了解查询题做题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

1581506249414.png

2)将sql语句输入到查询编辑器中,运行

1581506266666.png

3)创建数据表并黏贴到excel中

1581506286775.png

1581506302443.png

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

1.明确题目要求:

要查询“王昭君的工资”

2.明确什么是子查询概念

典型的子查询语句是sql语句中带有()的,如下面sql语句所示:
select * from scores where studentNo in (select studentNo from students where age=18)
在括号里面的查询叫子查询,在括号里面的表叫做子表
在括号外面的查询叫主查询,在括号外面的表叫做主表

3.子查询做题示意图(这里只介绍更为复杂的多表子查询,重要)

1581506325033.png

4.文字分析示意图(重要)

举例我们现在已建好的表中,现在要求的就是“王昭君的工资”,按照示意图用子查询应该怎么做呢?

1.判断哪个表为主表(确保所求字段所在的表为主表),哪个表为子表。
分析:题意要求“王昭君的工资”,所求的字段是工资,所以工资字段所在的工资表salary就是主表,要放在括号外面。相应的,王昭君所在的员工表employees就是子表,要放在括号里面。

2.(关键点1)判断两表的连接字段,[也是找两表中意义相同的字段]
分析:两个表要发生关系,也是要去找意义相同的字段,为雇员字段,也叫empid字段 这是关键点1

3.写出主表语句 “select * from 主表 where 连接字段 in ()”
分析:因为子查询一般都是做条件用的,而where又是条件查询的关键词,所以一般子查询都是放在where后面。where做条件查询时,前面一定是表,后面一定是字段。为什么连接字段后面不用“=”而用“in”,原因是子查询可能返回结果为多个,所以用in更合适。()是子查询占位符

4.写出子表语句 “select 连接字段 from 子表 where …”
分析:看示意图有一块文字非常重要“子查询语句所求的目标(关键点)2,往往是题目中所求字段,替换成连接字段即可”,比如我们的题目是求“王昭君的工资”,那么子查询求的是“王昭君的两表连接字段”,为“王昭君的empid”,所以就是“select 连接字段 from 子表 where …”

5.结合,就是将子查询放在处查询内部

5.从文字分析示意图,可将子查询5步骤优化为3步骤

1.分清主表和子表+两表的连接字段(第1,2步优化为1步,在大脑中过)
2.写出主查询语句select * from 主表 where 连接字段 in ()
3.结合主查询写出子查询语句(子查询目标:将题目所求字段改为连接字段)

四. 第四步 ——做题验证步骤

1581506341898.png

得到“王昭君的薪资”的sql语句就为

select * from salary where empid in (select empid from employees where empname=‘王昭君’)

补充:为什么子查询方便,因为主查询缺什么(empid),子查询就去查什么

五、总结

子查询的做题步骤就分为以下三步:

1.分清主表和子表+两表的连接字段(在大脑中过)
2.写出主查询语句select * from 主表 where 连接字段 in ()
3.结合主查询写出子查询语句(子查询目标:将题目所求字段改为连接字段)

补充:为什么子查询方便,因为主查询缺什么,子查询就去查什么

相比inner join内连接的方法去求“王昭君的薪资”,你就知道子查询是多么简单了。

不信,你用内连接的方法求一下。


基础巩固

软件测试入门到项目实战,7小时从小白到白领的软件测试快速入门课程

软件测试实战教程 《学车不》APP实战软件测试

首次公开丨黑马头条软件测试实战项目 完整版

软件测试基础手把手带你Excel实现管理接口用例

软件测试基础-手把手教你搞懂测试环境项目部署

软件测试教程Charles抓包工具测试实战

软件测试工程师必备MySQL数据库,mysql系统精讲+课后练习

软件测试进阶教程微信小程序测试实战—全网首发


http://www.niftyadmin.cn/n/1501262.html

相关文章

JAVA比较两张图相似度

代码: package com.uiwho.com;import javax.imageio.*; import java.awt.image.*; import java.awt.*;//Color import java.io.*; public class PhotoDigest { public static void main(String[] args) throws Exception { float percent compare(getData("C:…

oracle 索引失效原因

like a%不会 ,like ‘%a’或者 ‘%a%’会导致索引失效

Mac OS X 启动和终止Redis, Mac常用命令,ssh免密

Mac OS X wget http://download.redis.io/redis-stable.tar.gz tar xzf redis-stable.tar.gz cd redis-stable make Redis没有其他外部依赖,安装过程很简单。编译后在 Redis 源代码目录的src文件夹中可以找到若干个可执行程序,最好在编译后直接执行 make…

你还不知道测试的准入准出标准是什么?

测试的准入准出是指什么情况下可以开始当前版本的测试工作,什么情况下可以结束当前版本的测试工作。不同项目、不同公司的测试准入准出标准都会有所不同。下面介绍一些通用的测试准入准出标准。 测试准入准出标准如下。 (1)开发编码结束,开发人员在开发…

metinfo小于v6.2.0版本通杀SQL盲注漏洞分析

0x01 此漏洞是由于未将decode解码后的数据过滤,而直接带入SQL语句中,从而导致SQL盲注漏洞。 0x02 漏洞分析:此处复现为metinfo6.1.3版本,漏洞最初产生为:/app/system/user/web/register.class.php 94~107行&#xff1a…

使用git教程

2019独角兽企业重金招聘Python工程师标准>>> 前言:准备条件: 1、github账号注册:https://github.com/ 2、开源中国git:http://git.oschina.net/ 3、csdn代码托管工具:https://code.csdn.net/ 一、git使用 1…

如何介绍简历中的项目呢?请看软件测试老师的分享

项目经验与工作经验是相辅相成的,但较之于工作经验,项目经验更侧重于表现求职者在某个专业领域内的技能水平(技能水平决定了工资水平)。因而,技术类岗招聘的时候,更注重项目经验。项目介绍是有套路的&#…

Yii 数据库操作

yii2 or查询 // 我们要查询id等于1或者id等于3的数据 $userInfo User::find()->where([or , id 1 , id 3])->all(); // 我们同样可以使用以下方式 $userInfo User::find()->where([or , [ , id , 1] , [ , id , 3]])->all(); // 假如我们要查询id在4&#xff0…