您好,登錄后才能下訂單哦!
下面講講關(guān)于什么是mysql子查詢及如何運(yùn)用,文字的奧妙在于貼近主題相關(guān)。所以,閑話就不談了,我們直接看下文吧,相信看完什么是mysql子查詢及如何運(yùn)用這篇文章你一定會(huì)有所受益。
例:
修改后:
如果將該“select 5000”的子查詢語句,替換為“select出來所有商品的平均價(jià)”,就具有了現(xiàn)實(shí)含義。
子查詢是為主查詢服務(wù)的
都是子查詢獲得一定的結(jié)果數(shù)據(jù)之后,才去執(zhí)行主查詢;
在形式上,可以有如下表達(dá):
selelct 字段或表達(dá)式或子查詢 [as 別名] from 表名或鏈接結(jié)果或子查詢 where 字段或表達(dá)式或子查詢的條件判斷
即可以在這幾個(gè)位置出現(xiàn)子查詢(其中having其實(shí)也可以,因?yàn)樗鷚here是一樣含義);
子查詢,按位置(場(chǎng)合)分:
類型 | 形式 |
---|---|
作為主查詢的結(jié)果數(shù)據(jù) | select c1,(select f1 from tab2) as f11 from tab1; #這里子查詢應(yīng)該只有一個(gè)數(shù)據(jù)(一行一列,標(biāo)量子查詢) |
作為主查詢的條件數(shù)據(jù) | select c1 from tab1 where c1 in (select f1 from tab2); #這里子查詢可以是多個(gè)數(shù)據(jù)(多行一列,列子查詢) |
作為主查詢的來源數(shù)據(jù) | select c1 from (select f1 as c1, f2 from tab2) as t2; #這里子查詢可以是任意查詢結(jié)果(表子查詢) |
比較運(yùn)算符中的子查詢
形式:
操作數(shù) 比較運(yùn)算符 (標(biāo)量子查詢);
說明:
操作數(shù),其實(shí)就是比較運(yùn)算符的2個(gè)數(shù)據(jù)之一而已,通常就是一個(gè)字段名;
select .... from XXX where id > 5;
例:
找出最高價(jià)的商品;
select * from product where price = (select max(price) from product );
使用in的子查詢
以前用的in的用法:
XX in (值1,值2,值3,....);
則in子查詢?yōu)椋?/p>
XX in (列子查詢)
例:
找出所有類別名稱中帶“電”這個(gè)字的所有商品;
select * from product where protype_id in( select protype_id from product_type where protype_name like ‘%電%’ );
使用any的子查詢
形式:
操作數(shù) 比較運(yùn)算符 any (列子查詢);
含義:
當(dāng)某個(gè)操作數(shù)(字段) 對(duì)于該列子查詢的其中任意一個(gè)值,滿足該比較運(yùn)算符,則就算是滿足了條件;
例:
select * from tab1 where id > any (select f1 from tab2);
使用all的子查詢:
形式:
操作數(shù) 比較運(yùn)算符 all (列子查詢);
含義:
當(dāng)某個(gè)操作數(shù)(字段) 對(duì)于該列子查詢的所有數(shù)據(jù)值,都滿足該比較運(yùn)算符,才算滿足了條件;
例:
select * from tab2 where f1 > all ( select id from tab1 );
使用some的子查詢
一句話:some是any的同義詞。
使用exists的查詢
形式:
where exists( 子查詢 )
含義:
該子查詢?nèi)绻坝袛?shù)據(jù)”,則exists的結(jié)果是true,否則就是false
說明:
因?yàn)椋琫xists子查詢的該含義,造成主查詢往往出現(xiàn)這樣的情形:要么全都取出,要么都不取出。如果局限于這個(gè)含義(使用情形),其基本就失去了它的現(xiàn)實(shí)使用意義。
所以:
實(shí)際應(yīng)用中,該子查詢,往往都不是獨(dú)立的子查詢,而是會(huì)需要跟“主查詢”的數(shù)據(jù)源(表),建立某種關(guān)系——通常就是連接關(guān)系。建立的方式是“隱式的”,即沒有在代碼上體現(xiàn)關(guān)系,但卻在內(nèi)部有其連接的“實(shí)質(zhì)”。
此隱式連接方式,通常就體現(xiàn)在子查詢中的where條件語句中,使用了主查詢表中的數(shù)據(jù)(字段);
例:
查詢商品表中其類別名稱中帶“電”這個(gè)字的所有商品;
結(jié)果就:
注意:
- 這種子查詢語句,沒法“獨(dú)立存在(獨(dú)立運(yùn)行)”,而是必須跟主查詢一起使用;
- 其他子查詢,是可以獨(dú)立運(yùn)行的,而且會(huì)得到一個(gè)運(yùn)行的結(jié)果。
- 該子查詢中的條件,應(yīng)該設(shè)定為跟主查詢的某個(gè)字段有一定的關(guān)聯(lián)性判斷,通常該判斷就是這兩個(gè)表的“本來該有的連接條件”
對(duì)于以上什么是mysql子查詢及如何運(yùn)用相關(guān)內(nèi)容,大家還有什么不明白的地方嗎?或者想要了解更多相關(guān),可以繼續(xù)關(guān)注我們的行業(yè)資訊板塊。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。