SQL查詢語句中,什么叫子查詢
嵌套SELECT語句也叫子查詢,一個 SELECT 語句的查詢結果能夠作為另一個語句的輸入值。
子查詢不但能夠出現在Where子句中,也能夠出現在from子句中,作為一個臨時表使用,也能夠出現在select list中,作為一個字段值來返回。 1、單行子查詢 :單行子查詢是指子查詢的返回結果只有一行數據。
當主查詢語句的條件語句中引用子查詢結果時可用單行比較符號(=, >, <, >=, <=, <>)來進行比較。 例:select ename,deptno,sal from emp where deptno=(select deptno from dept where loc='NEW YORK'); 2、多行子查詢:多行子查詢即是子查詢的返回結果是多行數據。
當主查詢語句的條件語句中引用子查詢結果時必須用多行比較符號(IN,ALL,ANY)來進行比較。其中,IN的含義是匹配子查詢結果中的任一個值即可("IN" 操作符,能夠測試某個值是否在一個列表中),ALL則必須要符合子查詢的所有值才可,ANY要符合子查詢結果的任何一個值即可。
而且須注意ALL 和ANY 操作符不能單獨使用,而只能與單行比較符(=、>、< 、>= 、<= 、<>)結合使用。 例: 1).多行子查詢使用IN操作符號例子:查詢選修了老師名叫Rona(假設唯一)的學生名字 sql> select stName。
數據庫子查詢in與exists的區別數據庫子查詢in與exist
如果是查詢結果少,用in 查詢結果多,或條件多與1個用exists 如兩個表 T1, T2 查詢每個城市最小的年齡,并且滿足 T1。
A = T2。A AND T1。
B = T2。B A、 B 在兩表中皆為char型 IN 的方法 SELECT T1。
CITY, MIN(T1。AGE) AS AGE FROM T1 WHERE T1。
A+T1。B IN (SELECT A+B FROM T2 ) GROUP BY T1。
CITY A+B 為字符串連接 EXISTS方法 SELECT T1。 CITY, MIN(T1。
AGE) AS AGE FROM T1 WHERE EXISTS( SELECT 0 FROM T2 WHERE T1。A=T2。
A AND T1。B=T2。
B ) GROUP BY T1。 CITY 從優化查詢的角度講exists效率更高,特別是not的操作,建議不要用not in ,而用exists (如上例的寫法 WHERE T1。
AT2。A AND T1。
BT2。B)的效率要高的多。
。
sql中in和exist語句的區別
兩者都能實現表功能查詢,主要區別如下:
1、適用表的類型不同。
in是子查詢為驅動表,外面的表為被驅動表,故適用于子查詢結果集小而外面的表結果集大的情況。
exists是外面的表位驅動表,子查詢里面的表為被驅動表,故適用于外面的表結果集小而子查詢結果集大的情況。
2、子查詢關聯不同。
exists一般都是關聯子查詢。對于關聯子查詢,必須先執行外層查詢,接著對所有通過過濾條件的記錄,執行內層查詢。外層查詢和內層查詢相互依賴,因為外層查詢會把數據傳遞給內層查詢。
in則一般都是非關聯子查詢,非關聯子查詢則必須先完成內層查詢之后,外層查詢才能介入。
3、執行次數不同。
IN 語句:只執行一次,確定給定的值是否與子查詢或列表中的值相匹配。in在查詢的時候,首先查詢子查詢的表,然后將內表和外表做一個笛卡爾積,然后按照條件進行篩選。所以相對內表比較小的時候,in的速度較快。
EXISTS語句:執行次數根據表的長度而定。指定一個子查詢,檢測行的存在。遍歷循環外表,然后看外表中的記錄有沒有和內表的數據一樣的。匹配上就將結果放入結果集中。
參考資料來源:搜狗百科--In操作符
參考資料來源:搜狗百科--Exists
關于查詢語句中的in和exists的區別
in和exists區別in 是把外表和內表作hash 連接,而exists是對外表作loop循環,每次loop循環再對內表進行查詢。
一直以來認為exists比in效率高的說法是不準確的。如果查詢的兩個表大小相當,那么用in和exists差別不大。
如果兩個表中一個較小,一個是大表,則子查詢表大的用exists,子查詢表小的用in。NOT EXISTS,exists的用法跟in不一樣,一般都需要和子表進行關聯,而且關聯時,需要用索引,這樣就可以加快速度。
exists 相當于存在量詞:表示集合存在,也就是集合不為空只作用一個集合。例如 exist P 表示P不空時為真; not exist P表示p為空時為真。
in表示一個標量和一元關系的關系。例如:s in P表示當s與P中的某個值相等時 為真; s not in P 表示s與P中的每一個值都不相等時為真: not in 和not exists的區別如果查詢語句使用了not in 那么內外表都進行全表掃描,沒有用到索引;而not extsts 的子查詢依然能用到表上的索引。
所以無論那個表大,用not exists都比not in要快。
oracle中在in子查詢語句中order by排序能否用
你自己寫得句子 是 這樣的條件啊
SELECT ORG_ID,ORG_NAME,ORG_PARENT_ID FROM ORG_MASTER
WHERE ORG_PARENT_ID in (SELECT ORG_ID FROM ORG_MASTER WHERE ORG_PARENT_ID=1 ORDER BY ORG_ORDER)
AND ROWNUM 1
SELECT ORG_ID,ORG_NAME,ORG_PARENT_ID
FROM (select * from ORG_MASTER WHERE ORG_PARENT_ID1 ORDER BY ORG_ORDER)
where ROWNUM