日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL -- 多表查询

發(fā)布時間:2023/12/13 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL -- 多表查询 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

--==========================

--SQL基礎(chǔ)-->多表查詢

--==========================

/*

一、多表查詢

????簡言之,根據(jù)特定的連接條件從不同的表中獲取所需的數(shù)據(jù)

?

????笛卡爾集的產(chǎn)生條件:

???????省略連接條件

???????連接條件無效

???????第一個表中的所有行與第二個表中的所有行相連接

???????????

二、多表查詢語法:*/

????SELECT?table1.column,?table2.column

????FROM?table1,?table2

????WHERE?table1.column1?=?table2.column2;

????/*

????但要注意where?不要省了,省略where?即為笛卡爾集,而且where?條件要有效,

????兩張表間有一個相同的字段,才好進(jìn)行有效的多表查詢

?

????查詢時列名前,加表名或表別名前輟(如果字段在兩個表中是唯一的可以不加)

?

????為了簡化SQL書寫,可為表名定義別名,格式:from?表名別名

????如:from emp e,dept d

???

????建議使用表的別名及表前綴,使用表別名可以簡化查詢,而使用表前綴則可以提高查詢性能

?

????例:查詢每個員工的工號,姓名,工資,部門名和工作地點(diǎn)*/

????select?empno,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;??--(Oracle 8i?及以前的寫法)

?

????--內(nèi)連接的另一種寫法:

????select?empno,ename,job,sal,dept.deptno,dname,loc

????from?emp?join?dept?on?(emp.deptno=dept.deptno);?-- (SQL 99的寫法)

?

????/*

????外連接:

????兩個表的查詢中,使用外連接可以查詢另一個表或者兩個中不滿足連接條件的數(shù)據(jù)。

????外連接的符號是(+),(+)要放在字段名后。(+)對面的那個表,會全部顯示。

???

????外連接語法*/

????????SELECT?table1.column,?table2.column???--右外連接

???????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?emp.deptno(+)=dept.deptno;?-- (Oracle 8i?及以前的寫法)

?

????--另一種寫法(右連接):?????-- (SQL 99的寫法)

????select?empno,ename,job,sal,dept.deptno,dname,loc

????from?emp?right?join?dept?on?(emp.deptno=dept.deptno);

?

????--左連接:????????????????????(SQL 99的寫法)

????select?empno,ename,job,sal,dept.deptno,dname,loc

????from?emp?left?join?dept?on?(emp.deptno=dept.deptno);

?

????--全連接(滿連接)????????????(SQL 99的寫法)

???select?empno,ename,job,sal,d.deptno,dname,loc

????from?emp e?full?join?dept d?on?(e.deptno=d.deptno);

?

????/*

????自然連接????????????????????(SQL 99的寫法)

????以兩個表具有相同的字段的所有列為基礎(chǔ),可采用自然連接(natural join)

????它將選擇兩個表中那些在所有匹配的列中值相等的行。

????如果列具有相同的名稱,但數(shù)據(jù)類型能夠不同,則會報(bào)錯*/

????select?empno,ename,job,sal,deptno,dname,loc

????from?emp natural?join?dept;

?

????/*

????自連接:

????將自身表的一個鏡像當(dāng)另一個表來對待。*/

????select?...?from?emp e,emp d??...

???

????--下面列出SQL 99的語法供參考

????SELECT?table1.column,?table2.column

????FROM?table1

????[CROSS JOIN table2]?|

????[NATURAL JOIN table2]?|

????[JOIN table2 USING (column_name)]?|

????[JOIN table2

????ON(table1.column_name = table2.column_name)]?|

????[LEFT|RIGHT|FULL OUTER JOIN table2

????ON (table1.column_name = table2.column_name)];

???

????--在下面的語法中

????table1.column?????--指明從中檢索數(shù)據(jù)的表和列

????CROSS?JOIN????????--返回兩個表的笛卡爾集

????NATURAL?JOIN??????--根據(jù)相同的列名連接兩個表

????JOIN?table

????USING column_name?--根據(jù)列名執(zhí)行等值連接

????JOIN?table?ON

????table1.column_name???--根據(jù)ON?子句中的條件執(zhí)行等值連接

????=?table2.column_name

????LEFT/RIGHT/FULL?OUTER

???

????/*

????使用using子句創(chuàng)建連接

????????如果幾個列具有相同的名稱,但是數(shù)據(jù)類型不匹配,那么可以使用using子句來修改natural join

???????子句以指定要用于等值連接的列

???????在多個列匹配時,使用using?子句只匹配一個列

???????在引用列中不要使用表名或別名

???????natural join?using?子句是互不相容的?*/

??????

????????--例:

???????SELECT?l.city,?d.department_name

???????FROM?locations l?JOIN?departments d USING?(location_id)

???????WHERE?location_id?=?1400;

???????--下面的語句無效,因?yàn)?/span>where?子句中限定了location_id

???????SELECT?l.city,?d.department_name

???????FROM?locations l?JOIN?departments d USING?(location_id)

???????WHERE?d.location_id?=?1400;

???????ORA-25154:?column?part?of?USING clause cannot have qualifier

??????

???????--注意:

???????--???兩個表中名稱相同的列在使用時不能有任何限定符,這一限制同樣適用于natural join

/*

四、演示:??????*/?

--笛卡爾集

????SQL>?select?empno,ename,dname?from?emp,dept;

?

????????EMPNO ENAME??????DNAME

????---------- ---------- --------------

?????????7369 SMITH??????ACCOUNTING

?????????7499 ALLEN??????ACCOUNTING

?????????7521 WARD???????ACCOUNTING

?????????7566 JONES??????ACCOUNTING

?????????7654 MARTIN?????ACCOUNTING

?????????7698 BLAKE??????ACCOUNTING

?????????7782 CLARK??????ACCOUNTING

?????????7788 SCOTT??????ACCOUNTING

?????????7839 KING???????ACCOUNTING

?????????7844 TURNER?????ACCOUNTING

?????????7876 ADAMS??????ACCOUNTING

?????????--中間結(jié)果省略

?????????56 rows selected.????

--使用cross join?實(shí)現(xiàn)交叉連接,即笛卡爾集????

????SQL>?select?empno,ename,dname?from?emp

??????2??cross?join?dept;

?

????????EMPNO ENAME??????DNAME

????---------- ---------- --------------

?????????7369 SMITH??????ACCOUNTING

?????????7499 ALLEN??????ACCOUNTING

?????????7521 WARD???????ACCOUNTING

?????????7566 JONES??????ACCOUNTING

?????????7654 MARTIN?????ACCOUNTING

?????????7698 BLAKE??????ACCOUNTING

?????????7782 CLARK??????ACCOUNTING

?????????7788 SCOTT??????ACCOUNTING

?????????7839 KING???????ACCOUNTING

?????????7844 TURNER?????ACCOUNTING

?????????7876 ADAMS??????ACCOUNTING

?????

--等值連接(Oracle?寫法)

????SQL>?select?empno,ename,dname?from?emp,dept?where?emp.deptno?=?dept.deptno;

?

????????EMPNO ENAME??????DNAME

????---------- ---------- --------------

?????????7369 SMITH??????RESEARCH

?????????7499 ALLEN??????SALES

?????????7876 ADAMS??????RESEARCH

?????????--部分結(jié)果省略

?????????7902 FORD???????RESEARCH

?????????7934 MILLER?????ACCOUNTING

?

????14 rows selected.

?

--等值連接(SQL 99?寫法)

????SQL>?select?e.empno,e.ename,d.dname?from?emp??e

??????2??inner?join?dept??d

??????3??on?e.deptno?=?d.deptno;

?

????????EMPNO ENAME??????DNAME

????---------- ---------- --------------

?????????7369 SMITH??????RESEARCH

?????????7499 ALLEN??????SALES

?????????7876 ADAMS??????RESEARCH

???????????--部分結(jié)果省略

?????????7902 FORD???????RESEARCH

?????????7934 MILLER?????ACCOUNTING

?

????14 rows selected.

?

--注意:表別名不支持as?用法

????SQL>?select?e.empno,e.ename,d.dname?from?emp?as?e

??????2??inner?join?dept??d

??????3??on?e.deptno?=?d.deptno;

????select?e.empno,e.ename,d.dname?from?emp?as?e

???????????????????????????????????????*

????ERROR at line 1:

????ORA-00933:?SQL command?not?properly ended

?

--等值連接并增加條件

????SQL>?select?e.empno,e.ename,d.dname?from?emp??e,

??????2??dept d

??????3??where?d.deptno?=?e.deptno

??????4????and?e.ename?=?'SCOTT';

?

????????EMPNO ENAME??????DNAME

????---------- ---------- --------------

?????????7788 SCOTT??????RESEARCH

?????

--非等值連接

--查詢雇員的姓名、薪水、級別且部門為的記錄

????SQL>?select?ename,sal,grade

??????2??from?emp,salgrade

??????3??where?sal?between?losal?and?hisal

??????4????and?emp.deptno?=?20;

?

????ENAME?????????????SAL??????GRADE

????---------- ---------- ----------

????SCOTT????????????3000??????????4

????FORD?????????????3000??????????4

????JONES????????????2975??????????4

????ADAMS????????????1100??????????1

????SMITH?????????????800??????????1?

?

--使用SQL 99寫法實(shí)現(xiàn)上述功能

????SQL>?select?e.ename,e.sal,s.grade

??????2??from?emp e

??????3????join?salgrade s

??????4??????on?e.sal?between?losal?and?hisal

??????5??????and?e.deptno?=?20;

?

????ENAME?????????????SAL??????GRADE

????---------- ---------- ----------

????SCOTT????????????3000??????????4

????FORD?????????????3000??????????4

????JONES????????????2975??????????4

????ADAMS????????????1100??????????1

????SMITH?????????????800??????????1

?

--右外連接

--注意:右外連接時,加號在等號的左邊

--可以看到,左表emp中的列有為空值的

????SQL>?select?e.ename,e.deptno,d.dname??

??????2??from?emp e,dept d

??????3??where?e.deptno(+)?=?d.deptno;

?

????ENAME??????????DEPTNO DNAME

????---------- ---------- --------------

????CLARK??????????????10 ACCOUNTING

????KING???????????????10 ACCOUNTING

????MILLER?????????????10 ACCOUNTING

????JONES??????????????20 RESEARCH

????FORD???????????????20 RESEARCH

????ADAMS??????????????20 RESEARCH

????SMITH??????????????20 RESEARCH

????SCOTT??????????????20 RESEARCH

????WARD???????????????30 SALES

????TURNER?????????????30 SALES

????ALLEN??????????????30 SALES

?

????ENAME??????????DEPTNO DNAME

????---------- ---------- --------------

????JAMES??????????????30 SALES

????BLAKE??????????????30 SALES

????MARTIN?????????????30 SALES

???????????????????????OPERATIONS

?

????15 rows selected.

?

--使用SQL 99寫法實(shí)現(xiàn)右外連接

????SQL>?select?e.ename,e.deptno,d.dname

??????2??from?emp e??????

??????3????right?join?dept d

??????4??????on?e.deptno?=?d.deptno?;

?

????ENAME??????????DEPTNO DNAME

????---------- ---------- --------------

????CLARK??????????????10 ACCOUNTING

????KING???????????????10 ACCOUNTING

????MILLER?????????????10 ACCOUNTING

????JONES??????????????20 RESEARCH

????FORD???????????????20 RESEARCH

????ADAMS??????????????20 RESEARCH

????SMITH??????????????20 RESEARCH

????SCOTT??????????????20 RESEARCH

????WARD???????????????30 SALES

????TURNER?????????????30 SALES

????ALLEN??????????????30 SALES

?

????ENAME??????????DEPTNO DNAME

????---------- ---------- --------------

????JAMES??????????????30 SALES

????BLAKE??????????????30 SALES

????MARTIN?????????????30 SALES

???????????????????????OPERATIONS

?

--左外連接

--注意:左外連接時,加號在等號的右邊

????SQL>?select?d.dname,e.ename,e.deptno

??????2??from?dept d,emp e

??????3??where?d.deptno?=?e.deptno(+)

??????4??order?by?d.deptno;

?

????DNAME??????????ENAME??????????DEPTNO

????-------------- ---------- ----------

????ACCOUNTING?????CLARK??????????????10

????ACCOUNTING?????KING???????????????10

????ACCOUNTING?????MILLER?????????????10

????RESEARCH???????JONES??????????????20

????RESEARCH???????FORD???????????????20

????RESEARCH???????ADAMS??????????????20

????RESEARCH???????SMITH??????????????20

????RESEARCH???????SCOTT??????????????20

????SALES??????????WARD???????????????30

????SALES??????????TURNER?????????????30

????SALES??????????ALLEN??????????????30

?

????DNAME??????????ENAME??????????DEPTNO

????-------------- ---------- ----------

????SALES??????????JAMES??????????????30

????SALES??????????BLAKE??????????????30

????SALES??????????MARTIN?????????????30

????OPERATIONS

?

????15 rows selected.

?

--使用SQL 99寫法實(shí)現(xiàn)左外連接???????????????

????SQL>?select?d.dname,e.ename,e.deptno

??????2??from?dept d

??????3????left?join?emp e

??????4??????on?d.deptno?=?e.deptno

??????5??order?by?d.deptno;

?

????DNAME??????????ENAME??????????DEPTNO

????-------------- ---------- ----------

????ACCOUNTING?????CLARK??????????????10

????ACCOUNTING?????KING???????????????10

????ACCOUNTING?????MILLER?????????????10

????RESEARCH???????JONES??????????????20

????RESEARCH???????FORD???????????????20

????RESEARCH???????ADAMS??????????????20

????RESEARCH???????SMITH??????????????20

????RESEARCH???????SCOTT??????????????20

????SALES??????????WARD???????????????30

????SALES??????????TURNER?????????????30

????SALES??????????ALLEN??????????????30

?

????DNAME??????????ENAME??????????DEPTNO

????-------------- ---------- ----------

????SALES??????????JAMES??????????????30

????SALES??????????BLAKE??????????????30

????SALES??????????MARTIN?????????????30

????OPERATIONS

?

????15 rows selected.????????????????

?

--自連接

????SQL>?select?e.ename?||?' works for '?||?m.ename

??????2??from?emp e,emp m

??????3??where?e.empno?=?m.mgr;

?

????E.ENAME||'WORKSFOR'||M.ENAME

????-------------------------------

????FORD works?for?SMITH

????BLAKE works?for?ALLEN

????BLAKE works?for?WARD

????KING works?for?JONES

????BLAKE works?for?MARTIN

????KING works?for?BLAKE

????KING works?for?CLARK

????JONES works?for?SCOTT

????BLAKE works?for?TURNER

????SCOTT works?for?ADAMS

????BLAKE works?for?JAMES

?

????E.ENAME||'WORKSFOR'||M.ENAME

????-------------------------------

????JONES works?for?FORD

????CLARK works?for?MILLER

?

????13 rows selected.

?

--自然連接

????SQL>?select?empno,ename,job,deptno,dname,loc

??????2??from?emp

??????3??natural?join?dept;

?

????????EMPNO ENAME??????JOB???????????DEPTNO DNAME??????????LOC

????---------- ---------- --------- ---------- -------------- -------------

?????????7369 SMITH??????CLERK?????????????20 RESEARCH???????DALLAS

?????????7499 ALLEN??????SALESMAN??????????30 SALES??????????CHICAGO

?????????7521 WARD???????SALESMAN??????????30 SALES??????????CHICAGO

?????????7566 JONES??????MANAGER???????????20 RESEARCH???????DALLAS

?????????7654 MARTIN?????SALESMAN??????????30 SALES??????????CHICAGO

?????????7698 BLAKE??????MANAGER???????????30 SALES??????????CHICAGO

?????????7782 CLARK??????MANAGER???????????10 ACCOUNTING?????NEW YORK

?????????7788 SCOTT??????ANALYST???????????20 RESEARCH???????DALLAS

?????????7839 KING???????PRESIDENT?????????10 ACCOUNTING?????NEW YORK

?????????7844 TURNER?????SALESMAN??????????30 SALES??????????CHICAGO

?????????7876 ADAMS??????CLERK?????????????20 RESEARCH???????DALLAS

?

????????EMPNO ENAME??????JOB???????????DEPTNO DNAME??????????LOC

????---------- ---------- --------- ---------- -------------- -------------

?????????7900 JAMES??????CLERK?????????????30 SALES??????????CHICAGO

?????????7902 FORD???????ANALYST???????????20 RESEARCH???????DALLAS

?????????7934 MILLER?????CLERK?????????????10 ACCOUNTING?????NEW YORK

?

????14 rows selected.

?

--使用using?子句創(chuàng)建連接

????SQL>?select?e.empno,e.ename,d.dname,d.loc

??????2??from?emp e

??????3??join?dept d

??????4??using?(deptno)

??????5??where?deptno?in?(20,40);

?

????????EMPNO ENAME??????DNAME??????????LOC

????---------- ---------- -------------- -------------

?????????7369 SMITH??????RESEARCH???????DALLAS

?????????7566 JONES??????RESEARCH???????DALLAS

?????????7788 SCOTT??????RESEARCH???????DALLAS

?????????7876 ADAMS??????RESEARCH???????DALLAS

?????????7902 FORD???????RESEARCH???????DALLAS

/*

五、更多*/

?

Oracle?數(shù)據(jù)庫實(shí)例啟動關(guān)閉過程

?

Oracle 10g SGA?的自動化管理

?

使用OEM,SQL*Plus,iSQL*Plus?管理Oracle實(shí)例

?

Oracle實(shí)例和Oracle數(shù)據(jù)庫(Oracle體系結(jié)構(gòu))

?

SQL?基礎(chǔ)-->常用函數(shù)

?

SQL基礎(chǔ)-->過濾和排序

?

SQL?基礎(chǔ)-->SELECT?查詢

總結(jié)

以上是生活随笔為你收集整理的SQL -- 多表查询的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。