SQL--Oracle 區分外連接內連接

SQL–Oracle 區分外連接內連接

一、表解構和數據

INSERT INTO "XIELONG"."S_EMP_TEST" (ID, NAME) VALUES ('1', 'a')
INSERT INTO "XIELONG"."S_EMP_TEST" (ID, NAME, M_ID) VALUES ('2', 'b', '1')
INSERT INTO "XIELONG"."S_EMP_TEST" (ID, NAME, M_ID) VALUES ('3', 'c', '1')
INSERT INTO "XIELONG"."S_EMP_TEST" (ID, NAME, M_ID) VALUES ('4', 'd', '2')
INSERT INTO "XIELONG"."S_EMP_TEST" (ID, NAME, M_ID) VALUES ('5', 'e', '2')

表格的數據如下圖

二、內連接和外連接定義

內連接:

  • 定義:最常用也是最重要的結合就是等值連接,也被稱爲內部結合、內連接。通常利用通用字段結合兩個表,而這個字段通常是每個表裏的主鍵。
  • 用途:需要取出兩張或以上的表格的數據,需要用到內連接。
  • 語法:
--1、where的方式
SELECT * FROM S_EMP E, S_DEPT D WHERE E.DEPT_ID=D.ID;
--2、join on
SELECT * FROM S_EMP E  join S_DEPT D on E.DEPT_ID=D.ID;
--3、inner join on
SELECT * FROM S_EMP E inner join S_DEPT D on E.DEPT_ID=D.ID;
  • 案例:
--內連接 兩張表的數據
select * from s_emp_test e1, s_emp_test e2 where e1.id=e2.m_id;

--內連接 一張表的數據 有重複
select e1.* from s_emp_test e1, s_emp_test e2 where e1.id=e2.m_id;

內連接連接兩張表格
內連接,一張表的字段

外連接:

  • 定義

    • 外連接的結果集, 等於內連接的結果集,加上匹配不上的記錄!
    • 通過在字段後面添加(+), 來完成外連接操作。
    • 外連接會返回一個表裏的全部記錄,即使對應的記錄在第二個表裏不存在。加號(+)
      用於在查詢裏表示外部結合,放在WHERE子句裏表名的後面,具有加號的表是沒有匹配記 錄的表.在很多實現裏。
  • 分類:外連接被劃分爲左外連接、右外連接和全外連接。

  • 語法:

外部結合的-般語法如下所示
FROM TABLEl
{RIGHT | LEFT | FULL} [OUTER] JOIN
ON TABLE2

Oracle 的語法是
From TABLE1 , TABLE2 [,TABLE3]
WHERE TABLE1.COLUMN_NAME[(+)] = TABLE2.COLUMN_NAME[(+)]
[ AND TABLE1.COLUMN_NAME[(+)] = TABLE3.COLUMN_NAME[(+)] ]
  • 實例:
  • 表結構:如上圖表s_emp_test的數據
  • 外連接實例:
--內連接 一張表的數據 有重複
select e1.* from s_emp_test e1, s_emp_test e2 where e1.id=e2.m_id;

-- 外連接 (+)在=前 e2表中的數據全部展示出來,不符合條件的用NULL補充
select * from s_emp_test e1, s_emp_test e2 where e1.id(+)=e2.m_id;

-- 外連接 (+)在=和字段後 e1表中的數據全部展示出來,不符合條件的用NULL補充
select * from s_emp_test e1, s_emp_test e2 where e1.id=e2.m_id(+);

-- 查詢普通員工(非領導的員工信息)根據上面的外連接(+)在後面,外連接補NULL,然後用e2表的ID is null 取出員工號 
select * from s_emp_test e1, s_emp_test e2 where e1.id=e2.m_id(+) and 
e2.id is null;

--查詢普通員工的另一種方式
select e2.* from s_emp_test e1, s_emp_test e2 where e1.m_id(+)=e2.id
and e1.m_id is null;

外連接(+)在前
外連接(+)在後查詢普通員工的信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章