본문 바로가기
DB/SQL_Example

조인함수 (By Oracle)

by Mr.DonyStark 2024. 1. 22.

□ 개념

  ○ 하나의 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