Oracle(四)--> 進階子查詢(多例詳解難度高,實在不信進來看~),oracle進來看

來源:互聯網
上載者:User

Oracle(四)--> 進階子查詢(多例詳解難度高,實在不信進來看~),oracle進來看

   這一節將討論一下子查詢更加複雜的應用,主要在於簡化 SQL,從側面提高效能,當然。。提高效能的地方有很多很多。。今天聽了一場關於 Oracle 的效能調優的講座,瞭解了 Oracle 效能、最佳化要注意的各個方面。雖然現在可能還遇不到那麼複雜的問題,但是關於簡化 SQL ,最佳化 SQL 還是目前可以做到並作為一個不斷努力的地方。話不多說,通過幾個例子先來討論一下~(當然。。對於我這種菜鳥還是有難度的,各位大神多多諒解,多多包涵~)希望給大家一些有益的思考或借鑒~

一、子查詢回顧

子查詢是嵌套在 SQL 陳述式中的另一個 SELECT 語句
例: 1、查詢工資大於148號員工工資的員工資訊(只能為單列查詢,否則報錯)
結果如下
2、查詢 Last_name 為 grant 的 manager 的資訊
結果如下
二、多列子查詢( 將返回多個結果用 in ) 1、例:查詢 employee_id 為 149 號或 176 號員工的 manager_id 和 department_id 相同的其他員工的 emloyee_id , manager_id , department_id。 不成對比較方式: employees 表中 employee_id 、 department_id 、 manager_id 的資料如下
分析: 1)首先應該寫出以中的內容
-- 查詢 emloyee_id , manager_id , department_id -- where 條件將 manager_id、department_id 限定 -- employee_id 不能為 149 或 176. 2)之後將 manager_id 和 department_id 的 sql 語句填上即可,當然此時最好將 "" 改為 in。
查詢結果顯示如下:
我們發現上述查詢中有兩個部分出現多次,於是我們應該通過多列子查詢使得 sql 語句更加簡潔。 成對比較方式:sql如下
2、在 from 子句中使用子查詢 例:返回比本部門平均工資高的員工的 last_name,department_id,salary 及平均工資 分析: 1、首先我們討論一下沒有平均工資的情況該如何寫。
-- 要注意的地方在於部門號要一致(本部門) 2、加上平均工資
通過加入一個 select 查詢進行平均工資的查詢,也要保證為本部門,查詢結果如下
那麼如何在 from 子句中使用子查詢呢? 首先,這裡用到了與多表串連類似的方式。多表串連怎麼用?看一眼下面的例子即可:
那和 from 子句使用子查詢有何關係呢?其實 departments 是一個真實存在的表,然而在平均工資查詢時,我們可以通過 sql 語句來建立一個表,然後建立 employees 與 該表的串連關係,即可降低 sql 語句的冗餘度。sql 語句如下和結果如下: 可以發現這樣的查詢結果與之前的結果是一致的,但是冗餘度大大降低,但是思路要清晰,難度較大。
三、單列子查詢運算式:是在一行中只返回一列的子查詢 ----------------------------------------------------------------------------------------- 例:顯示員工的 employee_id,last_name,和 location。其中,若員工的 department_id 與 location_id 為 1800 的 department_id 相同,則 location 為 'CANADA',其餘為 'USA'。 分析:若..則.. 條件陳述式:case..when..then..end,sql 及 返回結果如下

employees 表中資訊
departments 表中資訊(僅有一個 ID 對應)
----------------------------------------------------------------------------------------------------- 例:查詢員工的 employee_id 和 last_name,要求按照員工的 department_name 排序
department_name 不存在於 employees 表中, 每次查詢一個員工時,都會找到對應的 name ,然後跟已有排好序的 name 進行對比,如果靠前就往前排,靠後則往後排,故此串連條件必須存在。







著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.