oracle 丁勇 从零开始学_8.3.1 多表查询分类
8.3? 多表查詢
多表查詢是指使用SELECT語(yǔ)句從多個(gè)表中查詢數(shù)據(jù),多個(gè)表之間通過(guò)主外鍵關(guān)系進(jìn)行關(guān)聯(lián)。在Oracle中,多表查詢有兩種寫法,一種是由ANSI制定的標(biāo)準(zhǔn)的連接語(yǔ)法;另一種是由Oracle自由地連接語(yǔ)法。
8.3.1? 多表查詢分類
大多數(shù)情況下從一個(gè)表中很難獲取到比較全面的信息,比如要查詢emp表中每個(gè)員工的部門名稱,由于部門名稱存儲(chǔ)在dept表中,emp表通過(guò)deptno與dept表進(jìn)行了主外鍵關(guān)聯(lián)。因此要在查詢結(jié)果中包含部門名稱的話,必須要同時(shí)查詢emp表和dept表來(lái)獲取數(shù)據(jù)。
連接其實(shí)就是一種普通的SQL語(yǔ)句,只是在FROM部分要指定多個(gè)表名稱,同時(shí)使用表別名進(jìn)行區(qū)分,Oracle將根據(jù)連接所要返回的結(jié)果數(shù)據(jù)進(jìn)行分類,在Oracle中主要有3種類型的連接。
內(nèi)連接:這種連接返回既滿足A表又滿足B表的行,只有連接(join)的條件滿足才返回,否則不會(huì)返回任何數(shù)據(jù)。
外連接:外連接是內(nèi)連接的擴(kuò)展,外連接返回符合條件的行,同時(shí)可以根據(jù)指定的條件返回不滿足連接條件的左邊的表行或者是右邊的表行。外連接又分為左外連接和右外連接。
自連接:是指一個(gè)表連接到自身,比如emp表中每個(gè)員工屬于一個(gè)經(jīng)理,經(jīng)理的員工編號(hào)也存在于emp表中,因此可以說(shuō)mgr和emp是自連接關(guān)系。
學(xué)習(xí)多表連接查詢有一個(gè)好的辦法,TOAD提供了一個(gè)名為Query Builder的可視化查詢?cè)O(shè)計(jì)器,下面通過(guò)一個(gè)例子學(xué)習(xí)如何通過(guò)可視化的工具來(lái)創(chuàng)建多表查詢,步驟如下所示:
(1)啟動(dòng)TOAD,使用scott/tiger用戶登錄進(jìn)入到數(shù)據(jù)庫(kù),選擇"Database|Report|Query Builder"選項(xiàng),將進(jìn)入到TOAD提供的查詢?cè)O(shè)計(jì)器窗口,如圖8.4所示。
(點(diǎn)擊查看大圖)圖8.4? TOAD的查詢?cè)O(shè)計(jì)器窗口
如果對(duì)象面板沒(méi)有顯示出來(lái),請(qǐng)用鼠標(biāo)右鍵單擊設(shè)計(jì)器面板,從彈出的菜單中選擇"Object Palette"選項(xiàng)。
(2)從對(duì)象面板中拖emp和dept表到設(shè)計(jì)器面板,可以通過(guò)"Ctrl+表名稱"進(jìn)行多選。此時(shí)可以看到兩個(gè)表已經(jīng)加入到了查詢?cè)O(shè)計(jì)器面板。通過(guò)拖動(dòng)emp表中的deptno字段到dept表的deptno主鍵字段,TOAD將自動(dòng)創(chuàng)建兩個(gè)表之間的連接,并且在"Generated Query"選項(xiàng)卡中顯示生成的SQL語(yǔ)句,如圖8.5所示。
(3)在設(shè)計(jì)器中,通過(guò)選中表字段左側(cè)的復(fù)選框選擇要查詢的列,可以看到生成的SQL語(yǔ)句會(huì)自動(dòng)加入所選擇的字段。如果要改變emp和dept表之間的連接,可以雙擊表與表之間的連接線,如圖8.6所示。
在彈出的"View Joins"窗口中,可以看到兩個(gè)表的連接方式,同時(shí)提供了內(nèi)連接(Inner Join)和外連接(Outer Join)的選擇項(xiàng),在"Join Test"連接測(cè)試中,可以指定deptno的連接方式。這里使用默認(rèn)的內(nèi)連接,如果需要更改,只需要選中單選按鈕即可。
(點(diǎn)擊查看大圖)圖8.5? 拖動(dòng)表名稱產(chǎn)生查詢語(yǔ)句
(點(diǎn)擊查看大圖)圖8.6? 更改多表查詢的連接方式
(4)在設(shè)計(jì)完了連接查詢后,可以單擊工具欄上的 圖標(biāo)執(zhí)行查詢,或者將語(yǔ)句復(fù)制到SQL*Plus中執(zhí)行,設(shè)計(jì)器生成的查詢語(yǔ)句如下所示:
SELECT?dept.deptno,?dept.dname,?dept.loc,?emp.empno,?emp.ename,?emp.job,
emp.hiredate,?emp.mgr,?emp.sal,?emp.comm
FROM?scott.dept,?scott.emp
WHERE?((emp.deptno=?dept.deptno))
在了解了這個(gè)方便的功能后,接下來(lái)學(xué)習(xí)一下這幾種連接的實(shí)現(xiàn)方式和異同之處。
【責(zé)任編輯:book TEL:(010)68476606】
點(diǎn)贊 0
總結(jié)
以上是生活随笔為你收集整理的oracle 丁勇 从零开始学_8.3.1 多表查询分类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c++ string 头文件_“延期不延
- 下一篇: 通达信波段王指标公式主图_通达信指标公式