1. SELECT
## 1번_ 전체 출력
SELECT * from ANIMAL_INS
ORDER BY ANIMAL_ID
## 2번_ ANIMAL_ID별 역순 출력
SELECT NAME,DATETIME FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC
## 3번_동물 보호소에 들어온 동물 중 아픈 동물1의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.
SELECT ANIMAL_ID,NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION IN ('Sick')
ORDER BY ANIMAL_ID
## 4번_제외 시키고 출력
SELECT ANIMAL_ID,NAME FROM ANIMAL_INS
WHERE NOT INTAKE_CONDITION IN ('Aged')
ORDER BY ANIMAL_ID
##5번_
SELECT ANIMAL_ID,NAME FROM ANIMAL_INS
ORDER BY ANIMAL_ID
##6번_ORDER BY 혼합 사용
SELECT ANIMAL_ID,NAME, DATETIME FROM ANIMAL_INS
ORDER BY NAME , DATETIME DESC
##7번_개수제한
SELECT NAME FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1
2.SUM, MAX, MIN
## 1번_가장 마지막에 들어온 녀석을 뽑아
SELECT MAX(DATETIME) FROM ANIMAL_INS
## 2번_가장 처음 온 녀석
SELECT MIN(DATETIME) FROM ANIMAL_INS
## 3번_보호소에 온 친구들 세기
SELECT COUNT(ANIMAL_ID) FROM ANIMAL_INS
## 4번_ 중복값 제거 카운트
SELECT COUNT(DISTINCT(NAME)) FROM ANIMAL_INS
3. GROUP BY
## 1번_ 고양이 개 몇마리야
SELECT ANIMAL_TYPE , COUNT(ANIMAL_TYPE) AS count FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE ASC
## 2번_동명 동물 수 찾기
SELECT NAME, COUNT(NAME) FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(NAME) > 1
ORDER BY NAME
## 3번_입양시각 구하기
SELECT HOUR(DATETIME) AS 'HOUR', COUNT(HOUR(DATETIME)) AS 'COUNT'
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME) <= 19
GROUP BY HOUR(DATETIME)
ORDER BY HOUR(DATETIME)
## 📌4번_입양 시각 구하기(2)📌
SET @hour = -1; # hour변수 선언 +1 통해 0~23 출력
#SET을 제외한 다른 쿼리문에서는 =을 비교 연산자로 인식 -> 대입연산자 := 사용 필요
SELECT (@hour := @hour + 1) as HOUR,
(SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @hour) as COUNT
FROM ANIMAL_OUTS
WHERE @hour < 23
4. IS NULL
## 1번_이름이 없는 동물의 아이디
SELECT ANIMAL_ID FROM ANIMAL_INS
WHERE NAME IS NULL
## 2번_이름이 있는 동물의 아이디
SELECT ANIMAL_ID FROM ANIMAL_INS
WHERE NAME IS NOT NULL
## 3번_NULL 처리하기
# SELECT ANIMAL_TYPE, REPLACE(NAME, 'NULL','No name') AS NAME, SEX_UPON_INTAKE FROM ANIMAL_INS
# ORDER BY ANIMAL_ID
## IFNULL(EX1,EX2) : 첫번째 값이 null이면 두번째 요소 반환
## NULLIF(EX1,EX2) : 첫번째, 두번째 매개값 비교 후 동일한 값 null 반환
## REPLACE : REPLACE(NAME,'NULL','No name')
SELECT ANIMAL_TYPE, IFNULL(NAME, 'No name') AS NAME, SEX_UPON_INTAKE FROM ANIMAL_INS
ORDER BY ANIMAL_ID
5. JOIN
## 1번_없어진 기록 찾기
SELECT O.ANIMAL_ID, O.NAME FROM ANIMAL_INS AS I
RIGHT JOIN ANIMAL_OUTS AS O ON O.ANIMAL_ID = I.ANIMAL_ID
WHERE I.ANIMAL_ID IS NULL
ORDER BY O.ANIMAL_ID, O.NAME
## 2번_있었는데요 없었습니다
SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I
LEFT JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE I.DATETIME > O.DATETIME
ORDER BY I.DATETIME
## 3번_오랜 기간 보호한 동물(1)
SELECT I.NAME, I.DATETIME
FROM ANIMAL_INS I
LEFT JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE O.ANIMAL_ID IS NULL
ORDER BY 2
LIMIT 3
## 4번_보호소에서 중성화한 동물
SELECT I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAME
FROM ANIMAL_INS I
LEFT JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE O.SEX_UPON_OUTCOME <> I.SEX_UPON_INTAKE
ORDER BY I.ANIMAL_ID
6. String, Date
## 1번_루시와 엘라 찾기
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS
WHERE NAME IN('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
## 2번_이름에 el이 들어가는 동물 찾기
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS
WHERE NAME LIKE '%el%' AND ANIMAL_TYPE = 'Dog'
ORDER BY 2
## 3번_중성화 여부 파악하기(CASE문)
SELECT ANIMAL_ID, NAME,
CASE
WHEN SEX_UPON_INTAKE LIKE '%Neutered%' OR SEX_UPON_INTAKE LIKE '%Spayed%' THEN 'O'
ELSE 'X' END '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
## 4번_오랜 기간 보호한 동물(2)
1️⃣
SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I
LEFT JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID #using(ANIMAL_ID)
ORDER BY timestampdiff(minute, I.DATETIME, O.DATETIME) desc
LIMIT 2
2️⃣
SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I
RIGHT JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID #using(ANIMAL_ID)
ORDER BY (O.DATETIME- I.DATETIME) desc
LIMIT 2
## 5번_DATETIME에서 DATE로 형 변환
SELECT I.ANIMAL_ID, I.NAME, date_format(I.DATETIME, '%Y-%m-%d') AS 날짜 FROM ANIMAL_INS I
ORDER BY I.ANIMAL_ID
'STUDY > SQL' 카테고리의 다른 글
[SQL] 날짜 년월로 group by하는 여러가지 방법들 (0) | 2021.05.09 |
---|---|
SQL 문제를 풀어보자 (0) | 2021.05.09 |
SQL 입문하기 - 1주차 (0) | 2021.05.09 |
MySQL 데이터베이스 한번에 끝내기 (0) | 2021.05.09 |
[생활코딩] 관계형 데이터 모델링 (26-32강의 : 물리적데이터 모델링/역정규화) (0) | 2021.05.09 |