๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[๐Ÿ“š sql ๋ฌธ๋ฒ•์„ ๊ณต๋ถ€ํ•˜์ž ๐Ÿ“š] SELECT, FROM, WHERE, ORDER BY...

by ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ  ์‹ถ์€ ๊ฐ์ž 2023. 4. 16.

์˜ค๋Š˜์€ sql์„ ์ด์šฉํ•  ๋•Œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์œผ๋กœ ์“ฐ์ธ๋‹ค๊ณ  ์ƒ๊ฐ๋œ ๋ฌธ๋ฒ•๋“ค์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž!

SELECT๋Š” SQL์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค.

SELECT ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ด๋ธ”์˜ ์—ด(column)์„ ์„ ํƒํ•˜๊ณ , ์กฐ๊ฑด์„ ์ง€์ •ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ๊ณ„์‚ฐํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

SELECT ๊ตฌ๋ฌธ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

SELECT [์—ด1, ์—ด2, ...]
FROM [ํ…Œ์ด๋ธ”๋ช…]
WHERE [์กฐ๊ฑด์‹];

 

SELECT ๋‹ค์Œ์—๋Š” ์กฐํšŒํ•˜๊ณ ์ž ํ•˜๋Š” ์—ด(column)์˜ ์ด๋ฆ„์„ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์—ด์„ ์„ ํƒํ•˜๋ ค๋ฉด *์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

FROM ๋‹ค์Œ์—๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

WHERE ๋‹ค์Œ์—๋Š” ๊ฒ€์ƒ‰ ์กฐ๊ฑด์„ ์ง€์ •ํ•˜๋ฉฐ, ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํ–‰(row)๋งŒ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. WHERE ์ ˆ์€ ์ƒ๋žตํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ์€ MEMBER_PROFILE ํ…Œ์ด๋ธ”์—์„œ MEMBER_ID, MEMBER_NAME, TLNO ์—ด์„ ์„ ํƒํ•˜๊ณ , TLNO ๊ฐ’์ด NULL์ด ์•„๋‹Œ ํ–‰๋งŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ฟผ๋ฆฌ์ž…๋‹ˆ๋‹ค.

 

SELECT MEMBER_ID, MEMBER_NAME, TLNO
FROM MEMBER_PROFILE
WHERE TLNO IS NOT NULL;

 

๊ฒฐ๊ณผ๋กœ๋Š” TLNO ๊ฐ’์ด NULL์ด ์•„๋‹Œ ํ–‰์— ๋Œ€ํ•œ MEMBER_ID, MEMBER_NAME, TLNO ์—ด์˜ ๊ฐ’์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

 

SELECT ๊ตฌ๋ฌธ์€ ๊ทธ ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ณ„์‚ฐ๋œ ์—ด, ๋ณ„์นญ(alias), ๊ทธ๋ฃนํ•‘, ์ •๋ ฌ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋”์šฑ ํšจ๊ณผ์ ์œผ๋กœ ์กฐํšŒํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ณ„์‚ฐ๋œ ์—ด (Computed columns): SELECT ๋ฌธ์—์„œ SELECT ์ ˆ์— ์ง€์ •๋œ ์—ด์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ธฐ๋ณธ ์—ด์ด๊ฑฐ๋‚˜ ํ•จ์ˆ˜, ์—ฐ์‚ฐ์ž ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์‚ฐ๋œ ์—ด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ„์‚ฐ๋œ ์—ด์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์˜ SQL ์ฟผ๋ฆฌ๋Š” "price"์™€ "quantity" ์—ด์„ ๊ณฑํ•˜์—ฌ "total_price"๋ผ๋Š” ์ƒˆ๋กœ์šด ๊ณ„์‚ฐ๋œ ์—ด์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

SELECT price, quantity, price * quantity AS total_price

FROM products;

 

๋ณ„์นญ (Alias): SELECT ๋ฌธ์—์„œ ์—ด ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ณ„์นญ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ณ„์นญ์€ AS ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์˜ SQL ์ฟผ๋ฆฌ๋Š” "product_name" ์—ด์„ "name"์œผ๋กœ, "unit_price" ์—ด์„ "price"๋กœ ๋ณ€๊ฒฝํ•˜๊ณ , "total_price" ์—ด์˜ ๋ณ„์นญ์„ "cost"๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

 

SELECT product_name AS name, unit_price AS price, price * quantity AS cost

FROM products;

 

๊ทธ๋ฃนํ•‘ (Grouping): GROUP BY ์ ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์—ด ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃน์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜๊ณ  ์ง‘๊ณ„ ํ•จ์ˆ˜ (SUM, AVG, MAX, MIN ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ฃน๋ณ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์˜ SQL ์ฟผ๋ฆฌ๋Š” "category_id" ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃน์„ ์ƒ์„ฑํ•˜๊ณ , ๊ฐ ๊ทธ๋ฃน๋ณ„๋กœ "unit_price"์˜ ํ‰๊ท ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

SELECT category_id, AVG(unit_price) AS avg_price

FROM products

GROUP BY category_id;

GROUP BY์— ๋Œ€ํ•ด์„œ๋Š” ๋’ค์— ๋ฌธ์ œ ์˜ˆ์‹œ๋กœ ๋” ์ž์„ธํ•˜๊ฒŒ ์•Œ์•„๋ณด์ž!

 

์ •๋ ฌ (Sorting): ORDER BY ์ ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์„ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜๋ฉฐ, DESC ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์˜ SQL ์ฟผ๋ฆฌ๋Š” "unit_price" ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

 

SELECT *

FROM products

ORDER BY unit_price DESC;

 

๋ฐ˜๋Œ€๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์€ ASC ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜๋Š”๋ฐ, ๋ณดํ†ต DESC๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ ์šฉ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์˜ค๋Š˜์€ ์ด๋ ‡๊ฒŒ SELECT, FROM, WHERE, ORDER BY, AS, GROUPING BY๋“ฑ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค! 

๋‹ค์Œ Sql ๋ฌธ๋ฒ• ๊ณต๋ถ€๋„ ์—ด์‹ฌํžˆ ํ•ด๋ด์š”! ๐Ÿง๐Ÿง