[SQL][概念][進階查詢]合併查詢

合併查詢是合併多個表格查詢資料

合併語法

  • Cross Joins:兩個表格交叉相乘
select *
from EMPLOYEES CROSS JOIN  DEPARTMENTS 

  • Equijoins:特別注意因為DEPARTMENT_ID 兩個表格都有
    必須要告訴電腦指定哪一個表格的,不然會錯
SELECT EMPLOYEE_ID,LAST_NAME,DEPARTMENTS.DEPARTMENT_ID,LOCATION_ID
FROM EMPLOYEES JOIN DEPARTMENTS 
ON EMPLOYEES.DEPARTMENT_ID=DEPARTMENTS.DEPARTMENT_ID

  • 表格別名(Tavle Alias):可以將表格命名成另一個比較短的名字
SELECT E.EMPLOYEE_ID,E.LAST_NAME,D.DEPARTMENT_ID,D.LOCATION_ID
FROM EMPLOYEES E JOIN DEPARTMENTS D
ON E.DEPARTMENT_ID=D.DEPARTMENT_ID

  • 用ON或用WHERE來過濾額外的條件
SELECT E.EMPLOYEE_ID,E.LAST_NAME,D.DEPARTMENT_ID,D.LOCATION_ID
FROM EMPLOYEES E JOIN DEPARTMENTS D
ON E.DEPARTMENT_ID=D.DEPARTMENT_ID
WHERE EMPLOYEE_ID =149

  • ON語法-合併三個表格
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
  • Non-Equijoins
SELECT E.LAST_NAME,E.SALARY ,J.GRADE_LEVEL,J.LOWEST_SAL,J.HIGHEST_SAL
FROM EMPLOYEES E JOIN JOB_GRADES J
ON E.SALARY BETWEEN J.LOWEST_SAL AND J.HIGHEST_SAL;


  • LEFT OUTER JOIN:不管右邊有沒有,左邊都要印出來
SELECT EMPLOYEES.EMPLOYEE_ID,EMPLOYEES.LAST_NAME,LOCATION_ID,EMPLOYEES.DEPARTMENT_ID,DEPARTMENT_NAME
FROM EMPLOYEES LEFT OUTER JOIN DEPARTMENTS
ON EMPLOYEES.DEPARTMENT_ID=DEPARTMENTS.DEPARTMENT_ID;

  • RIGHT OUTER JOIN :不管左邊有沒有,右邊都要印出來
SELECT EMPLOYEES.EMPLOYEE_ID,EMPLOYEES.LAST_NAME,LOCATION_ID,EMPLOYEES.DEPARTMENT_ID,DEPARTMENT_NAME
FROM EMPLOYEES RIGHT OUTER JOIN DEPARTMENTS
ON EMPLOYEES.DEPARTMENT_ID=DEPARTMENTS.DEPARTMENT_ID;

  • FULL OUTER JOIN:不管怎樣,是NULL都印出來
SELECT EMPLOYEES.EMPLOYEE_ID,EMPLOYEES.LAST_NAME,LOCATION_ID,EMPLOYEES.DEPARTMENT_ID,DEPARTMENT_NAME
FROM EMPLOYEES FULL OUTER JOIN DEPARTMENTS
ON EMPLOYEES.DEPARTMENT_ID=DEPARTMENTS.DEPARTMENT_ID;

  • SELF JOINS
SELECT WORKER.LAST_NAME+'   Works for   '+MANAGER.LAST_NAME
FROM EMPLOYEES WORKER JOIN EMPLOYEES MANAGER
ON WORKER.EMPLOYEE_ID=MANAGER.EMPLOYEE_ID