오라클SQL/조인

조인(Join)

ByeongSuAhn 2021. 9. 14. 09:59

조인의 개념

–하나의 SQL 명령문에 의해 여러 테이블에 저장된 데이터를 '한 번에' 조회할 수 있는 기능

–관계형 데이터베이스 분야의 표준

–두 개 이상의 테이블을'결합'한다는 의미

 

조인의 필요성

– 조인을 사용하지 않는 일반적인 예

•학생 주소록을 출력하기 위해 학생들의 학번, 이름, 소속 학과이름을 검색
•학생에 대한 정보 검색하는 단계 필요
•학생정보에서 소속 학과 번호정보를 추출하여 소속 학과이름을 검색하는 단계 필요

 

조인을 사용하지 않을 때

SELECT studno, name, deptno
FROM student;

 

조인을 사용할 때

SELECT tudno, name,
       student.deptno, department.dname
FROM student, department
WHERE student.deptno = department.deptno;

칼럼 이름의 모호성

– 서로 다른 테이블에 있는 동일한 칼럼 이름을 연결한 경우 칼럼 이름 앞에 테이블 이름을 접두사로 사용 테이블 이름과 칼럼 이름은 점(.)으로 구분

- SQL 명령문에 대한 구문 분석시간(parsing time) 줄임

 

테이블 별명

테이블 이름이 너무 긴 경우 사용한다.

- FROM절에서 테이블 이름 다음에 공백을 두고 별명 정의

- 하나의 SQL 명령문에서 테이블 이름과 별명을 혼용할 수 없다

- 테이블의 별명은 해당 SQL 명령문 내에서만 유효

 

카티션 곱

- 두 개 이 상의 테이블에 대해 연결 가능한 행을 모두 결합

- WHERE 절에서 조인 조건절을 생략하거나 잘못 설정한 경우

– 대용량 테이블에서 발생할 경우 SQL명령문의 처리속도 저하

–개발자가 시뮬레이션을 위한 대용량의 실험용 데이터를 생성하기 위해 의도적으로 사용 가능

–오라클 9i 이후 버전에서 FROM절에 CROSS JOIN 키워드 사용

SELECT table.column, table2.column
FROM [table, table2 | table1 CROSS JOIN table2];

EQUI JOIN

- 조인 대상 테이블에서 공통 칼럼을'='(equal) 비교를 통해 같은 값을 가지는 행을 연결하여 결과를 생성하는 조인 방법

–SQL 명령문에서 가장 많이 사용하는 조인 방법

– 조인 애트리뷰트(join attribute(속성))

WHERE 절을 이용한 EQUI JOIN 사용법 

– FROM : 조인 대상 테이블을 기술한다. 테이블은 콤마(,)로구분

– WHERE : 조인 애트리뷰트와'='연산자를 사용하여 조인 조건을 기술

SELECT table.column, table2.column
FROM table, table2
WHERE table1.column1 = table2.column2;

 

EQUI JOIN - NATURAL JOIN(자연 조인을 이용한 )

–오라클 9i 버전부터 EQUI JOIN을 자연 조인이라 명명

–WHERE 절을 사용하지 않고 NATURAL JOIN 키워드 사용

–오라클에서 자동적으로 테이블의 모든 칼럼을 대상으로 공통 칼럼을 조사 후, 내부적으로 조인문 생성

SELECT table.column, table2.column
FROM table1
	 NATURAL JOIN table2;

 

JOIN ~ USING 절을 이용한 EQUI JOIN(EQUI JOIN –JOIN ~ USING)

–USING절에 조인 대상 칼럼을 지정

–칼럼 이름은 조인 대상 테이블에서 동일한 이름으로 정의되어있어야 함

SELECT table.column, table2.column
	   table1 JOIN table2
       USING (column);

 

NON-EQUI JOIN

–'<', BETWEEN a AND b 와같이'='조건이 아닌 연산자 사용

 

 

OUTER JOIN

– EQUI JOIN의 조인 조건에서 양측 칼럼 값 중, 어느 하나라도 NULL 이면'='비교결과가거짒이되어 NULL 값을 가진 행은 조인 결과로 출력 불가

– 일반적인 EQUI JOIN 의예: 학생 테이블 의학과 번호 칼럼과 부서 테이블의 부서 번호 칼럼에 대한 EQUI JOIN ( student.deptno = department.deptno ) 한 경우

– EQUI JOIN에서 양측 칼럼 값 중의 하나가 NULL이지만 조인 결과로 출력할 필요가 있는 경우 OUTER JOIN 사용

OUTER JOIN의 제약사항

– OUTER JOIN 연산자(+)는 NULL이 존재하는 칼럼 쪽에 표시
–OUTER JOIN에서는 IN 연산자를 사용불가
–다른 조건과 OR 연산자로 결합 불가

사용법

SELECT table.column, table2.column
FROM table table[RIGHT | LEFT | FULL] OUTER JOIN table2
	 ON table1.colum = table.column;

 

LEFT OUTER JOIN

– FROM 절의 왼쪽에 위치한 테이블이 NULL을 가질 경우에 사용
– WHERE절의 오른편에'(+)'기호를 추가한 것과동일
–예: 지도교수가 배정되지 않은 학생 명단을 출력하여라

RIGHT OUTER JOIN
– FROM 절의 오른쪽에 위치한 테이블이 NULL 일가 질 경우, 사용
– WHERE 절의 왼편'(+)'기호를 추가한 것과동일

FULL OUTER JOIN
– LEFT OUTER JOIN과 RIGHT OUTER JOIN을 동시에 실행할 결과를 출력

 

SELF JOIN

– 하나의 테이블 내에 있는 칼럼끼리 연결하는 조인이 필요할 경우 사용
– 조인 대상 테이블이 자신 하나라는 것 외에는 EQUI JOIN과 동일

SELECT table.column, table2.column
FROM table1 JOIN table2
	 ON table1.column = table2.column;