데이터/SQL

[SQL 기초] JOINS

성장하기 2023. 4. 7. 22:08

AS 문

  • ‘alias’ : 열이나 결과에 별칭을 주는 구문
  • 출력의 가독성을 위해 사용함
  • AS 뒤의 이름으로 output에 출력됨
SELECT column AS new_name
FROM table

SELECT SUM(column) AS new_name
FROM table
  • AS 뒤의 별칭은 가장 마지막에 할당되기 때문에 WHERE나 HAVING문에서 별칭을 사용할 경우 오류가 발생한다.

INNER JOIN

INNER JOIN

  • JOIN 연산은 여러 테이블을 하나로 결합하는 함수
  • 결합된 테이블의 중 하나에만 있는 정보를 처리하는 방법에 따라 여러 종류의 JOIN으로 구분됨
  • 두 테이블을 모두 충족하는 레코드 세트를 결과로 반환
SELECT * FROM table_a
INNER JOIN table_b
On table_a.col_match = table_b.col_match
  • INNER JOIN은 대칭으로, 테이블 이름의 앞 뒤를 바꿔도 동일하게 작동한다.
  • 두 테이블 안에서 일치하는 것을 찾아냄
  • 모든 열을 선택하기 때문에 on 뒤의 키 컬럼의 값이 중복되거나 두번 반복됨
  • 반복을 없애기 위해서는 SELECT 절에서 지정해줘야함.
  • JOIN의 기본값이 INNER JOIN이기에, JOIN만 써도 INNER JOIN으로 처리되나, 가독성을 위해 다 적어두는 것이 좋다.
  • 한 테이블에서만 존재하는 컬럼명을 조회하는 경우에는 어느 테이블을 참조하는 지 작성하지 않아도 되지만, 두 테이블에 전부 존재하는 컬럼명을 조회하는 경우에는 어떤 테이블을 참조하는 지 작성해야함.
SELECT payment_id, payment.customer_id, first_name, email
FROM payment
INNER JOIN customer
ON payment.customer_id = customer.customer_id

OUTER JOIN

  • 두 테이블 중 하나만 있는 값을 어떻게 처리할 지에 대해 달라짐 

FULL OUTER JOIN

FULL OUTER JOIN

  • 모든 것을 포함함
SELECT FROM table_a
FULL OUTER JOIN table_b
ON table_a.col_match = table_b.col_match
  • 빈 자리에 자동으로 null을 입력하여 값이 없음을 나타냄

FULL OUTER JOIN with WHERE

 

FULL OUTER JOIN with WHERE

 

  • INNER JOIN과 완전히 대치되는 개념
    SELECT * FROM table_a
    FULL OUTER JOIN table_b
    ON table_a.col_match = table_b.col_match
    WHERE table_a.id IS null 
    OR table_b.id IS null
    

LEFT OUTER JOIN

LEFT OUTER JOIN

  • 왼쪽 테이블에 있는 레코드 셋을 출력, 오른쪽 테이블에 없다면 null로 채움
  • 대칭이 아님, 순서가 중요하다.
  • LEFT OUTER JOIN = LEFT JOIN
SELECT * FROM table_a
LEFT OUTER JOIN table_b
ON table_a.col_match = table_b.col_match

WHERE를 사용하여 table_a에만 있는 레코드를 가져올 수 있음

SELECT * FROM table_a
LEFT OUTER JOIN table_b
ON table_a.col = table_b.col
WHERE table_b.id IS null

RIGHT JOIN

  • 기본적으로 LEFT JOIN과 동일하지만, 테이블이 서로 바뀐다는 점에서만 다름
  • RIGHT OUTER JOIN = RIGHT JOIN

UNION

  • 2개 이상의 SELECT문을 합칠 수 있음
  • 여러번 사용하여 더 많은 테이블을 붙일 수 있음
  • UNION은 두 결과를 직접 붙인다는 차이
  • 열이 바로 위에 쌓일 수 있게끔 논리적인 구조가 같아야함
SELECT column_name FROM table1
UNION
SELECT columns_name FROM table2

 

참고자료

벤다이어그램으로 배우는 JOINS

 

A Visual Explanation of SQL Joins

I thought Ligaya Turmelle's post on SQL joins [http://www.khankennels.com/blog/index.php/archives/2007/04/20/getting-joins] was a great primer for novice developers. Since SQL joins appear to be set-based, the use of Venn diagrams [http://en.wikipedia.org/

blog.codinghorror.com

JOINS 예제

 

Talend | A Complete, Scalable Data Management Solution

Talend Data Fabric offers a scalable, cloud-independent data fabric that supports the full data lifecycle, from integration and quality to observability and governance.

www.talend.com

https://www.udemy.com/course/best-sql-2022/