传智播客旗下品牌:|||||

全国咨询/投诉热线:400-618-4000

什么是子查询?子查询的应用规律解析[软件测试培训]

更新时间:2020年03月08日18时54分 来源:传智播客 浏览次数:

测试人员由于工作原因要经常检查数据库的数据是否正确,这个时候就需要频繁使用多表查询。

在多表查询中,应用最多的就是内连接,其次就是子查询。

为什么子查询是在工作中应用也有这么广泛的应用呢?原因在于子查询非常方便灵活,所以在测试工作中会经常使用。

但尴尬的是,正式因为子查询太灵活,很多测试新手使用并不能很好掌握导致放弃,所以特撰写本文来分享子查询的应用规律。本文主要分为以下几个步骤:

第一步: 准备建表语句

第二步:将建表语句输入到navicat中建立三个表(实际中只用了2个表)

第三步:了解查询题做题3步骤

第四步:做题验证步骤

第五步:总结

一、第一步:准备建表语句


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

1583653570708_01新建数据库test.png


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

1583653585900_02将sql语句输入到查询编辑器中.png


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

1583653598443_03创建数据表并黏贴到excel中.png

1583653611254_04创建数据表并黏贴到excel中.png


三、了解子查询题做题3步骤

1.明确题目要求:

要查询“王昭君的工资”

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

典型的子查询语句是sql语句中带有()的,如下面sql语句所示:
select * from scores where studentNo in (select studentNo from students where age=18)

在括号里面的查询叫子查询,在括号里面的表叫做子表, 在括号外面的查询叫主查询,在括号外面的表叫做主表

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

1583653629028_05子查询做题示意图.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)结合主查询写出子查询语句(子查询目标:将题目所求字段改为连接字段)

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

1583653647692_06做题验证步骤.png

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

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

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

五、总结

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

  1. 分清主表和子表+两表的连接字段(在大脑中过)

  2. 写出主查询语句select * from 主表 where 连接字段 in ()

  3. 结合主查询写出子查询语句(子查询目标:将题目所求字段改为连接字段)

补充:为什么子查询方便,因为主查询缺什么,子查询就去查什么。相比inner join内连接的方法去求“王昭君的薪资”,你就知道子查询是多么简单了。不信,你用内连接的方法求一下。

猜你喜欢:

功能测试、性能测试和自动化测试三者之间有什么差异?

javaee

python

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

uids

北京校区

    14天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    20天免费试学

    基础班入门课程限时免费

    申请试学名额

    8天免费试学

    基础班入门课程限时免费

    申请试学名额

    20天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    0天免费试学

    基础班入门课程限时免费

    申请试学名额

    12天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    10天免费试学

    基础班入门课程限时免费

    申请试学名额
    胜通彩票平台 易盈彩票平台 2000彩票平台 易中彩票平台 第1彩票平台 39彩票平台 懂彩帝彩票平台 易购竞彩平台 鸿禾彩票平台 博雅彩平台