更新時(shí)間:2021-01-20 17:09:30 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1676次
子查詢,又叫內(nèi)部查詢,相對(duì)于內(nèi)部查詢,包含內(nèi)部查詢的就稱為外部查詢。子查詢?cè)试S把一個(gè)查詢嵌套在另一個(gè)查詢當(dāng)中。MySQL子查詢是在MySQL數(shù)據(jù)庫中是使用頻率比較高的一種查詢類型,優(yōu)化子查詢,對(duì)于MySQL數(shù)據(jù)庫的整個(gè)系統(tǒng)的性能也有直接的影響。
子查詢可以包含普通select可以包括的任何子句,比如:distinct、 group by、order by、limit、join和union等;但是對(duì)應(yīng)的外部查詢必須是以下語句之一:select、insert、update、delete、set或者do。子查詢的工作方式是:先處理內(nèi)查詢,由內(nèi)向外處理,外層查詢利用內(nèi)層查詢的結(jié)果嵌套查詢不僅僅可以用于父查詢select語句使用。還可以用于insert、update、delete語句或其他子查詢中。
一、子查詢的組成
1、包含標(biāo)準(zhǔn)選擇列表組件的標(biāo)準(zhǔn)select查詢。
2、包含一個(gè)或多個(gè)表或者視圖名稱的標(biāo)準(zhǔn)from子句。
3、可選的where子句。
4、可選的group by子句。
5、可選的having子句。
二、子查詢的語法規(guī)則
1、子查詢的select查詢總是使用圓括號(hào)括起來。
2、不能包括compute或for.browse子句。
3、如果同時(shí)指定top子句,則可能只包括order by子句。
4、子查詢最多可以嵌套到32層。個(gè)別查詢可能會(huì)不支持32層嵌套。
5、任何可以使用表達(dá)式的地方都可以使用子查詢,只要它返回的是單個(gè)值。
6、如果某個(gè)表只出現(xiàn)在子查詢中二不出現(xiàn)在外部查詢中,那么該表的列就無法包含在輸出中。
三、返回一個(gè)值的子查詢
當(dāng)子查詢的返回值只有一個(gè)時(shí),可以使用比較運(yùn)算符如=、<、>、>=、<=、!=等將富查詢和子查詢連接起來。實(shí)例如下:
1.簡單子查詢
select name,age
from person
where age > ( select age
from person
where name = '張三');
2.like嵌套查詢
select count(distinct(Tname)) --查詢姓“張”的老師的個(gè)數(shù)
from Teacher
where Tname like '張%';
1.in嵌套查詢
in關(guān)鍵字用于where子句中用來判斷查詢的表達(dá)式是否在多個(gè)值的列表中。返回滿足in列表中的滿足條件的記錄。
select name
from person
where countryid in ( select countryid
from country
where countryname = '中國');
2.some嵌套查詢
some在sql中的邏輯運(yùn)算符號(hào),如果在一系列比較中,有些值為True,那么結(jié)果就為True。some的語法是:
<表達(dá)式>{ =|<>|!=|>|>=|!>|<|<=|!<}some(子查詢)
select name from person
where countryid = some ( select countryid from country --用等號(hào)和以下查詢到的值比較,如果與其中一個(gè)相等,就返回
where countryname = '中國');
3.all嵌套查詢
all是sql中的邏輯運(yùn)算符好,如果一系列的比較都為true,那么結(jié)果才能為true。
<表達(dá)式>{ =|<>|!=|>|>=|!>|<|<=|!<}all(子查詢)
select name from person
where countryid > all ( select countryid from country --當(dāng)countryid大于以下返回的所有id,此結(jié)果才為True,此結(jié)果才返回
where countryname = '中國');
4.exists嵌套查詢
exists是sql中的邏輯運(yùn)算符號(hào)。如果子查詢有結(jié)果集返回,那么就為True。exists代表“存在”的意義,它只查找滿足條件的那些記錄。一旦找到第一個(gè)匹配的記錄后,就馬上停止查找。
在MySQL數(shù)據(jù)庫中的許多查詢都離不開子查詢,使用子查詢可以一次性的完成很多邏輯上需要多個(gè)步驟才能完成的SQL操作,同時(shí)也可以避免事務(wù)或者表鎖死。因此,子查詢也是MySQL數(shù)據(jù)庫中的重要知識(shí)點(diǎn)之一,在本站的MySQL教程中,針對(duì)MySQL子查詢,會(huì)有專門的實(shí)例訓(xùn)練,幫助我們快速掌握子查詢的技巧,還在猶豫什么,快開始學(xué)習(xí)MySQL子查詢吧!
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)