日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle关联分组查询,oracle中关联查询、分组查询

發(fā)布時間:2025/3/12 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle关联分组查询,oracle中关联查询、分组查询 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

高級查詢

1.關(guān)聯(lián)查詢

作用:可以跨越多表查詢

--查詢出員工的名字和他所在部門的的名字

//古老的寫法

select first_name,name from s_emp,s_dept where s_emp.dept_id = s_dept.id;

//現(xiàn)在的寫法

select e.first_name,s.name from s_emp e join s_dept s on e.dept_id = s.id;

語法:

select 列,列,列

from 表1 join 表2

on 表1外鍵=表2主鍵

案例:

-- 找出Sales 部門的所有員工

select * from s_emp e

join s_dept d on e.dept_id = d.id

where d.name = ‘Sales‘;

-- 找出在 Asia 地區(qū)工作的員工

select * from s_emp e

join s_dept d on e.dept_id=d.id

join s_region r on d.region_id=r.id

where r.name=‘Asia‘;

--找出客戶‘Hamada Sport‘ 的所有訂單號、費(fèi)用、下訂日期

select o.id,o.total,o.date_ordered from s_ord o

join s_customer c on o.customer_id = c.id

where c.name = ‘Hamada Sport‘;

--找出所有在‘Asia‘客戶的信息

select * from s_customer s

join s_ord o on s.id = o.customer_id

join s_region r on s.region_id = r.id

where r.name = ‘Asia‘;

練習(xí):

--查詢出客戶名字叫unisports的訂單信息

select o.* from s_customer s

join s_ord o on s.id = o.customer_id

where lower(s.name) = lower(‘unisports‘);

--查詢出設(shè)在北美的的部門名稱

select s.name from s_dept s

join s_region r on s.region_id = r.id

where r.name=‘North America‘;

--查詢出在北美工作的員工姓名、工資、入職日期和職位

select s.first_name,s.salary,s.start_date,s.title from s_emp s

join s_dept d on d.id = s.dept_id

join s_region r on r.id = d.region_id

where r.name=‘North America‘;

--查詢出所有客戶名,及其訂單號

select s.name,o.id from s_customer s

left join s_ord o on s.id = o.customer_id;

2.外聯(lián)接

左外聯(lián)[left outer join]

以關(guān)聯(lián)的左邊為準(zhǔn),即使右邊沒有與之匹配的記錄,則左邊的記錄也要

出現(xiàn)在結(jié)果集中,右邊全部以NULL值顯示。

右外聯(lián)[right outer join]

以關(guān)聯(lián)的右邊為準(zhǔn),即使左邊沒有與之匹配的記錄,則右邊的記錄也要

出現(xiàn)在結(jié)果集中,左邊全部以NULL值顯示。

補(bǔ)充 :全外聯(lián),交叉外聯(lián)

--查詢出所有客戶名,及其訂單號

select s.name,o.id from s_customer s

left join s_ord o on s.id = o.customer_id;

--查詢所有訂單號,訂單費(fèi)用以及訂單所對應(yīng)的客戶名

select c.name,o.id,o.total from s_customer c

right join s_ord o on o.customer_id = c.id;

--找出Womansport所購買的訂單信息(訂單編號,費(fèi)用,支付方式)

select o.id,o.total,o.payment_type from s_customer c

left join s_ord o on o.customer_id = c.id

where lower(c.name) = lower(‘Womansport‘);

--找出Operations部門工作的員工名,工資,并且按照工資降序排列

select s.first_name,s.salary,d.name from s_emp s

left join s_dept d on d.id=s.dept_id

where lower(d.name)=lower(‘Operations‘)

order by s.salary desc;

自關(guān)聯(lián):

-- 查詢出所有的員工名以及員工的上司名

select s.first_name,e.first_name from s_emp s

left join s_emp e on s.manager_id=e.id;

----

注:關(guān)聯(lián)的條件不一定總是做等值比較的。

==========================

3分組查詢

定義:利用內(nèi)置的分組函數(shù)來查詢

所謂分組,就是看待數(shù)據(jù)的“角度”不同。

也就是把某類值相同的看做一組。

語法:

select 列名,組函數(shù)(列名)...from 表名

where 條件

group by 列

having 字句

order by 列

分組函數(shù):

SUM([distinct] 列|表達(dá)式|值) 求和

AVG([distinct] 列|表達(dá)式|值) 求平均值

MAX(列|表達(dá)式|值) 求最大值

MIN(列|表達(dá)式|值) 求最小值

COUNT([distinct] 列|*) 求個數(shù)(包含null)

如:

-- 找出員工的最高、最低、平均、以及工資總和

select max(salary),min(salary),avg(salary),sum(salary) from s_emp;

-- 找出各部門員工的最高、最低、平均、以及工資總和

select dept_id,max(salary),min(salary),avg(salary),sum(salary) from s_emp

group by dept_id

order by dept_id;

-- 找出41,42,50部門員工的最高、最低、平均、以及工資總和

select dept_id,max(salary),min(salary),avg(salary),sum(salary) from s_emp

group by dept_id

having dept_id in (41,42,50)

order by dept_id;

注意1:只有出現(xiàn)在group by 后面的列[用來做為分組條件的列],才有資格

寫在SELECT的后面,除非使用組函數(shù)進(jìn)行修飾。

注意2:having 和where 都是條件

區(qū)別:

WHERE 子句中是不能使用 組函數(shù)的,因?yàn)樗贕ROUP BY 之前。

但是,HAVING 子句中可以使用組函數(shù),因?yàn)樗贕ROUP BY 之后。

-- 統(tǒng)計各個職稱中工資高于1100的各有多少人。

select count(*) from s_emp where salary >1100

group by title;

-- 找出訂單數(shù)量超過>=2個的客戶

select c.name

from s_customer c join s_ord o on o.customer_id=c.id

group by c.name

having count(o.id)>=2;

-- 統(tǒng)計共計多少個員工

select count(id) from s_emp;

-- 統(tǒng)計共計多少個職稱[不能重復(fù)]

select count(distinct title) from s_emp;

--練習(xí):

--1.找出超過(含)4個員工的部門id及部門名稱

select d.id,d.name,count(*) from s_emp e

left join s_dept d on e.dept_id=d.id

group by d.id,d.name

having count(*)>=4;

--2.找出訂單總費(fèi)用超過10000元的客戶

select c.name,o.total from s_ord o right join s_customer c on o.customer_id=c.id

where o.total>10000

group by c.name,o.total;

--3.統(tǒng)計各區(qū)域的客戶數(shù)量,按它的降序排序

select count(c.name),r.id from s_customer c join s_region r on c.region_id=r.id

group by r.id

order by count(c.name) desc;

--4.統(tǒng)計各經(jīng)理的所管理的員工數(shù)

select s.manager_id,count(s.first_name) from s_emp s left join s_emp e on s.manager_id=e.id

group by s.manager_id;

--5.統(tǒng)計訂單中各種支付的費(fèi)用

select sum(total),payment_type from s_ord

group by payment_type;

oracle中關(guān)聯(lián)查詢、分組查詢

標(biāo)簽:利用???部門???外鍵???顯示???join???date???min???asi???==

本條技術(shù)文章來源于互聯(lián)網(wǎng),如果無意侵犯您的權(quán)益請點(diǎn)擊此處反饋版權(quán)投訴 本文系統(tǒng)來源:http://www.cnblogs.com/qianqian528/p/7815097.html

總結(jié)

以上是生活随笔為你收集整理的oracle关联分组查询,oracle中关联查询、分组查询的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。