DB/SQL

JOIN

lavender1122 2023. 12. 26. 10:52

INNER JOIN

  • 정의
    • 조인하는 테이블의 ON절이 일치하는 결과만 출력
--방법 1
SELECT *
	FROM 테이블명1 INNER JOIN 테이블명2 ON (테이블명1.PK이름 = 테이블명2.PK이름);
--방법 2 : 함축 구문
SELECT *
	FROM 테이블명1, 테이블명2 
	WHERE 테이블명1. PK이름 = 테이블명2.PK이름;
더보기

예시

 

--방법 1
select * from A inner join B on A.NO = B.NO;
-- 방법 2
select * from A, B where A.NO=B.NO;

OUTER JOIN

  • FULL OUTER JOIN 경우 빼고 특정 TABLE 기준으로 테이터 보여줌

LEFT OUTER JOIN

  • 왼쪽 테이블 기준으로 JOIN
-- 방법 1
SELECT *
	FROM 테이블명1 LEFT OUTER JOIN 테이블명2 ON ( 테이블명1.PK이름 = 테이블명2.PK이름);
방법 2
SELECT *
	FROM 테이블명1, 테이블명2 
	WHERE 테이블명1. PK이름 = 테이블명2.PK이름(+);
  • (+) : 테이블명2.PK이름 첨부 하겠다는 뜻
    • (+) 없으면 기준이 된다는 뜻

더보기

예시

select * from A LEFT OUTER JOIN B ON (A.NO = B.NO);
select * from A, B Where A.NO = B.NO(+);

RIGHT OUTER JOIN

  • 오른쪽 테이블 기준으로 JOIN
--방법 1
select * 
	from 테이블명1 RIGHT OUTER JOIN 테이블명2 ON (테이블명1.PK이름1 = 테이블명2.PK이름2);
--방법 2
select * 
from 테이블명1, 테이블명2 Where 테이블명1.PK이름1(+) = 테이블명2.PK이름2;
더보기

예시

--방법 1
select * from A RIGHT OUTER JOIN B ON (A.NO = B.NO);
--방법 2
select * from A, B Where A.NO(+) = B.NO

Full OUTER JOIN

  • 왼쪽 테이블과 오른쪽 테이블의 합집합
  • A에는 데이터가 있지만 B에 데이터 없으면 B부분 NULL
    반대의 경우에는 A부분이 NULL 된다
select * 
	from 테이블명1 FULL OUTER JOIN 테이블명2 ON (테이블명1.PK이름1 = 테이블명2.PK이름2);
select * from 테이블명1, 테이블명2 
	Where 테이블명1.PK이름1 = 테이블명2.PK이름2(+)
UNION
select * from 테이블명1, 테이블명2 
	Where테이블명1.PK이름1(+) = 테이블명2.PK이름2;
더보기

예시

--방법 1
select * from A FULL OUTER JOIN B ON (A.NO = B.NO);
--방법 2
select * from A, B Where A.NO = B.NO(+)
UNION
select * from A, B Where A.NO(+) = B.NO;

 

INNER JOIN 과 OUTER JOIN 비교 요약
INNER JOIN 교집합 개념
OUTER JOIN은 일치하지 않더라도 버리지 않고 NULL로 채워서 결과 출력

자체 조인(SELF JOIN)

  • 자기 자신 조인
SELECT 별칭명1.컬럼명1, 별칭명1.컬럼명2, 별칭명2.컬럼명1, 별칭명2.컬럼명2
FROM 테이블명1 별칭명1, 테이블명1 별칭명2
WHERE 조건;
더보기

1.모든사원에 대해 사원의 이름과 직속 상사의 이름을 검색해라

 - EMPNAME 테이블에 어떤 사원의 MANAGER 번호가 같은 테이블 내에서 어떤 사원의 EMPNO와 같으면 그사원이 직속 상관

SELECT E.EMPNAME as 사원, M.EMPNAME as 직속상관
FROM EMPLOYEE E, EMPLOYEE M -- inner join
WHERE E.MANAGER = M.EMPNO;