日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Oracle 多表查询 --笛卡尔集--左连接--右连接--1999 语法--满外连接

發(fā)布時間:2023/12/10 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle 多表查询 --笛卡尔集--左连接--右连接--1999 语法--满外连接 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Oracle 多表查詢總結(jié)

笛卡爾集現(xiàn)象
笛卡爾集會在下面條件下產(chǎn)生:
– 省略連接條件
– 連接條件無效
– 所有表中的所有行互相連接
為了避免笛卡爾集, 可以在where加入有效的連接條件。

Oracle 連接:
使用連接在多個表中查詢數(shù)據(jù)。

  • 在where子句中寫入連接條件。
  • 在表中有相同列時,在列名之前加上表名前綴。

如下沒有連接條件,產(chǎn)生笛卡爾集現(xiàn)象。
select employees.employee_id,departments.department_id from employees,departments;
如下加了連接條件,沒有產(chǎn)生笛卡爾集現(xiàn)象。
select employees.employee_id,departments.department_id from employees,departments where employees.employee_id = departments.department_id;

等值連接:
主鍵:唯一,非空
外鍵

select employees.employee_id, employees.last_name, employees.department_id, departments.department_id, departments.location_id from employees, departments where employees.department_id = departments.department_id;
區(qū)分重復的列名

  • 使用表名前綴在多個表中區(qū)分相同的列。
  • 在不同表中具有相同列名的列可以用表的別名加以區(qū)分。

表的別名:

  • 使用別名可以簡化查詢。
  • 使用表名前綴可以提高執(zhí)行效率。

select e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id from employees e , departments d where e.department_id = d.department_id;

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

非等值連接:
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;

外連接:
(1)使用外連接可以查詢不滿足連接條件的數(shù)據(jù)。
(2)外連接的符號是 (+)。
select e.last_name, e.department_id, d.department_name from employees e, departments d where e.department_id(+) = d.department_id;
右外連接:
select employees.employee_id, departments.department_id from employees, departments where employees.employee_id(+)=departments.department_id;

左外連接:
select employees.employee_id, departments.department_id from employees, departments where employees.employee_id=departments.department_id(+) ;

內(nèi)連接和外連接(1):
(1)內(nèi)連接: 合并具有同一列的兩個以上的表的行, 結(jié)果集中不包含一個表與另一個表不匹配的行
(2)外連接: 兩個表在連接過程中除了返回滿足連接條件的行以外還返回左(或右)表中不滿足條件的行 ,這種連接稱為左(或右) 外連接。沒有匹配的行時, 結(jié)果表中相應的列為空(NULL). 外連接的where子句條件類似于內(nèi)部連接, 但連接條件中沒有匹配行的表的列后面要加外連接運算符, 即用圓括號括起來的加號(+).

select worker.last_name || ' works for ' || manager.last_name from employees worker, employees manager where worker.manager_id = manager.employee_id;

叉集:
(1)使用CROSS JOIN 子句使連接的表產(chǎn)生叉集。
(2)叉集和笛卡爾集是相同的。

select last_name, department_name from employees cross join departments ;

自然連接:

  • natural join 子句,會以兩個表中具有相同名字的列為條件創(chuàng)建等值連接。
  • 在表中查詢滿足等值條件的數(shù)據(jù)。
  • 如果只是列名相同而數(shù)據(jù)類型不同,則會產(chǎn)生錯誤。

注意:返回的是,兩個表中具有相同名字的列的“且,交集”,而非“或,并集”。即:比如employees類和departments類都有department_id和manager_id,返回二者都相同的結(jié)果。

select department_id,department_name, location_id,city from departments natural join locations;

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

  • natural join 子句創(chuàng)建等值連接時,可以使用 using 子句指定等值連接中需要用到的列。
  • 使用 using 可以在有多個列滿足條件時進行選擇。
  • 不要給選中的列中加上表名前綴或別名。
  • join 和 using 子句經(jīng)常同時使用。

select e.employee_id,e.last_name,d.location_id from employees e join departments d using (department_id);

使用使用ON 子句創(chuàng)建連接(常用):

? 自然連接中是以具有相同名字的列為連接條件的。
? 可以使用 ON 子句指定額外的連接條件。
? 這個連接條件是與其它條件分開的。
? ON 子句使語句具有更高的易讀性。

select e.employee_id,e.last_name,e.department_id, d.department_id,d.location_id from employees e join departments d on (e.department_id = d.department_id);

使用 ON 子句創(chuàng)建多表連接:
select employee_id,city,department_name from employees e join departments d on d.department_id = e.department_id join locations l on d.location_id = l.location_id;

內(nèi)連接和外連接(2):
? 在SQL里面: 在1999中,內(nèi)連接只返回滿足連接條件的數(shù)據(jù)。
? 兩個表在連接過程中除了返回滿足連接條件的行以外還返回左(或右)表中不滿足條件的行,這種連接稱為左(或右) 外連接。
? 兩個表在連接過程中除了返回滿足連接條件的行以外還返回兩個表中不滿足條件的行 ,這種連接稱為‘滿外連接’。

—sql 1999語法
左外連接:
select e.last_name, e.department_id, d.department_name from employees e left join departments d on (e.department_id = d.department_id) ;

右外連接:
select e.last_name, e.department_id, d.department_name from employees e right join departments d on (e.department_id = d.department_id) ;

滿外連接:
select e.last_name, e.department_id, d.department_name from employees e full join departments d on (e.department_id = d.department_id);

Oracle 的多表查詢就到這里,使用等值和不等值連接在SELECT 語句中查詢多個表中的數(shù)據(jù),使用自連接,使用外連接查詢不滿足連接條件的數(shù)據(jù)。

總結(jié)

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

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