SQL과 데이터베이스 - 조인과 집계 데이터 : CROSS JOIN
카테고리 : SQL >> Sqlgrammar
CROSS JOIN
이 학습은 패스트캠퍼스의 올인원 패키지 : 모두를 위한 SQL/DB 강의를 듣고 복습하는 내용입니다.
두개의 테이블의 CATESIAN PRODUCT 연산의 결과를 출력한다. 데이터 복제에 많이 쓰이는 기법이다. (CATESIAN PRODUCT는 곱집합)
- 참고 : CATESIAN PRODUCT
CROSS 조인 실습
● 실습 준비
: CROSS_T1, CROSS_T2 테이블 만들기
CREATE TABLE CROSS_T1
(
LABEL CHAR(1) PRIMARY KEY
);
CREATE TABLE CROSS_T2
(
SCORE INT PRIMARY KEY
);
INSERT INTO CROSS_T1 (LABEL)
VALUES
('A'),
('B');
COMMIT;
INSERT INTO CROSS_T2 (SCORE)
VALUES
(1),
(2),
(3);
COMMIT;
SELECT * FROM CROSS_T1;
SELECT * FROM CROSS_T2;
● 기본 실습
SELECT
*
FROM CROSS_T1
CROSS JOIN
CROSS_T2
ORDER BY LABEL
;
-> CROSS_T1과 CROSS_T2를 CROSS 조인할 결과 출력
심화 실습
● 예시1
: 아래 3개의 SQL문은 같은 위의 SQL문과 같은 결과이다.
SELECT
*
FROM
CROSS_T1,
CROSS_T2
ORDER BY LABEL;
-----------------------------------
SELECT
*
FROM
CROSS_T1
INNER JOIN CROSS_T2
ON CROSS_T2 = CROSS_T2
ORDER BY LABEL;
-----------------------------------
SELECT
*
FROM
CROSS_T1
INNER JOIN CROSS_T2
ON CROSS_T1 = CROSS_T1
ORDER BY LABEL;
-> SQL문의 목적이 집합을 출력하는 것이다. 정보(결과 집합)가 같다면 SQL문 자체는 다르더라도 동일한 SQL문이라고 볼 수 있다.
● 예시2
: 아직 배우지 않은 SQL문 (이렇게 쓴다. 예시)
SELECT LABEL,
CASE WHEN LABEL = 'A' THEN sum(score)
WHEN LABEL = 'B' THEN sum(score) * -1
ELSE 0
END AS calc
FROM CROSS_T1
CROSS JOIN
CROSS_T2
GROUP BY LABEL
ORDER BY LABEL
;
-> 이렇게 원하는 결과를 SQL문으로 출력할 수 있어야 한다!