티스토리 뷰

SQL

SQL 뽀개기 - 9 | 조인

세댕댕이 2021. 8. 23. 19:31

# 조인

관계형 데이터베이스는 "조인" 으로 테이블간 관계를 맺는다

- 1개 이상의 테이블에서 원하는 데이터를 조회하기 위해서 사용한다.

- 조인을 하기 위해서는 두 테이블간 연결고리를 할 컬럼이 존재해야 한다

- 일반적으로는 연결고리가 되는 컬럼은 두 테이블간 이름과 데이터 타입을 일치시킨다

 

# 내부 조인 (Inner Join)

순번 이름 주소 성별
1 AAA 서울
2 BBB 부산
3 CCC 서울
4 DDD 대구
5 EEE 대전

 

주소 비용 시간
서울 1000 1일
부산 2000 1일
제주 5000 2일

테이블 1과 테이블 2를 Inner Join한다고 하면

SELECT a.순번, a.이름, a.주소, a.성별,
    b.주소, b.비용, b.시간
    FROM table1 a, table2 b
    WHERE a.주소 = b.주소
    ORDER BY b.비용;

다음과 같이 결과가 나온다.

WHERE절의 조건을 만족하는 행만을 뽑아 출력한 것을 알 수 있다!

 

추가로 여기서 조건을 더하고 싶다면

SELECT a.순번, a.이름, a.주소, a.성별,
    b.주소, b.비용, b.시간
    FROM table1 a, table2 b
    WHERE a.주소 = b.주소
    AND a.성별 = '남'
    ORDER BY b.비용;

WHERE 절 뒤에 AND 조건문으로 조건을 붙여주면 된다.

이러한 동등 연산자를 사용하는 방식 말고 ANSI 구문 방식이라는게 있다.

 

SELECT a.순번, a.이름, a.주소, a.성별,
    b.비용, b.시간
    FROM table1 a
    INNER JOIN table2 b
    ON a.주소 = b.주소
    WHERE a.성별 = '남'
    ORDER BY b.비용;

결과는 위랑 똑같으며,

 

"SELECT ~ FROM table1 a INNER JOIN table2 b ON [조건] WHERE ~ "

 

로 사용한다.

 

- 내부 조인은 두개 이상의 테이블도 계속 연결할 수 있다

(FROM ~ 과 WHERE절 사이 INNER JOIN - ON - 문을 계속 붙여주면 된다)

 

# 외부 조인 (Outer Join)

1. LEFT OUTER JOIN

SELECT a.순번, a.이름, a.주소, a.성별,
    b.비용, b.시간
    FROM table1 a
    LEFT JOIN table2 b
    ON a.주소 = b.주소
    ORDER BY b.비용;

- 왼쪽 테이블에 붙는다 / 테이블 2에 자료가 없으면 null로 처리

 

2. RIGHT OUTER JOIN

SELECT a.순번, a.이름, a.성별, a.주소,
    b.주소, b.비용, b.시간
    FROM table1 a
    RIGHT JOIN table2 b
    ON a.주소 = b.주소
    ORDER BY b.비용;

- 오른쪽 테이블에 붙는다 / 테이블 1에 자료가 없으면 null로 처리

 

3. FULL OUTER JOIN

 SELECT a.순번, a.이름, a.성별, a.주소,
    b.주소, b.비용, b.시간
    FROM table1 a
    FULL OUTER JOIN table2 b
    ON a.주소 = b.주소
    ORDER BY b.비용;

- 모든 자료를 가져오는데 각 테이블에 없는 자료가 있으면 null로 처리

 

* 조인 조건이 주어지지 않으면 가능한 모든 조합에 대한 데이터를 출력한다

(이를 "카티션 곱" 이라고 함)

SELECT a.순번, a.이름, a.주소, a.성별,
    b.주소, b.비용, b.시간
    FROM table1 a, table2 b
    --WHERE a.주소 = b.주소
    --AND a.성별 = '남'
    ORDER BY b.비용;

결과가 15행이나 나온다

- 딱히 쓸 일은 없음

- 원하는 결과만 뽑아서 보고싶다면 조인 조건을 반드시 붙여줘야함!!

'SQL' 카테고리의 다른 글

MySQL 시작하기  (0) 2022.03.15
SQL 뽀개기 - 10 | 마무리 실습  (0) 2021.08.23
SQL 뽀개기 - 8 | 서브쿼리  (0) 2021.07.30
SQL 뽀개기 - 7 | 모델링  (0) 2021.07.29
SQL 뽀개기 - 6 | 제약조건  (0) 2021.07.24
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함