# 스키마와 테이블 생성
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', '대전');
| department | location |
|---|---|
![]() | ![]() |
- 두 테이블의 모든 경우의 수를 조합한 데이터가 필요할 때
SELECT 컬럼명 FROM 테이블1 CROSS JOIN 테이블2 WHERE 검색조건;
SELECT * FROM location CROSS JOIN department;
department 의 3개 데이터와 location 의 4개 데이터의 모든 조합인 3 * 4 = 12개의 데이터가 생성된 모습이다.- 출력
- 실제 데이터베이스에 생성되는 테이블은 아니지만 쿼리 실행 결과를 테이블처럼 활용하기 위한 논리적인 테이블을 만들때 활용
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;
- 자신과의 내부조인
- 동일한 테이블 사용
- 반드시 별칭을 사용
사용 목적:
1) 계층구조(트리구조) 표현
2) 같은 테이블 내 비교
SELECT A.dptName, B.dptName
FROM department AS A
INNER JOIN department AS B
ON A.dptNo = B.dptNo
- 출력
