MySQL + Programmers_6

naughty _deer·2022년 4월 26일
0

MySQL

목록 보기
8/13
post-thumbnail

String, Date

문제 1. 루시와 엘라 찾기

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

문제 2. 이름에 el이 들어가는 동물 찾기

SELECT animal_id, name
FROM animal_ins
WHERE animal_type = 'Dog' and name LIKE '%EL%'
ORDER BY name

문제 3. 중성화 여부 파악하기

  1. CASE WHEN(A or B) THEN A' ELSE B' END
SELECT animal_id, name, 
CASE WHEN(sex_upon_intake LIKE '%neutered%' or sex_upon_intake LIKE '%spayed%') 
THEN 'O' ELSE 'X' END as '중성화'
FROM animal_ins
ORDER BY animal_id
  1. IF(A or B, A',B')
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

문제 4. 오랜 기간 보호한 동물(2)

  1. 정석(?)
SELECT O.animal_id, O.name
FROM ANIMAL_OUTS as O
LEFT JOIN ANIMAL_INS as I
ON O.animal_id = I.animal_id
WHERE O.DATETIME - I.DATETIME
ORDER BY O.DATETIME - I.DATETIME DESC
LIMIT 2
  1. replace JOIN의 주체와 객체
    (그렇다고 이것이 정석이 아닌 것은 아니다.)
SELECT i.animal_id, i.name
FROM animal_ins as i
LEFT JOIN animal_outs as o
ON i.animal_id = o.animal_id
ORDER BY o.datetime - i.datetime DESC
LIMIT 2
  1. 간단하게
SELECT O.animal_id, O.name
FROM ANIMAL_OUTS as O, ANIMAL_INS as I
WHERE O.animal_id = I.animal_id
ORDER BY O.DATETIME - I.DATETIME DESC
LIMIT 2

문제 5. DATETIME에서 DATE로 변환

SELECT animal_id, name, DATE_FORMAT(datetime, '%Y-%m-%d') as '날짜'
FROM animal_ins
ORDER BY animal_id ASC

사용된 명령어

CASE WHEN(A or B) THEN A' ELSE B' END

조건 달 때 사용.
A라면 A', B라면 B'

IF(A or B, A',B')

조건 달 때 사용.
A라면 A', B라면 B'

IN ()

WHERE에서 특정 값이 (여러개의 값들)안에 있는지 확인.

EXISTS (서브쿼리)

서브쿼리 결과가 한 건이라도 존재하면 TRUE, 없으면 FALSE를 리턴
EXISTS(서브쿼리)는 존재여부만 체크하므로 성능 최상

IN vs EXISTS

IN 절의 괄호() 사이에는 특정 값이나, 서브쿼리가 올 수 있지만,
EXISTS의 괄호() 사이에는 서브쿼리만 올 수 있다.

IN 절에서는 괄호 안에 있는 특정 값이나 서브쿼리의 결과 값이 있는 지 체크하지만,
결국 서브 쿼리 결과를 모두 수행,
실제 존재하는 데이터들의 모든 값까지 확인.

EXIST는 괄호 안의 서브쿼리로부터 해당 값의 존재 유무만 체크.
한 건이라도 일치하는 결과가 있으면 더 이상 수행하지 않는다.
해당 ROW가 존재하는지 확인, 더 이상 수행되지 않는다

DATE_FORMAT()

  • DATE_FORMAT(DATETIME, ‘%Y-%m-%d’)
    %Y 4자리 연도
    %y 2자리 연도
    %m 월
    %d 일
    %T 24-59-59
    %H 24시간
    %h 12시간
    %p AM,PM
    %i 분
    %s 초

같은 DATE 타입 간 기본적인 연산이 가능하다.
ORDER BY O.DATETIME - I.DATETIME DESC

profile
개발자로 취업하기

0개의 댓글