<SQL - 0005> subquery, with, substring, case

개발일지·2023년 3월 3일
0

SQL

목록 보기
5/5
post-thumbnail


SUBQUERY

SQL 문장 내부에 포함된, 또다른 SQL 문장을 내포하는 것이다.


주로 WHERE, SELECT, FROM 절에서 사용된다.

  • WHERE 절 에서의 사용
    특정 조건에 만족하는 데이터를 조회하는데 사용된다.
SELECT column_name
FROM table_name
WHERE column_name operator (SELECT column_name FROM table_name WHERE condition);

  • SELECT 절 에서의 사용
    특정 데이터를 계산하거나 조회하는데 사용된다.
SELECT column_name, (
	SELECT column_name FROM table_name WHERE condition
) AS alias_name
FROM table_name
WHERE condition;

  • FROM 절 에서의 사용
    임시 테이블을 생성하여 JOIN 하는데 사용된다.
SELECT column_name 
FROM (SELECT column_name FROM table_name WHERE condition) AS alias_name 
WHERE condition;

위와 같이 서브쿼리를 사용하면, 데이터를 더욱 정확하고 효율적으로 조회할 수 있다.



WITH

CTE(Common Table Expression) 라고도 하며,
하나 이상의 임시 테이블을 만들어서 여러 쿼리에서 재사용 가능한 쿼리를 생성할 때 사용된다.


WITH 의 기본 문법

WITH cte_name (column_name1, column_name2, ...) AS (
   subquery
)
SELECT column_name1, column_name2, ...
FROM table_name
JOIN cte_name
ON join_condition;

이후에 나오는 SELECT 문에서는 정의된 WITH 를 참조할 수 있으며,
다른 테이블과 JOIN 할 수도 있다.

하나의 쿼리에서 여러 개의 서브쿼리를 사용하지 않아도 되어 가독성을 높일 수 있고, 중복되는 코드를 줄일 수 있다.



SUBSTRING

문자열에서 지정된 위치에서 시작하여 지정된 길이의 하위 문자열을 반환합니다.
일반적으로 문자열의 일부분을 추출하고자 할 때 사용합니다.


SUBSTRING 의 기본 문법

SUBSTRING(string, start_position, length)

string : 추출하고자 하는 문자열.
start_position : 하위 문자열이 시작되는 위치. 첫 번째 문자의 위치는 1.
length : 추출하고자 하는 문자열의 길이. 생략하면 문자열 끝까지 추출.

예를 들어, 문자열 'https://velog.io/@ra0n' 에서 'velog' 만 추출하고자 한다면,

SELECT SUBSTRING('https://velog.io/@ra0n', 9, 5);
문자열에서 9번째 위치부터 시작하여 5개의 문자를 추출하므로 'velog' 라는 하위 문자열을 추출한다.

SUBSTRING_INDEX 의 기본 문법

SUBSTRING_INDEX(string, delimiter, count)
주어진 문자열을 특정 delimiter(구분자) 를 기준으로 잘라내어 원하는 부분 문자열을 추출한다.
  • string : 잘라내고자 하는 문자열.
  • delimiter : 구분자.
  • count : 반환할 문자열의 위치 지정.
    count > 0 : delimiter 기준으로 앞에서부터 count 번째 delimiter 까지의 문자열.
    count = 0 : 원래 문자열 전체.
    count < 0 : delimiter 기준으로 뒤에서부터 count 번째 delimiter 까지의 문자열.

예를 들어, 문자열 '개발일지아닐지' 에서
첫번째 '지' 를 기준으로 앞에 있는 문자열'개발일' 을 추출하고자 한다면,

SELECT SUBSTRING_INDEX('개발일지아닐지', '지', 1);
'1' 대신 '-2' 를 넣었을때는 '뒤에서부터 2번째 지' (즉, 문자열의 첫번째 지) 뒤의 '아닐지' 가 추출되게 된다.


CASE

조건에 따라 다른 결과를 반환하는 SQL 구문입니다. 일반적으로 SELECT 문에서 사용되며, 기본적으로 IF-THEN-ELSE 구문과 유사한 역할을 합니다.


CASE 의 기본 문법

SELECT column_name, 
  CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    WHEN condition3 THEN result3
    ELSE default_result
    END AS alias_name
FROM table_name;
  • column_name : 조건에 따라 다른 결과를 반환할 열 이름.
  • WHEN condition1, condition2, condition3 ... : column_name 에 적용될 조건.
  • THEN result1, result2, result3 ... : 조건이 참일 경우의 값.
  • ELSE default_result : 모든 조건이 거짓일 경우의 값.

CASE 문은 중첩해서 사용할 수 있으며, 다양한 함수와 함께 사용될 수도 있다.

예를 들어, 연도별로 판매 총액을 계산하고자 할 때는 다음과 같은 구문을 사용할 수 있다.

SELECT
    YEAR(sales_date) AS sales_year,
    SUM(sales_amount) AS total_sales,
    CASE
        WHEN SUM(sales_amount) >= 1000000 THEN 'Large'
        WHEN SUM(sales_amount) >= 500000 THEN 'Medium'
        ELSE 'Small'
    END AS sales_level
FROM
    sales_table
GROUP BY
    YEAR(sales_date)
ORDER BY
    YEAR(sales_date);
데이터를 보다 효과적으로 분류하고, 원하는 조건에 따라 결과를 출력할 수 있다.


profile
아닐지

0개의 댓글