Oracle資料庫 高階子查詢

2021-10-09 18:03:33 字數 2154 閱讀 6412

子查詢是巢狀在sql與劇中的另乙個select語句

子查詢 (內查詢) 在主查詢執行之前執行

主查詢(外查詢)使用子查詢的結果

-- 查詢工資大於149號員工工資的員工的資訊

主查詢與子查詢返回的多個列進行比較

多列子查詢中的比較分為兩種

--  查詢與141號或174號員工的manager_id和department_id相同的其他員工的employee_id, manager_id, department_id

-- 返回比本部門平均工資高的員工的last_name, department_id, salary及平均工資

方法一:以前的方法,出現冗餘

方法二:新方法

(四)單列子查詢表示式

單列子查詢表示式是在一行中只返回一列的子查詢

oracle8i 只在下列情況下可以使用, 例如:

oracle9i中單列子查詢表示式可在下列情況下使用:

-- 顯式員工的employee_id,last_name和location。其中,若員工department_id與location_id為1800的department_id相同,則location為』canada』,其餘則為』usa』。

-- 查詢員工的employee_id,last_name,要求按照員工的department_name排序

相關子查詢按照一行接一行的順序執行,主查詢的每一行都執行一次子查詢

-- 查詢員工中工資大於本部門平均工資的員工的last_name, salary和其department_id

-- 若employees表中employee_id與job_history表中employee_id相同的數目不小於2,輸出這些相同id的員工的employee_id,last_name和其job_id

exists 操作符檢查在子查詢中是否存在滿足條件的行

如果在子查詢中存在滿足條件的行:

如果在子查詢中不存在滿足條件的行:

-- 查詢公司管理者的employee_id,last_name,job_id,department_id資訊

-- 查詢departments表中,不存在於employees表中的部門的department_id和department_name

使用相關子查詢依據乙個表中的資料更新另乙個表的資料

(1)複製一張表emp011

(2)在表emp011中新增一列

(3)在新插入的列中新增資料

(1)建立兩張表emp011和emp022

(2)檢視兩表的資料條數

(3)在emp022表中刪除與emp033表相同的資料

-- 查詢公司中工資比abel高的員工的資訊

1、不使用with子句實現

2、使用with子句查詢

-- 查詢公司中各部門的總工資大於公司中各部門的平均總工資的部門資訊

Oracle資料庫的高階查詢(多表查詢)

前面寫了一些高階查詢中的基礎部分。在這裡寫寫多表查詢的一些方法。這裡的sql語句的字段講得不太細,因為時間問題,大家只要看思維意思即可。但這個 笛卡稱集 表是乙個無效表,只是乙個兩表的組合。兩表關聯,列數相加,行數相乘,得到了6列6行,我們需要用where條件語句去把兩表關聯的字段值提取出來,這才是...

oracle資料庫(三) 高階查詢

根據員工的上級編號進行層級關聯 select level empno,ename,mgr from emp connect by prior empno mgr start with mgr is null order bylevel translate expr,from string,to st...

資料庫 高階查詢

巢狀查詢也叫子查詢,是把內層的查詢結果作為外層的查詢條件 語法格式 select 欄位名列表 from 表名 where 欄位名 運算子 select 欄位名 from 表名 where 條件 注意 外層的where的條件必須和內層的select查詢的欄位名一樣,個數也一樣 如 把攻擊值小於平均攻擊...