□ 개념
○ 하나의 SQL 명령문에 의해 여러 테이블에 저장된 데이터를 한번에 조회할수 있는 기능
- 관계형 데이터베이스 분야의 표준
- 두개 이상의 테이블을 ‘결합’ 한다는 의미
□ 조인의 필요성
○ 조인을 사용하지 않는 일반적인 예
- 학생 주소록을 출력하기 위해 학생들의 학번, 이름, 소속학과 이름을 검색
- 학생에 대한 정보 검색하는 단계 필요
- 학생 정보에서 소속학과번호 정보를 추출하여 소속학과 이름을 검색하는 단계 필요
□ 카티션 곱
○ 두 개 이상의 테이블에 대해 연결 가능한 행을 모두 결합
○ WHERE 절에서 조인 조건절을 생략하거나 잘못 설정한 경우
○ 대용량 테이블에서 발생할 경우 SQL명령문의 처리속도 저하
○ 개발자가 시뮬레이션을 위한 대용량의 실험용 데이터를 생성하기 위해 의도적으로 사용 가능
○ 오라클 9i 이후 버전에서 FROM절에 CROSS JOIN 키워드 사용
--카티션 곱
select name, student.deptno, loc from student, department;
--cross join
select name, student.deptno, dname, loc
from student cross join department;
□ EQUI JOIN
○ 조인 대상 테이블에서 공통 칼럼을 ‘=‘(equal) 비교를 통해 같은 값을 가지는 행을 연결하여 결과를 생성하는 조인 방법
○ SQL 명령문에서 가장 많이 사용하는 조인 방법
○ 조인 애트리뷰트(join attribute(속성))
○ ELECT table.column, table2.column
FROM table, table2
WHERE table1.column1 = table2.column2;
select s.studno, s.name, s.deptno, d.dname, d.loc
from student s, department d
where s.deptno = d.deptno
○ Natural Join
- SELECT table.column, table2.column FROM table1 NATURAL JOIN table2;
select p.profno, p.name, deptno, d.dname from professor p natural join department d;
○ Join~Using
- USING절에 조인 대상 칼럼을 지정
- 칼럼 이름은 조인 대상 테이블에서 동일한 이름으로 정의되어 있어야함
- SELECT table.column, table2.column
FROM table1 JOIN table2 USING (column);
- 조인할 필드에 엘리어스를 지정하면 오류가 발생함
select s.studno, s.name, deptno, d.dname, d.loc from student s join department d
using(deptno);
□ OUTER JOIN
○ EQUI JOIN의 조인 조건에서 양측 칼럼 값 중, 어느 하나라도 NULL 이 면 ‘=‘ 비교 결과가 거짓이 되어 NULL 값을 가진 행은 조인 결과로 출력불가
- NULL 에 대해서 어떠한 연산을 적용하더라도 연산 결과는 NULL
○ +) 기호를 사용한 OUTER JOIN
- WHERE 절의 조인 조건에서 OUTER JOIN 연산자인 ‘(+)’ 기호 사용
- 조인 조건문에서 NULL 이 출력되는 테이블의 칼럼에 (+) 기호추가
○ SELECT table.column, table2.column
FROM table1, table2
WHERE table1.column(+) = table2.column
또는 ; table1.column = table2.column(+)
○ 제약사항
- OUTER JOIN 연산자(+)는 NULL이 존재하는 칼럼쪽에 표시
- OUTER JOIN에서는 IN 연산자를 사용 불가
- 다른 조건과 OR 연산자로 결합 불가
select s.name, s.grade, p.name, p.position
from student s, professor p
where s.profno(+) = p.profno
order by p.profno;
○ 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과 동일
- WHERE 절을 사용한 SELF JOIN
○ 한 테이블에서 두 개의 칼럼을 연결하여 EQUI JOIN
○ FROM절에서 하나의 테이블에 테이블 별명지정
select c.deptno, c.dname, c.college, d.dname college_name from department c, department d
where c.college = d.deptno;
'DB > SQL_Example' 카테고리의 다른 글
DML(Data Manpulation Language) (0) | 2024.01.22 |
---|---|
서브쿼리 (By Oracle) (0) | 2024.01.22 |
그룹함수 (by Oracle) (1) | 2024.01.22 |
일반함수 (by Oracle) (0) | 2024.01.19 |
데이터 타입변환 (by Oracle) (0) | 2024.01.19 |