子查詢是將一個(gè)查詢語(yǔ)句嵌套在另一個(gè)查詢語(yǔ)句中,內(nèi)層查詢語(yǔ)句的查詢結(jié)果,可以作為外層查詢語(yǔ)句提供查詢條件。子查詢中可能包括in、not in、any、all、exists和not exists等關(guān)鍵字,還包括比較運(yùn)算符,如“=”、“!=”等,那如何進(jìn)行子查詢,具體操作如下:
1.首先,在一個(gè)查詢中的查詢結(jié)果作為外層查詢的條件,可以用IN關(guān)鍵字,代碼如下:
SELECT?*?FROM?city?WHERE?CountryCode?IN?(SELECT?Code?FROM?country);
如下圖所示:
2.其次,外層查詢的條件不在內(nèi)層查詢結(jié)果,可以用NOT IN關(guān)鍵字,代碼如下:
SELECT?*?FROM?city?WHERE?CountryCode?NOT?IN?(SELECT?Code?FROM?country);
如下圖所示:
3.使用EXISTS關(guān)鍵字查詢時(shí),內(nèi)層查詢語(yǔ)句不返回查詢的記錄,而是返回一個(gè)Boolean值;當(dāng)內(nèi)層查詢返回的值為true時(shí),外層查詢語(yǔ)句將進(jìn)行查詢,如果返回false時(shí),將不進(jìn)行查詢或查詢結(jié)果為空,代碼如下:
SELECT?*?FROM?city?WHERE?EXISTS?(SELECT?Name?FROM?country);
如下圖所示:
4.由第三步可知,與EXISTS相對(duì)的是NOT EXISTS,當(dāng)內(nèi)層查詢返回的值為false時(shí),外層查詢語(yǔ)句將進(jìn)行查詢,如果返回true時(shí),將不進(jìn)行查詢或查詢結(jié)果為空,代碼如下:
SELECT?*?FROM?city?WHERE?NOT?EXISTS?(SELECT?Name?FROM?country);
如下圖所示:
5.滿足其中的任一條件,就可以通過(guò)該條件來(lái)執(zhí)行外層查詢語(yǔ)句,用關(guān)鍵字ANY,代碼如下:
SELECT?*?FROM?city?WHERE?Population?>=?ANY?(SELECT?Population?FROM?country);
如下圖所示:
6.子查詢還包含比較運(yùn)算符,有“>=”、“
SELECT?*?FROM?city?WHERE?Population?>=??(SELECT?Population?FROM?country?WHERE?Name?=?'Afghanistan'); SELECT?*?FROM?city?WHERE?Population?<p>如下圖所示:</p><p><img src="https://img.php.cn//upload/image/558/688/209/1501726758294272.png" title="1501726758294272.png" alt="7.png"></p><p><img src="https://img.php.cn//upload/image/778/734/785/1501726771282297.png" title="1501726771282297.png" alt="8.png"></p><p><img src="https://img.php.cn//upload/image/457/513/489/1501726786134259.png" title="1501726786134259.png" alt="9.png"></p><p><span style="max-width:90%">7.滿足所有條件,只有滿足內(nèi)層查詢語(yǔ)句返回所有結(jié)果,代碼如下:</span></p><pre class="brush:sql;toolbar:false">SELECT?*?FROM?city?WHERE?Population?>=?ALL?(SELECT?Population?FROM?country?WHERE?Name?=?'Afghanistan');
如下圖所示:
注意事項(xiàng)
注意子查詢的用法
注意子查詢中各個(gè)關(guān)鍵字的區(qū)別