데이터베이스를 만지다 보면 조인을 할 일이 굉장히 많이 있습니다. Oracle DB에서 left, right, inner, outer 각각의 조인 방법에 대해서 알아보도록 하겠습니다.
목차
Oracle의 INNER JOIN내부 결합[SQL]
Oralce에서 여러 개의 테이블을 결합할 때 JOIN을 사용합니다.
내부 결합은?
결합에는 아래의 종류가 있습니다.
· 내부 결합(INNER JOIN)
· 외부 결합(LEFT JOIN, RIGHT JOIN)
내부 결합은 여러 개의 테이블을 결합하여 조건이 일치한 것만을 얻습니다.
외부 결합은 우선 테이블에서 있으면 조건이 일치하지 않아도 데이터를 취득합니다만, 내부 결합은 그렇지 않습니다.
(INNER) JOIN ~
Oralce에서 내부 결합하려면 INNER JOIN구문의 전후에 결합할 테이블을 기술합니다. 테이블 이름 뒤에 스페이스를 넣어 별명을 지정합니다. INNER는 생략 가능하므로, 여기에서는 생략합니다. ON 은 결합하는 칼럼명을 지정합니다. 줄은 테이블 이름의 지정 이름과 같이 사용합니다.
-내부 결합 JOIN을 사용
SELECT {컬럼} FROM {테이블1} a (INNER)JOIN {테이블2} b ON{a.컬럼1}={b.컬럼2} WHERE 조건;
-내부 결합 JOIN을 사용하지 않음
SELECT{컬럼} FROM {테이블1} a, {테이블2} b WHERE{a.컬럼1}={b.컬럼2} AND 조건;
내부 결합은 여러 개의 테이블을 그대로 결합하고 그 결과를 취득합니다.
상기의 예시 (INNER) JOIN에서는 {테이블 1}과 {테이블 2}를 결합하고 그 결과를 취득하는데요.
"INNER"은 생략 가능하므로, 여기에서는 생략합니다.
내부 결합은 굳이 "JOIN"을 쓰지 않고 결합 조건을 WHERE 구문에 적을 수도 있습니다.
샘플 데이터
emp테이블
empno | empname |
A001 | 사토와 나코 |
A002 | 타나카 타로 |
A003 | 카토오 하지메 |
A004 | 아오키 하나 |
A005 | 후지타 마나부 |
tokyo_aut테이블
empno |
A001 |
A005 |
osaka_aut테이블
empno |
A001 |
A002 |
예시 1. INNER JOIN으로 결합
--INNER JOIN
SELECT e.empno, e.empname, t.empno tokyo, o.empno osaka
FROM
emp e
JOIN
tokyo_aut tONe.empno = t.empno
JOIN
osaka_aut oONt.empno = o.empno
WHERE
e.empno <'A999';
e.empno | e.empname | tokyo | osaka |
A001 | 사토와 나코 | A001 | A001 |
emp 테이블과 tokyo_aut, osaka_aut 2개의 테이블을 (inner) JOIN으로 내부 재결합을 했습니다.
3개의 테이블 emp, tokyo_aut, osaka_aut 테이블과 일치하는 레코드만이 SELECT 됩니다.
예시 2. WHERE로 결합(JOIN을 사용하지 않는 패턴)
--JOIN을 사용하지 않는
SELECTe.empno, e.empname, t.empno tokyo, o.empno osaka
FROM
emp e
,tokyo_aut t
,osaka_aut o
WHERE
e.empno <'A999'
AND
e.empno = t.empno
AND
t.empno = o.empno;
e.empno | e.empname | tokyo | osaka |
A001 | 사토와 나코 | A001 | A001 |
예시 1과 같이 내부 결합을 INNER JOIN을 사용하지 않고 썼습니다.
3개의 테이블 emp, tokyo_aut, osaka_aut 테이블들의 결합 조건을 WHERE 문에 사용했습니다.
Oracle의 OUTER JOIN 외부 결합[SQL]
이번에는 외부 결합(OUTER JOIN)에 대해서 해설합니다.
외부 결합(OUTER JOIN)은 2종류가 있습니다.
·LEFT OUTER JOIN
·RIGHT OUTER JOIN
결합은 여러 개의 테이블을 선택하여 데이터를 추출하는 것입니다. 외부 결합은 우선할 테이블을 바탕으로 결합합니다.
예컨대 "우선하는 테이블 A"와 "우선하지 않는 테이블 B"를 결합할 경우 A테이블은 전 레코드로 표시됩니다만, B테이블은 A테이블과 일치하는 것밖에 표시되지 않습니다.
외부 결합은 이처럼 우선할 테이블을 바탕으로 결합하는 이미지입니다. 가장 자주 사용되는 조인(결합)이 됩니다.
LEFT OUTER JOIN은 왼쪽 테이블, RIGHT OUTER JOIN은 오른쪽 테이블을 바탕으로 조인(결합)합니다.
・LEFT (OUTER) JOIN ~
외부 결합하려면 LEFT JOIN·RIGHT JOIN 구문의 전후에 결합할 테이블을 기술합니다. 테이블 이름 뒤에 스페이스를 넣어 지정 이름(별명)을 지정합니다."OUTER"는 생략 가능하므로, 여기에서는 생략합니다.
그리고"ON"으로 결합하는 조건을 지정합니다. 칼럼은 테이블 명의 지정 이름(별명)과 꼭 같이 사용해야 합니다.
-외부 결합 LEFT JOIN
SELECT {컬럼명}
FROM {테이블1} a
LEFT JOIN {테이블2} b
ON {a.컬럼명1}= {b.컬럼명2}
WHERE 조건;-외부 결합 RIGHT JOIN
SELECT {컬럼명}
FROM {테이블1}a
RIGHT JOIN {테이블2} b
ON {a.컬럼명1}= {b.컬럼명2}
WHERE 조건;
외부 결합은 우선할 테이블을 바탕으로 결합합니다. 상기의 예, LEFT JOIN에서는 {테이블 1}과 {테이블 2}를 결합합니다만, {테이블 1}의 전 레코드에 대해서 {테이블 2}는 조건에 일치한 것만을 결합합니다.
그렇기 때문에 {테이블 1}은 전 레코드가 SELECT 됩니다. {테이블 2}는 {테이블 1}과 결합한 레코드만 SELECT 됩니다.
RIGHT JOIN은 테이블의 우선도가 거꾸로 되므로 테이블 2의 전 레코드가 SELECT 됩니다.
샘플 데이터
emp
empno | empname |
A001 | 사토와 나코 |
A002 | 타나카 타로 |
A003 | 카토오 하지메 |
A004 | 아오키 하나 |
A005 | 후지타 마나부 |
tokyo_aut
empno |
A001 |
A005 |
osaka_aut
empno |
A001 |
A002 |
예시 1. LEFT JOIN로 결합
--LEFT JOIN의 결합
SELECT
e.empno
, e.empname
, t.empno tokyo
, o.empno osaka
FROM
emp e
LEFT JOIN
tokyo_aut t
ON e.empno = t.empno
LEFT JOIN
osaka_aut o
ON e.empno = o.empno
WHERE
e.empno <'A999';
e.empno | e.empname | tokyo | osaka |
A001 | 사토와 나코 | A001 | A001 |
A002 | 타나카 타로 | A002 | |
A003 | 카토오 하지메 | ||
A004 | 아오키 하나 | ||
A005 | 후지타 마나부 | A005 |
3개의 테이블 emp, tokyo_aut, osaka_aut을 LEFT JOIN으로 외부 결합했습니다.
우선하는 테이블은 전 레코드 표시
LEFT JOIN이라 우선하는 테이블은 제일 먼저 나와있는 emp테이블입니다. emp 테이블은 전 레코드가 SELECT 됩니다.
emp 테이블에는 레코드 5개가 있는데요. 우선 이 테이블에서 SELECT 한 e.empno, e.empname은 모두 표시됩니다.
결합하는 테이블은 조건이 일치하는 레코드만 표시
나머지 두 개의 테이블 tokyo_aut, osaka_aut은 ON으로 지정된 조건에 일치하는 경우에만 SELECT 됩니다.
tokyo_aut 테이블은 empno가 A001, A005 뿐이어서 이 두 개의 레코드만 표시되고 나머지는 표시되지 않습니다.
osaka_aut 테이블도 empno가 A001, A002 뿐이어서 이 두 개의 레코드만 표시되고 나머지는 표시되지 않습니다.
외부 결합에는 LEFT JOIN과 RIGHT JOIN 이 두 종류가 있지만, 보통 LEFT JOIN을 사용하는 것이 일반적이어서 RIGHT JOIN의 예는 여기에서는 생략하도록 하겠습니다.
'IT 및 기타' 카테고리의 다른 글
중성지방에 좋은 음식과 나쁜 음식을 알아보자 (0) | 2022.10.10 |
---|---|
리눅스 자격증 LPIC -1 101 시험 준비 및 통과 후기 (7) | 2022.10.09 |
찬물 샤워를 하면 마약 성분이 분비된다?(아침, 저녁 샤워) (0) | 2022.09.29 |
윈도우 배치 파일 명령어를 알아보자 (0) | 2022.09.29 |
윈도우 배치 파일이란?(.bat, .cmd) 배치 명령어 문법 및 사용 방법 (1) | 2022.09.22 |
댓글