MYSQL 코딩테스트 문법정리

강신현·2023년 4월 4일
0

SELECT, FROM

SELECT ANIMAL_ID, NAME FROM ANIMAL_INS;
SELECT ANIMAL_ID, NAME AS '이름' FROM ANIMAL_INS;

WHERE

- AND, OR

SELECT userID, Name FROM usertbl WHERE birthYear >= 1970 AND height >= 182;
SELECT userID, Name FROM usertbl WHERE birthYear >= 1970 OR height >= 182;

- BETWEEN A AND B

SELECT name, height FROM usertbl WHERE height BETWEEN 180 AND 183;

- IN ('A','B' ... 'C')

SELECT name, addr FROM usertbl WHERE addr IN ('경남','전남','경북');

- LIKE '%~%'

SELECT name, height FROM usertbl WHERE name LIKE '김%';

ORDER BY

  • 동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회
  • 단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 조회
SELECT ANIMAL_ID, NAME, DATETIME FROM ANIMAL_INS ORDER BY NAME, DATETIME DESC;

LIMIT

  • 동물 보호소에 가장 먼저 들어온 동물의 이름을 조회
SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME LIMIT 1;

SUM, MAX, MIN

  • 가장 최근에 들어온 동물은 언제 들어왔는지 조회
SELECT MAX(DATETIME) AS '시간' FROM ANIMAL_INS;
  • 가장 먼저 들어온 동물은 언제 들어왔는지 조회
SELECT MIN(DATETIME) AS '시간' FROM ANIMAL_INS;

GROUP BY

  • 고양이와 개가 각각 몇 마리인지 조회
  • 이때 고양이를 개보다 먼저 조회
SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) AS 'count' FROM ANIMAL_INS GROUP BY ANIMAL_TYPE ORDER BY ANIMAL_TYPE;

- HAVING

  • 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회
  • 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회
SELECT NAME, COUNT(NAME) AS 'COUNT' FROM ANIMAL_INS GROUP BY NAME HAVING COUNT >= 2 ORDER BY NAME;

CASE WHEN


TRUNCATE(숫자,버릴 자릿수)

  • 만원 단위의 가격대 별로 상품 개수를 출력
  • 이때 컬럼명은 각각 컬럼명은 PRICE_GROUP, PRODUCTS로 지정
  • 가격대 정보는 각 구간의 최소금액(10,000원 이상 ~ 20,000 미만인 구간인 경우 10,000)으로 표시
  • 가격대를 기준으로 오름차순 정렬
SELECT TRUNCATE(PRICE, -4) AS PRICE_GROUP, COUNT(*) AS PRODUCTS
FROM PRODUCT GROUP BY PRICE_GROUP ORDER BY PRICE_GROUP;

LEFT JOIN

https://school.programmers.co.kr/learn/courses/30/lessons/133026

SELECT INGREDIENT_TYPE, SUM(TOTAL_ORDER) AS TOTAL_ORDER
FROM FIRST_HALF LEFT JOIN ICECREAM_INFO ON FIRST_HALF.FLAVOR = ICECREAM_INFO.FLAVOR
GROUP BY INGREDIENT_TYPE;

IS NULL

  • 이름이 없는 동물의 ID를 조회
SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NULL;
  • 이름이 있는 동물의 ID를 조회
SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NOT NULL;

DATE_FORMAT

- YYYY/mm/dd 포맷

SELECT DATE_FORMAT('20200405','%Y/%m/%d')
-> 2020/04/05

- YYYY-mm-dd 포맷

SELECT DATE_FORMAT('20200405','%Y-%m-%d')
-> 2020-04-05

- 영어 표기로 변환

SELECT DATE_FORMAT('2020-04-05', '%W %M %Y');
-> Sunday April 2020

- 여러 지정값

DATE_FORMAT 지정값


DATEDIFF

  • 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서
  • 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여 대여기록을 출력
  • 결과는 대여 기록 ID를 기준으로 내림차순 정렬
SELECT
    HISTORY_ID,
    CAR_ID,
    DATE_FORMAT(START_DATE, '%Y-%m-%d') AS START_DATE,
    DATE_FORMAT(END_DATE, '%Y-%m-%d') AS END_DATE,
    CASE
        WHEN DATEDIFF(END_DATE, START_DATE) + 1 >= 30 THEN "장기 대여"
        ELSE "단기 대여"
    END AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE BETWEEN '2022-09-01' AND '2022-09-30'
ORDER BY HISTORY_ID DESC;
  • 유의할 점은 오늘 대여하고 오늘 반납해도 대여 기간은 하루이기 때문에
    (END_DATE - START_DATE ) + 1 >= 30으로 계산해야 함

Reference

https://school.programmers.co.kr/learn/challenges?tab=sql_practice_kit
https://paris-in-the-rain.tistory.com/100

profile
땅콩의 모험 (server)

0개의 댓글