일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 데이터입출력구현
- 혼공머신
- html/css
- pandas
- 정보처리기사필기
- 연습문제
- 자바
- C++
- 파이썬라이브러리
- 정보처리기사실기
- 파이썬
- 정수와유리수
- 딥러닝
- 머신러닝
- 데이터분석
- JSP/Servlet
- 데이터베이스
- 코딩테스트
- 텍스트마이닝
- SQL
- 자바 실습
- 운영체제
- numpy/pandas
- 컴퓨터구조
- 영어공부
- 컴퓨터비전
- CNN
- 중학수학
- 중학1-1
- CSS
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
SQL 고급 문법 3 - 두 테이블을 묶는 조인 1 : 내부 조인에 대하여 본문
지난번에 공부하려던 단원인데 오늘 드디어 해본다. 어제는 영상을 시청하며 SQL을 가볍게 공부하며 복습하는 시간으로 보냈다. 이번주부터는 정말 열심히 공부에 몰입할 생각이다.
벌써 새벽 공부할 시간이 얼마 남지 않았지만 이 단원까지는 마쳐볼 것이다.
지금까지 하나의 테이블을 다루는 작업을 위주로 공부했다. 이를 기반으로 지금부터는 두 개의 테이블이 서로 관계되어 있는 상태를 고려해서 학습을 진행하겠다.
시작하기 전에
조인이란 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 말한다. 두 테이블을 엮어야만 원하는 형태가 나오는 경우도 많다. 인터넷 마켓 데이터베이스의 회원 테이블과 구매 테이블을 예로 들 수 있다.
물건을 배송하려면 회원 테이블의 회원 이름과 연락처, 구매 테이블의 회원이 구매한 물건에 대한 정보가 함께 필요하다. 이렇게 두 테이블을 엮어서 하나의 배송을 위한 정보를 추출하는 것이 대표적인 조인이다.
내부 조인
두 테이블을 연결할 때 가장 많이 사용되는 것이 내부 조인이다. 그냥 조인이라 부르면 내부 조인을 의미하는 것이다.
일대다 관계의 의미
두 테이블의 조인을 위해서는 테이블이 일대다 관계로 연결되어야 한다. 데이터베이스의 테이블은 하나로 구성되는 것보다는 여러 정보를 주제에 따라 분리해서 저장하는 것이 효율적이다. 이 분리된 테이블은 서로 관계를 맺고 있다.
다음 그림과 같이 market_db에서 회원 테이블의 아이디와 구매 테이블의 아이디는 일대다 관계이다. 일대다 관계란 한쪽 테이블에서는 하나의 값만 존재해야 하지만, 연결된 다른 테이블에는 여러 개의 값이 존재할 수 있는 관계를 말한다.
이때 회원 테이블의 아이디를 기본 키로 지정한다. 구매 테이블의 아이디에서는 3개의 BLK를 찾을 수 있다., 즉 회원은 1명이지만 이 회원은 구매를 여러 번 할 수 있다. 그래서 구매 테이블의 아이디는 기본 키가 아닌 외래 키로 설정했다.
내부 조인의 기본
일반적으로 조인이라고 부르는 것은 내부 조인을 말하는 것으로, 조인 중에서 가장 많이 사용된다. 조인은 3개 이상의 테이블로도 할 수 있지만 대부분은 2개로 조인한다. 내부 조인의 형식은 다음과 같다.
SELECT <열 목록>
FROM <첫 번째 테이블>
INNER JOIN <두 번째 테이블>
ON <조인될 조건>
[WHERE 검색 조건]
구매 테이블에는 물건을 구매한 회원의 아이디와 아이디와 물건 등의 정보만 있다. 이 물건을 배송하기 위해 서는 구매한 회원의 주소 및 연락처를 알아야 한다.
동일한 열 이름이 존재한다면 꼭 테이블_이름.열_이름 형식으로 표기해야 한다.
- 구매 테이블의 mem_id(buy.mem_id)인 'GRL'을 추출한다.
- 'GRL'과 동일한 값을 회원 테이블의 mem_id(member.mem_id) 열에서 검색한다.
- 'GRL'이라는 아이디를 찾으면 구매 테이블과 회원 테이블의 두 행을 결합한다.
만약 WHERE by.mem_id = 'GRL'을 생략하면 어떻게 될까?
1번째 BLK부터 12번째 MMU까지 구매 테이블의 모든 행이 회원 테이블과 결합한다.
내부 조인의 간결한 표현
이번에는 필요한 아이디/이름/구매 물품/주소/연락처만 추출해 보겠다.
회원 아이디는 회원 테이블, 무매 테이블에 모두 들어있어서 어느 테이블의 mem_id인지 헷갈린다는 의미이다. 이럴 때는 어느 테이블의 mem_id를 추출할지 정확하게 작성해야 한다.
좀 더 명확히 하기 위해 SELECT 다음의 열 이름에도 모두 테이블_이름.열_이름 형식으로 작성해 보았다.
하지만 이렇게 하니 어느 테이블에 속한 것인지는 명확해졌지만 코드가 너무 복잡하다. 이럴 때 별칭을 지정하면 코드를 줄일 수 있다.
내부 조인의 활용
이번에는 전체 회원의 아이디/이름/구매한 제품/주소를 출력하겠다. 결과는 보기 쉽게 회원 아이디 순으로 정렬한다.
구매 테이블의 목록이 12건으로 잘 출력되었으나 모두 한 번이라도 구매한 회원들만 출력되었다. 모든 회원의 정보를 출력하려면 어떻게 해야 할까? 이럴 때 외부 조인을 사용한다.
중복한 결과 1개만 출력하기
내부 조인이 양쪽에 모두 있는 내용만 나오기 때문에 유용한 경우도 있다. 예를 들어 "우리 사이트에서 한 번이라도 구매한 회원들에게 감사 안내문을 발송한다"라고 할 때, 내부 조인을 사용해서 추출한 회원에게 안내문을 발송하면 된다.
중복된 이름은 필요 없으므로 DISTINCT 문을 활용해서 화원의 주소를 조회할 수 있다.
학습을 마치고
이 단원도 분량이 많은 관계로 내부 조인에 대해서만 학습한 내용을 정리해 보았다. 오늘은 공부하는데 졸음이 몰려오고 잠을 깨기 위해 음악을 들으면서 하고 있다. 새벽 시간이 너무 빨리 지나가는 것 같다.
아직 외부 조인과 자체 조인에 대해서 학습할 게 많이 남아있는데 최소한 7시까지 마칠 수 있었으면 좋겠다. 이번 시간을 통해 무척 어렵게 느껴지던 조인을 조금은 이해할 수 있었다.
'알고리즘 및 자료 관리 > SQL' 카테고리의 다른 글
SQL 고급 문법 5 - SQL 프로그래밍 1 : IF 문과 CASE 문 (1) | 2024.10.21 |
---|---|
SQL 고급 문법 4 - 두 테이블을 묶는 조인 2 : 외부 조인 및 기타 조인 (0) | 2024.10.21 |
SQL 고급 문법 2 - MySQL의 데이터 형식 2 : 데이터 형식 및 데이터 형 변환 (0) | 2024.10.20 |
SQL 기본 문법 7 - 데이터 변경을 위한 SQL 문 2 : 스스로 실습해보기 (0) | 2024.10.20 |
SQL 기본 문법 6 - 좀 더 깊게 알아보는 SELECT 문 2 : 스스로 실습해보기 (0) | 2024.10.20 |