2. 발표자 소개
기술 배경
전문 검색 엔진, 임베디드 시스템(리눅스 커널 디바이스 드라이버), 빅데이터/인공지능 연구 개발,
고성능 고가용성 데이터베이스, 클라우드 컴퓨팅
주요활동
IT 전문서 번역 (클린 코드, 피플웨어, 해커: 광기의 랩소디, 게임 엔진 블랙 북 등)
개발강의 (삼성전자, SK C&C, 현대자동차 기술 세미나와 교육)
활동채널
블로그: https://jhrogue.blogspot.com
슬라이드 셰어: https://www.slideshare.net/jrogue/presentations
유튜브: https://www.youtube.com/c/박재호dev
문의 jrogue@gmail.com
박재호
3. 즐겁게 배우는 SQL
관계형 모델에서 여러 테이블 사이의 논리적인 연결을 가능하게 만드는 핵심
• 둘 이상의 테이블에서 데이터를 결합
• 테이블을 여러 번 읽을 필요가 없고 트랜잭션 보호가 가능
• 외래 키(foreign key)와 관련된 테이블 집합을 손쉽게 처리
SQL에서 join이 중요한 이유?
4. 즐겁게 배우는 SQL
예제 테이블
• 앨범과 아티스트는 N:1 관계
• 즉, 한 아티스트가 여러 앨범을 만들어 낼 수 있음
5. 즐겁게 배우는 SQL
왜 다음과 같이 하지 않았을까?
• 중복이 많아짐: 즉 아티스트가 늘어나면 늘어날수록 점점 더 공간을 많이 차지함, 변경이 어려워짐
• 동명이인 처리가 불가능함: 이름이 같으면 아티스트를 구분할 방법이 사실상 전무함
6. 즐겁게 배우는 SQL
그렇다면 앨범 이름과 아티스트를 함께 출력하는 방법은?
• SELECT 질의를 두 번 내리는 방법이 있음
• 먼저 albums 테이블을 대상으로 SELECT 질의로 ArtistId를 얻어와서 다시 artists 테이블을 대상으로 이름을 얻어옴
• 애플리케이션에서 비즈니스 논리를 일부 활용 → 장점이 없는 것은 아님, 하지만 트랜잭션 관련해 어려움을 예상
• 여기서 JOIN 등장! 특정 테이블의 필드를 기준으로 다른 테이블의 필드를 연결
외래 키
7. 즐겁게 배우는 SQL
JOIN의 정체는? 곱집합(Cartesian Product)
• https://blog.jooq.org/2016/07/05/say-no-to-venn-diagrams-when-explaining-joins/
8. 즐겁게 배우는 SQL
그런데 조건을 줄 수 있어요…
• https://blog.jooq.org/2016/07/05/say-no-to-venn-diagrams-when-explaining-joins/
9. 즐겁게 배우는 SQL
집합처럼 생각하지 맙시다. 정확하지도 않고 이해하기도 어려워요.
• https://blog.jooq.org/2016/07/05/say-no-to-venn-diagrams-when-explaining-joins/