Education*
Devops
Architecture
F/B End
B.Chain
Basic
Others
CLOSE
Search For:
Search
BY TAGS
linux
HTTP
golang
flutter
java
fintech
개발환경
kubernetes
network
Docker
devops
database
tutorial
cli
분산시스템
www
블록체인
AWS
system admin
bigdata
보안
금융
msa
mysql
redis
Linux command
dns
javascript
CICD
VPC
FILESYSTEM
S3
NGINX
TCP/IP
ZOOKEEPER
NOSQL
IAC
CLOUD
TERRAFORM
logging
IT용어
Kafka
docker-compose
Dart
MySQL JOIN
Recommanded
Free
YOUTUBE Lecture:
<% selectedImage[1] %>
yundream
2024-08-14
2022-12-29
1180
모든 쿼리는 연습용 데이터베이스를 통해서 실행해 볼 수 있다. [MySQL & SQL 스터디 준비](https://www.joinc.co.kr/w/mysql_study_ready) 를 참고하여 실습환경을 구축하자. ## MySQL LEFT JOIN SQL에서 JOIN은 두 개 이상의 테이블을 관련 열을 기반으로 결합하는 방법이다. INNER JOIN, LEFT JOIN, RIGHT JOIN, CROSS JOIN, SELF JOIN등 다양한 결합 방법들이 있다. 여기에서는 LEFT JOIN을 다룬다.  LEFTER OUTER JOIN 이라고 부르기도 하는 LEFT JOIN은 왼쪽(LEFT) 테이블 의 모든 행을 검색해서 오른쪽 테이블에 일치하는 행을 반환한다. 일치하는 항목이 없을 경우에는 NULL을 포함한다. ### LEFT JOIN Syntax ```sql SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name; ``` ### Example "customers" 테이블에는 고객 정보가 들어있다. | CustomerID | ContactName | Address | City | Country | |------------|----------------------|--------------------------------|--------------|---------| | ALFKI | Maria Anders | Obere Str. 57 | Berlin | Germany | | ANATR | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | Mexico | | ANTON | Antonio Moreno | Mataderos 2312 | México D.F. | Mexico | | AROUT | Thomas Hardy | 120 Hanover Sq. | London | UK | "orders" 테이블에는 주문정보가 들어있다. | OrderID | CustomerID | EmployeeID | OrderDate | ShippedDate | ShipName | |---------|------------|------------|---------------------|---------------------|---------------------------| | 10248 | VINET | 5 | 1994-08-04 00:00:00 | 1994-08-16 00:00:00 | Vins et alcools Chevalier | | 10249 | TOMSP | 6 | 1994-08-05 00:00:00 | 1994-08-10 00:00:00 | Toms Spezialitäten | | 10250 | HANAR | 4 | 1994-08-08 00:00:00 | 1994-08-12 00:00:00 | Hanari Carnes | | 10251 | VICTE | 3 | 1994-08-08 00:00:00 | 1994-08-15 00:00:00 | Victuailles en stock | 고객관리 담당자는 DBA에게 각 1996년 01월 01일 이후의 고객별 주문정보를 보고해 달라고 요청했다. 이 문제는 아래와 같이 해결할 수 있다. 1. orders는 고객별 주문 정보가 있으며, 어떤 고객이 주문했는지는 CustomerID로 고객을 식별 할 수 있다. 2. 따라서 customers 테이블에 있는 전체 CustomerID에 대해서 orders에 주문정보가 있는지를 조회하면 된다. 두개의 테이블은 CustomerID로 관계가 맺어져 있으므로 CustomerID로 조회하면 된다. ```sql SELECT customers.ContactName, orders.OrderID FROM customers LEFT JOIN orders ON customers.CustomerID = orders.CustomerID WHERE orders.OrderDate > '1996-01-01 00:00:00' ORDER BY customers.ContactName; ``` DBA는 아래와 같이 각 고객별 주문 정보를 얻을 수 있다. | ContactName | OrderID | |-------------------|---------| | Alejandra Camino | 10917 | | Alejandra Camino | 11013 | | Alexander Feuer | 10779 | | Alexander Feuer | 10945 | | Ana Trujillo | 10926 | | Anabela Domingues | 10830 | ## MySQL JOIN SQL에서 Join은 두 개 이상의 테이블에서 서로 관계가 있는 컬럼을 기반으로 행을 결합하기 위해서 사용한다. 아래 Orders 테이블과 Customers 테이블을 보자. **orders table** | OrderID | CustomerID | OrderDate | |---------|------------|---------------------| | 10248 | VINET | 1994-08-04 00:00:00 | | 10249 | TOMSP | 1994-08-05 00:00:00 | | 10250 | HANAR | 1994-08-08 00:00:00 | | 10251 | VICTE | 1994-08-08 00:00:00 | | 10252 | SUPRD | 1994-08-09 00:00:00 | | 10253 | HANAR | 1994-08-10 00:00:00 | | 10254 | CHOPS | 1994-08-11 00:00:00 | **customers table** | CustomerID | ContactName | Country | City | |------------|----------------------|---------|--------------| | ALFKI | Maria Anders | Germany | Berlin | | ANATR | Ana Trujillo | Mexico | México D.F. | | ANTON | Antonio Moreno | Mexico | México D.F. | | AROUT | Thomas Hardy | UK | London | | BERGS | Christina Berglund | Sweden | Luleå | | BLAUS | Hanna Moos | Germany | Mannheim | | BLONP | Frédérique Citeaux | France | Strasbourg | orders 테이블과 customers 테이블은 CustomerID 컬럼을 공통으로 가지고 있다. 즉 두 개의 테이블은 CustomerID로 관계(relationship)가 맺어져 있다. 우리는 CustomerID 컬럼을 이용해서 두 개의 테이블을 JOIN 하여 원하는 정보를 얻을 수 있다. 본사의 주문관리자가 고객 별 주문일자와 선적일자가 담긴 정보를 요청했다고 가정해보자. 아래와같이 INNER JOIN으로 레포트를 만들 수 있다. ```sql SELECT orders.OrderID, customers.CustomerName, orders.OrderDate FROM orders INNER JOIN customers ON orders.CustomerID=customers.CustomerID; ``` | OrderID | ContactName | OrderDate | ShippedDate | |---------|-------------------|---------------------|---------------------| | 10248 | Paul Henriot | 1994-08-04 00:00:00 | 1994-08-16 00:00:00 | | 10249 | Karin Josephs | 1994-08-05 00:00:00 | 1994-08-10 00:00:00 | | 10250 | Mario Pontes | 1994-08-08 00:00:00 | 1994-08-12 00:00:00 | | 10251 | Mary Saveley | 1994-08-08 00:00:00 | 1994-08-15 00:00:00 | | 10252 | Pascale Cartrain | 1994-08-09 00:00:00 | 1994-08-11 00:00:00 | | 10253 | Mario Pontes | 1994-08-10 00:00:00 | 1994-08-16 00:00:00 | | 10254 | Yang Wang | 1994-08-11 00:00:00 | 1994-08-23 00:00:00 | ## Join 유형  JOIN은 결합 방법에 따라 INNER JOIN, OUTER JOIN, CROSS JOIN, SELF JOIN 이 있다. * INNER JOIN : 한 테이블의 각 행을 다른 테이블의 모든 행과 비교하여 일치하는 행을 찾는다. 일치하는 행을 찾으면 두 테이블의 행을 단일 행으로 결합한다. * LEFT JOIN : 두 테이블 모두에서 일치하는 행만 반환하는 INNER JOIN과 달리 LEFT JOIN은 일치하지 않는 왼쪽(LEFT) 테이블의 결과도 반환한다. 이러한 행은 NULL 값을 가진다. * RIGHT JOIN : 두 테이블 모두에서 일치하는 행만 반환하는 INNER JOIN과 달리 RIGHT JOIN은 일치하지 않는 오른쪽(RIGHT) 테이블의 결과도 반환한다. 이러한 행은 NULL 값을 가진다. * CROSS JOIN : 양쪽 테이블의 모든 행을 반환한다. 특정 행이 다른 테이블의 모든 행과 join 되기 때문에 n x n의 결과가 반환된다. 한쪽 테이블의 행의 갯수가 10,000 이고 다른 하나의 행의 갯수가 100,000 이라면 10,000 x 100,000의 행이 반환될 수 있다. 자주 사용하는 join 유형은 아니다. ## JOIN Syntax ```sql SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name ``` ## 참고 [SQL Study With MySQL](https://www.joinc.co.kr/w/sql_study_with_mysql_index) 에서 MySQL과 관련된 다른 문서들을 읽을 수 있습니다.
Recent Posts
MLOps with Joinc - Kubeflow 설치
Vertex Gemini 기반 AI 에이전트 개발 05. 첫 번째 LLM 애플리케이션 개발
LLama-3.2-Vision 테스트
Vertex Gemini 기반 AI 에이전트 개발 04. 프롬프트 엔지니어링
Vertex Gemini 기반 AI 에이전트 개발 03. Vertex AI Gemini 둘러보기
Vertex Gemini 기반 AI 에이전트 개발 02. 생성 AI에 대해서
Vertex Gemini 기반 AI 에이전트 개발 01. 소개
Vertex Gemini 기반 AI 에이전트 개발-소개
생성 AI 모델 Flux.1 설치 및 사용
GPT를 이용한 Reranker 테스트
Archive Posts
Tags
database
mysql
sql
SQL tutorial with MySQL
Copyrights © -
Joinc
, All Rights Reserved.
Inherited From -
Yundream
Rebranded By -
Joonphil
Recent Posts
Archive Posts
Tags