更新時間:2020-03-08 來源:黑馬程序員 瀏覽量:
測試人員由于工作原因要經常檢查數(shù)據(jù)庫的數(shù)據(jù)是否正確,這個時候就需要頻繁使用多表查詢。
在多表查詢中,應用最多的就是內連接,其次就是子查詢。
為什么子查詢是在工作中應用也有這么廣泛的應用呢?原因在于子查詢非常方便靈活,所以在測試工作中會經常使用。
但尷尬的是,正式因為子查詢太靈活,很多測試新手使用并不能很好掌握導致放棄,所以特撰寫本文來分享子查詢的應用規(guī)律。本文主要分為以下幾個步驟:
第一步: 準備建表語句
第二步:將建表語句輸入到navicat中建立三個表(實際中只用了2個表)
第三步:了解查詢題做題3步驟
第四步:做題驗證步驟
第五步:總結
一、第一步:準備建表語句
1.準備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, -- 部門編號
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ā)經理', '群眾', 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', '開發(fā)', '黨員', '9');
insert into employees values ('10', '妲己', '女', '1003', '開發(fā)', '團員', '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)新建數(shù)據(jù)庫test
2)將sql語句輸入到查詢編輯器中,運行
3)創(chuàng)建數(shù)據(jù)表并黏貼到excel中
三、第三步 —— 了解子查詢題做題3步驟
1.明確題目要求:
要查詢“王昭君的工資”
2.明確什么是子查詢概念
典型的子查詢語句是sql語句中帶有()的,如下面sql語句所示:
select * from scores where studentNo in
(select studentNo from students where age=18)
在括號里面的查詢叫子查詢,在括號里面的表叫做子表,
在括號外面的查詢叫主查詢,在括號外面的表叫做主表
3.子查詢做題示意圖(這里只介紹更為復雜的多表子查詢,重要)
4.文字分析示意圖(重要)
舉例我們現(xiàn)在已建好的表中,現(xiàn)在要求的就是“王昭君的工資”,按照示意圖用子查詢應該怎么做呢?
1)判斷哪個表為主表(確保所求字段所在的表為主表),哪個表為子表。
分析:題意要求“王昭君的工資”,所求的字段是工資,所以工資字段所在的工資表salary就是主表,要放在括號外面。相應的,王昭君所在的員工表employees就是子表,要放在括號里面。
2)(關鍵點1)判斷兩表的連接字段,[也是找兩表中意義相同的字段] 分析:兩個表要發(fā)生關系,也是要去找意義相同的字段,為雇員字段,也叫empid字段
這是關鍵點1
3)寫出主表語句 “select * from 主表 where 連接字段 in ()”
分析:因為子查詢一般都是做條件用的,而where又是條件查詢的關鍵詞,所以一般子查詢都是放在where后面。where做條件查詢時,前面一定是表,后面一定是字段。為什么連接字段后面不用“=”而用“in”,原因是子查詢可能返回結果為多個,所以用in更合適。()是子查詢占位符
4)寫出子表語句 “select 連接字段 from 子表 where ...”
分析:看示意圖有一塊文字非常重要“子查詢語句所求的目標(關鍵點)2,往往是題目中所求字段,替換成連接字段即可”,比如我們的題目是求“王昭君的工資”,那么子查詢求的是“王昭君的兩表連接字段”,為“王昭君的empid”,所以就是“select
連接字段 from 子表 where ...”
5)結合,就是將子查詢放在處查詢內部
5.從文字分析示意圖,可將子查詢5步驟優(yōu)化為3步驟
1)分清主表和子表+兩表的連接字段(第1,2步優(yōu)化為1步,在大腦中過)
2)寫出主查詢語句select * from 主表 where 連接字段 in ()
3)結合主查詢寫出子查詢語句(子查詢目標:將題目所求字段改為連接字段)
四. 第四步:做題驗證步驟
得到“王昭君的薪資”的sql語句就為
select * from salary where empid in (select empid from employees where
empname='王昭君')
補充:為什么子查詢方便,因為主查詢缺什么(empid),子查詢就去查什么
五、總結
子查詢的做題步驟就分為以下三步:
分清主表和子表+兩表的連接字段(在大腦中過)
寫出主查詢語句select * from 主表 where 連接字段 in ()
結合主查詢寫出子查詢語句(子查詢目標:將題目所求字段改為連接字段)
補充:為什么子查詢方便,因為主查詢缺什么,子查詢就去查什么。相比inner join內連接的方法去求“王昭君的薪資”,你就知道子查詢是多么簡單了。不信,你用內連接的方法求一下。
猜你喜歡