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

測試人員由於工作原因要經常檢查數據庫的數據是否正確,這個時候就需要頻繁使用多表查詢。

​    在多表查詢中,應用最多的就是內連接,其次就是子查詢。

​    爲什麼子查詢是在工作中應用也有這麼廣泛的應用呢?原因在於子查詢非常方便靈活,所以在測試工作中會經常使用。

​        但尷尬的是,正式因爲子查詢太靈活,很多測試新手使用並不能很好掌握導致放棄,所以特撰寫本文來分享子查詢的應用規律。本文主要分爲以下幾個步驟:

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.文字分析示意圖(重要)

舉例我們現在已建好的表中,現在要求的就是“王昭君的工資”,按照示意圖用子查詢應該怎麼做呢?

⑴.判斷哪個表爲主表(確保所求字段所在的表爲主表),哪個表爲子表。
分析:題意要求“王昭君的工資”,所求的字段是工資,所以工資字段所在的工資表salary就是主表,要放在括號外面。相應的,王昭君所在的員工表employees就是子表,要放在括號裏面。

⑵.(關鍵點1)判斷兩表的連接字段,[也是找兩表中意義相同的字段]
分析:兩個表要發生關係,也是要去找意義相同的字段,爲僱員字段,也叫empid字段 這是關鍵點1

⑶.寫出主表語句 “select * from  主表 where  連接字段  in ()”
分析:因爲子查詢一般都是做條件用的,而where又是條件查詢的關鍵詞,所以一般子查詢都是放在where後面。where做條件查詢時,前面一定是表,後面一定是字段。爲什麼連接字段後面不用“=”而用“in”,原因是子查詢可能返回結果爲多個,所以用in更合適。()是子查詢佔位符

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

⑸.結合,就是將子查詢放在處查詢內部

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內連接的方法去求“王昭君的薪資”,你就知道子查詢是多麼簡單了。
不信,你用內連接的方法求一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章