[프로그래머스] SQL 고득점 Kit 정리

Jang Seowoo·2022년 3월 30일
1
post-thumbnail

프로그래머스 SQL 고득점 Kit를 풀면서 몰랐던 부분들을 정리한 내용입니다.

1. IFNULL

해당 컬럼의 값이 NULL을 반환할 때, 다른 값으로 출력

SELECT IFNULL(컬럼명, "Null일 경우 대체 값") FROM 테이블명

2. CASE

해당 컬럼의 값을 조건식을 통해 True, False를 판단하여 조건에 맞게 컬럼의 값을 변환

CASE 
    WHEN 조건식1 THEN1
    WHEN 조건식2 THEN2
    ...
    ELSE 조건에 맞는경우가 없는 경우 실행할 식
END
CASE 컬럼명
    WHEN 비교값 THEN1
    WHEN 비교값 THEN2
    ...
    ELSE 조건에 맞는경우가 없는 경우 실행할 식
END

3. HAVING

GROUP BY절과 함께 사용되는 조건절

SELECT  컬럼, 그룹 함수(컬럼)
FROM 테이블명
GROUP BY Group대상
HAVING 그룹 함수 포함 조건

4. DATE_FORMAT

날짜를 지정한 형식으로 출력

SELECT DATE_FORMAT(날짜시간값, 원하는포맷) FROM 테이블명

원하는 포맷

5. UNION

두 개 이상의 테이블을 묶는 방법

SELECT name FROM my_table1
UNION
SELECT name FROM my_table2
UNION
SELECT name FROM my_table3;

규칙

  • 하나의 ORDER BY만 사용할 수 있다.
  • 각 SELECT의 열수, 표현식가 같아야 한다.
  • SELECT 문들 끼리 순서는 상관없다.
  • 유니온을 한 결과가 중복되면 하나만 나온다. (DEFAULT)
  • 열의 타입은 같거나 반환 가능한 형태여야 한다.
  • 중복값을 나타내고 싶다면 UNION ALL

UNION (DISTINCT) vs UNION ALL

  • UNION은 중복된 ROW를 제거한다.
  • UNION ALL은 중복된 ROW를 제거하지 않는다.
  • 따라서 UNION ALL이 UNION보다 속도가 빠르다.

6. WITH

가상테이블(데이터베이스에 저장되는 테이블은 아님) 생성

WITH 가상테이블명 (컬럼명1, 컬럼명2) AS
    SELECT 쿼리

7. WITH RECURSIVE

서브쿼리에서 스스로를 참조하는 가상테이블 생성

WITH RECURSIVE 가상테이블명 (n) AS
(
    SELECT 1 - 최초 행 반환
    UNION ALL
    SELECT n + 1 FROM 가상테이블명 WHERE n < 5 - 추가 행 반환
)
SELECT * FROM 가상테이블명;
  • 두번째 SELECT문에서 가상테이블명을 참조하기 때문에 재귀적으로 볼 수 있다.
  • 두 SELECT문을 UNION ALL을 사용해 합친다.

8. CAST & CONVERT

형 변환

CAST(변환하고싶은 데이터 AS 데이터형식[(길이)])
CONVERT(변환하고싶은 데이터, 데이터형식[(길이)])

ex.
SELECT CAST(20211014 AS DATE);
> 2021-10-14

SELECT CONVERT(20211014, DATE);
> 2021-10-14

9. INNER JOIN vs INTERSECT

INNER JOIN

내부 조인

SELECT 컬럼명
FROM 테이블명1
INNER JOIN 테이블명2
ON 조인 조건
WHERE 검색조건
  • INNER JOIN은 컬럼이 어느 한 테이블에서 중복된 경우 중복된 값을 반환한다.
  • 따라서 JOIN은 두 개 이상의 테이블을 결합하기 때문에 결합하는 테이블들이 동일한 열을 가지고 있다면 '테이블이름.열이름' 형식으로 테이블명을 명시해줘야 한다.
  • INNER JOIN은 NULL을 반환하지 않는다.
  • 일반적으로 제한된 열 집합에서 일치하며 두 테이블 중 하나에서 0개 이상의 행을 반환할 수 있는 연산자이다.

INTERSECT

교집합

SELECT 컬럼명 FROM 테이블명1
INTERSECT
SELECT 컬럼명 FROM 테이블명2
  • INTERSECT는 중복을 제거한다.
  • INTERSECT는 NULL을 반환한다.
  • 두 집합 간의 완전한 행을 비교하는 집합 기반 연산자로, 두 집합 중 작은 집합보다 많은 행을 반환할 수 없다.


참고자료

profile
https://devseowoo.notion.site/Seowoo-Portfolio-b21365c3477345818913e8d8fe2e3b90

0개의 댓글

관련 채용 정보