mysql order by 嵌套查询_MySQL第三章——嵌套查询
嵌套查詢
在SQL語句中,一個 select — from — where 語句是一個查詢塊,將一個查詢塊嵌套在另一個查詢塊的 where 字句或者 having 短語的條件中的查詢稱為 嵌套查詢。
外層查詢或父查詢、內層查詢或子查詢
SQL語言允許多層嵌套查詢,即一個子查詢中還可以嵌套其他子查詢。特別注意:子查詢的 select 語句中不能使用 order by 子句,order by 子句只能對最終查詢結果排序。
嵌套查詢使用戶可以用多個簡單查詢構成復雜的查詢,從而增強SQL的查詢能力。以層層嵌套的方式來構成程序正是 SQL 中“結構化”的含義所在。
帶有 IN 謂詞的子查詢
在嵌套查詢中,子查詢的結果往往是一個集合,錯譯謂詞 IN 是嵌套查詢中最經常使用的謂詞。
例子:
本例中,子查詢的查詢條件不依賴于父查詢,是不相關子查詢,由里向外執行,先執行子查詢,再把子查詢的結果當作父查詢的查找條件,另一種方法是用自身連接來完成查詢,如下:
帶有比較運算符的子查詢
帶有比較運算符的子查詢是指父查詢與子查詢之間用比較運算符進行連接。當用戶能明確知道內層查詢返回的是單個值時,可以用 >、=、<=、!= 或 <>等比較運算符(內層查詢結果為一個值時IN 謂詞可以用 = 代替)
子查詢的查詢條件依賴于父查詢,這類子查詢是相關子查詢,整個程序語句稱為相關嵌套查詢語句。
例子:
x是表 sc 的別名,又稱元組變量,可以用來表示sc的一個元組。內層查詢時求一個學生所有選修課的平均成績,至于是哪個學生的平均成績要看參數 x.sno的值,而該值是與父查詢相關的,因此這類查詢是相關子查詢。
求解相關子查詢不能像求解不相關子查詢那樣一次將子查詢求解出來,然后求解父查詢。內層查詢由于與外層查詢有關,所以必須反復求值。
帶有 ANY(SOME)或ALL謂詞的子查詢
子查詢返回單值時可以用比較運算符,返回多值事要用 ANY (有的系統用 SOME)或 ALL 謂詞修飾符,而使用 ANY 或 ALL 謂詞時必須同時使用比較運算符。如下:
事實上,用聚集函數實現子查詢通常比直接用 ANY 或 ALL? 查詢的效率要高,ANY、ALL與聚集函數的對應關系如下表:
帶有 exists 謂詞的子查詢
謂詞 exists 代表存在量詞 ,帶有 exists 謂詞的子查詢不返回任何數據,只產生邏輯真值“true” 或邏輯假值“false”
例子:
一些帶 exists 或 not exists 謂詞的子查詢不能被其他形式的子查詢等價替換,但所有帶 in 謂詞、比較運算符、any 和 all 謂詞的子查詢都能用帶 exists 謂詞的子查詢等價替換。
由于帶 exists 量詞的相關子查詢只關心內層查詢是否有返回值,并不需要查具體指,因此其效率并不一定低于不相關子查詢,有時是高效方法。
總結
以上是生活随笔為你收集整理的mysql order by 嵌套查询_MySQL第三章——嵌套查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gcc跨平台编译
- 下一篇: linux cmake编译源码,linu