일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스프링 프로젝트 설정
- 로그인 기능
- 스프링 HikariCP
- 스프링 게시판 구현
- Bcrypt
- 회원가입 기능
- 파일 업로드
- 쇼핑몰 프로젝트
- 스프링 업로드
- arraylist
- 스프링 쇼핑몰
- 삭제 구현
- 스프링 쇼핑몰 프로젝트
- 스프링 이미지
- 스프링 프로젝트
- 스프링 게시판
- 스프링 포트폴리오
- 인증번호 전송
- 정규표현식
- oracle 설치방법
- 로그아웃 기능 구현
- BCrypt 적용
- 쇼핑몰 포트폴리오
- 스프링 메일 전송
- spring 프로젝트
- 스프링 파일 삭제
- 이미지 출력
- ResponseEntity
- 스프링 프로젝트 기본 설정
- spring 쇼핑몰
- Today
- Total
Kim VamPa
[데이터베이스][JOIN][1] 조인(JOIN)이란? 본문
"생활코딩 Oracle"을 개인 공부 후 자료를 남기기 위한 목적이기에 내용 상에 오류가 있을 수 있습니다.
목표
- 관계형 데이터베이스 조인(JOIN)이 무엇인지에 대해 이해합니다.
- 조인의 장점에 대해 예를 보면서 이해합니다.
목차
1. 조인이란?
2. 조인이 핵심적인 기능인 이유(예시)
1. 조인(JOIN)이란?
조인이란 한 데이터베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 표현한 것입니다. 쉽게 말해 데이터를 가진 분리된 표(table)를 필요에 따라 조립해서 마치 이러한 표가 있었 것과 같은 환상을 만들어줍니다. 조인(Join)은 관계형 데이터베이스에서 가장 핵심적인 기능 중 하나 인데, 왜 핵심적인 기능인지를 예를 들어서 살펴보겠습니다.
2. 조인이 핵심적인 기능인 이유(예시)
조인이 왜 핵심적인 기능인지에 대해 이를 하기 위해선 먼저 표(table)을 분리하여 데이터를 관리할대와 분리하지 않고 데이터를 관리할대의 장단점에 대해 먼저 이해해야 합니다. book_product 표(table)를 살펴보겠습니다.
book_product | |||||
제품번호 | 책제목 | 출판사 | 재고량 | 작가 | 작가 작품 수 |
B_00001 | 살인자의 기억법 | 문학동네 | 30 | 김영하 | 20 |
B_00002 | jaAVA의 정석 | 도우 출판 | 15 | 남궁성 | 5 |
B_00003 | 표현의 기술 | 생각의길 | 20 | 유시민 | 40 |
B_00004 | 오직 두 사람 | 문학동네 | 30 | 김영하 | 20 |
... | ... | ... | ... | ... | ... |
표를 보시면 한표를 통해 많은 정보가 담겨 잇습니다. 이렇게 많은 정보가 많이 담긴 테이블은 데이터의 정보를 보기가 편하다는 장점이 있습니다. 그러나 이렇게 많은 정보를 가진 테이블은 중복된 데이터가 많은 가능성이 큽니다. 중복된 데이터가 많으면 '용량의 낭비', '관리의 어려움'과 같은 문제가 생깁니다. book_product는 데이터 정보가 많지 않아 이러한 문제점을 못 느낄 수도 있습니다. 하지만 book_product가 1억 개의 행을 가진 표이고, 1억 개의 행중 "작가"컬럼에서 '김영하'라는 데이터가 3천만 개가 있다고 가정하겠습니다. 만약 '김영하'라는 데이터가 잘못되어 '김수로'라는 데이터로 수정을 해야 하는 상황이 생겼습니다. 이렇게 되면 수정 명령을 하였을 때 DMBS내부에선 3천만 번의 수정 작업을 진행해야만 합니다. 이럴 경우 단순한 수정 작업임에도 많은 작업 소요시간이 걸리게 됩니다. 따라서 중복된 데이터로 인한 용량의 낭비, 관리의 어려움을 해결하고자 표를 되도록이면 더 이상 나눠지지 않는 테마(주제)만을 가지도록 분리를 합니다. 다음 두 표는 위의 book_product 표에서 작가 테마를 분리한 것입니다.
topic | ||||
id | title | description | created | author_id |
1 | ORACLE | ORACLE is... | 2020-04-15 | 1 |
2 | MySQL | MySQL is.. | 2020-04-16 | 1 |
3 | SQL Server | SQL Server is... | 2020-04-17 | 2 |
author | ||
id | name | profile |
1 | vampa | developer |
2 | duru | DBA |
3 | jin | data scientist |
4 | vampa | developer |
두표를 보면 데이터가 잘 나뉘어 관리가 되고 있지만 데이터가 한눈에 들어오지 않습니다. 예를 들어서 title을 ORACLE을 가진 id 1의 작가(author name)를 확인하기 위해선 먼저 자신의 author_id를 확인한 후 그 번호와 일치하는 author테이블의 id를 찾아서 name을 확인해야 합니다. 읽기엔 매우 번고 롭습니다. 하지만 관계형 데이터베이스는 조인(Join)이라는 기능을 통해 한눈에 보기 쉽게 표를 만들 수 있습니다.
수정된 book_product 표와 분리된 book_author표는 작가 ID칼럼을 통해서 서로 연결된 데이터입니다. 이 표에서도 똑같이 1억 개의 행과 '김영하'라는 데이터가 3천만 번 중복됐다고 가정해보겠습니다. '김영하'라는 작가의 데이터를 변경 시 기존의 book_product 표에선 3천만 번의 수정 작업을 해주어야 했지만 분리된 표에서는 오직 book_author에 있는 필드 하나만 수정하면 됩니다. 그와 더불어 기존 book_product에서 '김영하'라는 데이터는 3천만 개의 필드만큼 용량을 차지했지만 분리된 두 표에선 단지 한 필드의 용량만 차지합니다. 따라서 표가 분리되면 데이터의 용량을 적게 사용하고 데이터 관리를 매우 편리 해집니다. 하지만 표가 분리된 경우 보기가 매우 불편합니다. 예를 들어 '살인자의 기억법'의 책의 작가를 찾기 위해 book_product 표에서 해당 책의 '작가 ID'를 찾은 후 book_author 표에서 일치하는 '작가 ID'를 찾아서 작가의 이름을 찾는 두 번의 과정을 거쳐야 합니다.
정리를 하면 표를 분리 하게되면 용량 낭비를 줄이고 데이터 관리하기가 편한 장점이 있습니다. 하지만 단점으로는 데이터를 보기에 매우 불편합니다. 표를 분리하지 않을 시엔 표를 분리했을 때와 반대로 표를 보기는 편한다는 장점이 있지만 용량 낭비가 크고, 데이터 관리가 어렵다는 단점이 있습니다.
조인은 표를 분리햇을때와 표를 분리하지 않았을 때의 장점만 가진 관계형 데이터베이스의 기능입니다. DBMS는 표를 최대한 분리해서 관리하여 그에 대한 장점을 가지면서 '조인'이라는 기능을 통해 사용자가 사용 시엔 여러 표의 데이터가 조합된 읽기 편한 표(실제 데이터베이스에선 존재 x)를 볼 수 있습니다.
Reference
Date
- 2020.04.21 작성
'공부 > 데이터베이스' 카테고리의 다른 글
자동값 증가(Oracle, MySQL)(IDENTITY, AUTO_INCREMENT) (4) | 2021.02.03 |
---|---|
[데이터베이스] 데이터 타입 정리(Oracle, MySQL) (2) | 2020.04.24 |
[Oracle 기본사용법][08] 표(table) JOIN (0) | 2020.04.15 |
[Oracle 기본사용법][07] 표(table) 분리 필요성 (0) | 2020.04.14 |
[Oracle SQL Developer][02] 데이터베이스 접속 방법 (2) | 2020.04.11 |