資源描述:
《第8章 子查詢與高級查詢》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第八章子查詢和高級查詢連接查詢基本含義同時涉及多個表的查詢稱為連接查詢用來連接兩個表的條件稱為連接條件或連接謂詞一般格式:比較運算符:=、>、<、>=、<=、!=[<表名1>.]<列名1><比較運算符>[<表名2>.]<列名2>[<表名1>.]<列名1>BETWEEN[<表名2>.]<列名2>AND[<表名2>.]<列名3>連接字段連接謂詞中的列名稱為連接字段連接條件中的各連接字段類型必須是可比的,但不必是相同的連接查詢SQL中連接查詢的主要類型廣義笛卡爾積等值連接(含自然連接)非等值連接查詢自身連接查詢外連接查詢復合條件連接查詢連接查詢廣
2、義笛卡爾積不帶連接謂詞的連接,很少使用SELECTemp.*,dept.*FROMemp,dept;連接查詢等值連接連接運算符為=的連接操作任何子句中引用表1和表2中同名屬性時,都必須加表名前綴。引用唯一屬性名時可以加也可以省略表名前綴。例:查詢每個員工及其所在部門的情況。SELECTemp.*,dept.*FROMemp,deptWHEREemp.deptno=dept.deptno;[<表名1>.]<列名1>=[<表名2>.]<列名2>連接查詢自然連接等值連接的一種特殊情況,把目標列中重復的屬性列去掉。例:查詢每個員工及其所在部門的情
3、況。SELECTemp.*,dname,locFROMemp,deptWHEREemp.deptno=dept.deptno;連接查詢非等值連接連接運算符不是=的連接操作比較運算符:>、<、>=、<=、!=[<表名1>.]<列名1><比較運算符>[<表名2>.]<列名2>[<表名1>.]<列名1>BETWEEN[<表名2>.]<列名2>AND[<表名2>.]<列名3>例:查詢每個員工編號,姓名,工作,工資及其工資等級。Selectempno,ename,job,sal,gradefromemp,salgradeWhereemp.salb
4、etweensalgrade.hisalandsalgrade.lowsalSelectempno,ename,job,sal,gradefromempe,salgradesWheree.salbetweens.hisalands.lowsal連接查詢自身連接一個表與其自己進行連接,稱為表的自身連接需要給表起別名以示區(qū)別由于所有屬性名都是同名屬性,因此必須使用別名前綴例:查詢雇員的姓名及其經(jīng)理的姓名.SELECTe1.ename,e2.enameFROMempe1,empe2WHEREe1.mgr=e2.empno;練一練現(xiàn)要求創(chuàng)建一張國家表,
5、表里有一個字段名為”國家名稱”,內(nèi)容如下:國家名稱中國美國巴西荷蘭要求通過查詢實現(xiàn)對戰(zhàn)列表.例:查詢每個雇員的姓名,工作,所在部門名稱和其直接上級領導的姓名。SELECTe1.ename,e1.job,d.dname,e2.enameFROMempe1,empe2,deptdWHEREe1.mgr=e2.empnoande1.deptno=d.deptno;練一練查詢每個雇員的姓名,工資,部門名稱,工資在公司的等級,以及其領導的姓名,領導的工資等級.現(xiàn)在要求按照以下的樣式顯示工資等級:1:第五等工資2:第四等工資3:第三等工資4:第二等工資5:第
6、一等工資連接查詢外連接(左連接右連接)外連接與普通連接的區(qū)別普通連接操作只輸出滿足連接條件的元組外連接操作以指定表為連接主體,將主體表中不滿足連接條件的元組一并輸出例:查詢每個雇員及其所在部門的情況,如果部門中沒有員工該部門的信息也要輸出。SELECTempno,ename,d.deptno,dname,locfromempe,deptdWheree.deptno(+)=d.deptno(+)例:查詢所有雇員的姓名及其領導的姓名。SELECTe1.ename,e2.enameFROMempe1,empe2WHEREe1.mgr=e2.empno(
7、+);連接查詢交叉連接(crossJOIN)SELECT*FROMDeptcrossJOINEmp連接查詢自然連接(NATURALJOIN)自動進行關(guān)聯(lián)字段的匹配SELECTDName,ENameFROMDeptNATURALJOINEmp列出部門名稱以及在部門中工作的員工姓名連接查詢USING在滿足以下限制時可以使用USING子句對連接條件進行簡化查詢必須是等連接的等連接中的列必須是同名select*fromempejoindeptdusing(deptno)wheredeptno=30;在using子句中引用列時不要使用表名或別名,否則會出錯
8、連接查詢ON用于自定義連接條件select*fromempejoindeptdOne.deptno=d.deptnowheredeptn