MySQL ๋ฌธ๋ฒ•

์ฝ”๋”ฉ๋•ยท2024๋…„ 12์›” 9์ผ

SELECT

MySQL์—์„œ๋Š” SELECT ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ… ๊ธฐ๋ณธ์‚ฌ์šฉ๋ฒ•

SELECT ํ•„๋“œ๋ช…

FROM ํ…Œ์ด๋ธ”๋ช…

WHERE [์กฐ๊ฑด]

๐Ÿ”ฅ (์˜ˆ์ œ)
์•„๋ž˜ Reservation ํ…Œ์ด๋ธ”์—์„œ ID๊ฐ€ 3์ดํ•˜, ReserveDate๊ฐ€ 2016๋…„ 2์›” 1์ผ ์ดํ›„์ธ ๋ ˆ์ฝ”๋“œ๋งŒ ์„ ํƒํ•˜์—ฌ ์ปฌ๋Ÿผ๋ช…์€ ANSWER ๋กœ ์ง€์ •ํ•ด์ฃผ์„ธ์š”.

SELECT * AS ANSWER  
FROM Reservation  
WHERE ID <= 3 AND ReserveDate > '2016-02-01'

(๊ฒฐ๊ณผ)





JOIN

MySQL์—์„œ๋Š” JOIN ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ๋ฌถ์–ด์„œ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋กœ ๋งŒ๋“ค์–ด ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
์ฆ‰, ์„œ๋กœ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

โœ… ๊ธฐ๋ณธ์‚ฌ์šฉ๋ฒ•

SELECT ํ•„๋“œ๋ช…

FROM ํ…Œ์ด๋ธ”๋ช…
JOIN ์ฐธ์กฐํ•  ํ…Œ์ด๋ธ”๋ช…
ON [์กฐ์ธ ์กฐ๊ฑด]
    
WHERE [์กฐ๊ฑด]

1. JOIN(INNER JOIN)

INNER JOIN์€ ์กฐ์ธ ์ค‘ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.
MySQL์—์„œ๋Š” JOIN, INNER JOIN์ด ๋ชจ๋‘ ๊ฐ™์€ ์˜๋ฏธ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

  • ๋‘ ํ…Œ์ด๋ธ”์—์„œ ๊ณตํ†ต๋œ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜จ๋‹ค.
  • JOINํ•˜๋Š” ํ…Œ์ด๋ธ”์˜ ON์ ˆ์˜ ์กฐ๊ฑด์ด ์ผ์น˜ํ•˜๋Š” ๊ฒฐ๊ณผ๋งŒ ์ถœ๋ ฅ

๐Ÿ”ฅ (์˜ˆ์ œ)

Employee ํ…Œ์ด๋ธ” (์ง์› ์ •๋ณด)

emp_idnamedept_id
1Alice101
2Bob102
3CharlieNULL
4David104

Department ํ…Œ์ด๋ธ” (๋ถ€์„œ ์ •๋ณด)

dept_iddept_name
101HR
102IT
103Finance
105Sales

SELECT e.emp_id, e.name, d.dept_name
FROM Employee e
JOIN Department d
ON e.dept_id = d.dept_id;

(๊ฒฐ๊ณผ)

emp_idnamedept_name
1AliceHR
2BobIT

2. LEFT JOIN

LEFT JOIN์€ ์ฒซ ๋ฒˆ์งธ ํ…Œ์ด๋ธ”์„ ๊ธฐ์ค€์œผ๋กœ ๋‘ ๋ฒˆ์งธ ํ…Œ์ด๋ธ”์„ ์กฐํ•ฉํ•˜๋Š” JOIN์ด๋‹ค.

์™ผ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ + ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ

LEFT JOIN์€ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด NULL๋กœ ์ฑ„์šฐ๋ฉฐ ํ•ฉ์ณ์ง„๋‹ค.


๐Ÿ”ฅ (์˜ˆ์ œ)

Employee ํ…Œ์ด๋ธ” (์ง์› ์ •๋ณด)

emp_idnamedept_id
1Alice101
2Bob102
3CharlieNULL
4David104

Department ํ…Œ์ด๋ธ” (๋ถ€์„œ ์ •๋ณด)

dept_iddept_name
101HR
102IT
103Finance

SELECT e.emp_id, e.name, d.dept_name
FROM Employee e
LEFT JOIN Department d
ON e.dept_id = d.dept_id;

(๊ฒฐ๊ณผ)

emp_idnamedept_name
1AliceHR
2BobIT
3CharlieNULL
4DavidNULL

3. OUTER JOIN

FULL OUTER JOIN์€ ์™ผ์ชฝ ํ…Œ์ด๋ธ”๊ณผ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์„ ๊ฐ€์ ธ์˜ค๊ณ , ์„œ๋กœ ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” JOIN์ด๋‹ค.

์–‘์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ + ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ

FULL OUTER JOIN์€ ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด NULL๋กœ ์ฑ„์šฐ๋ฉฐ ํ•ฉ์ณ์ง„๋‹ค.


๐Ÿ”ฅ (์˜ˆ์ œ)

Employee ํ…Œ์ด๋ธ” (์ง์› ์ •๋ณด)

emp_idnamedept_id
1Alice101
2Bob102
3CharlieNULL
4David104

Department ํ…Œ์ด๋ธ” (๋ถ€์„œ ์ •๋ณด)

dept_iddept_name
101HR
102IT
103Finance
105Sales

SELECT e.emp_id, e.name, d.dept_name
FROM Employee e
FULL OUTER JOIN Department d
ON e.dept_id = d.dept_id;

(๊ฒฐ๊ณผ)

emp_idnamedept_name
1AliceHR
2BobIT
3CharlieNULL
4DavidNULL
NULLNULLFinance
NULLNULLSales




GROUP BY

MySQL์—์„œ๋Š” GROUP BY ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃน์„ ๋‚˜๋ˆ ์ค€๋‹ค.
(๊ฐ’์ด ๊ฐ™์€ ์ค‘๋ณต๋ฐ์ดํ„ฐ๋ผ๋ฆฌ ๊ฐ™์€ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์ž„)
ํ”ํžˆ GROUP BY + ์ง‘๊ณ„ํ•จ์ˆ˜ ์กฐํ•ฉ์œผ๋กœ ์“ฐ์ธ๋‹ค.

โœ… ๊ธฐ๋ณธ์‚ฌ์šฉ๋ฒ•

SELECT ํ•„๋“œ๋ช…
     
FROM ํ…Œ์ด๋ธ”๋ช…

GROUP BY [๊ทธ๋ฃนํ™”ํ•˜๊ณ  ์‹ถ์€ ํ•„๋“œ๋ช…]

๐Ÿ”ฅ (์˜ˆ์ œ)
์•„๋ž˜ Book ํ…Œ์ด๋ธ”์—์„œ CATEGORY๋ณ„๋กœ ํ‰๊ท  PRICE๊ฐ’์„ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”.

Book ํ…Œ์ด๋ธ”

BOOK_IDCATEGORYAUTHOR_IDPRICE
1์ธ๋ฌธ110000
2์ธ๋ฌธ19000
3๊ฒฝ์ œ115000
4๊ฒฝ์ œ211000
SELECT CATEGORY, AVG(PRICE)
FROM STUDENT_INFO
GROUP BY CATEGORY

(๊ฒฐ๊ณผ)

CATEGORYPRICE
์ธ๋ฌธ9500
๊ฒฝ์ œ13000




๐Ÿ”Ž ์ถ”๊ฐ€๋ฌธ๋ฒ•

โœ… ROUND

์†Œ์ˆซ์  ์•„๋ž˜ a์ž๋ฆฟ์ˆ˜๊นŒ์ง€ ๋ฐ˜์˜ฌ๋ฆผํ•˜์—ฌ ํ‘œ์‹œํ•œ๋‹ค.

ROUND(๊ฐ’, a์ž๋ฆฟ์ˆ˜) # ์†Œ์ˆซ์  a์ž๋ฆฟ์ˆ˜๊นŒ์ง€ ๋ฐ˜์˜ฌ๋ฆผ

# (์˜ˆ์‹œ)
SELECT ROUND(10.87565, 1) FROM CUSTOMTABLE    # 10.9
SELECT ROUND(10.87565, 0) FROM CUSTOMTABLE    # 11

โœ… AVG

ํŠน์ • ํ…Œ์ด๋ธ”์˜ ํ•„๋“œ ๊ฐ’์˜ ํ‰๊ท ๊ฐ’์„ ๋‚ด์ค€๋‹ค.

AVG(ํ•„๋“œ๋ช…) 

# (์˜ˆ์‹œ)
SELECT AVG(PRICE) FROM CUSTOMTABLE     # CUSTOMTABLE์˜ PRICEํ•„๋“œ ๊ฐ’์˜ ํ‰๊ท ๊ตฌํ•˜๊ธฐ     

โœ… DATE_FORMAT

Year-Month-Date ํ˜•์‹์˜ ๋‚ ์งœ๋ฅผ (๋…„,์›”,์ผ)๋กœ ๋‚˜๋ˆ ์ค€๋‹ค.

DATE_OF_BIRTH
1992-02-12
1992-02-22
1993-03-16
DATE_FORMAT(Column๋ช…, "%Y-%m-%d")

# (์˜ˆ์‹œ)
SELECT DATE_FORMAT(DATE_OF_BIRTH, "%Y-%m-%d")
FROM CUSTOMTABLE
WHERE MONTH(DATE_OF_BIRTH) = 3  # 3์›”๋งŒ ๊ณ ๋ฅด๊ธฐ (๊ฒฐ๊ณผ: 1993-03-16)

โœ… LIKE

๋ฌธ์ž์—ด์˜ ํŒจํ„ด์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ(์ •๊ทœ์‹๊ณผ ์œ ์‚ฌ)

Column๋ช… LIKE 'A%'   # A๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰
Column๋ช… LIKE '%A'    # A๋กœ ๋๋‚˜๋Š” ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰
Column๋ช… LIKE '%A%'   # A๋ฅผ ํฌํ•จํ•œ ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰

# (์˜ˆ์‹œ)
SELECT ADDRESS
FROM CUSTOMTABLE 
WHERE ADDRESS LIKE '%๊ฐ•์›๋„%'  # ๊ฐ•์›๋„๋ฅผ ํฌํ•จํ•˜๋Š” ADDRESS ์ถ”์ถœ 

โœ… IFNULL

๊ฐ’์ด Null์ธ ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ํ•จ์ˆ˜

IFNULL(Column๋ช…, "Null์ผ ๊ฒฝ์šฐ ๋Œ€์ฒด ๊ฐ’")


# (์˜ˆ์‹œ)
SELECT IFNULL(NAME, 'No') 
FROM CUSTOMTABLE 

โœ… COUNT

์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ ๊ฐฏ์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
(์ด ๋•Œย NULL์ธ ๋ฐ์ดํ„ฐ๋Š” ์ œ์™ธํ•˜๊ณ  ๊ณ„์‚ฐ)

SELECT COUNT(*)  # ์ „์ฒด ํ–‰ ๊ฐฏ์ˆ˜ ๊ฐ€์ ธ์˜ค๊ธฐ
SELECT COUNT(Column๋ช…)  # ์ปฌ๋Ÿผ ๋ฐ์ดํ„ฐ ๊ฐฏ์ˆ˜ ๊ฐ€์ ธ์˜ค๊ธฐ

# (์˜ˆ์‹œ)
SELECT COUNT(*)
FROM CUSTOMTABLE 

โœ… SUM, MAX, MIN

SUM : ์นผ๋Ÿผ์˜ ํ•ฉ์„ ๊ฐ€์ ธ์˜จ๋‹ค.
MAX : ์นผ๋Ÿผ์˜ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค(๋‚ ์งœํ˜•์‹์ด๋ฉด ๊ฐ€์žฅ ์ตœ๊ทผ)
MIN : ์นผ๋Ÿผ์˜ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค(๋‚ ์งœํ˜•์‹์ด๋ฉด ๊ฐ€์žฅ ์˜ค๋ž˜์ „)

SUM(Column๋ช…)
MAX(Column๋ช…)
MIN(Column๋ช…)

# (์˜ˆ์‹œ)
SELECT SUM(AGE) FROM CUSTOMTABLE;
SELECT MAX(AGE) FROM CUSTOMTABLE;
SELECT MIN(AGE) FROM CUSTOMTABLE;

โœ… DISTINCT

์ปฌ๋Ÿผ์˜ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•ด์ค€๋‹ค.

DISTINCT Column๋ช… 

# (์˜ˆ์‹œ)
SELECT DISTINCT NAME FROM CUSTOMTABLE;

โœ… CONCAT

๋ฌธ์ž์—ด์„ ํ•ฉ์ณ์ค€๋‹ค.

CONCAT(Column๋ช…, '์ถ”๊ฐ€ํ• ๋ฌธ์ž') 

# (์˜ˆ์‹œ)
SELECT CONCAT(AGE, '์‚ด')  FROM CUSTOMTABLE;  # AGE์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ ๊ฐ’์ด ~์‚ด๋กœ ๋ณ€๊ฒฝ๋Œ

โœ… IN

์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ ๊ฐฏ์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
(์ด ๋•Œย NULL์ธ ๋ฐ์ดํ„ฐ๋Š” ์ œ์™ธํ•˜๊ณ  ๊ณ„์‚ฐ)

SELECT COUNT(*)  # ์ „์ฒด ํ–‰ ๊ฐฏ์ˆ˜ ๊ฐ€์ ธ์˜ค๊ธฐ
SELECT COUNT(Column๋ช…)  # ์ปฌ๋Ÿผ ๋ฐ์ดํ„ฐ ๊ฐฏ์ˆ˜ ๊ฐ€์ ธ์˜ค๊ธฐ

# (์˜ˆ์‹œ)
SELECT COUNT(*)
FROM CUSTOMTABLE 

โœ… LIMIT

๊ฒฐ๊ณผ์˜ ํŠน์ • ๊ฐฏ์ˆ˜๋งŒํผ์˜ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜จ๋‹ค.

LIMIT 3  # 3๊ฐœ๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ

# (์˜ˆ์‹œ)
SELECT *
FROM CUSTOMTABLE 
LIMIT 4  # ํ…Œ์ด๋ธ” ์ „์ฒด๋ฐ์ดํ„ฐ์—์„œ 4๊ฐœ๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€