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문으로 출력할 수 있어야 한다!
