Oracle03

1.按照salary排序 顯示s_emp 表中的 id first_name salary 如果工資相同

? 則使用 first_name 降序排列?

2.寫出處理字符串的 函數(shù)有哪些? 寫 5 個

3.分別寫出 round(12.88)? trunc(12.88)? round(12.88,1)? trunc(12.88,1)

? round(3.33)? trunc(3.33)? 的值

4.顯示 s_emp 表中first_name 的前三個字符? 和 后三個字符? 并把這些數(shù)據(jù) 變大寫

5.顯示s_emp 表中第三個字符是a的 first_name?

6.顯示 s_emp 表中 manager_id 是NULL的員工 顯示 id first_name? salary

7.顯示 s_emp 表中? first_name 叫 Carmen? 并且? salary 等于 2500 的員工

顯示? id? first_name? salary

? select? id,first_name,salary from? s_emp

? ? ? where? first_name='Carmen' and? salary=2500;?

--------------------------------------------------------------------

1.多表查詢? 10*10*10

? 1.1 為什么要有多表查詢

? ? 需要的數(shù)據(jù) 已經(jīng)被分散多張表中了。

? 1.2 如何實現(xiàn)?

? ? 查詢 每個員工的? first_name? 和 對應的部門編號

? select? first_name,dept_id from? s_emp;? ?

? ? 在上面查詢的基礎上 顯示部門名

? select? first_name,dept_id,name

? ? ? ? from? s_emp,s_dept;

? ? 上面的查詢 產(chǎn)生了一個超大集合 叫 笛卡爾積? ? ?

? ? select? first_name,dept_id,name

? ? ? ? from? s_emp,s_dept where? dept_id=id;

? 上面的語句出錯 需要使用規(guī)則:多張表中有同名的字段? 使用 表名 點 區(qū)分

? ? select? first_name,dept_id,name

? ? ? ? from? s_emp,s_dept

? ? ? ? ? ? where? dept_id=s_dept.id;

? 1.3 語法

select 需要的字段

? ? from? 表1,表2? where? 表的連接條件;

? 1.4 練習

? s_dept? 部門表? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? s_region? 地區(qū)表

? id? ? number? 部門編號? ? ? ? ? ? ? ? ? id? ? ? ? number? 地區(qū)編號?

? name? varchar2(25) 部門名? ? ? ? ? ? name? ? ? varchar2(25) 地區(qū)名

? region_id? number? 地區(qū)編號

? 顯示 每個部門的名字? 和 對應的地區(qū)的名字?

? select? s_dept.name,s_region.name

? ? from? s_dept,s_region

? ? ? ? where? region_id=s_region.id;

? 1.5 使用表的別名 簡化查詢

? select? d.name,r.name

? ? ? from? s_dept d,s_region? r

? ? ? ? where? region_id=r.id;


? 1.6 等值連接 和 非等值連接

? ? 員工? 和? 部門? ? dept_id = s_dept.id?

? ? 部門? 和? 地區(qū)? ? region_id = s_region.id

? ? 表達兩張表的關系 使用等號? 則稱之為 等值連接差牛。?

? ? 如果連接兩張表的關系 不使用等號 則稱之為非等值連接

? salgrade? 工資級別表

? SQL> desc salgrade;

Name

---------------------

GRADE? ? 級別

LOSAL? ? 級別對應的低工資

HISAL? ? 級別對應的高工資

? 顯示 s_emp 表中 每個人的id , salary? 和 salary 對應的工資級別?

? select? id,salary,grade? ?

? ? ? from? s_emp,salgrade

? ? ? ? ? where? salary? between? losal? and? hisal;

? 1.7 自連接

? ? 一張物理表中? 存儲了兩層業(yè)務含義的數(shù)據(jù)? 要把其中的一層業(yè)務含義的數(shù)據(jù)查詢出來 就需要

? ? 使用到自連接的語法层释。

? s_emp?

? ? 領導

? ? 普通員工?

? ? 把所有的領導查詢出來?

? id? ? ? manager_id

? 80? ? ? 60

? 100? ? ? 100

? 101? ? ? 100

? 102? ? ? 100

? 110? ? ? 100

? select? id,first_name from? s_emp where? id=manager_id;?

? ? ? 當有人的manager_id? 是你的id 時? 則 你就是領導


? select distinct m.id,m.first_name

? ? ? ? from? s_emp? e,s_emp m? where e.manager_id = m.id;

? 8 個領導


? 25-8=17個普通員工? ? 下面的寫法錯誤?

? select distinct m.id,m.first_name

? ? ? ? from? s_emp? e,s_emp m? where e.manager_id != m.id;


2.內連接

? ? ? 內連接的特點就是 符合連接條件的數(shù)據(jù) 被選中? 不符合連接條件的數(shù)據(jù)被過濾掉。

? ? ? 上面的? 等值連接? ? 非等值連接? 自連接 都是內連接。

3.外連接

3.1 概念和實現(xiàn)

? 外連接的結果集 等于 內連接的結果集? 加上 匹配不上的記錄

(一個也不能少)?

? 如何實現(xiàn)?

? (+)? (+) 所在的表的字段 對面的表的數(shù)據(jù)全部被匹配出來

? ? ? ? ? ? ? 底層通過 NULL 記錄匹配出來的?

? select distinct m.id,m.first_name

? ? ? ? from? s_emp? e,s_emp m? where e.manager_id(+) = m.id

? ? ? ? and? e.manager_id is null;

3.2 練習? s_emp? s_dept

? ? ? 顯示每個員工的id, first_name? 和 對應的 部門名(name)

? ? select? e.id,first_name,name

? ? ? ? from? s_emp e,s_dept d

? ? ? ? ? ? where? e.dept_id=d.id;

? ? ? 公司為了業(yè)務發(fā)展 需要抽調一部分人出來? 這些人將離開原來的部門

? update? s_emp? set dept_id = null where id < 3;

? commit;

? ? ? 顯示每個員工的id, first_name? 和 對應的 部門名(name)? 沒有部門編號的員工也要顯示

? select? e.id,first_name,name

? ? ? ? from? s_emp e,s_dept d

? ? ? ? ? ? where? e.dept_id=d.id(+);?

3.3 練習? s_dept? ? s_region

? ? 顯示每個部門的名字? 和 對應的地區(qū)的名字

? select d.id, d.name,r.name

? ? ? from? s_dept? d,s_region r

? ? ? ? ? where? d.region_id = r.id;?

? 公司業(yè)務擴大了? 增加了一些新的部門

? insert? into? s_dept? values(100,'test100',NULL);

? insert? into? s_dept? values(101,'test101',NULL);

? commit;? ? ? ? ? ? ? ? ? ? ?

? 顯示每個部門的名字? 和 對應的地區(qū)的名字? 沒有地區(qū)編號的部門也要顯示?

? select d.id, d.name,r.name

? ? ? from? s_dept? d,s_region r

? ? ? ? ? where? d.region_id = r.id(+);? ? ? ? ?

? 3.4 非等值連接的外連接? ? salgrade? s_emp

? ? 列出每個員工的 id? salary? 和? salary 對應的工資級別

? select id,salary,grade

? ? ? from? s_emp,salgrade

? ? ? ? ? where salary? between? losal and hisal;

? 把 id = 25? 和 id=24 的這兩個人的工資 改成 12345

? update? s_emp? set? salary=12345 where id >= 24;

? commit;

? 列出每個員工的 id? salary? 和? salary 對應的工資級別? 超出統(tǒng)計范圍的員工也要顯示

? select id,salary,grade

? ? ? from? s_emp,salgrade

? ? ? ? ? where salary? between? losal(+) and hisal(+);

? 4.表連接

? ? 內連接

? ? ? ? ? ? 等值連接? ? 員工和部門? ? ? 部門和地區(qū)? ? ? ?

? ? ? ? ? ? 非等值連接? 員工的工資 和 對應的工資級別

? ? ? ? ? ? 自連接? ? ? ? ? 誰是領導?

? ? 外連接

? ? ? ? ? ? 等值連接? ? 員工和部門 (找出沒有部門的員工)? ? ? 部門和地區(qū) (沒有地區(qū)編號的部門)? ? ? ?

? ? ? ? ? ? 非等值連接? 員工的工資 和 對應的工資級別? (超出統(tǒng)計范圍的工資)

? ? ? ? ? ? 自連接? ? ? ? ? 誰是普通員工?


? ? ? 外連接的結果集 等于 內連接的結果集? 加上匹配不上的記錄

? ? ? ? ? ? 如何實現(xiàn)的?

? ? ? (+)? (+)的意思所在字段的對面的表的數(shù)據(jù)全部被匹配出來

? ? ? ? ? ? 本質上 底層是通過 NULL 記錄進行的匹配

? 5.SQL99 內外連接

? ? 5.1 內連接標準

? ? from? a表? join b表? on 連接條件? where 過濾條件;

? ? from? a表? inner join b表? on 連接條件? where 過濾條件;

? ? ? ? ? 顯示 每個部門的名字 和 對應的地區(qū)的名字

? ? ? select? d.name,r.name

? ? ? ? ? from? s_dept d,s_region r

? ? ? ? ? ? ? where? d.region_id = r.id;

? ? select? d.name,r.name

? ? ? ? ? from? s_dept d? join s_region r

? ? ? ? ? ? ? on? d.region_id = r.id;

? ? select? d.name,r.name

? ? ? ? ? from? s_dept d? inner? join s_region r

? ? ? ? ? ? ? on? d.region_id = r.id;

? ? 5.2 外連接的標準

? ? a表? left outer? join? b 表? on 表的連接條件? where? 過濾條件;

? ? a表? right outer? join? b 表? on 表的連接條件? where? 過濾條件;

? ? a表? full? outer? join? b 表? on 表的連接條件? where? 過濾條件;


? ? a表? left outer? join? b 表? 就是a表發(fā)起連接? 意思就是a表的數(shù)據(jù)全部被匹配出來捌蚊。

? ? a表? right outer? join b 表? 就是b表發(fā)起連接? 意思就是 b表的數(shù)據(jù)全部被匹配出來审姓。

? ? ? ? ? 本質上也通過 NULL 記錄進行的匹配

? ? ? ? ? 顯示每個部門的名字? 和 對應的地區(qū)的名字? 沒有地區(qū)編號的部門也要顯示?

? ? ? select d.id, d.name,r.name

? ? ? ? ? from? s_dept? d,s_region r

? ? ? ? ? ? ? where? d.region_id = r.id(+);?


? ? ? select d.id, d.name,r.name

? ? ? ? ? from? s_dept? d left outer? join s_region r

? ? ? ? ? ? ? on? d.region_id = r.id;


? ? ? select d.id, d.name,r.name

? ? ? ? ? from? s_region r? right outer? join? s_dept? d

? ? ? ? ? ? ? on? d.region_id = r.id;? ? ?

? ? ? ? ? ? ? 使用左外連接? 實現(xiàn) s_emp 誰是普通員工的問題 顯示? id? first_name

? ? ? ? ? ? ? 誰是領導?40? 誰是普通員工 40? 改成 left outer? join? 20

? ? ? ? select distinct m.id,m.first_name

? ? ? ? ? ? from? s_emp? e,s_emp m

? ? ? ? ? ? ? ? where? e.manager_id(+) = m.id and e.manager_id is null;? ? ? ?

? ? ? select distinct m.id,m.first_name

? ? ? ? ? ? from? s_emp? m? left outer join s_emp e

? ? ? ? ? ? ? ? on? e.manager_id = m.id where e.manager_id is null;


? ? ? select distinct m.id,m.first_name

? ? ? ? ? ? from? s_emp? m? left? join s_emp e

? ? ? ? ? ? ? ? on? e.manager_id = m.id where e.manager_id is null;


? ? ? 5.3? full outer join?

? ? ? ? ? ? 全外連接 只是一個邏輯概念,代表左外連接的結果集 加上 右外連接的結果集 然后

? ? ? ? ? ? ? ? ? 排除重復的記錄旨椒。

? ? ? Oracle 中如何實現(xiàn)全外連接呢? 不是通過兩端都加(+) 實現(xiàn)的晓褪。

? ? ? ? ? ? 而是通過? union? ? 來實現(xiàn)的 , union 的意思是 合并兩個結果集? 然后排重综慎。

? ? ? union? all? 合并兩個結果集? 不排重涣仿。

? ? ? select? id from? s_emp? union? select id from s_emp;

? ? ? select? id from? s_emp? union? all select id from s_emp;? ? ? ? ? ? ?

? 6.組函數(shù)

? ? 6.1 特點

? ? ? ? 對一組數(shù)據(jù)處理 最終返回一個結果? 無論sql語句影響多少行 最終只有一個結果。

? ? 6.2 常見的組函數(shù)

? ? max(par1)? 統(tǒng)計最大值

? ? min(par1)? 統(tǒng)計最小值

? ? avg(par1)? 統(tǒng)計平均值

? ? sum(par1)? 統(tǒng)計和

? ? count(par1)? 統(tǒng)計個數(shù)

? ? 6.3 練習

? ? ? ? 統(tǒng)計s_emp 表中的最高工資? 最低工資? 員工的個數(shù)

? ? select? max(salary),min(salary),count(id)? from? s_emp;

? ? ? ? 統(tǒng)計s_emp 表中的工資的和? 以及 工資的平均值

? ? select? sum(salary),avg(salary)? from? s_emp;

? ? 6.4 特殊用法

? ? ? ? 在count 中可以使用? *

? ? select? count(*) from? s_emp;

? ? ? ? 組函數(shù)中可以使用? distinct

? ? select? sum(distinct salary),avg(salary)? from? s_emp;? ?

? ? 6.5 組函數(shù) 對NULL 值如何處理?? 忽略

? ? select max(manager_id) from s_emp;

? ? select avg(manager_id) from s_emp;


? ? 7.分組

? ? 7.1 概念

? ? ? ? 按照一定的標準? 把數(shù)據(jù)分割成若干部分

? ? 7.2 提出問題

? ? ? ? 按照部門編號分組 統(tǒng)計每個部門的人數(shù)

? ? dept_id? ? count

? ? 41? ? ? ? ? 3

? ? 42? ? ? ? ? 4

? ? 50? ? ? ? ? 2

? ? 7.3 sql 中如何完成

? ? select? 字段名,統(tǒng)計的數(shù)據(jù)? from? 表名? ? where 條件

? ? ? ? group by 分組標準? having? 組數(shù)據(jù)過濾條件?

? ? ? ? ? ? order by 排序標準;

按照部門編號分組? 統(tǒng)計 每個部門的人數(shù)? ? 顯示 部門編號 和 平均工資? ? ? ? ? ?

select dept_id,count(id)?

? ? from? s_emp?

? ? ? ? group? by? dept_id;


? ? 按照部門編號 分組? 統(tǒng)計 每個部門的平均工資? 顯示 部門編號 和 平均工資

? select dept_id,avg(salary)?

? ? ? from? s_emp?

? ? ? ? group? by? dept_id;? ?

? 7.4 練習? s_dept

? ? ? 按照地區(qū)編號 分組? 統(tǒng)計每個地區(qū)中的部門個數(shù)? 顯示地區(qū)編號 和 部門個數(shù)

select region_id,count(id)

? from? s_dept

? ? ? group by region_id;

? 要求地區(qū)中部門個數(shù)大于2 的顯示?

select region_id,count(id)

? ? from? s_dept

? ? ? ? group by region_id? having count(id) > 2;?

? 7.5 按照部門編號分組? 統(tǒng)計每個部門的平均工資? 要求平均工資大于1400 的 顯示

? select? dept_id,avg(salary)? ? ?

? ? ? from? s_emp?

? ? ? ? ? group by? dept_id? having? avg(salary) > 1400;


? having 執(zhí)行早? 還是? select 執(zhí)行早?

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末示惊,一起剝皮案震驚了整個濱河市好港,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌米罚,老刑警劉巖媚狰,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異阔拳,居然都是意外死亡崭孤,警方通過查閱死者的電腦和手機类嗤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辨宠,“玉大人遗锣,你說我怎么就攤上這事∴托危” “怎么了精偿?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長赋兵。 經(jīng)常有香客問我笔咽,道長,這世上最難降的妖魔是什么霹期? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任叶组,我火速辦了婚禮,結果婚禮上历造,老公的妹妹穿的比我還像新娘甩十。我一直安慰自己,他們只是感情好吭产,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布侣监。 她就那樣靜靜地躺著,像睡著了一般臣淤。 火紅的嫁衣襯著肌膚如雪橄霉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天邑蒋,我揣著相機與錄音酪劫,去河邊找鬼。 笑死寺董,一個胖子當著我的面吹牛覆糟,可吹牛的內容都是我干的。 我是一名探鬼主播遮咖,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼滩字,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了御吞?” 一聲冷哼從身側響起麦箍,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎陶珠,沒想到半個月后挟裂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡揍诽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年诀蓉,在試婚紗的時候發(fā)現(xiàn)自己被綠了栗竖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡渠啤,死狀恐怖狐肢,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情沥曹,我是刑警寧澤份名,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站妓美,受9級特大地震影響僵腺,放射性物質發(fā)生泄漏。R本人自食惡果不足惜壶栋,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一辰如、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧委刘,春花似錦丧没、人聲如沸鹰椒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽漆际。三九已至淆珊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間奸汇,已是汗流浹背施符。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留擂找,地道東北人戳吝。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像贯涎,于是被迫代替她去往敵國和親听哭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內容

  • 1. 了解SQL 1.1 數(shù)據(jù)庫基礎 ? 學習到目前這個階段塘雳,我們就需要以某種方式與數(shù)據(jù)庫打交道陆盘。在深入學習MyS...
    鋒享前端閱讀 1,082評論 0 1
  • ORACLE自學教程 --create tabletestone ( id number, --序號usernam...
    落葉寂聊閱讀 1,086評論 0 0
  • 一、SQL速成 結構查詢語言(SQL)是用于查詢關系數(shù)據(jù)庫的標準語言败明,它包括若干關鍵字和一致的語法隘马,便于數(shù)據(jù)庫元件...
    shadow雨軒閱讀 514評論 0 3
  • 2017年是我的幸運年酸员,是我提升認知的開始. 笑來老師說蜒车,你一定要學會寫作,因為寫作是把自己的同一段時間重復銷售很...
    設計師周文斌閱讀 245評論 0 2
  • 愛一個人就要為她負責沸呐!具體就是處處為她著想醇王,呵護她!當她偏離路線時崭添,給予建議人間正道方可行遠寓娩。當她落魄暗淡時,給予...
    潤無閱讀 219評論 0 1