JOIN
여러 테이블을 조합해서 흩어져있는 정보를 조합, 사용자가 필요한 정보가 가져와 조회할 수 있게 하는 기능
ORACLE JOIN
ANSI JOIN
1. 카티션 곱 (Cartesian Prodcut) = CROSS JOIN
WHERE 절에 조건을 기입하지 않거나, 잘못 기술되어 있는 경우,
join 작업에 참조되는 테이블 행 수, 즉 row 수 들을 곱한 값의 결과가 만들어 짐 (null 값은 제외)
문법:
SELECT 테이블이름약자1.칼럼이름1, 테이블이름약자2.칼럼이름2
FROM 테이블이름1 테이블이름약자1, 테이블이름2 테이블이름약자2
SELECT 테이블이름약자1.칼럼이름1, 테이블이름약자2.칼럼이름2
FROM 테이블이름1 테이블이름약자1
CROSS JOIN 테이블이름2 테이블이름약자2
2. Equi Join = 등가 JOIN
WHERE 절에 기술되는 JOIN, 양쪽 테이블에 같은 조건이 존재할 경우의 값만 출력
문법:
SELECT 테이블이름약자1.칼럼이름1, 테이블이름약자2.칼럼이름2
FROM 테이블이름1 테이블이름약자1, 테이블이름2 테이블이름약자2
WHERE 양쪽테이블에존재하는같은조건
SELECT 테이블이름약자1.칼럼이름1, 테이블이름약자2.칼럼이름2
FROM 테이블이름1 테이블이름약자1
JOIN 테이블이름2 테이블이름약자2
ON 양쪽테이블에존재하는같은조건
보면 알수있듯이
ORACLE JOIN --> ANSI JOIN
콤마 , 대신 JOIN
WHERE 대신 ON
을 쓴다.
테이블이 3개이거나 WHERE절에서 조건이 추가되는 경우
ORACLE JOIN 에서는 AND 를 붙여서 추가를 하면 되고,
ANSI JOIN 에서는 좀 다름
FROM 절에서 테이블 3개를 몽땅 다 쓰는게 아니라
FROM A JOIN B
ON 조건1
JOIN C
ON 조건2
이런식으로 하나씩 연결 해줘야함쉬먀
조건이 더 생기면 AND 로 연결 후 조건 써주면 됨.
3. Non-Equi Join = 비등가 JOIN
같은 조건이 아닌 크거나 작은 조건으로 Join을 수행할 때
문법은 Equi Join 과 똑같지만, 필요에 따라서 GROUP BY 절을 써야할 때도 있음.
당연히 조건은 = 을 쓰지 않는다. between이나 비교연산자를 사용.
4. Outer Join
한쪽테이블에는 데이터가 있고 다른 한쪽 테이블에는 없을 때, 데이터가 있는 쪽 테이블의 내용을 전부 출력
즉, 없는 것도 같이 뽑아내준다. (equi join 이나 non equi join 은 이와는 반대, 그래서 INNER JOIN 이라고도 함)
싹 다 읽어야 하기 때문에 속도가 느림...
문법:
쓰는 법은 다른 JOIN 문법과 똑같지만
ORACLE JOIN 에서는
데이터가 없는 테이블에 (+) <- 이걸 붙여줘야 함
ANSI JOIN 은
FROM 절에서 LEFT/RIGHT OUTER JOIN 으로 테이블들 사이에 써주기.
조건절 (ON 쓰는 절) 에서 데이터가 없는 테이블이 왼쪽에 위치하면 LEFT, 오른쪽이면 RIGHT
두가지 OUTER JOIN 을 합칠 경우에는
ORACLE JOIN 에서는
다른 방법이 없음, 그냥 두가지 JOIN을 쓰고 사이에 UNION으로 엮어주는 수 밖에..
양쪽에 (+)를 쓸 경우 에러남.
ANSI JOIN 은
FROM 절 테이블 사이에 FULL OUTER JOIN을 써주면 됨!
5. SELF JOIN
원하는 데이터가 하나의 테이블에 다 있을 경우 사용
하나의 테이블을 두 번 사용하게끔 설정해 놓고 하면 된다.
FROM 절에서 테이블 쓸때
테이블1 A, 테이블1 B
이런식으로 내용은 같지만 다른 테이블 2개라고 해놓고 작업
'SQL + PL/SQL > SQL' 카테고리의 다른 글
DML (0) | 2013.01.13 |
---|---|
SUB QUERY - 서브쿼리 (0) | 2013.01.04 |
SQL 그룹함수 (0) | 2013.01.04 |
SQL 단일 행 함수 - 문자함수 (0) | 2012.12.23 |
SQL - SELECT (0) | 2012.12.23 |