SQL

[SQL] JOIN 개념 및 종류, VIEW(뷰), SELECT INTO, INSERT INTO SELECT, CASE ... WHEN ... END

15호의 개발자 2022. 4. 11. 12:00
반응형

[SQL] JOIN 개념 및 종류, VIEW(뷰), SELECT INTO, INSERT INTO SELECT, CASE ... WHEN ... END

 


 

JOIN의 개념

  • 서로 다른 테이블을 공통 컬럼을 기준으로 합치는(결합하는) 테이블 단위 연산이다.
  • 조인의 결과 테이블은 이전 테이블의 컬럼 수의 합과 같다.
  • 조인시 서로 다른 테이블에 같은 컬럼명이 존재하면 구분을 위해 테이블명.컬럼명으로 사용해서 표시한다.
SELECT * FROM 테이블1 JOIN 테이블2 ON 테이블1.컬럼명 = 테이블2.컬럼명 ...

 

 

JOIN의 종류

  • 조인 시 NULL값을 허용 여부에 따라 내부조인(불가)와 외부조인(허용)으로 구분한다.
INNER JOIN 조인 시 NULL값을 허용하지 않음
(NULL값을 가진 레코드는 조인 결과에서 빠짐)
LEFT JOIN 조인 시 JOIN의 왼쪽 테이블의 NULL값을 포함해서 표시
RIGHT JOIN 조인 시 JOIN의 오른쪽 테이블의 NULL값을 포함해서 표시
FULL JOIN MySQL은 지원하지 않음

 

 

ALIAS (별명)

  • SQL 쿼리 결과 생성시 컬럼명에 대한 별명을 사용해 표시하는 기능
  • 조인할 때 많이 사용한다.
SELECT 테이블명1.컬럼명1 AS 별명1, 테이블명2.컬럼명2 AS 별명2 FROM ...

 

 

VIEW (뷰)

  • SQL 쿼리의 결괏값을 임시 테이블로 저장해서 사용할 수 있는 기능이다.
  • 사용 용도가 끝나면 명시적으로 삭제해야 한다. (DROP VIEW ...)
  • 한 번 VIEW가 생성됐다고 내용이 변하지 않는 것은 아니다. 뷰 내부 컬럼이 조건에 따라 변하기도 하고 변하지 않기도 한다. 컬럼이 바로 매핑된 경우는 원 테이블이 변경되면 뷰도 따라서 변경되지만, 가공을 거쳐서 뷰가 생성되었다면 뷰 내용은 변경되지 않는다.
CREATE VIEW 뷰명 AS SELECT ...

-- VIEW 삭제
DROP VIEW 뷰명

 

 

SELECT INTO

  • SELECT를 하고 나서 그 결과를 테이블에 INSERT 한다는 의미
  • 쿼리 결과로 새로운 테이블을 생성하는 것
  • MySQL에서는 SELECT INTO가 아니고 CREATE TABLE 테이블명 SELECT * FROM 테이블명
  • 기존에 존재하지 않는 테이블이 새로 생성된다. (일종의 뷰와 동일한 효과)
CREATE TABLE 테이블명 SELECT * FROM 테이블명

 

 

INSERT INTO SELECT

  • 쿼리 결과를 기존의 테이블에 추가한다. (기존 테이블이 존재해야 한다.)
  • SELECT하는 테이블과 INSERT하는 테이블은 동일한 구조를 가져야 한다.
  • 두 개의 별도 쿼리를 하나로 합친다.
INSERT INTO 테이블명1 SELECT * FROM 테이블명2 WHERE 조건절 ...

 

 

CASE ... WHEN ... END

  • SELECT나 INSERT 도중에 어떤 조건에 맞는 결괏값을 찾아서 쿼리를 다르게 수행하고 싶은 경우에 이용한다.
  • SQL의 조건문(if/switch문)에 해당한다.
  • 조건값에 따른 처리를 구분할 수 있다.
CASE WHEN 조건값1 THEN ...
     WHEN 조건값2 THEN ...
     ELSE ...
END

 

ex. city 테이블에서 도시명(Name)이 3자가 넘어가는 경우에 앞 세 자를 대문자로 출력하고, 도시의 인구를 같이 표시하시오.

SELECT CASE WHEN LENGTH(Name) >  3 THEN UPPER(MID(Name, 1, 3))
            WHEN LENGTH(Name) <= 3 THEN UPPER(Name)
       END, Population FROM city;

 

 

 

 

(출처: 실습과 함께하는! 데이터베이스 MySQL편)

 

 

반응형