본문 바로가기
Problem Solving/Programmers

[ SQL 고득점 kit ] String, Date - mysql

by IM조이 2021. 6. 26.

01 루시와 엘라 찾기

SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME in ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty');

 

 

02 이름에 el이 들어가는 동물 찾기

mysql의 대소문자 구분여부

  • 컬럼, 테이블명 : 대소문자 구분O
  • VARCHAR,TEXT같은 데이터 : 대소문자 구분X
    • 따라서 이 문제의 경우 대소문자 지정을 따로 해주지 않아도 풀리기는 한다(아래처럼)
    • SELECT ANIMAL_ID, NAME 
      FROM ANIMAL_INS
      WHERE 
          ANIMAL_TYPE = 'Dog'
          AND NAME LIKE '%el%'
      ORDER BY NAME;
      만약 mysql을 쓰지 않을때는 lower, upper를 사용해주면 된다.(mysql에서도 먹힌다)
    • SELECT ANIMAL_ID, NAME 
      FROM ANIMAL_INS
      WHERE 
          ANIMAL_TYPE = 'Dog'
          AND LOWER(NAME) LIKE "%el%"
      ORDER BY NAME;

 

 

하지만 대소문자를 구분해 가져와야 할 때도 있는데, 이 경우에는 WHERE 절에 BINARY 함수를 추가해주면 된다
- SELECT ~ FROM ~ WHERE BINARY NAME LIKE '%EL%'

BINARY
- 함수, 대소문자를 구별해서 데이터를 불러옴
- WHERE 컬럼명 = BINARY("hello") 라면 값이 소문자인 hello만 불러옴
- WHERE 컬럼명 = "hello" 라면 값이 hello, HELLO 인 것을 모두 불러온다

 

 

03 중성화 여부 파악하기
IF절이나 CASE를 활용해 두 가지로 풀이할 수 있다

(1) IF(조건,조건을만족할경우,조건을만족하지않을경우)

SELECT ANIMAL_ID, NAME, 
    IF(SEX_UPON_INTAKE LIKE 'Neutered%' OR SEX_UPON_INTAKE LIKE 'Spayed%','O','X') AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

(2) CASE WHEN 조건 THEN 조건을만족할경우 ELSE 조건을만족하지않을경우 END (AS 출력할 컬럼명) : 괄호생략가능

SELECT ANIMAL_ID, NAME, 
    CASE
        WHEN SEX_UPON_INTAKE NOT LIKE "Intact%"
        THEN "O"
        ELSE "X"
    END AS "중성화"
FROM ANIMAL_INS 
ORDER BY ANIMAL_ID;

 

04 오랜 기간 보호한 동물(2)

SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_OUTS O
LEFT JOIN ANIMAL_INS I
ON O.ANIMAL_ID = I.ANIMAL_ID
ORDER BY O.DATETIME-I.DATETIME DESC
LIMIT 2;

만약 join이 익숙하지 않다면, 이 문제는 두 테이블을 그냥 불러와서 한 테이블의 결과만 가져와도 된다

SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I, ANIMAL_OUTS O
WHERE I.ANIMAL_ID = O.ANIMAL_ID
ORDER BY O.DATETIME - I.DATETIME DESC
LIMIT 2


05 DATETIME에서 DATE로 형변환

SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, '%Y-%m-%d') AS '날짜'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

형변환 또는 날짜출력 형식은 클릭 을 참고

 

MySQL :: MySQL 8.0 Reference Manual :: 12.7 Date and Time Functions

12.7 Date and Time Functions This section describes the functions that can be used to manipulate temporal values. See Section 11.2, “Date and Time Data Types”, for a description of the range of values each date and time type has and the valid formats

dev.mysql.com

 

댓글