Oracle入门(十三B)之高级查询(上)
下章:Oracle入門(十三C)之高級查詢(下)
一、多表格查詢
(1)定義
將兩個或兩個以上的表格,按照一定的關系連接起來進行查詢。
(2)多表格查詢分類
- 連接查詢
- 嵌套查詢
- 集合查詢
二、連接查詢?
(1)內連接查詢
查詢城市及其省份名稱,顯示對應國家
SQL 99 :
oracle:
select city,state_province, country_name from locations L, countries C where L.country_id =C.country_id;查詢雇員信息,顯示其相關的工作名稱
SQL 99 :
(2)左外連接查詢?
要求顯示全部雇員名稱及其所在部門名稱,如果沒有對應的部門名稱便以null顯示
SQL 99 :
oracle:
select last_name, department_name from employees E, departments D where E.department_id = D.department_id(+);(3)右外連接查詢?
要求顯示全部部門名稱及其包含雇員名稱,如果沒有對應的雇員名稱便以null顯示
SQL 99 :
oracle:
select last_name, department_name from employees E,departments D where E.department_id(+) = D.department_id;(4)全外連接查詢?
要求顯示全部的雇員和部門名稱
SQL 99 :
(5)自然連接
當具有相同列名且數據類型也相同的情況下,自動連接,相當于內連接的等值連接
NATURAL:
等值連接 :
select first_name, job_title from employees E join jobs J on E.job_id = J.job_id;(6)Using子句?
如果數據類型和名稱相同的情況下,使用using子句指定列名,如果列名稱不相同的情況下,使用on子句
using子句:
on子句:
(7)交叉連接?
笛卡爾積,沒有連接條件
SQL 99 :
oracle:
三個以上的表查詢?
三、分組計算?
?如果了解就讀年級學生的平均身高?
需要編寫多個不同的SQL 語句才能實現此目的:
- SELECT AVG(身高) FROM 學生WHERE 就讀年級= 2013;
- SELECT AVG(身高) FROM 學生WHERE 就讀年級= 2014;
- ?SELECT AVG(身高) FROM 學生WHERE 就讀年級= 2015;
?需要編寫上述一系列語句。要簡化此類問題,只使用一個語句就達到相同的目的,可使用GROUP BY 與HAVING 子句。
SELECT AVG(身高) FROM 學生 GROUP BY 就讀年級;(1)根據公司部門分組,統計各部門每月人力總成本
select department_id,sum(salary) from employees group by department_id order by department_id;(2)帶where條件的分組計算:統計2005年及其以后入職各部門員每月工人力成本
select department_id,sum(salary) from employees where extract(year from hire_date)>= 2005 group by department_id order by department_id; (3)帶where條件的分組計算:統計部門高收入員工【月薪收入超過10000】的人數Select department_id,count(*) From employees Where salary > 10000 Group by department_id Order by department_id; (4)帶分組以后的條件計算:統計部門員工月薪收入超過10000以上,并且數量超過2人的部門
Select department_id,count(*) From employees Where salary > 10000 having count(*)>2 Group by department_id Order by department_id;
(5)分組計算的連接查詢:統計采購數量在10以上的采購次數在2次以上的商品采購次數信息,并且顯示商品名稱信息
Select gid,gname,count(gid) From t_procure_items join t_goods using(gid) Where pinum>10 Group by gid,gname Having count(gid)>2;注意:GROUP BY組函數要求,SELECT子句中列出的任何不屬于組函數的列,都必須在GROUP BY 子句中列出。?
總結
以上是生活随笔為你收集整理的Oracle入门(十三B)之高级查询(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 秋天的奶茶是什么梗 网上说的秋天的奶茶是
- 下一篇: 夨坕啥意思 夨坕怎么读