*아래 링크를 참고하였습니다.
(https://programmers.co.kr/learn/challenges?tab=sql_practice_kit)
- 최댓값 구하기
SELECT MAX(DATETIME) AS '시간'
FROM ANIMAL_INS
- 모든 레코드 조회하기
SELECT *
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
- 역순 정렬하기
SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC
- 아픈 동물 찾기(where 조건)
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION = 'Sick'
ORDER BY ANIMAL_ID;
- 어린 동물 찾기(where not 조건)
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE NOT INTAKE_CONDITION = 'Aged'
ORDER BY ANIMAL_ID;
- 동물의 아이디와 이름
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
- 이름이 없는 동물의 아이디(IS NULL)
SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NULL
ORDER BY ANIMAL_ID;
- 상위 N개 레코드(서브쿼리문, LIMIT)
SELECT NAME
FROM ANIMAL_INS
WHERE DATETIME = (
SELECT MIN(DATETIME)
FROM ANIMAL_INS
ORDER BY ANIMAL_ID)
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1
/*MySQL의 경우 : NAME 값을 조회하는데 가장 맨 위 행 1개만을 조회하기 위해 LIMIT 구문을 사용해야 합니다.
LIMIT 1 : 맨 위에서부터 1개까지의 정보 조회
LIMIT 3 : 맨 위에서부터 3개까지의 정보 조회
LIMIT 2, 6 : 위에서 2번째부터 6번째까지의 정보 조회
https://chanhuiseok.github.io/posts/db-3/
*/
- 여러 기준으로 정렬하기(DESC, ASC)
SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY NAME ASC ,DATETIME DESC;
- 이름이 있는 동물의 아이디(IS NOT NULL)
SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
- 동물 수 구하기(count)
SELECT COUNT(*) AS count
FROM ANIMAL_INS
- 중복 제거하기(DISTINCT)
SELECT COUNT(DISTINCT NAME) AS count
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
- 고양이와 개는 몇마리 있을까(GROUP BY)
SELECT ANIMAL_TYPE, COUNT(*) AS count
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE
- null처리하기(IFNULL)
SELECT ANIMAL_TYPE, IFNULL(NAME,'No name'), SEX_UPON_INTAKE
FROM ANIMAL_INS
- 동명 동물 수 찾기(HAVING - GROUP BY에 조건을 붙이고 싶을 때 사용. GROUP BY의 WHERE절과 비슷)
SELECT NAME, COUNT(*) AS count
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(NAME)>=2
ORDER BY NAME ASC
- 입양 시각 구하기(HOUR)
SELECT HOUR(DATETIME) HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
HAVING HOUR >=9 AND HOUR <20
ORDER BY HOUR
- 루시와 엘라 찾기(문자열)
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE SEX_UPON_INTAKE LIKE 'S%'
AND NAME IN('Lucy','Ella','Pickle','Rogan','Sabrina','Mitty');
/*in과 like 구분잘하기!!
in은 or와 같은 조건이고, like는 해당 문자로 시작하는 문자열 비교할 때 사용,
*/
- 이름에 el이 들어가는 동물 이름찾기(문자열)
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE NAME LIKE ('%el%') AND ANIMAL_TYPE = 'Dog'
ORDER BY NAME;
- 중성화 여부 파악하기 (CASE구문-삼항연산자 참고)
SELECT ANIMAL_ID, NAME,
CASE
WHEN SEX_UPON_INTAKE LIKE '%Neutered%' OR SEX_UPON_INTAKE LIKE 'S%'
THEN 'O'
ELSE 'X'
END AS 중성화
FROM ANIMAL_INS
- DATETIME에서 DATE로 형 변환
SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME,'%Y-%m-%d') AS 날짜
FROM ANIMAL_INS
- 없어진 기록 찾기
SELECT A.ANIMAL_ID, A.NAME
FROM ANIMAL_OUTS AS A
LEFT OUTER JOIN ANIMAL_INS AS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE B.ANIMAL_ID IS NULL
ORDER BY B.ANIMAL_ID
/*https://chanhuiseok.github.io/posts/db-7/
https://futurists.tistory.com/17
https://yoo-hyeok.tistory.com/98*/