SELECT ANIMAL_ID
,NAME
,SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME = "Lucy"
OR NAME = "Ella"
OR NAME = "Pickle"
OR NAME = "Rogan"
OR NAME = "Sabrina"
OR NAME = "Mitty"
ORDER
BY ANIMAL_ID ASC;
처음에 위에 처럼 조건을 OR로 처리해줬는데 리스트로 묶어서 IN으로 처리해주는게 훨씬 깔끔했다.
SELECT ANIMAL_ID
,NAME
,SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN ("Lucy", "Ella", "Pickle", "Rogan", "Sabrina", "Mitty")
ORDER
BY ANIMAL_ID ASC;
LIKE특수 연산자를 사용하는 문제이다.
NAME LIKE 'D%'는 D로 시작하는 이름
NAME LIKE '%N'은 N으로 끝나는 이름
NAME LIKE '%EO%'는 EO를 포함하는 이름을 각각 의미한다.
코드에서는 NAME LIKE "%EL%"이므로 EL을 포함하는 이름을 조건으로 한다.
그리고 AND논리연산자로 동시에 종이 개인 동물을 검색한다.
SELECT ANIMAL_ID
,NAME
FROM ANIMAL_INS
WHERE NAME LIKE "%EL%"
AND ANIMAL_TYPE = "Dog"
ORDER
BY NAME ASC;
CASE WHEN 조건1 THEN '조건1 반환값' WHEN 조건2 THEN '조건2 반환값' ELSE '위의 조건들을 제외한 조건의 반환값' END
SELECT ANIMAL_ID
,NAME
,CASE
WHEN SEX_UPON_INTAKE LIKE '%Intact%'
THEN 'X'
ELSE 'O' END
AS '중성화'
FROM ANIMAL_INS
ORDER
BY ANIMAL_ID;
IF(조건문, 참일 때 반환값, 거짓일 때 반환값)
SELECT ANIMAL_ID
,NAME
,IF(SEX_UPON_INTAKE LIKE '%Intact%','X','O') AS '중성화'
FROM ANIMAL_INS
ORDER
BY ANIMAL_ID;
DATEDIFF(날짜1, 날짜2): 날짜1 - 날짜2 일수 반환
SELECT A.ANIMAL_ID
,A.NAME
FROM ANIMAL_INS AS A
INNER
JOIN ANIMAL_OUTS AS B
ON A.ANIMAL_ID = B.ANIMAL_ID
ORDER
BY DATEDIFF(A.DATETIME,B.DATETIME) ASC
LIMIT 2;
DATE_FORMAT()함수 사용
SELECT ANIMAL_ID
,NAME
,DATE_FORMAT(DATETIME,'%Y-%m-%d') AS '날짜'
FROM ANIMAL_INS
ORDER
BY ANIMAL_ID ASC;
| 구분기호 | 역할 | 구분기호 | 역할 |
|---|---|---|---|
| %Y | 4자리 년도 | %m | 숫자 월(두자리) |
| %y | 2자리 년도 | %c | 숫자 월(한자리는 한자리) |
| %M | 긴 월(영문) | %d | 일자(두자리) |
| %b | 짧은 월(영문) | %e | 일자(한자리는 한자리) |
| %W | 긴 요일 이름(영문) | %I | 시간(12시간) |
| %a | 짧은 요일 이름(영문) | %H | 시간(24시간) |
| %i | 분 | %r | hh:mm:ss AM,PM |
| %T | hh:mm:ss | %S | 초 |
실행 결과
사용한 데이터베이스가 초단위는 설정이 따로 안되있는지 다 00으로 나왔다.