[SQL] 프로그래머스 - String, Date

June·2021년 2월 25일
0

SQL

목록 보기
6/11

루시와 엘라 찾기

동물 보호소에 들어온 동물 중 이름이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty인 동물의 아이디와 이름, 성별 및 중성화 여부를 조회하는 SQL 문을 작성해주세요.

SELECT AI.ANIMAL_ID, AI.NAME, AI.SEX_UPON_INTAKE
FROM ANIMAL_INS AS AI
WHERE AI.NAME IN ("Lucy", "Ella", "Pickle", "Rogan", "Sabrina", "Mitty")
ORDER BY AI.ANIMAL_ID

IN

  • 여러 값을 OR 관계로 묶어 나열하는 조건을 WHERE 절에 사용할 때 쓸 수 있는 키워드
  • IN 연산자는 조건의 범위를 지정하는 데 사용된다. 값은 콤마( , )로 구분하여 괄호 내에 묶으며, 이 값 중에서 하나 이상과 일치하면 조건에 맞는 것으로 평가된다

IN조건 장점

  • 목록에 넣을 값이 여러개 일때, IN 연산자가 OR보다 쓰기도, 보기도 이해하기도 쉽다.
  • IN을 사용하면 조건 순서를 보다 쉽게 관리 할수 있고, 연산자 수도 줄어든다
  • IN 연산자가 OR 연산자 보다 실행 속도가 빠르다
  • IN 연산자안에 다른 SELECT 문(서브쿼리?)를 넣을 수 있다.

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

보호소에 돌아가신 할머니가 기르던 개를 찾는 사람이 찾아왔습니다. 이 사람이 말하길 할머니가 기르던 개는 이름에 'el'이 들어간다고 합니다. 동물 보호소에 들어온 동물 이름 중, 이름에 EL이 들어가는 개의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 이름 순으로 조회해주세요. 단, 이름의 대소문자는 구분하지 않습니다

SELECT ANIMAL_INS.ANIMAL_ID,ANIMAL_INS.NAME
FROM ANIMAL_INS
WHERE ANIMAL_INS.NAME like "%el%" AND ANIMAL_TYPE = "Dog"
ORDER BY ANIMAL_INS.NAME

기본적으로 대소문자를 구별하지 않느다. 하지만 binary로 된 테이블일 경우 대소문자를 구별하여 검색할 수 있다.

테이블의 필드형을 binary로 변경하는 것도 방법이고 쿼리를

SELECT * FROM table WHERE BINARY(field) LIKE "%test%";

이것도 방법이다.

중성화 여부 파악하기

보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다. 중성화된 동물은 SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시해주세요.

SELECT ai.ANIMAL_ID, ai.NAME, 
CASE 
    WHEN ai.SEX_UPON_INTAKE LIKE "%Neutered%" or ai.SEX_UPON_INTAKE LIKE "%Spayed%"
    THEN "O"
    ELSE "X"
END AS "중성화"
FROM ANIMAL_INS AS ai
ORDER BY ANIMAL_ID

CASE 구문은 삼항연산자와 비슷합니다. WHEN 절에 조건을 넣고 THEN 절에는 참일 경우 출력 내용 ELSE 절에는 거짓일 경우 출력 내용을 입력하시면 됩니다.
마지막에는 END로 닫아주시면 됩니다.

Case 문
형식 : case (조건 또는 값)
when 값1 then 표시값
when 값2 then 표시값
else 표시값
end

EX)

select case a when '1' then a when '2' then b else c end from table_name

설명 - a 값이 '1'이면 a, '2' 이면 b, 둘다 아닐경우 c 를 출력

SELECT ai.ANIMAL_ID, ai.NAME, 
IF (ai.SEX_UPON_INTAKE LIKE "%Neutered%" or ai.SEX_UPON_INTAKE LIKE "%Spayed%", "O", "X") AS "중성화"
FROM ANIMAL_INS AS ai
ORDER BY ANIMAL_ID

If 문을 통해서 풀 수 있다.

IF 문

형식 : if ( 조건문, 참일때 값, 거짓일때 값)

EX)

select member_id, if ( isnull(birthday), '-', birthday ) from member

설명 - 멤버 테이블에서 아이디(member_id) 와 생일을 뽑는데 null 일경우는 - 를 출력, 아니면 생일을 출력

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

입양을 간 동물 중, 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 기간이 긴 순으로 조회해야 합니다.

SELECT ao.ANIMAL_ID, ao.NAME
FROM ANIMAL_INS AS ai INNER JOIN ANIMAL_OUTS AS ao ON ai.ANIMAL_ID = ao.ANIMAL_ID
ORDER BY (ao.DATETIME - ai.DATETIME) DESC
LIMIT 2

DATETIME에서 DATE로 형 변환

SELECT ANIMAL_ID, NAME,  date_format(DATETIME, '%Y-%m-%d')
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

date_format 함수를 이용해서 DATETIME 형식을 바꿀 수 있다.

SQL 예제 사이트

https://top5dba.tistory.com/1

0개의 댓글