PengTory

JOIN이란? (feat. oracle) 본문

데이터베이스

JOIN이란? (feat. oracle)

펭토리 2023. 2. 23. 11:46

1. JOIN이란?

한 개 이상의 테이블과 테이블을 연결하여 데이터를 조회하는 기법이다.

종류로는 크로스(cross join), 등가 조인(equi join), 비등가 조인(non equi join), 외부 조인(outer join), 자체 조인(self join)이 있다.

 

2. 등가조인 (equi join)

<조인 SQL문의 기본 구조 - oracle 방식>

SELECT

     테이블명1.컬럼명..., 테이블명2.컬러명...

     FROM 테이블명1, 테이블명2

WHERE

     테이블명1.컬럼명 = 테이블명2.컬럼명

 

예시)

SELECT
    e.ename, d.dname, d.deptno -- 3번
FROM emp e, dept d -- 1번
WHERE e.deptno = d.deptno; -- 2번

 

<조인 SQL문의 기본 구조 - ANSI방식(표준)>

SELECT

     테이블명1.컬럼명...,

     테이블명2.컬러명...

FROM 테이블명1 JOIN 테이블명2

ON

     테이블명1.컬럼명 = 테이블명2.컬럼명

 

예시)

SELECT
    e.ename, d.dname, d.deptno -- 3번
FROM emp e JOIN dept d -- 1번
ON e.deptno = d.deptno; -- 2번

 

3. 외부 조인 (Outer Join)

외부 조인은 양쪽 테이블 모두 조건이 만족하지 않아도, 한쪽 테이블의 데이터를 모두 출력해야 하는 경우에 사용한다.

inner join과 outer join의 차이는 아래 그림과 같다.

예를 들어 설명해보면 쇼핑몰에서 모든 회원의 주문 건수를 출력한다 해보자.

equal join은 inner join으로 동작하기 때문에 주문했던 회원만! 출력된다.

하지만 우리는 주문하지 않은 고객의 주문 건수도 0으로 출력되길 바란다. 이러한 상황에서는 outer join을 사용해야한다.

 

<외부 조인 - oracle 방식>

student를 전부 다 내보내고 싶으면 오른쪽 p.no 뒤에 (+)를 붙인다.

-> 학생명, 지도교수명 출력 (지도교수가 없는 학생도 출력)

SELECT 
    s.name, p.name
FROM student s, professor p
WHERE s.profno = p.no(+);

학생명, 지도교수명 출력 (지도학생이 없는 교수도 출력)

SELECT 
    s.name, p.name
FROM student s, professor p
WHERE s.profno(+) = p.no;

<외부 조인 - ANSI 방식>

student를 다 내보이고 싶다면 join을 기준으로 왼쪽에 있기 때문에 LEFT JOIN을 사용한다.

-> 학생명, 지도교수명 출력 (지도교수가 없는 학생도 출력)

SELECT 
    s.name, p.name
FROM student s LEFT JOIN professor p
ON s.profno = p.no;

학생명, 지도교수명 출력 (지도학생이 없는 교수도 출력)

SELECT 
    s.name, p.name
FROM student s RIGHT JOIN professor p
ON s.profno = p.no;

'데이터베이스' 카테고리의 다른 글

SQL 학습 정리  (0) 2023.02.24
GROUPING - GROUP BY 와 HAVING(feat. oracle)  (0) 2023.02.23
Oracle 리스너란?  (0) 2023.02.22
SQL (feat. Oracle)  (0) 2023.02.22
데이터베이스 이론  (0) 2023.02.21