반응형
[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편)
반응형
'SQL' 카테고리의 다른 글
[SQL] Expected one result (or null) to be returned by selectOne(), but found: 2 해결 방법 (0) | 2022.06.22 |
---|---|
[SQL] LIKE 검색, NULL 함수, GROUP BY - HAVING (간단한 설명) (0) | 2022.04.14 |
[SQL] SQL, CRUD 기초 (간단한 설명) (0) | 2022.04.07 |
[SQL] DBMS, SQL 기초 (간단한 설명) (0) | 2022.03.31 |
[SQL] JOIN 알기 쉽게 설명 (INNER, LEFT/RIGHT/FULL OUTER) (0) | 2022.02.04 |