數(shù)據(jù)庫(kù)之表連接

一、rowid 和rownum
1舌缤、rowid
rowid是ORACLE在讀取表中數(shù)據(jù)行時(shí)箕戳, 根據(jù)每一行數(shù)據(jù)的物理地址信息編碼而成的一個(gè)偽列。所以根據(jù)一行數(shù)據(jù)的rowid能 找到一行數(shù)據(jù)的物理地址信息国撵。從而快速地定位到數(shù)據(jù)行陵吸。
用于定位數(shù)據(jù)庫(kù)中一條記錄的一個(gè) 相對(duì)唯一地址值。
rowid是一個(gè)偽列介牙,它并不實(shí)際存在于表中壮虫。

--rowid相當(dāng)于對(duì)象的地址,在數(shù)據(jù)插入到表中時(shí)候已經(jīng)存在,rowid不是地址,根據(jù)地址轉(zhuǎn)換的
select ename,job,rowid from emp;
--要求:刪除重復(fù)記錄,一條記錄只保留一次
--思路:將所有記錄按照某種特定規(guī)律分組(相同的記錄為一組)环础,保留下每組中的一條記錄即可囚似,其他記錄刪除
--查詢要保留的數(shù)據(jù)
select * from emp where rowid in(select rowid from emp);
--查詢要?jiǎng)h除的數(shù)據(jù)
select * from emp where  rowid not in(select rowid from emp);
--刪除數(shù)據(jù)
delete from emp where rowid not in(select rowid from emp);

2、rownum
分頁(yè)线得,結(jié)果集的序號(hào)從1開始
按照主鍵進(jìn)行排序 先排序再確定rownum
按照非主鍵排序谆构,先確定rownum再排序

select deptno,rownum from emp order by deptno;
select deptno,ename,rownum from emp order by empno;
select deptno,ename,rownum from emp order by ename;
--按照工資降序排序,找第三頁(yè)的數(shù)據(jù) 一頁(yè)顯示兩條
--正確寫法1
select ename, sal, rownum, m, n
  from (select ename, sal, rownum m, n
          from (select ename, rownum n, sal from emp order by sal desc))
 where m >= 5
   and m <= 6;
--易犯錯(cuò)誤寫法2
select ename, sal, rownum, n
  from (select ename, rownum n, sal from emp order by sal desc)
 where n >= 5
   and n <= 6;
--注意此時(shí)語(yǔ)句執(zhí)行順序?yàn)閒rom -> where -> select ,寫法二中框都,ename不是主鍵
--因此此時(shí)rownum n 為先確定rownum再排序,為亂序呵晨,通過(guò)n篩選的記錄是錯(cuò)誤記錄魏保。
--正確寫法為篩選出記錄之后要重新確定rownum m,然后再通過(guò)m篩選得到正確結(jié)果

二、表連接
使用場(chǎng)景:當(dāng)我們獲取的數(shù)據(jù)不是來(lái)自于同一張表而是來(lái)自于多張表時(shí)就需要使用到表連接
1摸屠、92語(yǔ)法
笛卡爾積

--笛卡爾積  emp中有12條記錄谓罗,dept表中有4條記錄,則最終查詢記錄為48條記錄
select * from emp,dept;

等值連接(在笛卡爾積基礎(chǔ)上 取條件列相同的值)

--等值連接 可以使相同字段 也可以是不同字段季二,但是要保證兩個(gè)字段的數(shù)據(jù)類型相同
select * from emp e,dept d where e.deptno=d.deptno;
--沒(méi)有滿足條件的數(shù)據(jù)
select * from emp e,dept d where e.ename=d.dname;
--字段數(shù)據(jù)類型不一致會(huì)報(bào)錯(cuò)
select * from emp e,dept d where e.ename=d.deptno;

非等值連接( > < != <>between and )

--非等值連接
--薪資2500的等級(jí)信息
select * from salgrade s where 2500 between s.losal and s.hisal;
--查詢所有員工的信息以及工資等級(jí)信息
select * from salgrade s,emp e where e.sal between s.losal and s.hisal;
--查詢所有有上級(jí)的員工信息以及上級(jí)信息
select * from emp e1,emp e2 where e1.mgr=e2.empno;

自連接 特殊的連接,自己連接自己 也可以自外鏈接

--查詢所有有上級(jí)的員工信息以及上級(jí)信息
select * from emp e1,emp e2 where e1.mgr=e2.empno;

外連接
左外連接
右外連接

--查詢所有員工的信息及上級(jí)信息  假設(shè)e1是員工表  e2是上級(jí)表
--需求:想要期中的某張表中所有的數(shù)據(jù)全部展示,無(wú)論是否滿足等值連接條件 --外鏈接 
--外連接:確認(rèn)主表(主表中的內(nèi)容會(huì)全部展示)   +對(duì)面的表為主表,+所在的表為從表
--    左外連接   ->主表在,的左邊叫做左連接    
select * from emp e1,emp e2 where e1.mgr=e2.empno(+);
--    右外連接   ->主表在,的右邊叫做左連接                                                       
select * from emp e2,emp e1 where e1.mgr=e2.empno(+);
--這個(gè)+號(hào)可以這樣來(lái)理解: + 表示補(bǔ)充檩咱,即哪個(gè)表有加號(hào),這個(gè)表就是匹配表胯舷。所以加號(hào)寫在右表刻蚯,左表就是全部顯示,故是左連接桑嘶。
--找出 所有部門的員工數(shù) 及部門名稱
select deptno,count(1) from emp group by deptno;
select d.deptno, d.dname, nvl(c, 0)
  from dept d, (select deptno, count(1) c from emp group by deptno) e
 where e.deptno(+) = d.deptno;

注意:同名列 非* 必須區(qū)分 數(shù)據(jù)源 炊汹、關(guān)系列、 過(guò)濾條件逃顶、字段

--注意:連表查詢最好使用別名指定字段來(lái)源讨便,因?yàn)槭褂玫淖侄问窃诙鄠€(gè)表中存在的
select e.deptno,d.deptno from emp e ,dept d;

2充甚、99語(yǔ)法
交叉連接

--交叉連接  cross join
select * from emp cross join dept;

等值連接
自然連接
using

--等值連接
--     自然連接  natural join 內(nèi)部自動(dòng)查找同名字段|
--           不能指定限定詞
select * from emp natural join dept;
--     using 連接 指定字段等值連接
select * from emp join dept using(deptno);

非等值連接

--非等值連接  join...on...(Inner join 內(nèi)連接)(也可以用來(lái)進(jìn)行等值連接)
--查詢10和30部門的員工的名稱,部門名稱,薪資,薪資等級(jí),上級(jí)名稱 
select e.ename,e.deptno,d.dname,e.sal,s.grade,m.ename 
       from emp e 
        join dept d on e.deptno=d.deptno
         join salgrade s on e.sal between s.losal and s.hisal
          join emp m on m.empno=e.mgr
           where e.deptno in(20,30);

外連接

--外連接
--         左外連接 left join on
select * from emp e1 left join emp e2 on e1.mgr=e2.empno;
--         右外連接 right join on
select * from emp e2 right join emp e1 on e1.mgr=e2.empno;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市霸褒,隨后出現(xiàn)的幾起案子伴找,更是在濱河造成了極大的恐慌,老刑警劉巖废菱,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件技矮,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡昙啄,警方通過(guò)查閱死者的電腦和手機(jī)穆役,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)梳凛,“玉大人耿币,你說(shuō)我怎么就攤上這事∪途埽” “怎么了淹接?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)叛溢。 經(jīng)常有香客問(wèn)我轻绞,道長(zhǎng)糕簿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮丸冕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘叠纷。我一直安慰自己窖贤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布草雕。 她就那樣靜靜地躺著巷屿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪墩虹。 梳的紋絲不亂的頭發(fā)上嘱巾,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音诫钓,去河邊找鬼旬昭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛菌湃,可吹牛的內(nèi)容都是我干的稳懒。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼场梆!你這毒婦竟也來(lái)了墅冷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤或油,失蹤者是張志新(化名)和其女友劉穎寞忿,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體顶岸,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腔彰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辖佣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霹抛。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖卷谈,靈堂內(nèi)的尸體忽然破棺而出杯拐,到底是詐尸還是另有隱情,我是刑警寧澤世蔗,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布端逼,位于F島的核電站,受9級(jí)特大地震影響污淋,放射性物質(zhì)發(fā)生泄漏顶滩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一寸爆、第九天 我趴在偏房一處隱蔽的房頂上張望礁鲁。 院中可真熱鬧,春花似錦赁豆、人聲如沸仅醇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至墩衙,卻和暖如春务嫡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背漆改。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工心铃, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挫剑。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓去扣,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親樊破。 傳聞我的和親對(duì)象是個(gè)殘疾皇子愉棱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容