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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle多表连接查询

發(fā)布時間:2023/12/9 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle多表连接查询 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

多個表之間關系:一對多|(多對一)? 多對多 一對一 3種

關系的完整性約束:實體完整性、參照完整性、用于定義的完整性。 必須滿足實體完整性和參照完整性.

實體完整性:規(guī)定了字段|屬性的約束

參照完整性:關系與關系之間的引用 某個字段的約束? 外鍵

?

一.笛卡爾集

?笛卡爾集會在下面條件下產(chǎn)生:

?? 省略連接條件

?? 連接條件無效

?? 所有表中的所有行互相連接

為了避免笛卡爾集, 可以在 WHERE 加入有效的連接條件。

//查詢員工及部門的詳細信息? 但是會產(chǎn)生一個笛卡爾積的效果

SQL> select * from emp,dept;

?

二. Oracle連接

使用來接在多個表中查詢數(shù)據(jù)

//別名查詢 為表起別名 采用別名查詢

SQL> select * from emp e,dept d? where e.deptno=d.deptno;

綜上所述 創(chuàng)建連接查詢時應遵循如下規(guī)則:

1、? from子句應當包括所有的表名

2、? where子句應定義連接條件 兩個表1一個等值條件 三個表 2個等值條件…依次類推。

l? 備注:連接 n個表,至少需要 n-1個連接條件。 例如:連接三個表,至少需要兩個連接條件。

3、? 當列名為多個表共有時,列名必須被限制。

?????? 非等值連接

?????????????????? SELECT e.last_name, e.salary, j.grade_level ?FROM?? employees e, job_grades j

WHERE? e.salary ?BETWEEN j.lowest_sal AND j.highest_sal;

?

三?? 內(nèi)連接和外連接

1、內(nèi)連接:

內(nèi)連接根據(jù)所使用的比較方式不同,把內(nèi)連接分為了:

1)? 等值連接:在連接條件中使用等于號(=)運算符比較被連接列的列值,其查詢結果中列出被連接表中的所有列,包括其中的重復列。

SQL> select * from emp e inner join dept d on e.deptno = d.deptno;

2)? 不等連接:在連接條件使用除等于運算符以外的其它比較運算符比較被連接的列的列值。這些運算符包括>、>=、<=、<、!>、!<和<>。

SQL> select * from emp e inner join dept d on e.deptno>d.deptno;

3)? 自然連接:在連接條件中使用等于(=)運算符比較被連接列的列值,但它使用選擇列表指出查詢結果集合中所包括的列,并刪除連接表中的重復列。

SQL> select * from emp natural join dept;

SQL> select? e.*,d.dname,d.loc? from emp e inner join dept d on e.deptno = d.deptno;

SQL> select d.*,e.ename,e.empno,e.job,e.mgr,e.hiredate,e.sal,e.comm from emp e inner join dept d on e.deptno=d.deptno;

?

備注:Distinct是去掉重復的行,而自然連接是去掉重復的列。

?

2、外連接

內(nèi)連接的查詢結果都是滿足連接條件的記錄。但是,有時我們也希望輸出那些不滿足連接條件的記錄的信息。比如,我們想知道這個部門中所有員工的情況,也包括沒有員工的部門,這時就需要使用外連接。外連接是只限制一張表中的數(shù)據(jù)必須滿足連接條件,而另一張表中的數(shù)據(jù)可以不滿足連接條件的連接方式。3種外連接:

  1) 左外連接(LEFT OUTER JOIN)

  如果在連接查詢中,連接表左端的表中所有的記錄都列出來,并且能在右端的表中找到匹配的記錄,那么連接成功。如果在右端的表中,沒能找到匹配的記錄,那么對應的記錄是空值(NULL)。這時,查詢語句使用關鍵字 LEFT OUTER JOIN,也就是說,左外連接的含義是限制連接關鍵字右端的表中的數(shù)據(jù)必須滿足連接條件,而不關左端的表中的數(shù)據(jù)是否滿足連接條件,均輸出左端表中的內(nèi)容。

  例如:要查詢所有部門的員工信息查詢語句為

SQL> select * from dept d left outer join emp e on e.deptno=d.deptno order by d.deptno;  左外連接查詢中左端表中的所有記錄的信息都得到了保留。

?? 備注:部門表中記錄保留,如果部門中沒有員工,部門顯示 員工記錄用null補充。

  2)右外連接(RIGHT OUTER JOIN)

  右外連接與左外連接類似,只是右端表中的所有元組都列出,限制左端表的數(shù)據(jù)必須滿足連接條件,而不管右端表中的數(shù)據(jù)是否滿足連接條件,均輸出表中的內(nèi)容。

  例如:同上例內(nèi)容,查詢語句為

SQL> select * from emp e right outer join dept d on e.deptno=d.deptno order by d.deptno;

  右外連接查詢中右端表中的所有元組的信息都得到了保留。

  3)全外連接(FULL OUTER JOIN)

  全外連接查詢的特點是左、右兩端表中的記錄都輸出,如果沒能找到匹配的記錄,就使用NULL來代替。

  例如:同左外連接例子內(nèi)容,查詢語句為

  SQL> select * from emp e full outer join dept d on e.deptno=d.deptno order by d.deptno;

  全外連接查詢中所有表中的元組信息都得到了保留。

備注:一定分清:左與右?? 在join后邊的是右

?

3、? 交叉聯(lián)接

 交叉連接即笛卡兒乘積,是指兩個關系中所有記錄的任意組合。一般情況下,交叉查詢是沒有實際意義的。

SQL> select * from emp e cross join dept d;

備注:可以添加where子句篩選出有意義的數(shù)據(jù)。建議不使用。

??

4、? 自連接查詢

如果在一個連接查詢中,涉及到的兩個表都是同一個表,這種查詢稱為自連接查詢。同一張表在FROM字句中多次出現(xiàn),為了區(qū)別該表的每一次出現(xiàn),需要為表定義一個別名。自連接是一種特殊的內(nèi)連接,它是指相互連接的表在物理上為同一張表,但可以在邏輯上分為兩張表。

  例如:要求檢索出員工編號為7369的上司的詳細信息,查詢語句為

 SQL> select e1.* from emp e inner join emp e1 on e.mgr=e1.empno where e.empno=7369;

注意:對于連接查詢中使用到的 inner outer是可以省略的。但為規(guī)范最好不要省略。

提高部分:

SQL> select * from emp e inner join dept d on e.deptno(+)=d.deptno;的理解?

l 使用外連接可以查詢不滿足連接條件的數(shù)據(jù)。

l 外連接的符號是 (+)。

?

另外:

l 在NATURAL JOIN 子句創(chuàng)建等值連接時,可以使用 USING 子句指定等值連接中需要用到的列

l 使用 USING 可以在有多個列滿足條件時進行選擇。

l 不要給選中的列中加上表名前綴或別名

l NATURAL JOIN 和 USING 子句經(jīng)常同時使用

?

?

原文:http://blog.csdn.net/java958199586/article/details/7350647

轉載于:https://www.cnblogs.com/puresoul/archive/2010/07/08/1773871.html

總結

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

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