Home [PROGRAMMERS - SQL ] SELECT (MYSQL)
Post
Cancel

[PROGRAMMERS - SQL ] SELECT (MYSQL)

Level 1

๐Ÿ”— ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL ํ‰๊ท  ์ผ์ผ ๋Œ€์—ฌ ์š”๊ธˆ ๊ตฌํ•˜๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/151136

๋ฌธ์ œ

CAR_RENTAL_COMPANY_CAR ํ…Œ์ด๋ธ”์—์„œ ์ž๋™์ฐจ ์ข…๋ฅ˜๊ฐ€ โ€˜SUVโ€™์ธ ์ž๋™์ฐจ๋“ค์˜ ํ‰๊ท  ์ผ์ผ ๋Œ€์—ฌ ์š”๊ธˆ์„ ์ถœ๋ ฅํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์ด๋•Œ ํ‰๊ท  ์ผ์ผ ๋Œ€์—ฌ ์š”๊ธˆ์€ ์†Œ์ˆ˜ ์ฒซ ๋ฒˆ์งธ ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผํ•˜๊ณ , ์ปฌ๋Ÿผ๋ช…์€ AVERAGE_FEE ๋กœ ์ง€์ •ํ•ด์ฃผ์„ธ์š”.

ํ’€์ด

sql๋ฌธ๋ฒ•์—์„œ ํ‰๊ท ์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜๋Š” AVG() ํ•จ์ˆ˜์ด๊ณ , ๋ฐ˜์˜ฌ๋ฆผ ํ•จ์ˆ˜๋Š” ROUND() ํ•จ์ˆ˜

๊ฒฐ๊ณผ๊ฐ’์„ ์ปฌ๋Ÿผ์— ๋ณ„์นญ์œผ๋กœ ์ฃผ๋Š” ํ‚ค์›Œ๋“œ๋Š” AS ์ปฌ๋Ÿผ๋ช… ์ด๋‹ค.

1
2
3
SELECT ROUND(AVG(DAILY_FEE)) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR 
WHERE CAR_TYPE = "SUV";

๐Ÿ”— ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL ํ‰๋ถ€์™ธ๊ณผ ๋˜๋Š” ์ผ๋ฐ˜์™ธ๊ณผ ์˜์‚ฌ ๋ชฉ๋ก ์ถœ๋ ฅํ•˜๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/132203

๋ฌธ์ œ

DOCTOR ํ…Œ์ด๋ธ”์—์„œ ์ง„๋ฃŒ๊ณผ๊ฐ€ ํ‰๋ถ€์™ธ๊ณผ(CS)์ด๊ฑฐ๋‚˜ ์ผ๋ฐ˜์™ธ๊ณผ(GS)์ธ ์˜์‚ฌ์˜ ์ด๋ฆ„, ์˜์‚ฌID, ์ง„๋ฃŒ๊ณผ, ๊ณ ์šฉ์ผ์ž๋ฅผ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์ด๋•Œ ๊ฒฐ๊ณผ๋Š” ๊ณ ์šฉ์ผ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•˜๊ณ , ๊ณ ์šฉ์ผ์ž๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”.

ํ’€์ด

WHERE, ORDER BY๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ–ˆ์œผ๋‚˜ HIRE_YMD์˜ ๋‚ ์งœ ํฌ๋งท์ด ๋‹ฌ๋ž๋‹ค.

์š”๊ตฌํ•˜๋Š” ํฌ๋งท์€ โ€œYYYY-MM-DDโ€ ์˜€์ง€๋งŒ ๋‚˜๋Š” โ€œYYYY-MM-DD h : m : sโ€ ํฌ๋งท์œผ๋กœ ๋‚˜์™€๋ฒ„๋ ธ๋‹ค.

๋‚ ์งœ ํฌ๋งท์„ ์›ํ•˜๋Š” ํ˜•์‹์œผ๋กœ ์ง€์ •ํ•˜๋Š” ํ•จ์ˆ˜๋Š” DATE_FORMAT(์ปฌ๋Ÿผ๋ช…, โ€œ๊ตฌ๋ถ„๊ธฐํ˜ธโ€) ์˜€๊ณ  ์ด๋ฅผ ํ™œ์šฉํ–ˆ๋‹ค.

๊ตฌ๋ถ„๊ธฐํ˜ธ

๊ตฌ๋ถ„๊ธฐํ˜ธ์—ญํ• ๊ตฌ๋ถ„๊ธฐํ˜ธ์—ญํ• 
%Y4์ž๋ฆฌ ์—ฐ๋„%k24์‹œ๊ฐ„ ํ‘œ๊ธฐ๋ฒ• 0 ~ 23
%y2์ž๋ฆฌ ์—ฐ๋„%l12์‹œ๊ฐ„ ํ‘œ๊ธฐ๋ฒ• 1 ~ 12
%M์˜๋ฌธ ์›”(ex. July)%pAM/PM ํ‘œ์‹œ
%m์ˆซ์ž ์›”(ex. 07)%rhh:mm:ss AM/PM ํ˜•์‹
%D์˜๋ฌธ ์ผ์ž(ex. 1st)%S์ดˆ 00 ~ 59
%d์ˆซ์ž ์ผ์ž(ex. 01)%s์ดˆ 00 ~ 59
%a์š”์ผ ๋ช…์„ Sun to Sat%T24์‹œ๊ฐ„ ํ‘œ๊ธฐ๋ฒ• hh:mm:ss
%b์›”์„ Jan to Dec%U์ผ์š”์ผ์ด ์ฒซ์งธ๋‚ ์ธ ์ฃผ (00 ~ 53)
%c์›”์„ 0 ~ 12%u์›”์š”์ผ์ด ์ฒซ์งธ๋‚ ์ธ ์ฃผ (00 ~ 53)
%e์ผ์ž๋ฅผ 0 ~ 31%V์ผ์š”์ผ์ด ์ฒซ์งธ๋‚ ์ธ ์ฃผ (01 ~ 53) %X์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ
%f๋งˆ์ดํฌ๋กœ์ดˆ 000000 ~ 999999%v์›”์š”์ผ์ด ์ฒซ์งธ๋‚ ์ธ ์ฃผ (01 ~ 53) %x์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ
%H์‹œ๊ฐ„์„ 00 ~ 23%W์š”์ผ์„ ํ’€๋„ค์ž„์œผ๋กœ
%h์‹œ๊ฐ„์„ 00 ~ 12%w์ผ์š”์ผ = 0 ~ ํ† ์š”์ผ = 6
%I์‹œ๊ฐ„์„ 00 ~ 12%X์ผ์ฃผ์ผ์˜ ์‹œ์ž‘์„ ์ผ์š”์ผ๋กœ
%i๋ถ„ 00 ~ 59%x์ผ์ฃผ์ผ์˜ ์‹œ์ž‘์„ ์›”์š”์ผ๋กœ
%j๋‚ ์งœ(์—ฐ ๊ธฐ์ค€) 001 ~ 366%Y๋…„๋„ 4์ž๋ฆฌ ํ‘œํ˜„
ย ย %y๋…„๋„ 2์ž๋ฆฌ ํ‘œํ˜„
1
2
3
4
5
6
7
SELECT DR_NAME, 
       DR_ID, 
       MCDP_CD, 
       DATE_FORMAT(HIRE_YMD, "%Y-%M-%d")
FROM DOCTOR
WHERE MCDP_CD = "CS" OR MCDP_CD = "GS"
ORDER BY HIRE_YMD DESC, DR_NAME ASC;

๐Ÿ”— ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL ์กฐ๊ฑด์— ๋งž๋Š” ๋„์„œ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅํ•˜๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/144853?language=mysql

๋ฌธ์ œ

BOOK ํ…Œ์ด๋ธ”์—์„œ 2021๋…„์— ์ถœํŒ๋œ โ€˜์ธ๋ฌธโ€™ ์นดํ…Œ๊ณ ๋ฆฌ์— ์†ํ•˜๋Š” ๋„์„œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ฐพ์•„์„œ ๋„์„œ ID(BOOK_ID), ์ถœํŒ์ผ (PUBLISHED_DATE)์„ ์ถœ๋ ฅํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ๊ฒฐ๊ณผ๋Š” ์ถœํŒ์ผ์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”.

ํ’€์ด

DATE_FORMAT์„ ์ž˜ ์ด์šฉํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์˜€๋‹ค.

1
2
3
4
5
SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, "%Y-%m-%d")
FROM BOOK
WHERE DATE_FORMAT(PUBLISHED_DATE, "%Y") = "2021"
AND CATEGORY = "์ธ๋ฌธ"
ORDER BY PUBLISHED_DATE;

๐Ÿ”— ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL ์ธ๊ธฐ์žˆ๋Š” ์•„์ด์Šคํฌ๋ฆผ https://school.programmers.co.kr/learn/courses/30/lessons/133024

๋ฌธ์ œ

์ƒ๋ฐ˜๊ธฐ์— ํŒ๋งค๋œ ์•„์ด์Šคํฌ๋ฆผ์˜ ๋ง›์„ ์ด์ฃผ๋ฌธ๋Ÿ‰์„ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•˜๊ณ  ์ด์ฃผ๋ฌธ๋Ÿ‰์ด ๊ฐ™๋‹ค๋ฉด ์ถœํ•˜ ๋ฒˆํ˜ธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•˜์—ฌ ์กฐํšŒํ•˜๋Š” SQL ๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

ํ’€์ด

์ •๋ง ๊ธฐ๋ณธ์ค‘์˜ ๊ธฐ๋ณธ์ธ ๋ฌธ์ œ๊ธฐ์— ์„ค๋ช…ํ• ๊ฒŒ ์—†๋‹ค..

1
2
3
SELECT FLAVOR 
FROM FIRST_HALF 
ORDER BY TOTAL_ORDER DESC , SHIPMENT_ID ;

๐Ÿ”— ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL ๊ฐ•์›๋„์— ์œ„์น˜ํ•œ ์ƒ์‚ฐ๊ณต์žฅ ๋ชฉ๋ก ์ถœ๋ ฅํ•˜๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/131112

๋ฌธ์ œ

FOOD_FACTORY ํ…Œ์ด๋ธ”์—์„œ ๊ฐ•์›๋„์— ์œ„์น˜ํ•œ ์‹ํ’ˆ๊ณต์žฅ์˜ ๊ณต์žฅ ID, ๊ณต์žฅ ์ด๋ฆ„, ์ฃผ์†Œ๋ฅผ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์ด๋•Œ ๊ฒฐ๊ณผ๋Š” ๊ณต์žฅ ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”.

ํ’€์ด

๊ฐ•์›๋„ ๋ผ๋Š” ๋ฌธ์ž์—ด๋งŒ ์ถœ๋ ฅํ•ด์•ผํ–ˆ๋Š”๋ฐ mysql์—์„œ ๋ฌธ์ž์—ด ์ถ”์ถœ ํ•จ์ˆ˜๊ฐ€ SUBSTR(), SUBSTRING() ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ์—ˆ๋‹ค.

๋‚˜๋Š” SUBSTR()์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

SUBSTR(์ปฌ๋Ÿผ๋ช…, ์‹œ์ž‘์ง€์ , ๊ธธ์ด)

SUBSTRING(์ปฌ๋Ÿผ๋ช…, ์‹œ์ž‘์ง€์ , ๊ธธ์ด)

๊ธธ์ด๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด ๋๊นŒ์ง€ ์ถ”์ถœํ•œ๋‹ค.

1
2
3
4
5
SELECT FACTORY_ID, 
       FACTORY_NAME, 
       ADDRESS 
FROM FOOD_FACTORY 
WHERE SUBSTR(ADDRESS, 1, 3) = "๊ฐ•์›๋„";

๐Ÿ”— ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL 12์„ธ ์ดํ•˜์ธ ์—ฌ์ž ํ™˜์ž ๋ชฉ๋ก ์ถœ๋ ฅํ•˜๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/132201

๋ฌธ์ œ

PATIENT ํ…Œ์ด๋ธ”์—์„œ 12์„ธ ์ดํ•˜์ธ ์—ฌ์žํ™˜์ž์˜ ํ™˜์ž์ด๋ฆ„, ํ™˜์ž๋ฒˆํ˜ธ, ์„ฑ๋ณ„์ฝ”๋“œ, ๋‚˜์ด, ์ „ํ™”๋ฒˆํ˜ธ๋ฅผ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์ด๋•Œ ์ „ํ™”๋ฒˆํ˜ธ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ, โ€˜NONEโ€™์œผ๋กœ ์ถœ๋ ฅ์‹œ์ผœ ์ฃผ์‹œ๊ณ  ๊ฒฐ๊ณผ๋Š” ๋‚˜์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•˜๊ณ , ๋‚˜์ด ๊ฐ™๋‹ค๋ฉด ํ™˜์ž์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”.

ํ’€์ด

sql์—์„œ if null์„ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜๋Š” IFNULL(์ปฌ๋Ÿผ๋ช…, null์ผ๋•Œ ๋ณ€ํ™˜ํ•  ๋ฌธ์ž) ์ด๋‹ค.

1
2
3
4
5
6
7
SELECT PT_NAME,
       PT_NO, 
       GEND_CD, 
       AGE, IFNULL(TLNO, "NONE") 
FROM PATIENT
WHERE GEND_CD = "W" AND AGE <= 12
ORDER BY AGE DESC, PT_NAME ASC;

๐Ÿ”— ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL ๊ณผ์ผ๋กœ ๋งŒ๋“  ์•„์ด์Šคํฌ๋ฆผ ๊ณ ๋ฅด๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/133025

๋ฌธ์ œ

์ƒ๋ฐ˜๊ธฐ ์•„์ด์Šคํฌ๋ฆผ ์ด์ฃผ๋ฌธ๋Ÿ‰์ด 3,000๋ณด๋‹ค ๋†’์œผ๋ฉด์„œ ์•„์ด์Šคํฌ๋ฆผ์˜ ์ฃผ ์„ฑ๋ถ„์ด ๊ณผ์ผ์ธ ์•„์ด์Šคํฌ๋ฆผ์˜ ๋ง›์„ ์ด์ฃผ๋ฌธ๋Ÿ‰์ด ํฐ ์ˆœ์„œ๋Œ€๋กœ ์กฐํšŒํ•˜๋Š” SQL ๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

ํ’€์ด

๋‘ ํ…Œ์ด๋ธ”์„ ๊ฐ™์ด ๋น„๊ตํ•ด์•ผํ–ˆ๋‹ค.

๊ทธ๋ž˜๋„ ๊ต‰์žฅํžˆ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์ œ์—ฌ์„œ ์–ด๋ ค์šด๊ฑด ์—†์—ˆ๋‹ค.

1
2
3
4
5
6
SELECT FIRST_HALF.FLAVOR
FROM FIRST_HALF, ICECREAM_INFO
WHERE FIRST_HALF.FLAVOR = ICECREAM_INFO.FLAVOR 
AND FIRST_HALF.TOTAL_ORDER > 3000 
AND ICECREAM_INFO.INGREDIENT_TYPE = 'fruit_based'
ORDER BY TOTAL_ORDER DESC

๐Ÿ”— ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ ์กฐํšŒํ•˜๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/59034

๋ฌธ์ œ

๋™๋ฌผ ๋ณดํ˜ธ์†Œ์— ๋“ค์–ด์˜จ ๋ชจ๋“  ๋™๋ฌผ์˜ ์ •๋ณด๋ฅผ ANIMAL_ID์ˆœ์œผ๋กœ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. SQL์„ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ’€์ด

ํ’€์ด๊ฐ€ ํ•„์š”ํ• ๊นŒ..? ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ์กฐํšŒํ• ๋•Œ๋Š” *****๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

1
SELECT * FROM ANIMAL_INS;

๐Ÿ”— ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL ์—ญ์ˆœ ์ •๋ ฌํ•˜๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/59035

๋ฌธ์ œ

๋™๋ฌผ ๋ณดํ˜ธ์†Œ์— ๋“ค์–ด์˜จ ๋ชจ๋“  ๋™๋ฌผ์˜ ์ด๋ฆ„๊ณผ ๋ณดํ˜ธ ์‹œ์ž‘์ผ์„ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์ด๋•Œ ๊ฒฐ๊ณผ๋Š” ANIMAL_ID ์—ญ์ˆœ์œผ๋กœ ๋ณด์—ฌ์ฃผ์„ธ์š”. SQL์„ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ’€์ด

์—ญ์ˆœ์€ ORDER BY ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DESC์™€ ํ•จ๊ป˜ ์ ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

1
2
3
SELECT NAME, DATETIME
FROM ANIMAL_INS 
ORDER BY ANIMAL_ID DESC;

๐Ÿ”— ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL ์•„ํ”ˆ ๋™๋ฌผ ์ฐพ๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/59036

๋ฌธ์ œ

๋™๋ฌผ ๋ณดํ˜ธ์†Œ์— ๋“ค์–ด์˜จ ๋™๋ฌผ ์ค‘ ์•„ํ”ˆ ๋™๋ฌผ์˜ ์•„์ด๋””์™€ ์ด๋ฆ„์„ ์กฐํšŒํ•˜๋Š” SQL ๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์ด๋•Œ ๊ฒฐ๊ณผ๋Š” ์•„์ด๋”” ์ˆœ์œผ๋กœ ์กฐํšŒํ•ด์ฃผ์„ธ์š”.

ํ’€์ด

WHERE์„ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ๊ฑด์„ ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค.

1
2
3
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION = "Sick";

๐Ÿ”— ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL ์–ด๋ฆฐ ๋™๋ฌผ ์ฐพ๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/59037

๋ฌธ์ œ

๋™๋ฌผ ๋ณดํ˜ธ์†Œ์— ๋“ค์–ด์˜จ ๋™๋ฌผ ์ค‘ ์ Š์€ ๋™๋ฌผ์˜ ์•„์ด๋””์™€ ์ด๋ฆ„์„ ์กฐํšŒํ•˜๋Š” SQL ๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์ด๋•Œ ๊ฒฐ๊ณผ๋Š” ์•„์ด๋”” ์ˆœ์œผ๋กœ ์กฐํšŒํ•ด์ฃผ์„ธ์š”.

ํ’€์ด

ใ…Žใ…Ž.. ํ’€์ด๊ฐ€ ํ•„์š”ํ• ๊นŒ?

1
2
3
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION != "Aged";

๐Ÿ”— ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL ๋™๋ฌผ์˜ ์•„์ด๋””์™€ ์ด๋ฆ„ https://school.programmers.co.kr/learn/courses/30/lessons/59403

๋ฌธ์ œ

๋™๋ฌผ ๋ณดํ˜ธ์†Œ์— ๋“ค์–ด์˜จ ๋ชจ๋“  ๋™๋ฌผ์˜ ์•„์ด๋””์™€ ์ด๋ฆ„์„ ANIMAL_ID์ˆœ์œผ๋กœ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. SQL์„ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ’€์ด

์ƒ๋žต..

1
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS;

๐Ÿ”— ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL ์—ฌ๋Ÿฌ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/59404

๋ฌธ์ œ

๋™๋ฌผ ๋ณดํ˜ธ์†Œ์— ๋“ค์–ด์˜จ ๋ชจ๋“  ๋™๋ฌผ์˜ ์•„์ด๋””์™€ ์ด๋ฆ„, ๋ณดํ˜ธ ์‹œ์ž‘์ผ์„ ์ด๋ฆ„ ์ˆœ์œผ๋กœ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ๋‹จ, ์ด๋ฆ„์ด ๊ฐ™์€ ๋™๋ฌผ ์ค‘์—์„œ๋Š” ๋ณดํ˜ธ๋ฅผ ๋‚˜์ค‘์— ์‹œ์ž‘ํ•œ ๋™๋ฌผ์„ ๋จผ์ € ๋ณด์—ฌ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ’€์ด

ORDER BY ์ฒซ๋ฒˆ์งธ๊ธฐ์ค€, ๋‘๋ฒˆ์งธ๊ธฐ์ค€ ์œผ๋กœ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

1
2
3
SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY NAME, DATETIME DESC;

๐Ÿ”— ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL ์ƒ์œ„ n๊ฐœ ๋ ˆ์ฝ”๋“œ https://school.programmers.co.kr/learn/courses/30/lessons/59405

๋ฌธ์ œ

๋™๋ฌผ ๋ณดํ˜ธ์†Œ์— ๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด์˜จ ๋™๋ฌผ์˜ ์ด๋ฆ„์„ ์กฐํšŒํ•˜๋Š” SQL ๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

ํ’€์ด

Limit ๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์œ„ n๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

1
2
3
4
SELECT NAME
FROM ANIMAL_INS 
ORDER BY DATETIME
LIMIT 1;

๐Ÿ”— ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL ์กฐ๊ฑด์— ๋งž๋Š” ํšŒ์› ์ˆ˜ ๊ตฌํ•˜๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/131535

๋ฌธ์ œ

USER_INFO ํ…Œ์ด๋ธ”์—์„œ 2021๋…„์— ๊ฐ€์ž…ํ•œ ํšŒ์› ์ค‘ ๋‚˜์ด๊ฐ€ 20์„ธ ์ด์ƒ 29์„ธ ์ดํ•˜์ธ ํšŒ์›์ด ๋ช‡ ๋ช…์ธ์ง€ ์ถœ๋ ฅํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

ํ’€์ด

COUNT ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ์ˆ˜๋ฅผ ์…€ ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฒˆ์—” SUBSTRING์„ ์‚ฌ์šฉํ•ด๋ณด๊ฒ ๋‹ค.

1
2
3
4
5
SELECT COUNT(*)
FROM USER_INFO
WHERE SUBSTRING(JOINED, 1, 4)='2021' 
AND AGE >= 20 
AND AGE <= 29;

Level 2

๐Ÿ”— ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL 3์›”์— ํƒœ์–ด๋‚œ ์—ฌ์„ฑ ํšŒ์› ๋ชฉ๋ก ์ถœ๋ ฅํ•˜๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/131120

๋ฌธ์ œ

MEMBER_PROFILE ํ…Œ์ด๋ธ”์—์„œ ์ƒ์ผ์ด 3์›”์ธ ์—ฌ์„ฑ ํšŒ์›์˜ ID, ์ด๋ฆ„, ์„ฑ๋ณ„, ์ƒ๋…„์›”์ผ์„ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์ด๋•Œ ์ „ํ™”๋ฒˆํ˜ธ๊ฐ€ NULL์ธ ๊ฒฝ์šฐ๋Š” ์ถœ๋ ฅ๋Œ€์ƒ์—์„œ ์ œ์™ธ์‹œ์ผœ ์ฃผ์‹œ๊ณ , ๊ฒฐ๊ณผ๋Š” ํšŒ์›ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”.

ํ’€์ด

DATE_FORMAT ๊ณผ IS NOT NULL / IS NULL ์„ ํ™œ์šฉํ•˜์˜€๋‹ค.

1
2
3
4
5
6
7
8
SELECT MEMBER_ID, 
       MEMBER_NAME, 
       GENDER,
       DATE_FORMAT(DATE_OF_BIRTH, "%Y-%m-%d")
FROM MEMBER_PROFILE
WHERE DATE_FORMAT(DATE_OF_BIRTH, "%m") = "03"
AND GENDER = "W"
AND TLNO IS NOT NULL;

๐Ÿ”— ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL ์žฌ๊ตฌ๋งค๊ฐ€ ์ผ์–ด๋‚œ ์ƒํ’ˆ๊ณผ ํšŒ์› ๋ฆฌ์ŠคํŠธ ๊ตฌํ•˜๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/131536

๋ฌธ์ œ

ONLINE_SALE ํ…Œ์ด๋ธ”์—์„œ ๋™์ผํ•œ ํšŒ์›์ด ๋™์ผํ•œ ์ƒํ’ˆ์„ ์žฌ๊ตฌ๋งคํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌํ•˜์—ฌ, ์žฌ๊ตฌ๋งคํ•œ ํšŒ์› ID์™€ ์žฌ๊ตฌ๋งคํ•œ ์ƒํ’ˆ ID๋ฅผ ์ถœ๋ ฅํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ๊ฒฐ๊ณผ๋Š” ํšŒ์› ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์‹œ๊ณ  ํšŒ์› ID๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์ƒํ’ˆ ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”.

ํ’€์ด

GROUP BY๋ฅผ ํ•˜์—ฌ ๋™์ผํ•œ ํšŒ์›์ด ๊ตฌ๋งคํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ณ , COUNT(*)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 2 ์ด์ƒ์ธ(์žฌ๊ตฌ๋งค) ์ปฌ๋Ÿผ๋งŒ ๊ฐ€์ ธ์˜จ๋‹ค.

1
2
3
4
5
SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) >= 2
ORDER BY USER_ID, PRODUCT_ID DESC;

Level 4

๐Ÿ”— ์˜คํ”„๋ผ์ธ/์˜จ๋ผ์ธ ํŒ๋งค ๋ฐ์ดํ„ฐ ํ†ตํ•ฉํ•˜๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/131537

๋ฌธ์ œ

ONLINE_SALE ํ…Œ์ด๋ธ”๊ณผ OFFLINE_SALE ํ…Œ์ด๋ธ”์—์„œ 2022๋…„ 3์›”์˜ ์˜คํ”„๋ผ์ธ/์˜จ๋ผ์ธ ์ƒํ’ˆ ํŒ๋งค ๋ฐ์ดํ„ฐ์˜ ํŒ๋งค ๋‚ ์งœ, ์ƒํ’ˆID, ์œ ์ €ID, ํŒ๋งค๋Ÿ‰์„ ์ถœ๋ ฅํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. OFFLINE_SALE ํ…Œ์ด๋ธ”์˜ ํŒ๋งค ๋ฐ์ดํ„ฐ์˜ USER_ID ๊ฐ’์€ NULL ๋กœ ํ‘œ์‹œํ•ด์ฃผ์„ธ์š”. ๊ฒฐ๊ณผ๋Š” ํŒ๋งค์ผ์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์‹œ๊ณ  ํŒ๋งค์ผ์ด ๊ฐ™๋‹ค๋ฉด ์ƒํ’ˆ ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ, ์ƒํ’ˆID๊นŒ์ง€ ๊ฐ™๋‹ค๋ฉด ์œ ์ € ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”.

ํ’€์ด

์—ญ์‹œ ๋ ˆ๋ฒจ4๋ผ ๊ทธ๋Ÿฐ์ง€ ํ™•์‹คํžˆ ์–ด๋ ค์› ๋‹ค.

์ผ๋‹จ WITH ๊ฐ€์ƒํ…Œ์ด๋ธ”๋ช… AS์ ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ONLINE_SALE ํ…Œ์ด๋ธ”๊ณผ OFFLINE_SALEํ…Œ์ด๋ธ”์„ ๋ฌถ์€ ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค.

ONLINE_SALE๊ณผ OFFLINE_SALEํ…Œ์ด๋ธ”์€ UNION ALL ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘๋ณต๋˜๋Š” ๋ ˆ์ฝ”๋“œ๊นŒ์ง€ ํ•ฉ์ณ์ฃผ์—ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ทธ๋ƒฅ UNION์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ค‘๋ณต ๋ ˆ์ฝ”๋“œ๋Š” ์ œ๊ฑฐ๋˜๋‹ˆ ๊ผญ ALL ์„ ์‚ฌ์šฉํ•˜์—ฌ์•ผํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  BETWEEN์„ ์‚ฌ์šฉํ•˜์—ฌ 2022๋…„ 3์›” 1์ผ๋ถ€ํ„ฐ 3์›” 31์ผ ์‚ฌ์ด์— ์žˆ๋Š” ๋ ˆ์ฝ”๋“œ๋งŒ ๋ถˆ๋Ÿฌ์™”๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
WITH ALL_SALES AS (
    SELECT SALES_DATE,
           PRODUCT_ID,
           USER_ID,
           SALES_AMOUNT
    FROM ONLINE_SALE
    UNION ALL
    SELECT SALES_DATE,
           PRODUCT_ID,
           NULL AS USER_ID,
           SALES_AMOUNT
    FROM OFFLINE_SALE
)

SELECT DATE_FORMAT(SALES_DATE, "%Y-%m-%d") AS SALES_DATE,
       PRODUCT_ID,
       USER_ID,
       SALES_AMOUNT
FROM ALL_SALES
WHERE SALES_DATE 
BETWEEN "2022-03-01" AND "2022-03-31"
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID;

๐Ÿ”— ์„œ์šธ์— ์œ„์น˜ํ•œ ์‹๋‹น ๋ชฉ๋ก ์ถœ๋ ฅํ•˜๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/131118

๋ฌธ์ œ

REST_INFO์™€ REST_REVIEW ํ…Œ์ด๋ธ”์—์„œ ์„œ์šธ์— ์œ„์น˜ํ•œ ์‹๋‹น๋“ค์˜ ์‹๋‹น ID, ์‹๋‹น ์ด๋ฆ„, ์Œ์‹ ์ข…๋ฅ˜, ์ฆ๊ฒจ์ฐพ๊ธฐ์ˆ˜, ์ฃผ์†Œ, ๋ฆฌ๋ทฐ ํ‰๊ท  ์ ์ˆ˜๋ฅผ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์ด๋•Œ ๋ฆฌ๋ทฐ ํ‰๊ท ์ ์ˆ˜๋Š” ์†Œ์ˆ˜์  ์„ธ ๋ฒˆ์งธ ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผ ํ•ด์ฃผ์‹œ๊ณ  ๊ฒฐ๊ณผ๋Š” ํ‰๊ท ์ ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์‹œ๊ณ , ํ‰๊ท ์ ์ˆ˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์ฆ๊ฒจ์ฐพ๊ธฐ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”.

ํ’€์ด

AVG ๋กœ ํ‰๊ท ์„ ๊ตฌํ•œ ํ›„ ROUND()๋ฅผ ํ†ตํ•ด ๋ฐ˜์˜ฌ๋ฆผ์„ ์‹œ์ผœ์ฃผ์—ˆ๋‹ค.

JOIN์œผ๋กœ ์–‘ ์ชฝ ํ…Œ์ด๋ธ”์— ํ•ด๋‹น๊ฐ’์ด ์กด์žฌํ• ๋•Œ GROUP BY๋กœ ๋ฌถ์–ด์ฃผ์—ˆ๊ณ  WHERE ์กฐ๊ฑด์„ ๋ถ™์—ฌ์ค€ ํ›„ ORDER BY๋กœ ์ •๋ ฌํ•ด์ฃผ์—ˆ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
SELECT R.REST_ID, 
       I.REST_NAME, 
       I.FOOD_TYPE, 
       I.FAVORITES, 
       I.ADDRESS, 
       ROUND(AVG(R.REVIEW_SCORE),2) AS SCORE
FROM REST_REVIEW R
JOIN REST_INFO I 
ON R.REST_ID = I.REST_ID
GROUP BY R.REST_ID
WHERE I.ADDRESS LIKE '์„œ์šธ%'
ORDER BY SCORE DESC, I.FAVORITES DESC
This post is licensed under CC BY 4.0 by the author.

[BaekJoon] 10866 ๋ฑ JAVA

[BaekJoon] 2164 ์นด๋“œ 2 JAVA