1.多表連線有以下幾種分法:
(1)內連線 vs 外連線 (左、右、滿)
(2)等值連線 vs 不等值連線
(3)非自連線 vs 自連線
2.笛卡爾集: 所有表中的所有行互相連線
產生條件:(1)多表查詢沒有連線條件
(2)連線條件無效
3. 內連線 : 結果集中不包含乙個表與另乙個表不匹配的行
外連線 : 兩個表在連線過程中除了返回滿足連線條件的行以外(這裡的資料是內連線查詢到的),還返回左(或右)表中不滿足條件的行 ,這種連線稱為左(或右) 外連線
滿外連線: 返回左表中和右表中不滿足條件的行
4.注意: 當列名為多個表共有時,列名必須被限制。
語法:
fromtable1
[ 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)
];
自然連線中是以具有相同名字的列為連線條件的,而 join...on ...子句並不要求兩張表含有相同名字的列。
on 子句使語句具有更高的易讀性。
select欄位...
from
表1 join 表2on表1和表2的連線條件
join 表3
on 表1(或表2)和表3的連線條件
(1)兩張表的等值連線
selectlast_name, department_name
from employees e join
departments d
on e.department_id = d.department_id;
(2)使用 join.. on..建立多表連線:三張表的等值連線
selectlast_name,e.department_id,department_name,city
from employees e join
departments d
on e.department_id =
d.department_id
join
locations l
on d.location_id = l.location_id;
使用 cross join 會產生叉集,叉集與笛卡爾集相同。
selectlast_name, department_name
from
employees
cross join departments ;
自然連線: natural join 子句,會以兩個表中具有相同名字的列為條件建立等值連線。
注: 如果只是列名相同而資料型別不同,則會產生錯誤。
employees表 和 departments表 有兩個相同字段。使用natural join ,會自動以這兩個字段作為連線條件。
selectlast_name,department_name
from employees natural join departments;
以上**與下面**相同:
selectlast_name,department_name
from
employees e,departments d
where e.department_id = d.department_id and e.manager_id = d.manager_id;
背景:由 natural join 子句建立等值連線,會將這些相同列都作為連線條件。而有時我們只需要其中某些列,這是就可以使用using子句指定等值連線中需要用到的列。
作用:在有多個列滿足條件時,可以使用 using 子句 指定等值連線中需要用到的列。
侷限:按照指定的列作為連線條件。但是要求指定的列,在兩個表中列名相同。
注:不要給選中的列中加上表名字首或別名。
join 和 using 子句經常同時使用。
以上都是內連線
左外連線:除了查詢到滿足條件的行之外,返回左表中不滿足條件的行。主要有兩種實現方式:
(1)left outer join... on...
selectlast_name ,department_name
from employees e left outer join
departments d
on e.department_id = d.department_id;
(2)+
selecte.employee_id,e.department_id,d.department_name
from
employees e,departments d
where e.department_id = d.department_id(+); --
左邊有,右邊沒,故右加
右外連線:返回右表中不滿足條件的行。主要有兩種實現方式:
(1)right outer join... on...
selectemployee_id,last_name,e.department_id,department_name
from employees e right outer join
departments d
on e.department_id = d.department_id;
(2)+
selectemployee_id,e.department_id,department_name
from
employees e,departments d
where e.department_id(+) = d.department_id;
滿外連線:同時返回左表和右表中不滿足條件的行
selectemployee_id,last_name,e.department_id,department_name
from employees e full outer join
departments d
on e.department_id = d.department_id;
selectemp.employee_id,emp.last_name,mgr.last_name
from
employees emp,employees mgr
where emp.manager_id = mgr.employee_id;
Oracle多表聯查總結筆記
以兩表為例 語法 select別稱1.列名1,別稱2.列名n from表1 別稱1inner join表2.別稱2 on別稱1.公共列 別稱2.公共列 where查詢語句 例如 查詢員工編號,姓名,部門編號以及部門名稱 select別稱1.列名1,別稱2.列名n from表1 別稱1left out...
快速學習Oracle 多表查詢
1.多表連線基本查詢 使用一張以上的表做查詢就是多表查詢 語法 select 列名.from 表名 別名,表名 1 別名範例 查詢員工表和部門表 我們發現產生的記錄數是 56 條,我們還會發現 emp 表是 14 條,dept 表是 4 條,56 正是 emp表和 dept 表的記錄數的乘積,我們稱...
php學習筆記 04
預定義常量 php version 獲取當前使用的php版本號。file 獲取當前正在解析的檔名。如果如果這個常量在內部檔案中使用,則提取該檔名,而不是其父檔名。line 獲取當前正在解析的檔案的行數。如果中國常量在內部檔案中使用,則給出該內部檔案中的行數。e error 除非遇到解析時不可恢復的錯...