Language/SQL

[DATABASE] JOIN

simDev1234 2022. 4. 21. 13:39

■ 데이터의 무결성

- 데이터가 실제 현실 세계의 자료와 차이가 없는 수준의 정확성을 보이는 것

- 여러 사용자가 동일 내용의 테이블을 중복하여 사용할 경우, 데이터에 이상현상 발생 가능성 높음

-> 제약조건으로 데이터 자체의 무결성 유지

-> 정규화를 사용하여 테이블을 분해

-> 동기화

 

■ 조인

- 정규화한 테이블을 역정규화하는 키워드

- 원리 : 각 테이블의 Key를 사용하여 연결한다. 

- 장점 : 중복된 레코드 수를 줄인다. 이상현상을 방지하고 성능이 높아진다.

  1) 오라클 조인      - WHERE를 사용한 방법
  2) 공통 SQL 조인   - ANSI 방식

 

■ 조인의 종류

종류  
INNER  JOIN 조인 조건(두 테이블의 키)에 일치하는 데이터만 가져온다.
OUTER JOIN 조인 조건에 일치하는 데이터 및 일치하지 않는 데이터 모두 가져온다.
*일치하지 않는 데이터는 : NULL로 가져온다.
CROSS JOIN 별도의 조인 조건 없이 두 테이블을 조언 시 가능한 모든 경우의 데이터를 가져온다.
SELF    JOIN 자기 자신을 하나의 테이블로 취급하여 조인하는 방법
*칼럼명이 중복되므로 반드시 ALIAS를 사용하여 조인 필요

 

■ ANSI 조인

 

  INNER JOIN  

SELECT 
  a.APPLY_NO AS 순번,
  c.COM_NAME AS 기업명,
  c.COM_CAT AS 기업분야,
  c.COM_FOCUS AS 주력요소,
  TO_CHAR(a.APPLY_DATE, 'YYYY-MM-DD') AS 지원일자,
  a.APPLY_STATE AS 지원상태
FROM MY_APPLY a INNER JOIN COMPANY c
     ON a.APPLY_NO = c.APPLY_NO;

>> 결과

 

  OUTER JOIN  

 

  LEFT OUTER JOIN    

- 좌측테이블을 기준으로 조건에 일치하는 데이터 추출, 조건에 맞지 않으면 NULL

SELECT
  c.COM_NO AS 순번,
  c.COM_NAME AS 기업명,
  w.SALARY AS 연봉,
  w.OVERTIME_PAY AS 야근수당,
  W.FACILITY AS 시설
FROM COMPANY c LEFT OUTER JOIN WORK_ENV w
     ON c.COM_NO = w.COM_NO;

>> 결과

  RIGHT OUTER JOIN    

- 우측테이블을 기준으로 조건에 일치하는 데이터 추출, 조건에 맞지 않으면 NULL

SELECT
  c.COM_NO AS 순번,
  c.COM_NAME AS 기업명,
  w.SALARY AS 연봉,
  w.OVERTIME_PAY AS 야근수당,
  W.FACILITY AS 시설
FROM WORK_ENV w RIGHT OUTER JOIN COMPANY c
     ON w.COM_NO = c.COM_NO;

>> 결과

 

  CROSS JOIN  

SELECT
  c.COM_NO AS 순번,
  c.COM_NAME AS 기업명,
  w.SALARY AS 연봉,
  w.OVERTIME_PAY AS 야근수당,
  W.FACILITY AS 시설
FROM WORK_ENV w CROSS JOIN COMPANY c

>> 결과

- 심플컴패니2에 해당되는 연봉, 야근수당, 시설을 입력한 적이 없는데, 심플컴패니에 해당되는 부분이 추출됐다.

 

  SELF JOIN  

- 반드시 ALIAS를 써서 자기 자신의 테이블을 구분할 수 있게 해야한다.

SELECT
  c.COM_NO AS 순번,
  c2.COM_NAME AS 회사명,
  c2.COM_CAT AS 카테고리
FROM COMPANY c JOIN COMPANY c2
     ON c.COM_NO = c2.COM_NO;

>> 결과

 

■ 오라클 조인  ---- WHERE를 사용한다.

 

  INNER JOIN  

SELECT
  a.APPLY_NO AS 순번,
  c.COM_NAME AS 기업명,
  c.COM_CAT AS 기업분야,
  c.COM_FOCUS AS 주력요소,
  TO_CHAR(a.APPLY_DATE, 'YYYY-MM-DD') AS 지원일자,
  a.APPLY_STATE AS 지원상태
FROM MY_APPLY a, COMPANY c
WHERE a.APPLY_NO = c.APPLY_NO;

 

  OUTER JOIN  

 

  LEFT OUTER JOIN    

SELECT
  c.COM_NO AS 순번,
  c.COM_NAME AS 기업명,
  w.SALARY AS 연봉,
  w.OVERTIME_PAY AS 야근수당,
  W.FACILITY AS 시설
FROM COMPANY c, WORK_ENV w
WHERE c.COM_NO = w.COM_NO;

  RIGHT OUTER JOIN    

SELECT
  c.COM_NO AS 순번,
  c.COM_NAME AS 기업명,
  w.SALARY AS 연봉,
  w.OVERTIME_PAY AS 야근수당,
  W.FACILITY AS 시설
FROM WORK_ENV w, COMPANY c
WHERE w.COM_NO = c.COM_NO;

 

 

[출처]

- 뉴렉처 강의

- https://tragramming.tistory.com/74