*Oracle ๊ธฐ์ค, ์ ๋ต๋ฅ ๋์ ์์ผ๋ก 23๋ฌธ์ ์ค ์์ 12๋ฌธ์ ๋ง
1. ๋๋ฌผ ์ ๊ตฌํ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/59406 )
๋๋ฌผ ๋ณดํธ์์ ๋๋ฌผ์ด ๋ช ๋ง๋ฆฌ ๋ค์ด์๋์ง ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
SELECT COUNT(*)
FROM ANIMAL_INS;
2. ์ต์๊ฐ ๊ตฌํ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/59038 )
๋๋ฌผ ๋ณดํธ์์ ๊ฐ์ฅ ๋จผ์ ๋ค์ด์จ ๋๋ฌผ์ ์ธ์ ๋ค์ด์๋์ง ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
SELECT MIN(DATETIME)
FROM ANIMAL_INS;
3. ์ค๋ณต ์ ๊ฑฐํ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/59408 )
๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ์ ์ด๋ฆ์ ๋ช ๊ฐ์ธ์ง ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ์ด๋ฆ์ด NULL์ธ ๊ฒฝ์ฐ๋ ์ง๊ณํ์ง ์์ผ๋ฉฐ ์ค๋ณต๋๋ ์ด๋ฆ์ ํ๋๋ก ์นฉ๋๋ค.
SELECT COUNT(DISTINCT NAME)
FROM ANIMAL_INS;
- DISTINCT๋ก ์ค๋ณต ์ ๊ฑฐ๊ฐ ๊ฐ๋ฅํ๋ค.
4. ๋๋ช ๋๋ฌผ ์ ์ฐพ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/59041 )
๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ ์ด๋ฆ ์ค ๋ ๋ฒ ์ด์ ์ฐ์ธ ์ด๋ฆ๊ณผ ํด๋น ์ด๋ฆ์ด ์ฐ์ธ ํ์๋ฅผ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ์ด๋ฆ์ด ์๋ ๋๋ฌผ์ ์ง๊ณ์์ ์ ์ธํ๋ฉฐ, ๊ฒฐ๊ณผ๋ ์ด๋ฆ ์์ผ๋ก ์กฐํํด์ฃผ์ธ์.
SELECT NAME, COUNT(NAME) AS COUNT
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(NAME) > 1
ORDER BY NAME ASC;
- HAVING์ ์์ COUNT(ANIMAL_ID)๋ก ์์ฑํ๊ฒ ๋๋ฉด ์ค๋ต์ผ๋ก ํ์๋๋ค. (์ ๋ต๊ณผ ์คํ ๊ฒฐ๊ณผ๋ ๋์ผํ๋ค.)
- ๋ฌธ์ ์์ ์ด๋ฆ์ด ์๋ ๋๋ฌผ์ ์ง๊ณ์์ ์ ์ธํ๋ค๊ณ ํ์ ๋, COUNT(ANIMAL_ID)๋ NAME์ NULL ์ฌ๋ถ๋ฅผ ์ ์ ์์ผ๋ฏ๋ก ์๋๋ค๋ ๊ฒ ๊ฐ๋ค.
5. ์ด๋ฆ์ el์ด ๋ค์ด๊ฐ๋ ๋๋ฌผ ์ฐพ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/59047 )
๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ ์ด๋ฆ ์ค, ์ด๋ฆ์ "EL"์ด ๋ค์ด๊ฐ๋ ๊ฐ์ ์์ด๋์ ์ด๋ฆ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ์ด๋ฆ ์์ผ๋ก ์กฐํํด์ฃผ์ธ์. ๋จ, ์ด๋ฆ์ ๋์๋ฌธ์๋ ๊ตฌ๋ถํ์ง ์์ต๋๋ค.
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE NAME LIKE '%EL%' AND ANIMAL_TYPE='Dog'
ORDER BY NAME ASC;
6. NULL ์ฒ๋ฆฌํ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/59410 )
๋๋ฌผ์ ์๋ฌผ ์ข , ์ด๋ฆ, ์ฑ๋ณ ๋ฐ ์ค์ฑํ ์ฌ๋ถ๋ฅผ ์์ด๋ ์์ผ๋ก ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ํ๋ก๊ทธ๋๋ฐ์ ๋ชจ๋ฅด๋ ์ฌ๋๋ค์ NULL์ด๋ผ๋ ๊ธฐํธ๋ฅผ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์, ์ด๋ฆ์ด ์๋ ๋๋ฌผ์ ์ด๋ฆ์ "No name"์ผ๋ก ํ์ํด ์ฃผ์ธ์.
SELECT ANIMAL_TYPE, NVL(NAME, 'No name') AS NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID ASC;
- MYSQL์ ๊ฒฝ์ฐ๋ NVLํจ์ ๋ง๊ณ IFNULL ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
7. DATETIME์์ DATE๋ก ํ ๋ณํ ( https://school.programmers.co.kr/learn/courses/30/lessons/59414 )
ANIMAL_INS ํ ์ด๋ธ์ ๋ฑ๋ก๋ ๋ชจ๋ ๋ ์ฝ๋์ ๋ํด, ๊ฐ ๋๋ฌผ์ ์์ด๋์ ์ด๋ฆ, ๋ค์ด์จ ๋ ์ง1๋ฅผ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ์์ด๋ ์์ผ๋ก ์กฐํํด์ผ ํฉ๋๋ค.
SELECT ANIMAL_ID, NAME,
TO_CHAR(DATETIME, 'YYYY-MM-DD') AS "๋ ์ง"
FROM ANIMAL_INS
ORDER BY ANIMAL_ID ASC;
- AS ๋ค์ ๋์ฒดํ ์ปฌ๋ผ๋ช ์ ๋ฌถ์ ๋๋ " "๋ฅผ ์ฐ๊ฑฐ๋, ์๋๋ฉด ์๋ฐ์ดํ๋ฅผ ์๋ตํ๊ฑฐ๋, ๋๋ ์์ AS์ ์๋ฐ์ดํ๋ฅผ ์๋ตํ ๊ฒ.
8. ๊ฐ๊ฒฉ์ด ์ ์ผ ๋น์ผ ์ํ์ ์ ๋ณด ์ถ๋ ฅํ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/131115 )
FOOD_PRODUCT ํ ์ด๋ธ์์ ๊ฐ๊ฒฉ์ด ์ ์ผ ๋น์ผ ์ํ์ ์ํ ID, ์ํ ์ด๋ฆ, ์ํ ์ฝ๋, ์ํ๋ถ๋ฅ, ์ํ ๊ฐ๊ฒฉ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
SELECT *
FROM FOOD_PRODUCT
WHERE PRICE = (
SELECT MAX(PRICE)
FROM FOOD_PRODUCT
);
9. ์ค์ฑํ ์ฌ๋ถ ํ์ ํ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/59409 )
์ค์ฑํ๋ ๋๋ฌผ์ SEX_UPON_INTAKE ์ปฌ๋ผ์ 'Neutered' ๋๋ 'Spayed'๋ผ๋ ๋จ์ด๊ฐ ๋ค์ด์์ต๋๋ค. ๋๋ฌผ์ ์์ด๋์ ์ด๋ฆ, ์ค์ฑํ ์ฌ๋ถ๋ฅผ ์์ด๋ ์์ผ๋ก ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ์ค์ฑํ๊ฐ ๋์ด์๋ค๋ฉด 'O', ์๋๋ผ๋ฉด 'X'๋ผ๊ณ ํ์ํด์ฃผ์ธ์.
SELECT ANIMAL_ID, NAME,
CASE
WHEN SEX_UPON_INTAKE LIKE 'Neutered%'
OR SEX_UPON_INTAKE LIKE 'Spayed%'
THEN 'O'
ELSE 'X'
END AS ์ค์ฑํ
FROM ANIMAL_INS
ORDER BY 1 ASC;
- ORDER BY 1์ ํ ์ด๋ธ์ 1๋ฒ์งธ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๋ค๋ ๋ป์ด๋ค.
10. ๊ณ ์์ด์ ๊ฐ๋ ๋ช ๋ง๋ฆฌ ์์๊น ( https://school.programmers.co.kr/learn/courses/30/lessons/59040 )
๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ ์ค ๊ณ ์์ด์ ๊ฐ๊ฐ ๊ฐ๊ฐ ๋ช ๋ง๋ฆฌ์ธ์ง ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ณ ์์ด๋ฅผ ๊ฐ๋ณด๋ค ๋จผ์ ์กฐํํด์ฃผ์ธ์.
SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) AS COUNT
FROM ANIMAL_INS
-- WHERE ANIMAL_TYPE IN ('Cat', 'Dog')
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE ASC;
- WHERE ์ ์ ํด๋น ๋ฌธ์ ์์๋ ์๋ฃ์ด๋ ๋๋ค. ์๋ํ๋ฉด ์ ๋ณดํธ์ ๋ฐ์ดํฐ์๋ ๊ณ ์์ด๋ ๊ฐ๋ฐ์ ์๊ธฐ ๋๋ฌธ์ด๋ค..
11. ์นดํ ๊ณ ๋ฆฌ ๋ณ ์ํ ๊ฐ์ ๊ตฌํ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/131529 )
PRODUCT ํ ์ด๋ธ์์ ์ํ ์นดํ ๊ณ ๋ฆฌ ์ฝ๋(PRODUCT_CODE ์ 2์๋ฆฌ) ๋ณ ์ํ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ๊ฒฐ๊ณผ๋ ์ํ ์นดํ ๊ณ ๋ฆฌ ์ฝ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
SELECT SUBSTR(PRODUCT_CODE, 1, 2) AS CATEGORY, COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY SUBSTR(PRODUCT_CODE, 1, 2)
ORDER BY CATEGORY ASC;
- MYSQL์์๋ LEFT()ํจ์๋ฅผ ์ด์ฉํด ํํํ ์๋ ์๋ค.
12. ์ ์ ์๊ฐ ๊ตฌํ๊ธฐ(1) ( https://school.programmers.co.kr/learn/courses/30/lessons/59412 )
๋ณดํธ์์์๋ ๋ช ์์ ์ ์์ด ๊ฐ์ฅ ํ๋ฐํ๊ฒ ์ผ์ด๋๋์ง ์์๋ณด๋ ค ํฉ๋๋ค. 09:00๋ถํฐ 19:59๊น์ง, ๊ฐ ์๊ฐ๋๋ณ๋ก ์ ์์ด ๋ช ๊ฑด์ด๋ ๋ฐ์ํ๋์ง ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ์๊ฐ๋ ์์ผ๋ก ์ ๋ ฌํด์ผ ํฉ๋๋ค.
SELECT TO_NUMBER(TO_CHAR(DATETIME, 'HH24')) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
GROUP BY TO_CHAR(DATETIME, 'HH24')
HAVING TO_CHAR(DATETIME, 'HH24') BETWEEN '09' AND '19'
ORDER BY HOUR;
- ์ด๊ฒ ์ ์ ๋ต๋ฅ 88%์ธ์ง ๋ชจ๋ฅด๊ฒ ๋ค...
- SELECT๋ฌธ์์ TO_NUMBER()๋ฅผ ํด์ฃผ์ง ์์ผ๋ฉด 9์๋ '09'๋ก ๋จ๊ฒ ๋๋๋ฐ, ๊ทธ๋ฌ๋ฉด ์ค๋ต์ฒ๋ฆฌ๊ฐ ๋๋ค.
- ๋๋ฌธ์ TO_NUMBER()๋ก ํ๋ฒ ๊ฐ์ธ๋์ง, ์๋๋ฉด ์ด ๊ฒฝ์ฐ์๋ 9์ ์ธ์ ๋๋จธ์ง ํ๋๋ ๊ด์ฐฎ์ผ๋ฏ๋ก CASE WHEN THEN ๊ตฌ๋ฌธ์ ์ด์ฉํด 9์ ๋ถ๋ถ๋ง ์ฒ๋ฆฌํด ์ค์๋ ์๋ค.
- MYSQL์ FORMAT์ ์ด์ฉ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์์ ์์ ๋ค์ ํ ํ์๊ฐ ์๋ค.
- HAVING์ ์ ๋ด์ฉ์ ๊ทธ๋๋ก WHERE์ ์์ ์จ๋ ๊ฐ๋ฅํ๋ค.
'๋ฐ์ดํฐ๋ฒ ์ด์ค, SQL > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค SQL๋ฌธ LV. 3 (2) (2) | 2023.06.29 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค SQL๋ฌธ LV. 3 (1) (0) | 2023.06.29 |
ํ๋ก๊ทธ๋๋จธ์ค SQL๋ฌธ LV. 2 (2) (0) | 2023.06.28 |
ํ๋ก๊ทธ๋๋จธ์ค SQL๋ฌธ LV. 1 (2) (0) | 2023.06.28 |
ํ๋ก๊ทธ๋๋จธ์ค SQL๋ฌธ LV. 1 (1) (0) | 2023.06.23 |