[TIL] SQL - JOIN / CTE

한울·2025년 12월 18일

Core concepts

JOIN

  • 2개 이상의 테이블을 가로로 연결한다.
  • 공통적으로 존재하는 컬럼이 있다면 그 컬럼이 키가 되고, 테이블을 연결할 수 있다.

JOIN 종류
사진 출처

(INNER) JOIN

  • 두 테이블의 공통 요소만 연결
 SELECT
    a.col1,
    a.col2,
    b.col1,
    b.col2
 FROM 
    table1 AS a
 JOIN
    table2 AS b
 ON
    a.key = b.key # Alias 사용 가능
  • 테이블 이름에 Alias을 정의해줄 수 있다.
  • ON: JOIN 시 사용하는 키워드
  • WHERE JOIN 후 최종 테이블 후에서 필터링한다.

LEFT/RIGHT (OUTER) JOIN

  • 왼쪽/오른쪽 테이블 기준으로 연결
  • LEFT와 RIGHT JOIN은 사실상 같은 개념이다.
 SELECT
    a.col1,
    a.col2,
    b.col1,
    b.col2
 FROM 
    table1 AS a
 LEFT JOIN
    table2 AS b
 ON
    a.key = b.key # Alias 사용 가능

FULL (OUTER) JOIN

  • 양쪽 기준으로 연결
SELECT
	a.col1,
	a.col2,
	b.col1,
	b.col2
FROM 
	table1 AS a
FULL JOIN
	table2 AS b
ON
	a.key = b.key # Alias 사용 가능

CROSS JOIN

  • 두 테이블의 모든 행을 곱한다.
SELECT
	a.col1,
	a.col2,
	b.col1,
	b.col2
FROM 
	table1 AS a
CROSS JOIN
	table2 AS b

CTE

  • Common Table Expression의 약자
  • 서브쿼리를 많이 사용할 경우 가독성이 하락하는데, 이 때 사용할 수 있는 문법이 CTE이다.
  • 한 번 정의한 후 여러 구절에서 사용 가능하다.
WITH temp_table AS (
	SELECT 
		col1, 
        col2, 
        col3
	FROM
		table
)

SELECT
	col1, 
    col2
FROM
	temp_table

느낀 점

코딩 테스트 문제는 출력 예시가 주어져 있어 생각의 출발점이 비교적 명확한 반면, 줄글로 된 문제는 그 기준이 없어서 더 어렵게 느껴진다.
오늘 문제를 풀면서 처음에는 문해력 부족인가 싶기도 했지만, 돌이켜보니 문제를 충분히 침착하게 해석하기 전에 바로 쿼리를 떠올리려 했던 것이 원인이었다는 걸 깨달았다.
앞으로는 줄글 문제일수록 결과 테이블을 먼저 그려보고, 어떤 단위를 기준으로 묶이는지부터 정리하는 습관을 들여야겠다고 느꼈다.

그럼에도 나 자신에게 칭찬해주고 싶은 게 있다면 CTE의 사용이 익숙해지기 시작한 것이다. 그동안 코딩 테스트에서는 거의 사용하지 않았던 CTE를 수업 시간 문제 풀이 과정에서 자연스럽게 활용할 수 있어졌다.

오늘 느꼈던 부족한 점을 개선해나가자.

profile
데이터 공부

0개의 댓글