Oracle中關聯子查詢

求價格高於同類產品平均價格的產品 方法一: 分析:每一類產品的平均價格如下: select product_type_id,avg(price) from products group by product_type_id; PRODUCT_TYPE_ID AVG(PRICE) --------------- ---------- 1 24.975 2 26.22 3 13.24 4 13.99 13.49 如果把上面的結果保存爲一個表,如 products_avg, create table products_avg as select product_type_id,avg(price) avg_price from products group by product_type_id 求價格高於同類產品平均價格的產品,就可以通過prodducts與products_avg進行關聯查詢: select product_id,p.product_type_id,p.name,p.price from products p join products_avg a on p.product_type_id=a.product_type_id where p.price>a.avg_price; PRODUCT_ID PRODUCT_TYPE_ID NAME PRICE ---------- --------------- ------------------------------ ---------- 2 1 Chemistry 30 5 2 Z Files 49.99 7 3 Space Force 9 13.49 10 4 Pop 3 15.99 11 4 Creative Yell 14.99 上面的結果正對,即查詢到每種產品,看其價格都大於同類產品的平均價格. 方法二: 還可以使用關聯子查詢實現上面要求. 關聯子查詢會引用外部查詢中的一列或多列.在執行時,外部查詢的每一行都被一次一行地傳遞給子查詢.子查詢依次讀取外部查詢傳遞來的每一值,並將其用到子查詢上,直到外部查詢所有的行都處理完爲止.然後返回查詢結果. 本例中,外部查詢從products表中檢索出所有的行,並將其傳遞給內部查詢.內部查詢依次讀取外部查詢傳遞來的每一行數據,並對內部查詢中product_type_id等於外部查詢的中product_type_id值的每種產品計算平均價格. 如:查詢第一行product_type_id爲1時,把這行數據傳遞到內部查詢,內部查詢根據這個編號到產品表中找到同類型的所有行,然後求如平均價格,外部查詢再根據這個結果來判斷查詢條件(外部查詢是在執行者where語句時用到子查詢,子查詢執行完後還返回到where子句中). select product_id,product_type_id,name,price from products outer where price>( select avg(price) from products inner where inner.product_type_id=outer.product_type_id) PRODUCT_ID PRODUCT_TYPE_ID NAME PRICE ---------- --------------- ------------------------------ ---------- 2 1 Chemistry 30 5 2 Z Files 49.99 7 3 Space Force 9 13.49 10 4 Pop 3 15.99 11 4 Creative Yell 14.99 例2 : 顯示曾經有過兩次工作以上的員工. SELECT e.employee_id, last_name,e.job_id FROM employees e WHERE 2 <= (SELECT COUNT(*) FROM job_history WHERE employee_id = e.employee_id);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章