mysql子查詢?nèi)菀捉榻B
發(fā)表時間:2023-07-13 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]子查詢基本含義,就是在一個查詢語句(select語句)中的內(nèi)部,某些位置,又出現(xiàn)的“查詢語句”。本文主要和大家分享mysql子查詢簡單介紹,希望能幫助到大家。例: 修改后: 如果將該“select ...
子查詢基本含義,就是在一個查詢語句(select語句)中的內(nèi)部,某些位置,又出現(xiàn)的“查詢語句”。本文主要和大家分享mysql子查詢簡單介紹,希望能幫助到大家。
例:
修改后:
如果將該“select 5000
”的子查詢語句,替換為“select出來所有商品的平均價”,就具有了現(xiàn)實含義。
在形式上,可以有如下表達:
即可以在這幾個位置出現(xiàn)子查詢(其中having其實也可以,因為它跟where是一樣含義);
子查詢,按位置(場合)分:
類型 | 形式 |
---|
作為主查詢的結(jié)果數(shù)據(jù) | select c1,(select f1 from tab2) as f11 from tab1; #這里子查詢應(yīng)該只有一個數(shù)據(jù)(一行一列,標(biāo)量子查詢) |
作為主查詢的條件數(shù)據(jù) | select c1 from tab1 where c1 in (select f1 from tab2); #這里子查詢可以是多個數(shù)據(jù)(多行一列,列子查詢) |
作為主查詢的來源數(shù)據(jù) | select c1 from (select f1 as c1, f2 from tab2) as t2; #這里子查詢可以是任意查詢結(jié)果(表子查詢) |
常見子查詢
比較運算符中的子查詢
形式:
說明:
select .... from XXX where id > 5;
例:
select * from product where price = (select max(price) from product );
使用in的子查詢
XX in (值1,值2,值3,....);
XX in (列子查詢)
例:
select * from product where protype_id in(
select protype_id from product_type where protype_name like ‘%電%’
);
使用any的子查詢
形式:
操作數(shù) 比較運算符 any (列子查詢);
含義:
select * from tab1 where id > any (select f1 from tab2);
使用all的子查詢:
形式:
操作數(shù) 比較運算符 all (列子查詢);
含義:
例:
select * from tab2 where f1 > all ( select id from tab1 );
使用some的子查詢
使用exists的查詢
形式:
where exists( 子查詢 )
含義:
說明:
因為,exists子查詢的該含義,造成主查詢往往出現(xiàn)這樣的情形:要么全都取出,要么都不取出。如果局限于這個含義(使用情形),其基本就失去了它的現(xiàn)實使用意義。
所以:
實際應(yīng)用中,該子查詢,往往都不是獨立的子查詢,而是會需要跟“主查詢”的數(shù)據(jù)源(表),建立某種關(guān)系——通常就是連接關(guān)系。建立的方式是“隱式的”,即沒有在代碼上體現(xiàn)關(guān)系,但卻在內(nèi)部有其連接的“實質(zhì)”。
例:
結(jié)果就:
注意:
- 這種子查詢語句,沒法“獨立存在(獨立運行)”,而是必須跟主查詢一起使用;
- 其他子查詢,是可以獨立運行的,而且會得到一個運行的結(jié)果。
- 該子查詢中的條件,應(yīng)該設(shè)定為跟主查詢的某個字段有一定的關(guān)聯(lián)性判斷,通常該判斷就是這兩個表的“本來該有的連接條件”
最后一個結(jié)論:
如果一個查詢需求,可以使用連接查詢的,也可以使用子查詢得到,則通常推薦使用連接插敘,效率歸更高。
相關(guān)推薦:
MySQL子查詢的詳細介紹
什么是mysql子查詢?如何利用子查詢進行過濾?
MySQL子查詢的優(yōu)化
以上就是mysql子查詢簡單介紹的詳細內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
學(xué)習(xí)教程快速掌握從入門到精通的SQL知識。