深入了解Mysql的子查詢語法
在Mysql中,子查詢是指在一個查詢語句的“局部區(qū)域”內(nèi)出現(xiàn)的查詢語句。舉例來說,如果有一條查詢語句為select * from product where price > 5000;,然后又有一個語
在Mysql中,子查詢是指在一個查詢語句的“局部區(qū)域”內(nèi)出現(xiàn)的查詢語句。舉例來說,如果有一條查詢語句為select * from product where price > 5000;
,然后又有一個語句select 5000;
或select 5000 as c;
,實際上第二個語句只是返回一個數(shù)值。當(dāng)將這兩條語句結(jié)合起來時,就可以寫成:select * from product where price > (select 5000 as c );
,這里括號中的select
語句就被稱為“子查詢”,而外部的select
則是“主查詢”。子查詢可以用來代表數(shù)據(jù)的一種形式,通常結(jié)果并不是已知的,而是一個正式的查詢結(jié)果。
使用子查詢找出超過平均價的商品
如果想要找出產(chǎn)品表中所有高于平均價的商品,可以采用分兩步的方法。首先找出平均價:select avg(price) from product;
,得到平均價后再繼續(xù)找需要的商品:select * from product where price > 4287.66667;
。另一種方法是將這兩個語句整合成一個:select * from product where price > (select avg(price) from product);
。
使用ANY的子查詢形式
在使用ANY的子查詢中,形式為where 字段 比較運算符 ANY (列子查詢);
,表示字段的值只要與子查詢中查詢出的其中一個值滿足比較運算符即可。例如:select * from tab1 where f2 any (select n2 from tab2 );
。這相當(dāng)于select * from tab1 where f2 in (select n2 from tab2 );
。
使用ALL的子查詢形式
與ANY相反,使用ALL的子查詢形式為where 字段 比較運算符 ALL (列子查詢);
,表示字段的值需要對子查詢的所有結(jié)果都滿足比較運算符才行。舉例:select * from tab2 where n2 > all (select f2 from tab1 );
。如果沒有完全滿足條件的結(jié)果,會返回一個空結(jié)果集。
使用EXISTS的子查詢形式
在使用EXISTS的子查詢中,形式為where exists (任何子查詢);
,意味著如果子查詢存在數(shù)據(jù)結(jié)果,則結(jié)果為true,否則為false。需要注意的是,該子查詢通常需要在內(nèi)部使用主查詢的某些字段作為條件數(shù)據(jù),以便具有實用意義。舉例:select * from product where exists( select * from product_type where product__id _id and protype_name like '%碼%');
。