資源描述:
《sql多表查詢與子查詢》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、SQL基礎(chǔ)-->多表查詢--==========================--SQL基礎(chǔ)-->多表查詢--==========================/*一、多表查詢????簡言之,根據(jù)特定的連接條件從不同的表中獲取所需的數(shù)據(jù)?????笛卡爾集的產(chǎn)生條件:???????省略連接條件???????連接條件無效???????第一個表中的所有行與第二個表中的所有行相連接???????????二、多表查詢語法:*/????SELECT?table1.column,?table2.column????FROM?table1,?table2????WHERE?table1.col
2、umn1?=?table2.column2;????/*????但要注意where?不要省了,省略where?即為笛卡爾集,而且where?條件要有效,????兩張表間有一個相同的字段,才好進(jìn)行有效的多表查詢?????查詢時列名前,加表名或表別名前輟(如果字段在兩個表中是唯一的可以不加)?????為了簡化SQL書寫,可為表名定義別名,格式:from?表名別名????如:fromempe,deptd???????建議使用表的別名及表前綴,使用表別名可以簡化查詢,而使用表前綴則可以提高查詢性能?????例:查詢每個員工的工號,姓名,工資,部門名和工作地點(diǎn)*/????select?emp
3、no,ename,sal,dname,loc?from?emp,dept????where?emp.deptno=dept.deptno;?/*三、多表連接類型:????從數(shù)據(jù)顯示方式來講有:內(nèi)連接和外連接。????內(nèi)連接:只返回滿足連接條件的數(shù)據(jù)。????外連接:除了返回滿足連接條的行以外,還返回左(右)表中,不滿足條件的行,???????稱為左(右)連接?????內(nèi)連接*/????select?empno,ename,sal,dname,loc?from?emp,dept????where?emp.deptno=dept.deptno;??--(Oracle8i?及以前的寫法)
4、?????--內(nèi)連接的另一種寫法:????select?empno,ename,job,sal,dept.deptno,dname,loc????from?emp?join?dept?on?(emp.deptno=dept.deptno);?--(SQL99的寫法)?????/*????外連接:????兩個表的查詢中,使用外連接可以查詢另一個表或者兩個中不滿足連接條件的數(shù)據(jù)。????外連接的符號是(+),(+)要放在字段名后。(+)對面的那個表,會全部顯示。???????外連接語法*/????????SELECT?table1.column,?table2.column???--右
5、外連接???????FROM?table1,?table2???????WHERE?table1.column(+)?=?table2.column;?????????????SELECT?table1.column,?table2.column???--左外連接???????FROM?table1,?table2???????WHERE?table1.column?=?table2.column(+);?????--例:????select?empno,ename,job,sal,dept.deptno,dname,loc????from?emp,dept????where?em
6、p.deptno(+)=dept.deptno;?--(Oracle8i?及以前的寫法)?????--另一種寫法(右連接):?????--(SQL99的寫法)????select?empno,ename,job,sal,dept.deptno,dname,loc????from?emp?right?join?dept?on?(emp.deptno=dept.deptno);?????--左連接:????????????????????(SQL99的寫法)????select?empno,ename,job,sal,dept.deptno,dname,loc????from?emp?
7、left?join?dept?on?(emp.deptno=dept.deptno);?????--全連接(滿連接)????????????(SQL99的寫法)???select?empno,ename,job,sal,d.deptno,dname,loc????from?empe?full?join?deptd?on?(e.deptno=d.deptno);?????/*????自然連接????????????????????(SQL99的寫法)????以兩個表具有