[SQL 2-1강 (1)] JOIN, INNER, OUTER, LEFT, RIGHT

2021. 5. 18.·🤓 기술 학습 & 공부 기록/컴퓨터 일반

[강의명]
패스트캠퍼스 SQL 100제 + 자격증 완성 온라인 완주반

 

[수강목록]

17. 조인과 집계 데이터 - 01. 조인이란
18. 조인과 집계 데이터 - 02. INNER조인
19. 조인과 집계 데이터 - 03. OUTER조인

 

[강의내용]

 

17. 조인과 집계 데이터 - 01. 조인이란

 

[JOIN이란?]

2개 이상의 테이블에 있는 정보 중 사용자가 필요한 집합에 맞게 가상의 테이블처럼 만들어서 결과를 보여주는 것이다.

 

FRUIT 샘플데이터를 가지고 실습해본다.

 

[샘플데이터 설명]

좌) basket_a 우) basket_b

18. 조인과 집계 데이터 - 02. INNER JOIN

 

[INNER JOIN이란?]

특정 컬럼을 기준으로 정확히 매칭된 집합을 출력한다. 대표적인 조인의 종류이다. 수학에서 교집합을 떠올리면 된다.

 

교집합

[실습1]

SELECT A.ID ID_A,
	   A.FRUIT FRUIT_A,
	   B.ID ID_B,
       B.FRUIT FRUIT_B
FROM BASKET_A A
INNER JOIN BASKET_B B ON A.FRUIT = B.FRUIT;

 

SELECT절을 먼저 보면, SELECT * 해도 되지만 테이블의 이름을 구분하기 위해 전부 입력했다.

FROM절에는 왼쪽에 위치할 컬럼을 쓴다. (A테이블에)

INNER JOIN 절에는 오른쪽 데이터(B테이블을 붙인다) ON에는 조건을 작성한다. (과일 이름이 같은 것을 붙여라)

쿼리를 실행하면,

 

쿼리 결과

A테이블과 B테이블의 교집합이 출력되는 것을 볼 수 있다.

 

[실습2]

 

SELECT A.CUSTOMER_ID, A.FIRST_NAME,
	   A.LAST_NAME, A.EMAIL,
       B.AMOUNT, B.PAYMENT_DATE
FROM CUSTOMER A 
INNER JOIN PAYMENT B ON A.CUSTOMER_ID = B.CUSTOMER_ID;

 

customer 테이블과 payment 테이블을 INNER JOIN 하는데 customer_id를 기준으로 JOIN한다.

즉, 결제 이력이 있는 고객 정보를 조회한다.

 

쿼리 결과

 

+ WHERE 조건을 덧붙일 수도 있다. customer_id가 2인 정보만 조회해보자

 

SELECT A.CUSTOMER_ID, A.FIRST_NAME,
	   A.LAST_NAME, A.EMAIL,
       B.AMOUNT, B.PAYMENT_DATE
FROM CUSTOMER A 
INNER JOIN PAYMENT B ON A.CUSTOMER_ID = B.CUSTOMER_ID
WHERE A.CUSTOMER_ID = 2;

 

쿼리 결과

 

+ INNER JOIN을 두번 할 수도 있다. (3개 테이블 결합)

   결제한 직원 정보까지 조회해보자

 

SELECT A.CUSTOMER_ID, A.FIRST_NAME,
       A.LAST_NAME, A.EMAIL,
       B.AMOUNT, B.PAYMENT_DATE,
       C.FIRST_NAME AS S_FIRST_NAME,
       C.LAST_NAME AS S_LAST_NAME,
FROM CUSTOMER A 
INNER JOIN PAYMENT B ON A.CUSTOMER_ID = B.CUSTOMER_ID
INNER JOIN STAFF C ON B.STAFF_ID = C.STAFF_ID;

 

ERD

 

C테이블인 staff 테이블을 추가해서 결제를 진행한 직원 정보까지 조회할 수 있다.

 

쿼리 결과

 

19. 조인과 집계 데이터 - 03. OUTER조인

 

[OUTER JOIN이란?]

특정 컬럼을 기준으로 매칭된 집합을 출력하지만 한쪽의 집합은 모두 출력하고 다른 한쪽의 집합은 매칭되는 컬럼의 값만을 출력한다.

 

LEFT OUTER JOIN / RIGHT OUTER JOIN이 있다.

또한 OUTER는 생략이 가능하다.

 

주로 사용하는 LEFT OUTER JOIN을 살펴본다. 벤다이어그램은 다음과 같다.

LEFT OUTER JOIN의 벤다이어그램

 

[실습1]

 

SELECT A.ID AS ID_A,
       A.FRUIT AS FRUIT_A,
       B.ID AS ID_B,
       B.FRUIT AS FRUIT_B
FROM BASKET_A A
LEFT OUTER JOIN BASKET_B B ON A.FRUIT = B.FRUIT;

 

과일 샘플데이터로 LEFT OUTER JOIN을 실행하면

 

쿼리 결과

사진과 같이 basket_a는 모두 조회되는 것을 볼 수 있다.

 

[실습2]

이번에는 LEFT ONLY 집합만 뽑아본다.

 

 SELECT A.ID AS ID_A,
        A.FRUIT AS FRUIT_A,
        B.ID AS ID_B,
        B.FRUIT AS FRUIT_B
FROM BASKET_A A
LEFT JOIN BASKET_B B ON A.FRUIT = B.FRUIT
WHERE B.ID IS NULL;

 

쿼리 결과

 

중복된 집합은 배제하고 A테이블 고유의 값만 추출되었다.

 

LEFT ONLY

벤다이어그램은 위와 같다.

 

RIGHT OUTER JOIN은 생략한다.

'🤓 기술 학습 & 공부 기록/컴퓨터 일반' 카테고리의 다른 글
  • [SQL 2-2강 (1)] JOIN, NATURAL JOIN
  • [SQL 2-1강 (2)] SELF JOIN, FULL, CROSS
  • [SQL 1-5강] CASE, SUBSTRING, AND, OR
  • [SQL 1-4강] IN, BETWEEN, LIKE, IS NULL, CAST
지식물원
지식물원
지식이 자라는 식물원!
  • 지식물원
    지식물원
    지식물원
  • 전체
    오늘
    어제
    • 분류 전체보기 (510)
      • 🎨 프론트엔드 공부 (247)
        • JS & TS (86)
        • HTML & CSS (22)
        • React & Next (49)
        • Vue & Nuxt (22)
        • 기타 (68)
      • 🤓 기술 학습 & 공부 기록 (116)
        • Node.js (0)
        • Python (37)
        • 백엔드 (0)
        • 딥러닝 (1)
        • 컴퓨터 일반 (72)
        • 개발 인프라 (6)
      • 👨‍💻 프로젝트 경험 (6)
        • Work (0)
        • Toy (6)
      • ⚙️ 개발 팁 & 노하우 (21)
        • 프론트엔드 (6)
        • 기타 (15)
      • ☕️ 커리어 & 인터뷰 준비 (88)
        • 코딩 테스트 (88)
      • 📰 기술 트렌드 & 생각 정리 (4)
      • 📚 기타 (25)
        • 마케팅 (15)
        • 비개발서적 (10)
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

    • 모바일 접속 시 코드 하이라이팅 깨질 때
  • 인기 글

  • hELLO· Designed By정상우.v4.10.3
지식물원
[SQL 2-1강 (1)] JOIN, INNER, OUTER, LEFT, RIGHT
상단으로

티스토리툴바