7多數(shù)據(jù)表連接和集合運(yùn)算_第1頁(yè)
7多數(shù)據(jù)表連接和集合運(yùn)算_第2頁(yè)
7多數(shù)據(jù)表連接和集合運(yùn)算_第3頁(yè)
7多數(shù)據(jù)表連接和集合運(yùn)算_第4頁(yè)
7多數(shù)據(jù)表連接和集合運(yùn)算_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 了解表連接的基本原理,分清連接的類型; 掌握各種類型連接的使用方法; 掌握利用SQL:1999的語(yǔ)法創(chuàng)建連接的方法; 掌握各種類型連接之間的區(qū)別與聯(lián)系; 使用UNION,UNION ALL,INTERSECT和MINUS等集合運(yùn)算; EMPNO DEPTNO LOC- - - 7839 10 NEW YORK 7698 30 CHICAGO 7782 10 NEW YORK 7566 20 DALLAS 7654 30 CHICAGO 7499 30 CHICAGO.14 rows selected. EMPNO ENAME. DEPTNO- -. - 7839 KING. 10 7698

2、BLAKE. 30 . 7934 MILLER . 10DEPTNO DNAME LOC - - - 10 ACCOUNTING NEW YORK 20 RESEARCHDALLAS 30 SALESCHICAGO 40 OPERATIONS BOSTONl使用連接從多個(gè)表中查詢數(shù)據(jù)。l在 WHERE子句中書寫連接條件,通常都是使用主鍵和外鍵進(jìn)行連接。l如果在多個(gè)表中出現(xiàn)相同的列名,則需要使用表名作為來(lái)自該表的列名的前綴。lN個(gè)表相連時(shí),至少需要N-1個(gè)連接條件。SELECTtable1.column, table2.columnFROMtable1, table2WHEREtable1.co

3、lumn1 = table2.column2;等值連接等值連接非等值連接非等值連接外部連接外部連接內(nèi)部連接內(nèi)部連接l笛卡爾積在下列情況產(chǎn)生:l連接條件被省略l連接條件是無(wú)效的l第一個(gè)表中的所有行和第二個(gè)表中的所有行都發(fā)生連接。l為了避免笛卡爾積,通常需要在WHERE子句中包含一個(gè)有效的連接條件。ENAME DNAME- -KINGACCOUNTINGBLAKE ACCOUNTING .KINGRESEARCHBLAKE RESEARCH.已選擇已選擇64行。行。 EMPNO ENAME. DEPTNO- -. - 7839 KING. 10 7698 BLAKE. 30 . 7934 MILL

4、ER . 10DEPTNO DNAME LOC - - - 10 ACCOUNTING NEW YORK 20 RESEARCHDALLAS 30 SALESCHICAGO 40 OPERATIONS BOSTON EMPNO ENAME DEPTNO- - - 7839 KING 10 7698 BLAKE 30 7782 CLARK 10 7566 JONES 20 7654 MARTIN 30 7499 ALLEN 30 7844 TURNER 30 7900 JAMES 30 7521 WARD 30 7902 FORD 20 7369 SMITH 20.14 rows selecte

5、d. DEPTNO DNAME LOC - - - 10 ACCOUNTING NEW YORK 30 SALES CHICAGO 10 ACCOUNTING NEW YORK 20 RESEARCHDALLAS 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 20 RESEARCHDALLAS 20 RESEARCHDALLAS.14 rows selected.注注: 等值連接通常被稱為簡(jiǎn)單連接或內(nèi)部連接。等值連接通常被稱為簡(jiǎn)單連接或內(nèi)部連接。 SQL SELECT e

6、mp.empno, emp.ename, emp.deptno, 2dept.deptno, dept.loc 3 FROM emp, dept 4 WHERE emp.deptno=dept.deptno;EMPNO ENAME DEPTNO DEPTNO LOC- - - - - 7839 KING 10 10 NEW YORK 7698 BLAKE 30 30 CHICAGO 7782 CLARK 10 10 NEW YORK 7566 JONES 20 20 DALLAS.已選擇已選擇16行。行。 EMPNO ENAME DEPTNO- - - 7839 KING 10 7698 BL

7、AKE 30 7782 CLARK 10 7566 JONES 20 7654 MARTIN 30 7499 ALLEN 30 7844 TURNER 30 7900 JAMES 30 7521 WARD 30 7902 FORD 20 7369 SMITH 20.14 rows selected.DEPTNO DNAME LOC - - 10 ACCOUNTING NEW YORK 30 SALES CHICAGO 10 ACCOUNTING NEW YORK 20 RESEARCHDALLAS 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICA

8、GO 30 SALES CHICAGO 30 SALES CHICAGO 20 RESEARCHDALLAS 20 RESEARCHDALLAS.14 rows selected.l在用到多個(gè)表時(shí)使用表名作前綴來(lái)限定列l(wèi)通過(guò)使用表前綴可以提高性能l通過(guò)使用列的別名可以區(qū)分來(lái)自不同表但是名字相同的列l(wèi)通過(guò)使用表的別名來(lái)簡(jiǎn)化查詢語(yǔ)句SQL SELECT emp.empno, emp.ename, emp.deptno, 2 dept.deptno, dept.loc 3 FROM emp, dept 4 WHERE emp.deptno=dept.deptno;SQL SELECT e.empno

9、, e.ename, e.deptno, 2 d.deptno, d.loc 3 FROM emp e, dept d 4 WHERE e.deptno= d.deptno;NAMECUSTID-JOCKSPORTS 100TKB SPORT SHOP 101VOLLYRITE 102JUST TENNIS 103K+T SPORTS 105SHAPE UP 106WOMENS SPORTS 107.9 rows selected. CUSTID ORDID- - 101 610 102 611 104 612 106 601 102 602 106 604 106 605. 21 rows

10、selected. ORDID ITEMID- - 610 3 611 1 612 1 601 1 602 1.64 rows selected. EMPNO ENAME SAL- - - 7839 KING 5000 7698 BLAKE 2850 7782 CLARK 2450 7566 JONES 2975 7654 MARTIN 1250 7499 ALLEN 1600 7844 TURNER 1500 7900 JAMES 950.14 rows selected.GRADE LOSAL HISAL- - -1 70012002 120114003 14012000420013000

11、5 30019999ENAME SAL GRADE- - -JAMES 950 1SMITH 800 1ADAMS 1100 1.14 rows selected.SQL SELECT e.ename, e.sal, s.grade 2FROMemp e, salgrade s 3WHERE e.sal 4BETWEEN s.losal AND s.hisal;ENAMEDEPTNO-KING10BLAKE30CLARK10JONES20.DEPTNO DNAME- -10 ACCOUNTING30 SALES10 ACCOUNTING20RESEARCH.40OPERATIONSl您可以使用

12、外部連接來(lái)查看哪些行沒有符合連接條件l外部連接的符號(hào)是 (+).SELECT table1.column, table2.columnFROMtable1, table2WHEREtable1.column(+) = table2.column;SELECT table1.column, table2.columnFROMtable1, table2WHEREtable1.column = table2.column(+);ENAME DEPTNO DNAME- - -KING 10 ACCOUNTINGCLARK 10 ACCOUNTING. 40 OPERATIONS已選擇已選擇17行。行

13、。SQL SELECTe.ename, d.deptno, d.dname 2 FROMemp e, dept d 3 WHEREe.deptno(+) = d.deptno 4 ORDER BY e.deptno;外部連接條件不能使用外部連接條件不能使用IN運(yùn)算符,也不能用運(yùn)算符,也不能用or運(yùn)運(yùn)算符與其它條件相連。算符與其它條件相連。EMPNO ENAME MGR- - - 7839 KING 7698 BLAKE7839 7782 CLARK7839 7566 JONES7839 7654 MARTIN 7698 7499 ALLEN7698EMPNO ENAME- - 7839 KIN

14、G 7839 KING 7839 KING 7698 BLAKE 7698 BLAKEWORKER.ENAME|WORKSFOR|MANAG-BLAKE works for KINGCLARK works for KINGJONES works for KINGMARTIN works for BLAKE.已選擇已選擇15行。行。SQL SELECT worker.ename| works for |manager.ename 2 FROM emp worker, emp manager 3 WHERE worker.mgr = manager.empno;自身連接:一個(gè)表與其自己進(jìn)行連接需要

15、給表起別名以示區(qū)別由于所有屬性名都是同名屬性,因此必須使用別名前綴例 查詢每一門課的間接先修課(即先修課的先修課) FIRST表(表(Course表)表) Ccredit 5 3 4 4 5 3 2Cno CnameCpno 1數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù) 5 2數(shù)學(xué)數(shù)學(xué) 3信息系統(tǒng)信息系統(tǒng) 1 4操作系統(tǒng)操作系統(tǒng) 6 5數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu) 7 6數(shù)據(jù)處理數(shù)據(jù)處理 7PASCAL語(yǔ)言語(yǔ)言 6 SECOND表(表(Course表)表) SELECT FIRST.Cno, SECOND.Cpno FROM Course FIRST, Course SECOND WHERE FIRST.Cpno = SECOND.C

16、no;Ccredit 5 3 4 4 5 3 2Cno CnameCpno 1數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù) 5 2數(shù)學(xué)數(shù)學(xué) 3信息系統(tǒng)信息系統(tǒng) 1 4操作系統(tǒng)操作系統(tǒng) 6 5數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu) 7 6數(shù)據(jù)處理數(shù)據(jù)處理 7PASCAL語(yǔ)言語(yǔ)言 6查詢結(jié)果:查詢結(jié)果:CnoPcno17354567Use a join to query data from more than one table.SELECT table1.column, table2.columnFROMtable1CROSS JOIN table2 |NATURAL JOIN table2 |JOIN table2 USING (column_n

17、ame) |JOIN table2 ON(table1.column_name = table2.column_name) |LEFT|RIGHT|FULL OUTER JOIN table2 ON (table1.column_name = table2.column_name);lCROSS JOIN 子句會(huì)產(chǎn)生兩個(gè)表的交叉乘積,和兩個(gè)表之間的笛卡爾積是一樣的。 SELECT emp.empno,emp.ename,emp.sal,emp.deptno,dept.loc FROM emp CROSS JOIN dept; EMPNO ENAME SAL DEPTNO LOC- - - -

18、- 7369 SMITH 800 20 NEW YORK 7499 ALLEN 1600 30 NEW YORK 7521 WARD 1250 30 NEW YORK 7566 JONES 2975 20 NEW YORK 7934 MILLER 1300 10 BOSTON已選擇64行。 l使用自然連接時(shí)應(yīng)注意以下事項(xiàng):l自然連接子句是基于兩個(gè)表存在相同名字的列;l返回兩個(gè)表相匹配列中具有相同值的記錄;l如果相同名稱的列的數(shù)據(jù)類型不同,則會(huì)產(chǎn)生錯(cuò)誤。 SELECT empno,ename,sal,deptno,loc FROM emp NATURAL JOIN dept; EMPNO ENA

19、ME SAL DEPTNO LOC- - - - - 7369 SMITH 800 20 DALLAS 7499 ALLEN 1600 30 CHICAGO 7521 WARD 1250 30 CHICAGO 7566 JONES 2975 20 DALLAS 7934 MILLER 1300 10 NEW YORK已選擇已選擇16行。行。l自然連接使用所有名稱和數(shù)據(jù)類型相匹配的列,USING子句可以用于指定產(chǎn)生連接的列。ENAME ENAME SAL DEPTNO LOC- - - - -SMITH SMITH 800 20 DALLASJONES JONES 2975 20 DALLASS

20、COTT SCOTT 3000 20 DALLASADAMS ADAMS 1100 20 DALLASFORD FORD 3000 20 DALLAS已選擇已選擇5行。行。 SELECT e.ename,e.ename,e.sal,deptno,d.loc FROM emp e JOIN dept d USING (deptno) WHERE deptno = 20 ;l自然連接條件基本上是具有相同列名的表之間的等值連接,要指定任意連接條件或特殊的列可以使用ON子句,用ON將連接條件和其它檢索條件分隔開可以提高代碼的可讀性。 EMPNO ENAME DEPTNO DEPTNO LOC- - -

21、 - - 7369 SMITH 20 20 DALLAS 7499 ALLEN 30 30 CHICAGO 7934 MILLER 10 10 NEW YORK 已選擇已選擇15行。行。 SELECT e.empno, e.ename, e.deptno, d.deptno, d.loc FROM emp e JOIN dept d ON (e.deptno = d.deptno); SELECT e.empno, e.ename, d.loc,m.ename FROM emp e JOIN dept d ON e.deptno = d.deptno JOIN manager m ON e.m

22、gr = m.empno; EMPNO ENAME LOC ENAME- - - - 7788 SCOTT DALLAS JONES 7902 FORD DALLAS JONES 7499 ALLEN CHICAGO BLAKE 7521 WARD CHICAGO BLAKE 7934 MILLER NEW YORK CLARK 已選擇已選擇8行。行。 SELECT e.ename,e.deptno,d.loc FROM emp e LEFT OUTER JOIN dept d ON (e.deptno = d.deptno); ENAME DEPTNO LOC- - -MILLER 10 N

23、EW YORKKING 10 NEW YORKCLARK 10 NEW YORKFORD 20 DALLASALLEN已選擇已選擇16行。行。 SELECT e.ename,e.deptno,d.loc FROM emp e RIGHT OUTER JOIN dept d ON (e.deptno = d.deptno); ENAME DEPTNO LOC- - -SMITH 20 DALLASALLEN 30 CHICAGOJONES 20 DALLASMARTIN 30 CHICAGO BOSTON已選擇已選擇17行。行。 SELECT e.ename,e.deptno,d.loc FRO

24、M emp e FULL OUTER JOIN dept d ON (e.deptno = d.deptno); ENAME DEPTNO LOC- - -MILLER 10 NEW YORKKING 10 NEW YORKCLARK 10 NEW YORKALLEN BOSTON已選擇17行。l 集合運(yùn)算符lUNION 返回兩個(gè)查詢的所有行,但剔除重復(fù)行l(wèi)UNION ALL 返回兩個(gè)查詢的所有行,保留所有重復(fù)行l(wèi)INTERSECT 返回同時(shí)出現(xiàn)在兩個(gè)查詢結(jié)果中的所有行l(wèi)MINUS 從第一個(gè)查詢返回的行中減去第二個(gè)查詢返回的行,剩余的行即為返回結(jié)果多個(gè)查詢語(yǔ)句的結(jié)果可以做集合運(yùn)算,結(jié)果集的字段

25、類型、數(shù)量和順序應(yīng)該一樣。l返回兩個(gè)查詢的結(jié)果,重復(fù)行只顯示一次l例:SELECT * FROM EMPlUNIONlSELECT * FROM MANAGERl與UNION運(yùn)算相似,返回兩個(gè)查詢的結(jié)果,顯示重復(fù)行l(wèi)例:SELECT * FROM EMPlUNION ALLlSELECT * FROM MANAGERl返回兩個(gè)查詢中都出現(xiàn)的結(jié)果,即 交運(yùn)算l例:SELECT * FROM EMPlINTERSECTlSELECT * FROM MANAGERl返回那些在第一個(gè)查詢結(jié)果中但不在第二個(gè)查詢結(jié)果中的行l(wèi)例:SELECT * FROM MANAGERlMINUSlSELECT * FROM EMP一、從一、從student表中找出在同一個(gè)系中的不同學(xué)表中找出在同一個(gè)系中的不同學(xué)生名生名二、以下語(yǔ)句的作用是:二、以下語(yǔ)句的作用是:SELECT ename,sal FROM empWHERE sal(SELECT min(sal) FROM emp) ;A. 顯示工資低于顯示工資低于1000元的雇員信息元的雇員信息B. 將雇員工資小于將雇員工資小于1000元的工資增加元的工資增加1000后后顯示顯示C. 顯示超過(guò)最低工資顯示超過(guò)最低工資1000元的雇員信息元的雇員信息D. 顯示不超過(guò)最低工資顯示不超過(guò)最低工資1000元

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論