ORACLE 上的連線

2021-04-12 13:00:29 字數 2452 閱讀 5315

聯接操作

說明

cross join

這是兩個表的交叉乘積。它與舊式聯接中未指定where 子句而返回的行相同。在oracle 中,這種型別聯接稱為笛卡爾聯接。

inner

這種聯接指定,所有內部行均要返回。丟棄任何不匹配的行。這和標準的oracle 表聯接相同。

left[outer]

這種型別的聯接指定,所有左表的外部行均要返回,即使沒找到匹配的列,也就如此。這和oracle 外部聯接(+) 的操作類似。

right[outer]

這種型別的聯接指定,所有右表的外部行均要返回,即使沒找到匹配的列,也是如此。這和oracle 外部聯接(+) 的操作類似。

full [outer]

如果兩個表中的一行不符合選擇標準,則指定將這一行加到結果集中,並且將其對應於另一表的輸出列設為null。這和將oracle 外部聯接運算子放在「=」號兩邊(col1(+)=col2(+)) 的效果是一樣的,但後者在oracle 中是不允許的。

在oracle 中使用外部聯接時,外部聯接運算子(+) 通常放在該聯接的子列(外來鍵)旁邊。(+) 標識了具有較少唯一值的列。情況一般是這樣,除非外來鍵允許空值,在這種情況下,(+) 被放在父(primary key 或unique 約束)列上。(+) 不能放在等號(=) 兩邊。

一般的相等連線:

select * from a, b where a.id = b.id;

這個就屬於內連線。

對於外連線:

oracle中可以使用「(+) 」來表示,9i可以使用left/right/full outer join  

left outer join:左外關聯  

select e.last_name, e.department_id, d.department_name  

from employees e  

left outer join departments d  

on (e.department_id = d.department_id);  

等價於  

select e.last_name, e.department_id, d.department_name  

from employees e, departments d  

where e.department_id=d.department_id(+)  

結果為:所有員工及對應部門的記錄,包括沒有對應部門編號department_id的員工記錄。  

right outer join:右外關聯  

select e.last_name, e.department_id, d.department_name  

from employees e  

right outer join departments d  

on (e.department_id = d.department_id);  

等價於  

select e.last_name, e.department_id, d.department_name  

from employees e, departments d  

where e.department_id(+)=d.department_id  

結果為:所有員工及對應部門的記錄,包括沒有任何員工的部門記錄。  

full outer join:全外關聯  

select e.last_name, e.department_id, d.department_name  

from employees e  

full outer join departments d  

on (e.department_id = d.department_id);  

結果為:所有員工及對應部門的記錄,包括沒有對應部門編號department_id的員工記錄和沒有任何員工的部門記錄。

在oracle pl-sql中,左連線和右連線以如下方式來實現

檢視如下語句:

select emp_name, dept_name 

form employee, department

where employee.emp_deptid(+) = department.deptid此sql文使用了右連線,即「(+)」所在位置的另一側為連線的方向,右連線說明等號右側的所有記錄均會被顯示,無論其在左側是否得到匹配,也就是說上例中無論會不會出現某個部門沒有乙個員工的情況,這個部門的名字都會在查詢結果中出現。

反之:select emp_name, dept_name 

form employee, department

where employee.emp_deptid = department.deptid(+)則是左連線,無論這個員工有沒有乙個能在department表中得到匹配的部門號,這個員工的記錄都會被顯示

php連線其他伺服器上的oracle伺服器

首先必須保證php的編譯已經加入oracle庫並成功!連線 連線 dbconn oci connect username password description address protocol tcp host 192.168.1.2 port 1521 connect data sid sid...

mysql 連線不上 mysql連線不上怎麼辦

下面是mysql的連線方式 使用mysql二進位制方式連線 您可以使用mysql二進位制方式進入到mysql命令提示符下來連線mysql資料庫。例如以下是從命令列中連線mysql伺服器的簡單例項 root host mysql u root p enter password 在登入成功後會出現 my...

oracle左連線沒用 Oracle左連線,右連線

以下的文章主要是通過 的方式來引出oracle join的正確用法,其在實際中的應用比例還是佔為多數的,如果你對這一新開發的技術,心存好奇的話,以下的文章將會揭開它的神秘面紗。希望你在瀏覽完之後會有所收穫。8i create table dali.test1 a int,b int create t...