[MySQL] JOIN ②

Hunie_07·2026년 2월 11일

SQL

목록 보기
13/18
post-thumbnail

📌 JOIN


데이터베이스 생성

# 스키마와 테이블 생성
CREATE SCHEMA exdb;
USE exdb;
CREATE TABLE department(
	dptNo VARCHAR(5),
    dptName VARCHAR(10)
);

CREATE TABLE location(
	locNo VARCHAR(5),
    locName VARCHAR(10)
);
INSERT INTO department (dptNo, dptName)
	VALUES('1', '영업'), ('2', '마케팅'), ('3', '인사');

INSERT INTO location (locNo, locName)
	VALUES('01', '서울'), ('02', '부산'), ('03', '인천'), ('04', '대전');
departmentlocation

3️⃣ CROSS JOIN (크로스 조인)

  • 두 테이블의 모든 경우의 수를 조합한 데이터가 필요할 때
    SELECT 컬럼명 FROM 테이블1 CROSS JOIN 테이블2 WHERE 검색조건;
SELECT * FROM location CROSS JOIN department;
  • department 의 3개 데이터와 location 의 4개 데이터의 모든 조합인 3 * 4 = 12개의 데이터가 생성된 모습이다.

- 출력


4️⃣ CTE (공통 테이블 표현식)

  • 실제 데이터베이스에 생성되는 테이블은 아니지만 쿼리 실행 결과를 테이블처럼 활용하기 위한 논리적인 테이블을 만들때 활용
WITH [테이블명 (열이름1, 열이름2, ...)
AS
(
	<SELECT>
)
SELECT [열리스트] FROM [테이블명];
  • 이때, CTE WITH 에서 지정한 컬럼과 AS SELECT 에서 지정한 컬럼 개수는 같아야한다. 다를 경우 아래와 같은 오류가 발생한다.
In definition of view, derived table or common table expression, SELECT list and column names list have different column counts.
WITH loc_dpt (locNo, locName, dptNo, dptName)
AS
(
	SELECT locNo, locName, dptNo, dptName 
    FROM location 
    CROSS JOIN department
)
SELECT * FROM loc_dpt;

5️⃣ SELF JOIN (셀프 조인)

  • 자신과의 내부조인
  • 동일한 테이블 사용
  • 반드시 별칭을 사용
  • 사용 목적:

    1) 계층구조(트리구조) 표현

    • 조직도(상사-부하 관계)
    • 카테고리(대분류-중분류-소분류)
    • 부품구조

    2) 같은 테이블 내 비교

    • 같은 부서내 다른 직원 정보 비교
    • 같은 제품군에서 가격 비교

SELECT A.dptName, B.dptName
FROM department AS A
INNER JOIN department AS B
ON A.dptNo = B.dptNo

- 출력

0개의 댓글