โ๐ป programmers Lv2. MySQL 20๋ฌธ์ (24.10.17)
programmers Lv2. MySQL 20๋ฌธ์ (24.10.17)
30) ์ต์๊ฐ ๊ตฌํ๊ธฐ
- ๋๋ฌผ ๋ณดํธ์์ ๊ฐ์ฅ ๋จผ์ ๋ค์ด์จ ๋๋ฌผ์ ์ธ์ ๋ค์ด์๋์ง ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑ
1
2
3
SELECT DATETIME AS '์๊ฐ'
FROM ANIMAL_INS
ORDER BY DATETIME LIMIT 1;
31) ๋๋ฌผ ์ ๊ตฌํ๊ธฐ
- ๋๋ฌผ ๋ณดํธ์์ ๋๋ฌผ์ด ๋ช ๋ง๋ฆฌ ๋ค์ด์๋์ง ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑ
1
2
SELECT COUNT(*) AS 'count'
FROM ANIMAL_INS
32) ๋๋ช ๋๋ฌผ ์ ์ฐพ๊ธฐ
- ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ ์ด๋ฆ ์ค ๋ ๋ฒ ์ด์ ์ฐ์ธ ์ด๋ฆ๊ณผ ํด๋น ์ด๋ฆ์ด ์ฐ์ธ ํ์๋ฅผ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑ. ์ด๋ ๊ฒฐ๊ณผ๋ ์ด๋ฆ์ด ์๋ ๋๋ฌผ์ ์ง๊ณ์์ ์ ์ธํ๋ฉฐ, ๊ฒฐ๊ณผ๋ ์ด๋ฆ ์์ผ๋ก ์กฐํ
1
2
3
4
5
SELECT NAME, COUNT(NAME) AS 'COUNT'
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(NAME) >=2
ORDER BY NAME;
GROUP BY
๋ฅผ ํตํด ์ด๋ฆ๋ค์ ํ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ผ ํจ.HAVING
์GROUP BY
์ ํจ๊ป ์ฌ์ฉ๋์ด ๊ทธ๋ฃนํ๋ ๋ฐ์ดํฐ์ ๋ํ ์กฐ๊ฑด์ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉ๋จ.WHERE
์ ์ ๊ทธ๋ฃนํ ์ ์ ์กฐ๊ฑด์ ์ ์ฉํ๋ ๋ฐ๋ฉด,HAVING
์ ๊ทธ๋ฃนํ ํ ๊ฒฐ๊ณผ์ ์กฐ๊ฑด์ ๊ฑธ ์ ์์.WHERE
๊ณผGROUP BY
์ ์ฐจ์ด์ WHERE
์ ๊ทธ๋ฃนํ ์ด์ ์ ๋ฐ์ดํฐ๋ฅผ ํํฐ๋ง ํ๋ค. ์ฆ, ๊ฐ๋ณ ํ์ ๊ธฐ์ค์ผ๋ก ์กฐ๊ฑด์ ๊ฑธ ์ ์๋ค.GROUP BY
๋ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ๊ณ ๊ทธ๋ฃน๋ณ๋ก ์ง๊ณ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.HAVING
์ ๊ทธ๋ฃนํ๋ ๋ฐ์ดํฐ์ ์กฐ๊ฑด์ ๊ฑธ ๋ ์ฌ์ฉ๋๋ค. ์ฆ, ๊ทธ๋ฃนํ ์ดํ ํํฐ๋ง์ ํ๋ ค๋ฉดHAVING
์ ์ฌ์ฉํด์ผ ํ๋ค.WHERE
์ ์ ๊ฐ๋ณ ํ์ ๋ํ ์กฐ๊ฑด๋ง ์ ์ฉํ ์ ์๋ค.COUNT()
์ ๊ฐ์ ์ง๊ณ ํจ์๋ ๊ทธ๋ฃนํ๋ ๋ฐ์ดํฐ์ ์ ์ฉ๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์,WHERE
๋ก๋ ์ง๊ณ๋ ๊ฐ์ ๋ํด ์กฐ๊ฑด์ ๊ฑธ ์ ์๋ค.
33) ์ด๋ฆ์ el์ด ๋ค์ด๊ฐ๋ ๋๋ฌผ ์ฐพ๊ธฐ
- ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ ์ด๋ฆ ์ค, ์ด๋ฆ์ โELโ์ด ๋ค์ด๊ฐ๋ ๊ฐ์ ์์ด๋์ ์ด๋ฆ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑ. ์ด๋ ๊ฒฐ๊ณผ๋ ์ด๋ฆ ์์ผ๋ก ์กฐํ
1
2
3
4
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE ANIMAL_TYPE = 'Dog' AND NAME LIKE '%EL%'
ORDER BY NAME;
34) ์ค๋ณต ์ ๊ฑฐํ๊ธฐ
- ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ์ ์ด๋ฆ์ ๋ช ๊ฐ์ธ์ง ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑ. ์ด๋ ์ด๋ฆ์ด NULL์ธ ๊ฒฝ์ฐ๋ ์ง๊ณํ์ง ์์ผ๋ฉฐ ์ค๋ณต๋๋ ์ด๋ฆ์ ํ๋๋ก ์น๋ค.
1
2
3
SELECT COUNT(DISTINCT NAME) AS 'count'
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
- ์ค๋ณต ์ ๊ฑฐ :
DISTINCT
35) ๊ฐ๊ฒฉ์ด ์ ์ผ ๋น์ผ ์ํ์ ์ ๋ณด ์ถ๋ ฅํ๊ธฐ
1
2
3
SELECT *
FROM FOOD_PRODUCT
ORDER BY PRICE DESC LIMIT 1;
36) NULL ์ฒ๋ฆฌํ๊ธฐ
1
2
3
SELECT ANIMAL_TYPE, IFNULL(NAME, 'No name') AS NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
37) DATETIME์์ DATE๋ก ํ ๋ณํ
1
2
SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME,'%Y-%m-%d') AS '๋ ์ง'
FROM ANIMAL_INS
38) ์นดํ ๊ณ ๋ฆฌ ๋ณ ์ํ ๊ฐ์ ๊ตฌํ๊ธฐ
PRODUCT
ํ ์ด๋ธ์์ ์ํ ์นดํ ๊ณ ๋ฆฌ ์ฝ๋(PRODUCT_CODE
์ 2์๋ฆฌ) ๋ณ ์ํ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑ. ๊ฒฐ๊ณผ๋ ์ํ ์นดํ ๊ณ ๋ฆฌ ์ฝ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ.
1
2
3
SELECT SUBSTRING(PRODUCT_CODE,1,2) AS 'CATEGORY', COUNT(PRODUCT_CODE) AS 'PRODUCTS'
FROM PRODUCT
GROUP BY CATEGORY
์๋ GROUP BY๋ก ์ ํ๊ณ ORDER BY๋ก ํด์ ํ๋ ธ์๋ค.
GROUP BY๋ ํน์ ๊ธฐ์ค์ ๋ฐ๋ผ ๊ทธ๋ฃนํํ๋ค. ์ฆ, ๊ฐ์ ๊ฐ์ ๊ฐ์ง ํ๋ค์ ํ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ๋ ๊ฒ์ด๋ค.
ORDER BY๋ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ๊ทธ๋ฃนํ์๋ ๊ด๊ณ์์ด ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋๋ ์์๋ฅผ ๊ฒฐ์ ํ๋ค.
ORDER BY CATEGORY
๋ ๋จ์ํ ์นดํ ๊ณ ๋ฆฌ๋ณ๋ก ์ ๋ ฌ๋ง ํ ์ ์๊ณ ,GROUP BY CATEGORY
**๋ ๊ฐ์ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๋ฌถ์ด์ **๊ฐ ์นดํ ๊ณ ๋ฆฌ๋ณ๋ก ์ ํ์ ๊ฐ์๋ฅผ ์ธ๋ ๊ฒ์ ์๋ฏธํ๋ค.
39) ์กฐ๊ฑด์ ๋ง๋ ์์ดํ ๋ค์ ๊ฐ๊ฒฉ์ ์ดํฉ ๊ตฌํ๊ธฐ
ITEM_INFO
ํ ์ด๋ธ์์ ํฌ๊ท๋๊ฐ โLEGENDโ์ธ ์์ดํ ๋ค์ ๊ฐ๊ฒฉ์ ์ดํฉ์ ๊ตฌํ๋ SQL๋ฌธ์ ์์ฑ. ์ด๋ ์ปฌ๋ผ๋ช ์ โTOTAL_PRICEโ๋ก ์ง์
1
2
3
SELECT SUM(PRICE) AS 'TOTAL_PRICE'
FROM ITEM_INFO
WHERE RARITY = 'LEGEND';
40) ์ง๋ฃ๊ณผ๋ณ ์ด ์์ฝ ํ์ ์ถ๋ ฅํ๊ธฐ
APPOINTMENT
ํ ์ด๋ธ์์ 2022๋ 5์์ ์์ฝํ ํ์ ์๋ฅผ ์ง๋ฃ๊ณผ์ฝ๋ ๋ณ๋ก ์กฐํํ๋ SQL๋ฌธ์ ์์ฑ. ์ด๋, ์ปฌ๋ผ๋ช ์ โ์ง๋ฃ๊ณผ ์ฝ๋โ, โ5์์์ฝ๊ฑด์โ๋ก ์ง์ ํด์ฃผ์๊ณ ๊ฒฐ๊ณผ๋ ์ง๋ฃ๊ณผ๋ณ ์์ฝํ ํ์ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๊ณ , ์์ฝํ ํ์ ์๊ฐ ๊ฐ๋ค๋ฉด ์ง๋ฃ๊ณผ ์ฝ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
1
2
3
4
5
SELECT MCDP_CD AS '์ง๋ฃ๊ณผ์ฝ๋', COUNT(PT_NO) AS '5์์์ฝ๊ฑด์'
FROM APPOINTMENT
WHERE APNT_YMD LIKE '2022-05%'
GROUP BY MCDP_CD
ORDER BY COUNT(PT_NO), MCDP_CD;
HAVING์ ์ง๊ณ ํจ์์ ์กฐ๊ฑด์ ๊ฑธ ๋ ์ฌ์ฉํ๋ค.
ORDER๋ฌธ์
' '
๊ธ์ง
41) ๊ณ ์์ด์ ๊ฐ๋ ๋ช ๋ง๋ฆฌ ์์๊น
- ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ ์ค ๊ณ ์์ด์ ๊ฐ๊ฐ ๊ฐ๊ฐ ๋ช ๋ง๋ฆฌ์ธ์ง ์กฐํํ๋ SQL๋ฌธ์ ์์ฑ. ์ด๋ ๊ณ ์์ด๋ฅผ ๊ฐ๋ณด๋ค ๋จผ์ ์กฐํ.
1
2
3
4
SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) AS 'count'
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE;
42) ์ค์ฑํ ์ฌ๋ถ ํ์ ํ๊ธฐ
- ๋๋ฌผ์ ์์ด๋์ ์ด๋ฆ, ์ค์ฑํ ์ฌ๋ถ๋ฅผ ์์ด๋ ์์ผ๋ก ์กฐํํ๋ SQL๋ฌธ์ ์์ฑ. ๋๋ฌผ์ ์์ด๋์ ์ด๋ฆ, ์ค์ฑํ ์ฌ๋ถ๋ฅผ ์์ด๋ ์์ผ๋ก ์กฐํํ๋ SQL๋ฌธ์ ์์ฑ
1
2
SELECT ANIMAL_ID, NAME, IF(SEX_UPON_INTAKE LIKE '%Neutered%' OR SEX_UPON_INTAKE LIKE '%Spayed%', 'O', 'X') AS '์ค์ฑํ'
FROM ANIMAL_INS
43) ์ ์ ์๊ฐ ๊ตฌํ๊ธฐ(1)
- 09:00๋ถํฐ 19:59๊น์ง, ๊ฐ ์๊ฐ๋๋ณ๋ก ์ ์์ด ๋ช ๊ฑด์ด๋ ๋ฐ์ํ๋์ง ์กฐํํ๋ SQL๋ฌธ์ ์์ฑ. ๊ฒฐ๊ณผ๋ ์๊ฐ๋ ์์ผ๋ก ์ ๋ ฌ.
1
2
3
4
5
SELECT HOUR(DATETIME) AS 'HOUR', COUNT(*) AS 'COUNT'
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) >=9 AND HOUR(DATETIME) <=19
GROUP BY HOUR(DATETIME)
ORDER BY HOUR(DATETIME);
44) ์๋์ฐจ ์ข ๋ฅ ๋ณ ํน์ ์ต์ ์ด ํฌํจ๋ ์๋์ฐจ ์ ๊ตฌํ๊ธฐ
CAR_RENTAL_COMPANY_CAR
ํ ์ด๋ธ์์ โํตํ์ํธโ, โ์ด์ ์ํธโ, โ๊ฐ์ฃฝ์ํธโ ์ค ํ๋ ์ด์์ ์ต์ ์ด ํฌํจ๋ ์๋์ฐจ๊ฐ ์๋์ฐจ ์ข ๋ฅ ๋ณ๋ก ๋ช ๋์ธ์ง ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑ. ์ด๋ ์๋์ฐจ ์์ ๋ํ ์ปฌ๋ผ๋ช ์CARS
๋ก ์ง์ ํ๊ณ , ๊ฒฐ๊ณผ๋ ์๋์ฐจ ์ข ๋ฅ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
1
2
3
4
5
SELECT CAR_TYPE, COUNT(*) AS 'CARS'
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE '%ํตํ์ํธ%' OR OPTIONS LIKE '%์ด์ ์ํธ%' OR OPTIONS LIKE '%๊ฐ์ฃฝ์ํธ%'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE ASC;
45) ์ํ ๋ณ ์คํ๋ผ์ธ ๋งค์ถ ๊ตฌํ๊ธฐ
PRODUCT
ํ ์ด๋ธ๊ณผOFFLINE_SALE
ํ ์ด๋ธ์์ ์ํ์ฝ๋ ๋ณ ๋งค์ถ์ก(ํ๋งค๊ฐ * ํ๋งค๋) ํฉ๊ณ๋ฅผ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑ. ๊ฒฐ๊ณผ๋ ๋งค์ถ์ก์ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์๊ณ ๋งค์ถ์ก์ด ๊ฐ๋ค๋ฉด ์ํ์ฝ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
1
2
3
4
5
SELECT A.PRODUCT_CODE, SUM(A.PRICE*B.SALES_AMOUNT) AS 'SALES'
FROM PRODUCT A
JOIN OFFLINE_SALE B ON A.PRODUCT_ID = B.PRODUCT_ID
GROUP BY A.PRODUCT_CODE
ORDER BY SUM(A.PRICE*B.SALES_AMOUNT) DESC, A.PRODUCT_CODE ASC;
46) ์ฑ๋ถ์ผ๋ก ๊ตฌ๋ถํ ์์ด์คํฌ๋ฆผ ์ด ์ฃผ๋ฌธ๋
- ์๋ฐ๊ธฐ ๋์ ๊ฐ ์์ด์คํฌ๋ฆผ ์ฑ๋ถ ํ์ ๊ณผ ์ฑ๋ถ ํ์ ์ ๋ํ ์์ด์คํฌ๋ฆผ์ ์ด์ฃผ๋ฌธ๋์ ์ด์ฃผ๋ฌธ๋์ด ์์ ์์๋๋ก ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑ. ์ด๋ ์ด์ฃผ๋ฌธ๋์ ๋ํ๋ด๋ ์ปฌ๋ผ๋ช ์ TOTAL_ORDER๋ก ์ง์ .
1
2
3
4
5
SELECT B.INGREDIENT_TYPE, SUM(A.TOTAL_ORDER) AS 'TOTAL_ORDER'
FROM FIRST_HALF A
JOIN ICECREAM_INFO B ON A.FLAVOR = B.FLAVOR
GROUP BY B.INGREDIENT_TYPE
ORDER BY A.TOTAL_ORDER
47) ์กฐ๊ฑด์ ๋ง๋ ๋์์ ์ ์ ๋ฆฌ์คํธ ์ถ๋ ฅํ๊ธฐ
'๊ฒฝ์ '
์นดํ ๊ณ ๋ฆฌ์ ์ํ๋ ๋์๋ค์ ๋์ ID(BOOK_ID
), ์ ์๋ช (AUTHOR_NAME
), ์ถํ์ผ(PUBLISHED_DATE
) ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑ. ๊ฒฐ๊ณผ๋ ์ถํ์ผ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
1
2
3
4
5
SELECT BOOK_ID, AUTHOR_NAME, DATE_FORMAT(PUBLISHED_DATE, "%Y-%m-%d") AS 'PUBLISHED_DATE'
FROM BOOK A
JOIN AUTHOR B ON A.AUTHOR_ID = B.AUTHOR_ID
WHERE CATEGORY LIKE '๊ฒฝ์ '
ORDER BY PUBLISHED_DATE ASC;
48) ๋ฃจ์์ ์๋ผ ์ฐพ๊ธฐ
- ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ ์ค ์ด๋ฆ์ด Lucy, Ella, Pickle, Rogan, Sabrina, Mitty์ธ ๋๋ฌผ์ ์์ด๋์ ์ด๋ฆ, ์ฑ๋ณ ๋ฐ ์ค์ฑํ ์ฌ๋ถ๋ฅผ ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑ
1
2
3
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME LIKE "Lucy" OR NAME LIKE "Ella" OR NAME LIKE "Pickle" OR NAME LIKE "Rogan" OR NAME LIKE "Sabrina" OR NAME LIKE "Mitty"
49) 3์์ ํ์ด๋ ์ฌ์ฑ ํ์ ๋ชฉ๋ก ์ถ๋ ฅํ๊ธฐ
MEMBER_PROFILE
ํ ์ด๋ธ์์ ์์ผ์ด 3์์ธ ์ฌ์ฑ ํ์์ ID, ์ด๋ฆ, ์ฑ๋ณ, ์๋ ์์ผ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑ. ์ด๋ ์ ํ๋ฒํธ๊ฐ NULL์ธ ๊ฒฝ์ฐ๋ ์ถ๋ ฅ๋์์์ ์ ์ธ์์ผ ์ฃผ์๊ณ , ๊ฒฐ๊ณผ๋ ํ์ID๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
1
2
3
4
SELECT MEMBER_ID, MEMBER_NAME, GENDER, DATE_FORMAT(DATE_OF_BIRTH,"%Y-%m-%d") AS DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE MONTH(DATE_OF_BIRTH) = 3 AND GENDER LIKE 'W'AND TLNO IS NOT NULL
ORDER BY MEMBER_ID ASC;