测试人员由于工作原因要经常检查数据库的数据是否正确,这个时候就需要频繁使用多表查询。
在多表查询中,应用最多的就是内连接,其次就是子查询。
为什么子查询是在工作中应用也有这么广泛的应用呢?原因在于子查询非常方便灵活,所以在测试工作中会经常使用。
但尴尬的是,正式因为子查询太灵活,很多测试新手使用并不能很好掌握导致放弃,所以特撰写本文来分享子查询的应用规律。本文主要分为以下几个步骤:
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
#### 2)将sql语句输入到查询编辑器中,运行
#### 3)创建数据表并黏贴到excel中
## 三. 第三步 —— 了解子查询题做题3步骤
#### 1.明确题目要求:
```
要查询“王昭君的工资”
```
#### 2.明确什么是子查询概念
```
典型的子查询语句是sql语句中带有()的,如下面sql语句所示:
select * from scores where studentNo in (select studentNo from students where age=18)
在括号里面的查询叫子查询,在括号里面的表叫做子表
在括号外面的查询叫主查询,在括号外面的表叫做主表
```
3.子查询做题示意图(这里只介绍更为复杂的多表子查询,重要)
#### 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.结合主查询写出子查询语句(子查询目标:将题目所求字段改为连接字段)
```
## 四. 第四步 ——做题验证步骤
> 得到“王昭君的薪资”的sql语句就为
```
select * from salary where empid in (select empid from employees where empname='王昭君')
补充:为什么子查询方便,因为主查询缺什么(empid),子查询就去查什么
```
## 五、总结
子查询的做题步骤就分为以下三步:
> 1.分清主表和子表+两表的连接字段(在大脑中过)
> 2.写出主查询语句select * from 主表 where 连接字段 in ()
> 3.结合主查询写出子查询语句(子查询目标:将题目所求字段改为连接字段)
>
> 补充:为什么子查询方便,因为主查询缺什么,子查询就去查什么
相比inner join内连接的方法去求“王昭君的薪资”,你就知道子查询是多么简单了。
不信,你用内连接的方法求一下。
只要互联网还在发展,软件测试岗位就一直被需要!
软件测试已经不再只是点点点了,如果只停留在点点点,那么有可能会消失,但是现在测试已经向自动化测试方向发展了
人生如逆水行舟,不进则退。于其浪费时间的怨天尤人,不如积极根据环境做出判断,抓住机遇,迎接挑战。
掌握一门扎实的技术,未来终将美好。软件测试不会让你失望的!
互联网不倒,软件测试就不会消亡
我们先来聊聊软件测试会不会被取代,在2016年左右,阿里搞过一次全栈工程师运动,一项很重要的环节就是“去掉测试岗”。
测试工程师必须转岗做开发。而不管是后端还是前端,所有人都必须掌握测试技能。最后,该运动以失败告终。
通过这个事件,小编想说,阿里这种大厂聚集了大量高水平开发人员,都失败了。可见,小厂若想继续想维持开发团队,去掉或者替换掉测试岗那更是痴人说梦。这充分说明,只要互联网不倒,软件测试就不会消亡。
· 软件测试需求量不仅稳健,还会加大
疫情前,人们的“吃、穿、住、用、行”方方面面都有对应APP软件。疫情后,复工最快,最迅速的企业也都是通过互联网技术实现。
过去,互联网技术只是让某些企业活的好。未来,互联网技术是很多企业能够活下去的关键点。互联网技术成为新的基建,互联网“基建”化就决定了软件测试行业的缺口会一直扩大。
并且,软件测试岗位,已不仅局限于互联网企业,现已逐步深入到实体产业,金融,通信,医疗,视频VR,汽车,手机…
· 软件测试岗位薪资一路高涨
随着人工智能时代的到来,IT行业受到了越来越多人的重视。软件测试作为把控软件质量必不可少的环节,其重要性可见一斑。
据第三方平台统计,北京软件测试工程师的平均薪资为16.2K,除了一线城市外,随着互联网行业逐渐下沉,在新一线城市、各大省会城市的就业薪资也很可观。
什么是软件测试?
软件测试(英语:Software Testing),描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。
换句话说,软件测试是一种实际输出与预期输出之间的审核或者比较过程。
软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
测试工程师职责和能力
核心职责
了解项目需求内容,从用户的角度提出自己的测试看法;
编写合理的测试计划并与项目整体计划有机地整合在一起;
编写覆盖率高的测试用例;
认真仔细的实施测试工作,并提交测试报告以供项目参考;
进行缺陷跟踪和分析。
软件测试岗位具体是做什么的?
软件测试就是在测试这个软件是不是能够完全按照需求运行。软件测试岗再简单点说就是找BUG。检查软件产品是否符合用户的需求,检查程序的业务逻辑和代码逻辑,提高产品的易用性。
检查软件产品是否符合用户的需求。如果用户提出的各种功能和需求,产品没有满足的话,也就根本提不上交付产品了,因为根本达不到交付程度,所以测试人员的工作非常必要。
检查程序的业务逻辑和代码逻辑。每个人对一件事的理解不同,同理不同人员对需求的理解可能会存在差异,所以适当的时候要检查下代码是否有业务逻辑错误和代码逻辑错误,当然达不到检测程序的,可以通过手工测试来做。
提高产品的易用性。若是一个软件产品不好用,用户的学习成本太高,那么产品的接受满意度就会下降,更别提产品的市场占有率了。
一些其他的错误。凡是导致软件产品不能正常使用的,功能被阻塞的,都是要提交bug的,让程序员再进行一下修改和完善。
能力要求
一、一般能力:包括表达、交流、协调、管理、质量意识、软件开发过程方法、软件工程等;
二、测试技能及方法:包括测试基本概念及方法、对测试工具的掌握、对专业测试标准的熟悉程度等;
三、测试规划能力:包括风险分析及防范能力、测试目标及计划的制定能力等;
四、测试执行能力:包括测试数据/脚本/用例的制定能力、测试比较及分析能力、缺陷记录及处理能力;
五、测试分析、报告和改进能力:包括测试度量、统计技术、测试报告、过程监测及持续改进能力。
软件测试现状和发展
行业现状
1.测试配比低
国外软件公司软件测试和软件开发人员的配比是1:1,而国内软件公司测试人员与开发人员的比例在1:4及以上的高达55.13%
2.岗位需求量大
目前国内软件测试行业每年约新增20万岗位,大部分IT院校尚未开设软件测试专业,所以每年企业和学校培养的测试人才还不足需求的1/10。
3.高端测试人才急缺
根据对软件测试从业人员的调查,目前从业人员最希望提升的技能是自动化和性能测试,软件测试行业经过十年的高速增长之后,高端测试人才急缺。
4.任职要求提升
测试理论、测试计划与方案、bug跟踪管理、测试报告、环境搭建、数据库这些都是必要的,更多还要求有编程基础、掌握主流测试工具使用、能执行更高技术的测试工作
总的来说,软件测试行业正在黄金发展期,处于上升势头,整个行业前途光明。
零基础学软件测试的路线规划
(1)基础部分
这一阶段需要掌握手工测试的相关技能,因此要学习测试基础(计算机基础、DOS命令、HTML、CSS、JS、测试入门)、Linux和数据库(操作系统、Linux安装常用命令、MySQL基础、MySQL高级、Redis数据库)以及功能测试(测试理论、测试用例设计、缺陷管理、Web项目、APP项目测试、Fiddler)。
(2)中级部分
这一阶段需要掌握自动化测试的相关技能,因此要学习Python编程(Python开发环境、Python基础、面向对象、异常处理、模块和包)、Web自动化(Selenium环境、常用API、UnitTest框架、PO模式、数据驱动、日志收集、项目实战)和移动自动化(Appium安装、Appium原理、常用API、Pytest、AllureJenkins等)。
(3)高级部分
这一阶段需要掌握接口测试的相关技能,因此要学习接口自动化(接口基础理论、JMeter常用组件、requests库、mock、框架设计等)、性能测试(性能测试概念、测试方案、常用指标分析、Vugen、Controller、Analysis等)和单元测试和shell编程(单元测试概念、测试流程、测试策略实现、测试报告、shell脚本、常见算法等)。
综上所述,零基础学IT选择软件测试还是相当有前途的
测试工程师—软件质量守护者!
种一颗树最好的时间是10年前,其次是现在!
原地徘徊一千步,抵不上向前迈出第一步!
尝试改变自己和未来,你的人生永远掌握在自己手中!
改变命运,软件测试是你进入IT行业的最佳快车道!
第一阶段 功能测试
学前导读:学习本阶段内容,可全流程功能测试解决方案、Web自动化测试解决方案、数据分离解决方案、自动化测试报告解决方案、日志收集解决方案。
1.2022全网首发、最适合新手的软件测入门到实战教程上线啦!
真正的从入门到精通,包含了基础+项目实战,所有案例实战操作均图文并茂,真正实现一套全通关!
软件测试2022最新视频教程,软件测试基础入门到项目实战(涵盖软件测试基础+黑马头条项目实战)
2.软件测试入门到精通
软件测试是一种实际输出与预期输出之间的审核或者比较过程。软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。本课程共5天,针对零基础小白录制。零基础入门的必学课。
软件测试从入门到精通_软件测试基础教程
3. Linux系统2天快速入门
本视频包含Linux操作系统介绍、Linux的常用命令、vi编辑器。学习掌握本阶段内容,可具备Linux项目搭建能力。
Linux系统操作教程2天快速入门linux项目搭建
4. 软件测试MySQL数据库知识精讲+项目实战
本视频包含数据安装,数据表操作、数据操作-增删改查、条件查询、排序、聚合函数、分组、分页、连接查询、自关联、子查询、子查询演练。学习本课程内容,可具备数据库校验能力;还可以快速、规范的掌握数据库增删改查操作。
软件测试工程师必备MySQL数据库,mysql系统精讲+课后练习
第二阶段 Python编程
学前导读:学习本阶段内容,可掌握Python语法, 具备编程能力; 能建立编程思维以及面向对象程序设计思想; 能掌握UnitTest框架管理测试用例。
10天玩转Python软件测试
学习本阶段内容,可掌握Python语法, 具备编程能力; 能建立编程思维以及面向对象程序设计思想; 能掌握UnitTest框架管理测试用例。
Python自动测试教程,python从基础到UnitTest框架管理测试用例
第三阶段 UI自动化
学前导读:ui自动化大体分为web自动化和App自动化,在自动化测试领域中占比很大,经常使用。
1. 软件测试web自动化测试精讲与实战
本课程将教会大家搭建Web自动化和移动自动化测试环境;掌握Web自动化测试流程和脚本编写;掌握移动自动化测试中元素的定位方法、元素操作和手势操作;熟练掌握ADB工具的使用; 掌握PO模式的设计思想,并能够对页面进行封装;掌握数据驱动的实现方式; 能够在实际项目灵活运用自动化的相关技术。
软件测试web自动化测试,Web自动化流程精讲和移动自动化测试环境
2.零基础入门移动自动化——Appium框架
本课程会详细讲解Appium框架,Appium是一个开源的、跨平台的自动化测试框架,该框架适用于Native Application、Mobile Web Application或Hybrid Application的自动化测试。
零基础入门移动自动化测试——Appium框架
3. 轻松教你使用Appium进行IOS真机自动化测试
本套课程,将环境安装的步骤和注意事项呈现给学员,模拟器到真机实操,都进行演示讲解。内容丰富,生动形象,学完即可完成IOS端环境安装及实操。
轻松教你使用Appium进行IOS真机自动化测试
第四阶段 接口自动化
学前导读:接口测试是所有自动化测试应用频率最高部分。此阶段共分成14个部分进行详讲。
接口测试精讲+传智健康实战教程
本教程会涉及HTTP,Postman,Pymysql,requests库,集成UnitTes,Dubbo等诸多工具,最后用传智健康项目进行本阶段项目实战。
4天玩转接口测试,接口重点全解析+传智健康项目实战(包含requests库,集成UnitTes,Dubbo等诸多工具)
第五阶段 性能测试
学前导读:性能测试属于高级测试范畴,对于薪资的提升帮助很大,本阶段视频讲解性能测试环境搭建,JMeter工具的使用,性能测试监控、分析和调优方法。
4天快速入门性能测试
本视频通过性能测试基础理论及JMeter工具的学习;通过轻商城项目实战,带学员掌握性能测试需求分析、性能测试计划、测试用例设计、测试脚本开发、性能监控、性能分析和调优、性能测试报告总结。
性能测试全套教程,4天快速入门性能测试+项目商城实战(含JMeter工具等)
第六阶段 综合项目强化
学前导读:通过微信小程序、金融项目两个实战项目综合强化功能测试、接口测试、性能测试。
1. 微信小程序自动化测试实战
本视频涵盖:微信小程序基础介绍、Ego微商项目介绍、Ego微商项目部署、Ego微商小程序计划篇、Ego微商小程序设计篇、Ego微商小程序执行总结篇、Ego微商小程序接口测试篇、持续集成。
软件测试微信小程序自动化测试实战
2. 软件测试4天搞定金融项目
本视频讲解金融项目功能测试解决方案、真实项目测试体验解决方案、复杂业务接口测试解决方案 接口加解密测试解决方案、数据分离解决方案 持续集成解决方案、自动化测试报告解决方案、高并发测试解决方案。
软件测试4天快速搞定金融项目功能测试实战教程