๐Ÿ”ฅ SQL

[D+1] ์—‘์…€๋ณด๋‹ค ์‰ฌ์šด SQL(1) - ํ”„๋กœ๊ทธ๋žจ ์„ค์น˜, ๋ฐ์ดํ„ฐ ์กฐํšŒ์™€ ํ•„ํ„ฐ๋ง(SELECT, WHERE ๋“ฑ)

๊น€์ˆฎ์—‰ 2024. 4. 15. 19:50

์ŠคํŒŒ๋ฅดํƒ€ ์ฝ”๋”ฉ ๊ณต๋ถ€์ค‘ ์ชผ๋ ™์ด ๋งŒ๋ ™๋˜๊ธฐ๊นŒ์ง€!

 

๋“œ๋””์–ด SQL ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. 

[D+] ์˜๋ฏธ๋Š” ๋งค์ผ๊ฐ™์ด ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์˜ฌ๋ฆฌ๊ฒ ๋‹ค๋Š” ์ €์˜ ์ž‘์€ ํฌ๋ถ€๋ฅผ ๋“œ๋Ÿฌ๋‚ธ ๊ฑฐ์—์š”. 

๋…ํ•™ํ•˜์‹œ๋Š” ๋ถ„๋“ค์€ ์œ„ ์ˆœ์„œ์— ๋งž์ถฐ ๊ธ€์„ ์ฝ์œผ์‹ ๋‹ค๋ฉด ๊ฐœ๋… ์ •๋ฆฌ์— ๋„์›€์ด ๋˜์ง€ ์•Š์„๊นŒ ์‹ถ์–ด์š”. 

๊ฑฐ๋‘์ ˆ๋ฏธํ•˜๊ณ  ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ ๋ณต์Šต์ด๋‚˜ ํ•ด๋ณผ๊ฒŒ์š”.

 

โœ๏ธStudy Index 

1. Mysql ํ”„๋กœ๊ทธ๋žจ ์„ค์น˜ 
2. SQL ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ๋ฐ์ดํ„ฐ ์กฐํšŒํ•˜๊ธฐ (SELECT, FROM) 
3. ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋งํ•˜๊ธฐ (WHERE) 
4. ํ•„ํ„ฐ๋ง์— ์œ ์šฉํ•œ ํ‘œํ˜„ ์•Œ์•„๋ณด๊ธฐ (๋น„๊ต์—ฐ์‚ฐ, BETWEEN, IN, LIKE) 

 

1. Mysql ํ”„๋กœ๊ทธ๋žจ ์„ค์น˜ 

๋‹น์—ฐํžˆ sql์„ ํ•˜๋ ค๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ๊ฒ ์ฃ ?

๋ฐ์ดํ„ฐ ๋ถ„์„์„ ๋„์™€์ฃผ๋Š” DBeaver Community ํ”Œ๋žซํผ์— ๋“ค์–ด๊ฐ€ ๋ณธ์ธ์˜ OS์— ๋งž๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

๐Ÿ‘‰ ์„ค์น˜ ์‚ฌ์ดํŠธ ๋งํฌ https://dbeaver.io/download/ 

 

์ฒ˜์Œ ์‹คํ–‰ํ•˜๋ฉด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋„๊ตฌ ์•„์ด์ฝ˜ ๋“ฑ์ด ๋‚˜์˜ฌ ํ…๋ฐ, ๊ทธ๋•Œ ์•„๋ž˜ ๋Œ๊ณ ๋ž˜๊ฐ€ ์žˆ๋Š” MySQL์„ ์„ ํƒํ•ด์ฃผ์‹œ๋ฉด ๋ผ์š”! 

๊ฒ€์ƒ‰๋„ ๊ฐ€๋Šฅํ•˜๋‹ˆ, ์•ˆ ๋ณด์ธ๋‹ค๊ณ  ๋ฉ˜๋ถ• ์˜ค์ง€ ๋งˆ์‹œ๊ณ  ์ง์ ‘ ๊ฒ€์ƒ‰ํ•˜์…”์„œ ์„ ํƒํ•˜๋ฉด ๋!

๊ทธ ์ดํ›„์—๋Š” ์ขŒ์ธก ์ƒ๋‹จ ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜๋ฉด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด์š”. 

2. SQL ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ๋ฐ์ดํ„ฐ ์กฐํšŒ ๋ฐฉ๋ฒ• (SELECT, FROM) 

ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์•ž์„œ ํ•„์š”ํ•œ ๊ธฐ๋ณธ ๊ฐœ๋…์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณผ๊ฒŒ์š”. 

  • SQL(Structured Query Language)์€ ๋ง ๊ทธ๋Œ€๋กœ ๊ตฌ์กฐํ™”๋œ ์งˆ์˜ ์–ธ์–ด ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์–ด์š”. ๊ทธ๋ƒฅ ์–ธ์–ด์˜ˆ์š”. 
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์‰ฝ๊ฒŒ ๋งํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ํฐ ํด๋”๋ผ๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Œ€์š”. ๊ทธ ์•ˆ์— 'ํ…Œ์ด๋ธ”'์ด๋ผ๋Š” ์—ฌ๋Ÿฌ ํŒŒ์ผ์ด ์žˆ๋Š” ํ˜•ํƒœ์˜ˆ์š”. 
    • ํ…Œ์ด๋ธ” ์€ ๋งˆ์น˜ ์—‘์…€๊ณผ ๊ฐ™์ด ํ–‰๊ณผ ์—ด ๊ตฌ์กฐ์˜ ๋ฐ์ดํ„ฐ์˜ˆ์š”. 
    • ๊ทธ๋ฆฌ๊ณ  ํ…Œ์ด๋ธ” ์•ˆ์— ๊ฐ ์—ด์„ '์ปฌ๋Ÿผ' ํ˜น์€ 'ํ•„๋“œ'๋ผ๊ณ  ๋ถ€๋ฅธ๋Œ€์š”. 
    • ์š”์•ฝํ•˜์ž๋ฉด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ํ–‰๊ณผ ์—ด์„ ๊ฐ€์ง„ ๋งŽ์€ ํ…Œ์ด๋ธ”์ด ์กด์žฌํ•˜๊ณ , ํ…Œ์ด๋ธ”์˜ ์—ด์„ ์ปฌ๋Ÿผ(ํ˜น์€ ํ•„๋“œ)๋ผ๊ณ  ํ•œ๋‹ค. [ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค > ํ…Œ์ด๋ธ” > ์ปฌ๋Ÿผ ] ์ด๋Ÿฐ ๊ตฌ์กฐ๋กœ ์ •๋ฆฌ๋˜์–ด ์žˆ๊ฒ ๋„ค์š”.

๊ทธ๋Ÿผ ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์–ด๋–ป๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ• ๊นŒ์š”? 

์ œ์ผ ๊ธฐ๋ณธ์ด ๋˜๋Š” ๋ฐ์ดํ„ฐ ์กฐํšŒ ํ•จ์ˆ˜๊ฐ€ ๋ฐ”๋กœ SELECT FROM ์ž…๋‹ˆ๋‹ค.

 

์•„๋ž˜์ฒ˜๋Ÿผ ์จ์ฃผ์‹œ๋ฉด ๋˜๋Š”๋ฐ, from ๋’ค์—๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ํ…Œ์ด๋ธ” ๋ช…์„ select์—๋Š” ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ” ์ด๋ฆ„์„ ์จ์ฃผ์‹œ๋ฉด ๋ผ์š”. ๋งŒ์•ฝ ํŠน์ • ์ปฌ๋Ÿผ์ด ์•„๋‹Œ ํ…Œ์ด๋ธ” ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด select * ์„ ์ ์–ด์ฃผ์‹œ๋ฉด ๋ผ์š”! 

select ์ปฌ๋Ÿผ1, ์ปฌ๋Ÿผ2 ๋˜๋Š” * (ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์ „์ฒด ์กฐํšŒ์‹œ * ์‚ฌ์šฉ)
from ํ…Œ์ด๋ธ”๋ช…

 

3. ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋งํ•˜๊ธฐ (WHERE)

๊ทธ๋Ÿผ ๋ฐ์ดํ„ฐ์—์„œ ํŠน์ • ์กฐ๊ฑด์— ๋งž๋Š” ๊ฒƒ๋“ค๋งŒ ํ•„ํ„ฐ๋ง ํ•ด์•ผํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” WHERE ๋ฌธ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ์‚ฌ์šฉํ•ด์š”. 

select * 
from ํ…Œ์ด๋ธ” 
where ํ•„ํ„ฐ๋ง ์กฐ๊ฑด (ex. age = 20 ๋˜๋Š” geder = 'male')

 

๋ˆˆ์น˜ ์ฑ„์‹  ๋ถ„๋„ ๊ณ„์‹ ๊ฐ€์š”? ์ผ๋ฐ˜์ ์ธ ์ˆซ์ž๋Š” ๊ทธ๋Œ€๋กœ ์ ์–ด์ฃผ์…”๋„ ๋ฌด๊ด€ํ•˜์ง€๋งŒ 

๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—” ๊ผญ '์ž‘์€ ๋”ฐ์˜ดํ‘œ' ์•ˆ์— ๋„ฃ์–ด์ฃผ์…”์•ผ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 

์ €๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰(ctrl + enter ํ•จ๊ป˜ ๋ˆ„๋ฅด๊ธฐ) ํ•˜์‹œ๋ฉด, ์•„๋ž˜ ์กฐ๊ฑด์— ๋งž๋Š” ๊ฐ’๋“ค์ด ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

4. ํ•„ํ„ฐ๋ง์— ์œ ์šฉํ•œ ํ‘œํ˜„ ์•Œ์•„๋ณด๊ธฐ (๋น„๊ต์—ฐ์‚ฐ, BETWEEN, IN, LIKE)

where ์ ˆ์— ์›ํ•˜๋Š” ์กฐ๊ฑด์„ ํ•ญ์ƒ ๊ฐ™๋‹ค(=)๊ณ ๋งŒ ๋„ฃ์„ ์ˆœ ์—†๊ฒ ์ฃ ? 

๋” ๋‹ค์–‘ํ•˜๊ฒŒ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์กฐ๊ฑด์„ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค๋“œ๋ฆด๊ฒŒ์š”. 

 

์—ฌ๊ธฐ์„œ ์ž ๊นโœ‹ "๊ฐ™์ง€ ์•Š๋‹ค(≠)"๋Š” ์–ด๋–ป๊ฒŒ ํ‘œํ˜„ํ• ๊นŒ์š”?

<> ์ด๋ ‡๊ฒŒ ํ‘œํ˜„ํ•ด์š”! ๋Œ€๋ฐ•์ด์ฃ ?! ์ €๋Š” =/= ์ด๋ ‡๊ฒŒ ํ‘œํ˜„ํ•  ์ค„ ใ…Žใ…‹

์•”ํŠผ ๊ฐ•์˜ ๋“ฃ๋Š” ์ค‘์— ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ๋œ + ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ–ˆ๋˜ ๋‚ด์šฉ์ด๋ผ ํ•œ๋ฒˆ ์ ์–ด๋ดค์–ด์š”. 

 

(1) ๋น„๊ต์—ฐ์‚ฐ์ž์˜ ์ข…๋ฅ˜

= ๊ฐ™๋‹ค 
<> ๊ฐ™์ง€ ์•Š๋‹ค (๋‹ค๋ฅด๋‹ค) 
> ํฌ๋‹ค 
>= ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค 
< ์ž‘๋‹ค 
<= ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค

(์˜ˆ์‹œ) ๋‚˜์ด๊ฐ€ 21์„ธ ๋ฏธ๋งŒ์ธ ๊ณ ๊ฐ ์กฐํšŒํ•˜๊ธฐ 
select *
from costomers 
where age < 21

 

(2) ํฌํ•จ๊ณผ ๊ด€๋ จ๋œ ์กฐ๊ฑด (BETWEEN, IN, LIKE)

'ํฌํ•จ๊ณผ ๊ด€๋ จ๋˜์—ˆ๋‹ค'๋Š” ๋ง์€ ์ œ๊ฐ€ ์Šค์Šค๋กœ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ํ‘œํ˜„ํ•ด๋ณธ ๊ฑฐ์˜ˆ์š”. ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”. 

 

BETWEEN A and B A์™€ B ์‚ฌ์ด 
IN 'ํฌํ•จ'ํ•˜๋Š” ์กฐ๊ฑด ์ฃผ๊ธฐ 
LIKE ์™„์ „ํžˆ ๋˜‘๊ฐ™์ง„ ์•Š์ง€๋งŒ ๋น„์Šทํ•œ ๊ฐ’ ์กฐ๊ฑด ์ฃผ๊ธฐ 

(์˜ˆ์‹œ) ์ฃผ๋ฌธ ํ…Œ์ด๋ธ”์—์„œ B๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ƒ์ ์˜ ์ฃผ๋ฌธ ์กฐํšŒํ•˜๊ธฐ 
select *
from food_orders
where restaurant_name like 'B%'

 

(3) ์—ฌ๋Ÿฌ ๊ฐœ ์กฐ๊ฑด์„ ํ•œ๋ฒˆ์— ์ ์šฉ (and, or, not)  

AND ๊ทธ๋ฆฌ๊ณ  
OR ๋˜๋Š” 
NOT ์•„๋‹Œ 

(์˜ˆ์‹œ) ๊ฒฐ์ œ ํ…Œ์ด๋ธ”์—์„œ ์นด๋“œ๋กœ ๊ฒฐ์ œํ–ˆ๊ฑฐ๋‚˜, VAT ์œจ์ด 0.2 ์ดํ•˜์ธ ๊ฒฝ์šฐ ์กฐํšŒ 
select *
from payments 
where pay_type = 'card' or vat <= 0.2

 

์ฒซ ๋‚  ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ๊นŒ์ง€์˜ˆ์š”. 

 

์˜จ๋ผ์ธ ๊ฐ•์˜๋Š” ์ƒ๊ฐ๋ณด๋‹ค ๋„ˆ๋ฌด ์‰ฝ๊ฒŒ ์ž˜ ์•Œ๋ ค์ฃผ์…”์„œ ๋”ฐ๋ผ๊ฐ€๋Š”๊ฒŒ ๋งค์šฐ ์ˆ˜์›”ํ–ˆ์–ด์š”. 

์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š”๋Œ€๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ฆฌ๋˜์–ด ์ถ”์ถœ๋˜๋Š” ๊ณผ์ •์ด ๋„ˆ๋ฌด ๊น”๋”ํ•˜๋‹ˆ ์žฌ๋ฏธ์žˆ๊ณ  ์ข‹๋”๋ผ๊ตฌ์š”.

์ฒ˜์Œ์—” ๋ง‰์—ฐํ•˜๊ฒŒ ์ฝ”๋”ฉ์ด๋‹ˆ๊น ์–ด๋ ต์ง€ ์•Š์„๊นŒ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ์ง€๊ธˆ์€ 1์ผ์ฐจ์—ฌ์„œ(ใ…‹ใ…‹) ๊ทธ๋Ÿฐ์ง€ ๋„ˆ๋ฌด ๋„ˆ๋ฌด ์žฌ๋ฏธ์žˆ์–ด์š”! 

์–ธ์  ๊ฐ€ ์ข€ ๋” ์–ด๋ ค์›Œ ๋ณด์ด๋Š” ๊ณ ๊ธ‰ ์Šคํ‚ฌ ๊ณต๋ถ€๋ฅผ ๋‚จ๊ธฐ๋Š” ๋ธ”๋กœ๊ทธ๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ฒŒ ์ •์ง„ ํ•ด์•ผ๊ฒ ์–ด์š”๐Ÿ€

 

<์—‘์…€๋ณด๋‹ค ์‰ฌ์šด SQL> ์˜จ๋ผ์ธ ๊ฐ•์˜ 1์ฃผ์ฐจ ์ž๋ฐœ์  ํ•™์Šต ๋…ธํŠธ์ž…๋‹ˆ๋‹ค.