* ISO/ANSI SQL-99
SQL 언어는 1988년에 미국표준연구소(ANSI)와 국제표준기구(ISO)에서 관계형 데이터베이스의
표준 언어로 채택된 이래 1992년에 SQL-92, 1999년에 SQL-99 로 개정되었고,
현재 대부분의 상용 데이터베이스 시스템에서 표준언어로 사용되고 있다.
오라클 9i 버전에서는 ISO/ANSI SQL-99 에서 제시한 표준 기능을 대부분 준수하고 있다
1. CROSS JOIN
오라클 9i 부터는 CARTESIAN JOIN(카르테시안 조인) 이 CROSS JOIN 으로 명칭이 바뀌었음
기능상의 차이는 없음
- ANSI/ISO SQL-99 표준문법
SELECT * from table1 CROSS JOIN table2
- PL/SQL
SELECT * from table1, table2
2. EQUI JOIN
공통컬럼을 '=' (equal) 비교를 통해 같은 값을 가지는 행을 연결 결과를 생성하는 방법
- ANSI/ISO SQL-99 표준문법
SELECT * from table1 INNER JOIN table2 ON table1.column1 = table2.column2
- PL/SQL
2-1) WHERE 절을 이용한 EQUI JOIN
SELECT * from table1, table2
WHERE table1.column1 = table2,column2
2-2) NATURAL JOIN 키워드를 이용한 EQUI JOIN
오라클 9i 부터는 EQUI JOIN 이 NATURAL JOIN 이라고 명칭이 바뀌었음
EQUI JOIN 과 결과는 같지만 표현하는 문법은 다르다
WHERE 절을 생략하고 NATURAL JOIN 을 사용하면 자동적으로 모든 컬럼을 대상으로 공통 컬럼을 조사하여 내부적으로 조인문을 생성한다
SELECT * from table1 NATURAL JOIN table2
2-3). JOIN ~ USING 절을 이용한 EQUI JOIN
NATURAL JOIN 은 모든 컬럼을 대상으로 공통 컬럼을 조사하기 때문에 특정 컬럼을 지정하지 않으면 실행속도는 현저히 느려질 수 있다
그래서 나온것이 JOIN ~ USING 이다
USING 절에 조인대상컬럼을 인위적으로 지정하여 자연조인을 한다
SELECT * from table1 JOIN table2
USING (공통컬럼)
3. NON-EQUI JOIN
조인조건에서 '=' 조건이 아닌 '<', BETWEEN a AND b 와 같은 종류의 연산자를 사용하는 조인방법
대부분의 조인은 외래키와 참조키로 연결되어 EQUI JOIN 으로 처리되기 때문
SELECT p.profno, p.name, p.sal, s.grade
FROM professor p, salgrade s
WHERE p.sal BETWEEN s.losal AND s.hisal;
4. OUTER JOIN
EQUI JOIN 에서 양측 테이블의 컬럼값중 한쪽 이상이 NULL이지만 조인 결과로 출력할 필요가 있는 경우
- PL/SQL
컬럼값이 NULL 인 쪽으로 (+) 기호를 넣는다
SELECT * from table1, table2
where table1.column1(+) = table2.column2 또는 where table1.column1 = table2.column2(+)
- ANSI/ISO SQL-99 표준문법
1) LEFT OUTER JOIN → LEFT JOIN → A = B(+)
LEFT 를 기준으로 하며 오른쪽이 컬럼값이 NULL 이다
SELECT * from table1 LEFT OUTER JOIN table2 ON table1.column1 = table2.column1
2) RIGHT OUTER JOIN → RIGHT JOIN → A(+) = B
RIGHT 를 기준으로 하며 왼쪽이 컬럼값이 NULL 이다
SELECT * from table1 RIGHT OUTER JOIN table2 ON table1.column1 = table2.column1
3) FULL OUTER JOIN → FULL JOIN
(+) 기호로는 FULL OUTER JOIN 을 표현할 수 없으며
양쪽을 기준으로 컬럼값이 NULL 인 경우를 모두 출력하여 준다
SELECT * from table1 FULL OUTER JOIN table2 ON table1.column1 = table2.column1
5. SELF JOIN - (JOIN ~ ON)
하나의 테이블내에 있는 컬럼끼리 연결하는 조인 형태
조인 대상 테이블이 하나의 테이블이라는것 외에는 EQUI JOIN 과 동일하다
- PL/SQL
5-1) WHERE 절을 이용한 SELF JOIN
SELECT * from table1, table2
WHERE table1.column1 = table2.column2
5-2) JOIN ~ ON 절을 이용한 SELF JOIN
SELECT * from table1 a JOIN table1 b ON
a.column1 = b.column2
- ANSI/ISO SQL-99 표준문법
SELECT * from table1 a INNER JOIN table1 b ON
a.column1 = b.column2