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