mysql常用基礎操作語法(十)~~子查詢【命令行模式】

mysql中雖然有連接查詢實現多表連接查詢,但是連接查詢的性能很差,因此便出現了子查詢。

1、理論上,子查詢可以出現在查詢語句的任何位置,但實際應用中多出現在from后和where后。出現在from后的子查詢結果通常是多行多列的,充當臨時表;而出現在where后的子查詢結果通常是單行單列,充當條件:

mysql常用基礎操作語法(十)~~子查詢【命令行模式】

2、where后作為條件的子查詢多與“=”、“!=”、“>”、“

in和not in:

mysql常用基礎操作語法(十)~~子查詢【命令行模式】

其中in表示包含于后邊子查詢結果集里的任意一個,not in表示不包含于后邊結果集里的任意一個。上圖子查詢的結果中,返回depart_id為1、2、4,因此第一個查詢就會查出emp中所有depart_id是1或2或4的,第二個就會查出既不是1也不是2也不是4的。

any:

mysql常用基礎操作語法(十)~~子查詢【命令行模式】

=any的用法和in的效果是一樣的;>any是說要大于子查詢結果集里的任意一個就可以,簡單理解就是只要大于結果集中最小的那個就可以;any是只要大于1就行,而

all:

mysql常用基礎操作語法(十)~~子查詢【命令行模式】

>all就是說要大于子查詢結果集里所有的,簡單理解就是要比最大的那個還大;

exists:

mysql常用基礎操作語法(十)~~子查詢【命令行模式】

exists和not exists只關心后邊的子查詢是否有結果,而不關心子查詢的結果是什么;對于exists,如果后邊的子查詢有結果,那么它的值就是true,反之如果沒有查到結果,則為false,而not exists正好和這個情況相反,有值為false,無值為true。當他們的值為true時,前邊查詢到的結果成立,會被加入到主查詢的結果集,否則不會被加入主查詢的結果集。

在上便的查詢中,查詢語句會先從emp中查詢一條數據,然后拿這條數據的depart_id和company中的depart_id比較,當存在兩個id相同的數據時,就會有結果返回,然后最終返回6條數據,而第二個查詢一樣的道理,當不存在兩個id相同的數據時,主查詢才有結果返回,只有一條數據。

?以上就是mysql常用基礎操作語法(十)~~子查詢【命令行模式】的內容,更多相關內容請關注php中文網(www.php.cn)!

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享