SQL 코딩테스트 준비

taehoyoon·2023년 10월 11일
0

코딩테스트

목록 보기
11/11
post-thumbnail

ORDER BY

DESC 내림차순

ASC 오름차순

SELECT FLAVOR, TOTAL_ORDER, SHIPMENT_ID
FROM FIRST_HALF
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID ASC;

섞어서 내림차순 정렬 후 중복값 오름차순 정렬 가능


LIKE

문자열 검색 패턴에 사용됨

% (백분율 기호):

0개, 1개 또는 여러 문자를 대체합니다.

예: LIKE '강원도%'는 "강원도"로 시작하는 모든 문자열을 의미합니다 (즉, "강원도" 다음에 0개 또는 여러 문자가 올 수 있습니다).

_ (언더스코어):

정확히 한 문자를 대체합니다.

예: LIKE '강원도_'는 "강원도" 다음에 정확히 한 문자가 오는 문자열을 의미합니다.

SELECT FACTORY_ID, FACTORY_NAME, ADDRESS
FROM FOOD_FACTORY
WHERE ADDRESS LIKE '강원도%'
ORDER BY FACTORY_ID ASC;

LIMIT

상위 몇 개

SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME ASC
LIMIT 1;

BETWEEN

범위 지정

SELECT COUNT(USER_ID) AS count
FROM USER_INFO
WHERE JOINED BETWEEN '2021-01-01' AND '2021-12-31'
AND AGE BETWEEN 20 AND 29;

COUNT

행 갯수 세기

SELECT COUNT(USER_ID) AS count

DISTINCT

중복된 값을 제거하고 고유한(unique) 값만 반환

SELECT DISTINCT column_name
FROM table_name;

COALESCE

주로 NULL 값을 다른 값으로 대체할 때 사용

SELECT PT_NAME, PT_NO, GEND_CD, AGE, COALESCE(TLNO, "NONE") AS TLNO
FROM PATIENT
WHERE AGE < 13 AND GEND_CD = "W"
ORDER BY AGE DESC, PT_NAME ASC;

AVG, ROUND

SELECT ROUND(AVG(DAILY_FEE), 0) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = "SUV"

FLOOR

소수점 아래를 버리기 위해 자주 사용하는 함수

FLOOR() 함수는 주어진 숫자보다 크지 않은 가장 가까운 정수로 숫자를 버립니다.

예를 들어:

  1. FLOOR(10.75)의 결과는 10입니다.
  2. FLOOR(10.1)의 결과도 10입니다.

CEIL

숫자를 올리는 경우에 사용하는 함수

  1. CEIL(10.75) 또는 CEILING(10.75)의 결과는 11입니다.
  2. CEIL(10.1) 또는 CEILING(10.1)의 결과도 11입니다.

DATE

DATE_FORMAT

SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
FROM BOOK
WHERE PUBLISHED_DATE BETWEEN '2021-01-01' AND '2021-12-31'
AND CATEGORY = '인문'
ORDER BY PUBLISHED_DATE ASC;

YEAR, MONTH, DAY

WHERE YEAR(DATE_OF_BIRTH) = 1992
AND MONTH(DATE_OF_BIRTH) = '03'
AND DAY(DATE_OF_BIRTH) = '12'

JOIN

SELECT F.FLAVOR
FROM FIRST_HALF AS F
JOIN ICECREAM_INFO AS I ON F.FLAVOR = I.FLAVOR
WHERE F.TOTAL_ORDER > 3000
AND I.INGREDIENT_TYPE = 'fruit_based'
ORDER BY F.TOTAL_ORDER DESC;

UNION

두 테이블 합치기

ORDER BY 못 붙임. UNION한 다음에 한번에 정렬 ㄱㄱ

SELECT DATE_FORMAT(SALES_DATE, "%Y-%m-%d") AS SALES_DATE,
PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE YEAR(SALES_DATE) = '2022'
AND MONTH(SALES_DATE) = '3'

UNION

SELECT DATE_FORMAT(SALES_DATE, "%Y-%m-%d") AS SALES_DATE,
PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE YEAR(SALES_DATE) = '2022'
AND MONTH(SALES_DATE) = '3'

ORDER BY SALES_DATE ASC, PRODUCT_ID ASC, USER_ID ASC;

CASE

조건문

SELECT BOARD_ID, WRITER_ID, TITLE, PRICE, 
CASE
    WHEN STATUS = 'SALE' THEN '판매중'
    WHEN STATUS = 'RESERVED' THEN '예약중'
    ELSE '거래완료'
END AS STATUS
FROM USED_GOODS_BOARD
WHERE CREATED_DATE = '2022-10-05'
ORDER BY BOARD_ID DESC;

LIMIT IN SUBQUERY

서브쿼리에서 LIMIT 사용하기

SELECT 
CONCAT("/home/grep/src/", BOARD_ID, "/", FILE_ID, FILE_NAME, FILE_EXT) AS FILE_PATH
FROM USED_GOODS_FILE
WHERE BOARD_ID IN (
    SELECT * FROM (SELECT BOARD_ID
    FROM USED_GOODS_BOARD
    ORDER BY VIEWS DESC
    LIMIT 1) AS A
)
ORDER BY FILE_ID DESC;
profile
어흥🦁

0개의 댓글