首頁技術(shù)文章正文

測試高薪必備3步教測試人員破解子查詢

更新時(shí)間:2020-03-08 來源:黑馬程序員 瀏覽量:

測試人員由于工作原因要經(jīng)常檢查數(shù)據(jù)庫的數(shù)據(jù)是否正確,這個(gè)時(shí)候就需要頻繁使用多表查詢。

在多表查詢中,應(yīng)用最多的就是內(nèi)連接,其次就是子查詢。

為什么子查詢是在工作中應(yīng)用也有這么廣泛的應(yīng)用呢?原因在于子查詢非常方便靈活,所以在測試工作中會(huì)經(jīng)常使用。

但尷尬的是,正式因?yàn)樽硬樵兲`活,很多測試新手使用并不能很好掌握導(dǎo)致放棄,所以特撰寫本文來分享子查詢的應(yīng)用規(guī)律。本文主要分為以下幾個(gè)步驟:

第一步: 準(zhǔn)備建表語句

第二步:將建表語句輸入到navicat中建立三個(gè)表(實(shí)際中只用了2個(gè)表)

第三步:了解查詢題做題3步驟

第四步:做題驗(yàn)證步驟

第五步:總結(jié)

一、第一步:準(zhǔn)備建表語句


1.準(zhǔn)備sql數(shù)據(jù)

-- 員工表 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', '開發(fā)部');


create table employees (

empid int(10) primary key,

empname varchar(20) not null, -- 姓名

sex varchar(4) default null, -- 性別

deptid int(20) default null, -- 部門編號(hào)

jobs varchar(20) default null, -- 崗位

politicalstatus varchar(20) default null, -- 政治面貌

leader int(10) default null

);


insert into employees values ('1', '王昭君', '女', '1003', '開發(fā)', '群眾', '9');

insert into employees values ('2', '諸葛亮', '男', '1003', '開發(fā)經(jīng)理', '群眾', null);

insert into employees values ('3', '張飛', '男', '1002', '測試', '團(tuán)員', '4');

insert into employees values ('4', '白起', '男', '1002', '測試經(jīng)理', '黨員', null);

insert into employees values ('5', '大喬', '女', '1002', '測試', '黨員', '4');

insert into employees values ('6', '孫尚香', '女', '1001', '市場', '黨員', '12');

insert into employees values ('7', '百里玄策', '男', '1001', '市場', '團(tuán)員', '12');

insert into employees values ('8', '小喬', '女', '1002', '測試', '群眾', '4');

insert into employees values ('9', '百里守約', '男', '1003', '開發(fā)', '黨員', '9');

insert into employees values ('10', '妲己', '女', '1003', '開發(fā)', '團(tuán)員', '9');

insert into employees values ('11', '李白', '男', '1002', '測試', '團(tuán)員', '4');

insert into employees values ('12', '孫臏', '男', '1001', '市場經(jīng)理', '黨員', 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中建立三個(gè)表

1)新建數(shù)據(jù)庫test

1583653570708_01新建數(shù)據(jù)庫test.png


2)將sql語句輸入到查詢編輯器中,運(yùn)行

1583653585900_02將sql語句輸入到查詢編輯器中.png


3)創(chuàng)建數(shù)據(jù)表并黏貼到excel中

1583653598443_03創(chuàng)建數(shù)據(jù)表并黏貼到excel中.png

1583653611254_04創(chuàng)建數(shù)據(jù)表并黏貼到excel中.png


三、第三步 —— 了解子查詢題做題3步驟


1.明確題目要求:

要查詢“王昭君的工資”

2.明確什么是子查詢概念

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

在括號(hào)里面的查詢叫子查詢,在括號(hào)里面的表叫做子表, 在括號(hào)外面的查詢叫主查詢,在括號(hào)外面的表叫做主表

3.子查詢做題示意圖(這里只介紹更為復(fù)雜的多表子查詢,重要)

1583653629028_05子查詢做題示意圖.png

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

舉例我們現(xiàn)在已建好的表中,現(xiàn)在要求的就是“王昭君的工資”,按照示意圖用子查詢應(yīng)該怎么做呢?

1)判斷哪個(gè)表為主表(確保所求字段所在的表為主表),哪個(gè)表為子表。 分析:題意要求“王昭君的工資”,所求的字段是工資,所以工資字段所在的工資表salary就是主表,要放在括號(hào)外面。相應(yīng)的,王昭君所在的員工表employees就是子表,要放在括號(hào)里面。


2)(關(guān)鍵點(diǎn)1)判斷兩表的連接字段,[也是找兩表中意義相同的字段] 分析:兩個(gè)表要發(fā)生關(guān)系,也是要去找意義相同的字段,為雇員字段,也叫empid字段 這是關(guān)鍵點(diǎn)1

3)寫出主表語句 “select * from 主表 where 連接字段 in ()” 分析:因?yàn)樽硬樵円话愣际亲鰲l件用的,而where又是條件查詢的關(guān)鍵詞,所以一般子查詢都是放在where后面。where做條件查詢時(shí),前面一定是表,后面一定是字段。為什么連接字段后面不用“=”而用“in”,原因是子查詢可能返回結(jié)果為多個(gè),所以用in更合適。()是子查詢占位符

4)寫出子表語句 “select 連接字段 from 子表 where ...”

分析:看示意圖有一塊文字非常重要“子查詢語句所求的目標(biāo)(關(guān)鍵點(diǎn))2,往往是題目中所求字段,替換成連接字段即可”,比如我們的題目是求“王昭君的工資”,那么子查詢求的是“王昭君的兩表連接字段”,為“王昭君的empid”,所以就是“select 連接字段 from 子表 where ...”

5)結(jié)合,就是將子查詢放在處查詢內(nèi)部

5.從文字分析示意圖,可將子查詢5步驟優(yōu)化為3步驟

1)分清主表和子表+兩表的連接字段(第1,2步優(yōu)化為1步,在大腦中過)

2)寫出主查詢語句select * from 主表 where 連接字段 in ()

3)結(jié)合主查詢寫出子查詢語句(子查詢目標(biāo):將題目所求字段改為連接字段)

四. 第四步:做題驗(yàn)證步驟

1583653647692_06做題驗(yàn)證步驟.png


得到“王昭君的薪資”的sql語句就為

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

補(bǔ)充:為什么子查詢方便,因?yàn)橹鞑樵內(nèi)笔裁?empid),子查詢就去查什么

五、總結(jié)

子查詢的做題步驟就分為以下三步:

  1. 分清主表和子表+兩表的連接字段(在大腦中過)

  2. 寫出主查詢語句select * from 主表 where 連接字段 in ()

  3. 結(jié)合主查詢寫出子查詢語句(子查詢目標(biāo):將題目所求字段改為連接字段)


補(bǔ)充:為什么子查詢方便,因?yàn)橹鞑樵內(nèi)笔裁矗硬樵兙腿ゲ槭裁?。相比inner join內(nèi)連接的方法去求“王昭君的薪資”,你就知道子查詢是多么簡單了。不信,你用內(nèi)連接的方法求一下。

猜你喜歡

測試人員如何更快速的使用不同自動(dòng)化測試工具呢?


分享到:
在線咨詢 我要報(bào)名
和我們在線交談!