프로그래밍공부노트

Day 22 - DB(JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN(ORACLE DB만) 본문

DB

Day 22 - DB(JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN(ORACLE DB만)

SANGJIN-YU 2021. 3. 13. 15:09
반응형

57. 조인(Join)

 

정규화 하면 수정 삭제 입력에는 성능이 확실히 좋아지지만 SELECT에서는 살짝 떨어질 수도 있음

 

선행테이블이 무엇이냐가 중요

 

--INNER JOIN
SELECT *
	FROM T1 t1, T2 t2
    WHERE t1.GROUP = t2.GROUP;
    

SELECT *
	FROM T1 t1 JOIN T2 t2
    ON t1.GROUP = t2.GROUP;
    
--LEFT OUTER JOIN
SELECT *
	FROM T1 t1, T2 t2
  	  WHERE t1.GROUP = t2.GROUP(+);
   
SELECT *
	FROM T1 t1 LEFT JOIN T2 t2
   	 ON t1.GROUP = t2.GROUP; 

--RIHGT OUTER JOIN
SELECT *
	FROM T2 t2, T1 t1
   	 WHERE t1.GROUP = t2.GROUP(+);

SELECT *
	FROM T1 t1 RIGHT JOIN T2 t2
   	 ON t1.GROUP = t2.GROUP;

-- FULL OUTER JOIN -- (ORACLE에만 있는 문법, 다른 DB에서는 SET OPERATION UNION)

SELECT *
	FROM T1 t1 FULL JOIN T2 t2
 	   ON t1.GROUP = t2.GROUP;
    
    
-- CROSS JOIN (Cartessian Product)
SELECT *
	FROM T1 t1, T2 t2;

SELECT *
	FROM T1 t1 CROSS JOIN T2 t2;
    
    

 

 위의 JOIN을 아래의 문법을 사용해서 표현한다면


  JOIN문법에서 사용되는 특수 문법

SELECT *
	FROM T1 t JOIN T2 t2 
	ON t."GROUP" = t2."GROUP" ;

-- USING은 하나로만 출력
-- ORA-25154: column part of USING clause cannot have qualifie
-- 따라서 컬럼 혹은 ALIAS의 명은 사용하면 안된다
SELECT t."GROUP" 
	FROM T1 t JOIN T2 t2 
	USING ("GROUP")
	WHERE ID = 'G01';

 

 1) USING(컬럼)

    - JOIN의 결과는 테이블이 같은 키값으로 생성, 같은 컬럼이 두번 나오게 됨, 컬럼의 순서가 출력되는 순서와 같음

    - USING을 사용하면 중복되는 컬럼은 한번 나오고, 맨 앞에 위치 -> AMBIGUOUSLY 

SELECT *
	FROM T1 t JOIN T2 t2 
	USING ("GROUP");

 

 2) NATURAL JOIN

    - 자동으로 JOIN의 컬럼을 선택해서 JOIN을 진행해 줌

    - 컬럼명이 같고 타입과 크기가 같으면 모두 대상으로 인식

-- 모든 JOIN 조건이 맞다면 조인의 대상으로 하는 NATURAL JOIN
SELECT *
	FROM T1 t NATURAL JOIN T2 t2;

CTAS CREATE TABLE AS SELECT

 

-- CTAS 문법 CREATE TABLE AS SELECT AS뒤에 SELECT절을 테이블로 만든다
-- 제약조건이 다 사라지고 NOT NULL만 남음, 값을 모두 복사하고, 타입(크기)도 복사

 

반응형