更新時(shí)間:2020-03-08 來源:黑馬程序員 瀏覽量:
測(cè)試人員由于工作原因要經(jīng)常檢查數(shù)據(jù)庫(kù)的數(shù)據(jù)是否正確,這個(gè)時(shí)候就需要頻繁使用多表查詢。
在多表查詢中,應(yīng)用最多的就是內(nèi)連接,其次就是子查詢。
為什么子查詢是在工作中應(yīng)用也有這么廣泛的應(yīng)用呢?原因在于子查詢非常方便靈活,所以在測(cè)試工作中會(huì)經(jīng)常使用。
但尷尬的是,正式因?yàn)樽硬樵兲`活,很多測(cè)試新手使用并不能很好掌握導(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', '市場(chǎng)部');
insert into departments values ('1002', '測(cè)試部');
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', '測(cè)試', '團(tuán)員', '4');
insert into employees values ('4', '白起', '男', '1002', '測(cè)試經(jīng)理', '黨員', null);
insert into employees values ('5', '大喬', '女', '1002', '測(cè)試', '黨員', '4');
insert into employees values ('6', '孫尚香', '女', '1001', '市場(chǎng)', '黨員', '12');
insert into employees values ('7', '百里玄策', '男', '1001', '市場(chǎng)', '團(tuán)員', '12');
insert into employees values ('8', '小喬', '女', '1002', '測(cè)試', '群眾', '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', '測(cè)試', '團(tuán)員', '4');
insert into employees values ('12', '孫臏', '男', '1001', '市場(chǎng)經(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ù)庫(kù)test
2)將sql語句輸入到查詢編輯器中,運(yùn)行
3)創(chuàng)建數(shù)據(jù)表并黏貼到excel中
三、第三步 —— 了解子查詢題做題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ù)雜的多表子查詢,重要)
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)證步驟
得到“王昭君的薪資”的sql語句就為
select * from salary where empid in (select empid from employees where
empname='王昭君')
補(bǔ)充:為什么子查詢方便,因?yàn)橹鞑樵內(nèi)笔裁?empid),子查詢就去查什么
五、總結(jié)
子查詢的做題步驟就分為以下三步:
分清主表和子表+兩表的連接字段(在大腦中過)
寫出主查詢語句select * from 主表 where 連接字段 in ()
結(jié)合主查詢寫出子查詢語句(子查詢目標(biāo):將題目所求字段改為連接字段)
補(bǔ)充:為什么子查詢方便,因?yàn)橹鞑樵內(nèi)笔裁?,子查詢就去查什么。相比inner join內(nèi)連接的方法去求“王昭君的薪資”,你就知道子查詢是多么簡(jiǎn)單了。不信,你用內(nèi)連接的方法求一下。
猜你喜歡
測(cè)試人員如何更快速的使用不同自動(dòng)化測(cè)試工具呢?
postman如何使用集合斷言?[運(yùn)維培訓(xùn)]
2020-03-08如何對(duì)線上bug進(jìn)行分類?[軟件測(cè)試培訓(xùn)]
2020-02-27軟件測(cè)試就業(yè)方向是哪些?[軟件測(cè)試培訓(xùn)]
2020-02-27Jenkins從環(huán)境配置到項(xiàng)目開發(fā)詳細(xì)視頻教程
2020-02-25Kubernetes(K8S)入門視頻教程[黑馬程序員]
2020-02-20學(xué)科口碑是生命,逆風(fēng)之下要更強(qiáng),看軟件測(cè)試學(xué)科疫情下的奮戰(zhàn)故事
2020-02-17