SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC;
1-3. 아픈 동물 찾기
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION in ('Sick');
1-4. 어린 동물 찾기
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION != 'Aged'
ORDER BY ANIMAL_ID;
1-5. 동물의 아이디와 이름
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS;
1-6. 여러 기준으로 정렬하기
SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY NAME, DATETIME DESC;
1-7. 상위 n개 레코드
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1;
mysql에서 row를 n 행만 출력하려면 LIMIT n 을 해주면 됩니다.
특정 구간을 출력하려면 LIMIT x1, x2 해주면 됩니다.
2. SUM, MAX, MIN
2-1. 최댓값 구하기
SELECT MAX(DATETIME)
FROM ANIMAL_INS;
2-2. 최솟값 구하기
SELECT MIN(DATETIME)
FROM ANIMAL_INS;
2-3. 동물 수 구하기
SELECT COUNT(*)
FROM ANIMAL_INS;
2-4. 중복 제거하기
SELECT COUNT(DISTINCT NAME)
FROM ANIMAL_INS;
mysql DISTINCT 를 이용하면 집합과 같은 효과를 냅니다.
3. GROUP BY
3-1. 고양이와 개는 몇 마리 있을까
SELECT ANIMAL_TYPE, COUNT(ANIMAL_ID)
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE;
3-2. 동명 동물 수 찾기
SELECT NAME, COUNT(ANIMAL_ID)
FROM ANIMAL_INS
WHERE NAME is not null
GROUP BY NAME
Having COUNT(NAME) > 1
ORDER BY NAME;
3-3. 입양 시각 구하기(1)
SELECT HOUR(DATETIME),
COUNT(HOUR(DATETIME))
FROM ANIMAL_OUTS
WHERE (HOUR(DATETIME)>=9 and HOUR(DATETIME)<20)
GROUP BY HOUR(DATETIME)
ORDER BY HOUR(DATETIME);
3-4. 입양 시각 구하기(2)
SET @hour := -1;
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
4-1. 이름이 없는 동물의 아이디
SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME is null
ORDER BY ANIMAL_ID;
4-2. 이름이 있는 동물의 아이디
SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
ORDER BY ANIMAL_ID;
4-3. NULL 처리하기
SELECT ANIMAL_TYPE, if(NAME IS NULL,"No name", NAME) , SEX_UPON_INTAKE
FROM ANIMAL_INS;
5. JOIN
5-1. 없어진 기록 찾기
SELECT ANIMAL_OUTS.ANIMAL_ID, ANIMAL_OUTS.NAME
FROM ANIMAL_OUTS
LEFT JOIN ANIMAL_INS ON
ANIMAL_OUTS.ANIMAL_ID = ANIMAL_INS.ANIMAL_ID
where (ANIMAL_INS.ANIMAL_ID IS NULL)
ORDER BY ANIMAL_OUTS.ANIMAL_ID;
5-2. 있었는데요 없었습니다
SELECT ANIMAL_INS.ANIMAL_ID, ANIMAL_INS.NAME
FROM ANIMAL_INS
LEFT JOIN ANIMAL_OUTS
ON ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
where (ANIMAL_INS.DATETIME > ANIMAL_OUTS.DATETIME)
ORDER BY ANIMAL_INS.DATETIME;
5-3. 오랜 기간 보호한 동물(1)
SELECT ANIMAL_INS.NAME, ANIMAL_INS.DATETIME
FROM ANIMAL_INS
LEFT JOIN ANIMAL_OUTS
ON ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
WHERE ANIMAL_OUTS.DATETIME IS NULL
ORDER BY ANIMAL_INS.DATETIME
LIMIT 3;
5-4.보호소에서 중성화한 동물
SELECT ANIMAL_OUTS.ANIMAL_ID, ANIMAL_OUTS.ANIMAL_TYPE, ANIMAL_OUTS.NAME
FROM ANIMAL_OUTS
INNER JOIN ANIMAL_INS
ON ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
WHERE ANIMAL_OUTS.SEX_UPON_OUTCOME != ANIMAL_INS.SEX_UPON_INTAKE
ORDER BY ANIMAL_OUTS.ANIMAL_ID;
6. String, Date
6-1. 루시와 엘라 찾기
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
6-2. 이름에 el이 들어가는 동물 찾기
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE UPPER(NAME) like '%EL%' and ANIMAL_TYPE='Dog'
ORDER BY NAME;
6-3. 중성화 여부 파악하기
SELECT
ANIMAL_ID,
NAME,
if(SEX_UPON_INTAKE LIKE 'Neutere%' or
SEX_UPON_INTAKE LIKE 'Spayed%','O','X') as '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
6-4. 오랜 기간 보호한 동물(2)
SELECT ANIMAL_OUTS.ANIMAL_ID,ANIMAL_OUTS.NAME
FROM ANIMAL_OUTS
INNER JOIN ANIMAL_INS
ON ANIMAL_OUTS.ANIMAL_ID = ANIMAL_INS.ANIMAL_ID
ORDER BY (ANIMAL_OUTS.DATETIME - ANIMAL_INS.DATETIME) DESC
LIMIT 2;
6-5. DATETIME에서 DATE로 형 변환
SELECT ANIMAL_ID, NAME, MID(DATETIME, 1,10) as '날짜'
FROM ANIMAL_INS
order by ANIMAL_ID;