๐ŸŽƒ mysql ํŠœํ† ๋ฆฌ์–ผ

may_soouuยท2020๋…„ 9์›” 12์ผ
1

mysql

๋ชฉ๋ก ๋ณด๊ธฐ
2/3

mysql์— ์ง์ ‘ DB์™€ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด๋ณด๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•ด๋ณด์ž๐Ÿ˜€

1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘์†ํ•˜๊ธฐ

ํ„ฐ๋ฏธ๋„ ์—ด๊ณ ,
๋‚˜๋Š” mac ์‚ฌ์šฉ์ž์ด๋‹ˆ

$ mysql -u root -p

์ž…๋ ฅํ•˜๊ธฐ
๊ทธ๋Ÿผ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ์ฐฝ์ด ๋œฐํ…๋ฐ, ์ด ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ๋‚ด๊ฐ€ ์ดˆ๊ธฐ์— mysql์„ค์น˜ ํ›„ ์„ค์ •ํ•œ 
๋น„๋ฐ€๋ฒˆํ˜ธ๋‹ค!

2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑํ•˜๊ธฐ

CREATE DATABASE my_favurite_drinks;
 # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑํ•˜๊ธฐ

SHOW DATABASES; 
 # ํ˜„์žฌ mysql์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณด์—ฌ์ค˜

3. ํ…Œ์ด๋ธ” ์ •๋ณด ๋ณด๊ธฐ

$ USE my_favourite_drinks;
 # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผํ• ๊ฒŒ

$ SHOW tables;
 # ๋‚ด DB์•ˆ์— ์žˆ๋Š” ํ…Œ์ด๋ธ” ๋ณด์—ฌ์ค˜

์ง€๊ธˆ์€ ํ…Œ์ด๋ธ” ์ •๋ณด๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ๋ณด์—ฌ์ง€๋Š” ๊ฒƒ์ด ์—†๋‹ค.

4. ํ…Œ์ด๋ธ” ๋งŒ๋“ค๊ธฐ

์˜ˆ๋ฅผ ๋“ค์–ด 1๊ฐœ์˜ ์Œ๋ฃŒ์— ์„œ๋กœ ๊ฒน์น˜์ง€ ์•Š๊ฒŒ ์ถ”์ฒœ๋˜๋Š” ์ƒํ’ˆ๋“ค์ด ์—ฌ๋Ÿฌ๊ฐœ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.
ex. ์•„๋ฉ”๋ฆฌ์นด๋…ธ : ์Šค์ฝ˜, ์ดˆ์ฝœ๋ › / ๋ฐ”๋‹๋ผ๋ผ๋–ผ : ์นด์Šคํ…Œ๋ผ, ์š”๊ฑฐํŠธ
์ด๋Š” 1:N์˜ ๊ด€๊ณ„์ด๋‹ค.
์œ„์˜ ๊ธฐ์ค€์œผ๋กœ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด๋ณด์ž

์šฐ์„ , ์Œ๋ฃŒ ์ •๋ณด๋ฅผ ๋‹ด๊ธฐ ์œ„ํ•œ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ ๋‹ค.

CREATE TABLE drinks
(
id INT NOT NULL AUTO_INCREMENT, # id๋Š” null์„ ํ—ˆ๋ฝํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ž๋™์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” pk๊ฐ’
product VARCHAR(100) NOT NULL, #product์นผ๋Ÿผ์€ varcharํ˜•์‹์ด๋ฉฐ ์ตœ๋Œ€ 100์ž์ด๋‹ค
PRIMARY KEY(id)  # pk๊ฐ’์€ id ์ด๋‹ค.
);

์ž˜ ๋งŒ๋“ค์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๋ ค๋ฉด?!
DESC drinks

์ž˜ ๋งŒ๋“ค์–ด์กŒ๋‹ค! ๊ทธ๋Ÿผ ์ด์ œ, ๊ฐ๊ฐ์˜ ์Œ๋ฃŒ์— ์ถ”์ฒœ๋˜๋Š” ์ถ”์ฒœ์ƒํ’ˆ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์ž

CREATE TABLE recommend
(
id INT NOT NULL AUTO_INCREMENT, # id๋Š” null์„ ํ—ˆ๋ฝํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ž๋™์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” pk๊ฐ’
recommend VARCHAR(100) NOT NULL, #product์นผ๋Ÿผ์€ varcharํ˜•์‹์ด๋ฉฐ ์ตœ๋Œ€ 100์ž์ด๋‹ค
product_id INT,
PRIMARY KEY (id),  # pk๊ฐ’์€ id ์ด๋‹ค.
FOREIGN KEY (product_id) REFERENCES drinks (id)
#1:n์˜ ๊ด€๊ณ„์ด๊ธฐ ๋•Œ๋ฌธ์— foreign ํ‚ค ์„ค์ •์„ ํ•ด์ค˜์•ผํ•œ๋‹ค
#product_id๋Š” drinksํ…Œ์ด๋ธ”์˜ id๋ฅผ ์ฐธ์กฐํ•œ๋‹ค
);

์ž˜ ๋งŒ๋“ค์–ด์กŒ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž!
desc recommend

๋‚ด๊ฐ€ foreignํ‚ค๋กœ ์„ค์ •ํ•œ product_id์˜ key๋ถ€๋ถ„์„ ๋ณด๋ฉด, MUL์ด๋ผ๊ณ  ๋˜์–ด ์žˆ๋‹ค.
๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์™ธ๋ž˜ํ‚ค๋Š” ์ด๋ ‡๊ฒŒ MUL์ด๋ผ๊ณ  ํ‘œ์‹œ๋œ๋‹ค
(multiple)

5. DQL (DATA Query Language)

DQL : ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” SQ๋ฌธ์ด๋‹ค.
ํ”„๋ก ํŠธ/๋ฐฑ์—”๋“œ ๊ฐ„์˜ ์†Œํ†ต์„ ์œ„ํ•œ api๊ตฌํ˜„ ์‹œ DB์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌํ•ด์„œ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ต์œผ๋กœ ๋ณด๋‚ด์ฃผ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค

5-1. SELECT

๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ ํ•˜๊ธฐ ์ „, ์œ„์—์„œ ์ƒ์„ฑํ•œ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด๋ณด์ž

 # drinks ํ…Œ์ด๋ธ”
INSERT INTO drinks (product) VALUES('americano');
INSERT INTO drinks (product) VALUES('latte');
INSERT INTO drinks (product) VALUES('Grapefruit Black Tea');

 # recommend ํ…Œ์ด๋ธ”
INSERT INTO recommend (recommend, description, product_id) VALUES ('chocolate', '๋‹ฌ์ฝคํ•œ ์ดˆ์ฝœ๋ฆฟ', 1);
INSERT INTO recommend (recommend, description, product_id) VALUES ('scone', '๊ฐ“ ๊ตฌ์šด ์Šค์ฝ˜', 1);
INSERT INTO recommend (recommend, description, product_id) VALUES ('castella', 'ํญ์‹ ํญ์‹ ํ•œ ์นด์Šคํ…Œ๋ผ', 2);
INSERT INTO recommend (recommend, description, product_id) VALUES ('cake', '์ƒํฌ๋ฆผ ์ผ€์ดํฌ', 3);
INSERT INTO recommend (recommend, description, product_id) VALUES ('sandwich', '์—๊ทธ ์ƒŒ๋“œ์œ„์น˜', 3);
SELECT * FROM drinks;
SELECT * FROM recommend;


์ค‘๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋‹ค์‹œ ๋„ฃ๋Š” ๋ฐ”๋žŒ์— recommend id ๊ฐ€ 6๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค๐Ÿ˜‚
๋งŒ์•ฝ recommendํ…Œ์ด๋ธ”์—์„œ recommend์นผ๋Ÿผ๋งŒ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด?

SELECT recommend.recommend FROM recommend

5-2. WHERE

WHERE๋ฌธ์œผ๋กœ ์กฐ๊ฑด์„ ๊ฑธ ์ˆ˜๋„ ์žˆ๋‹ค.
์Šค์ฝ˜์˜ ์„ค๋ช…๋งŒ ๋ณด๊ณ ์ž ํ•œ๋‹ค๋ฉด,

SELECT recommend.description FROM recommend WHERE recommend.recommend='scone';

5-3. LIKE

like๋ฌธ์€ ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ž์—ด์„ ๊ฒ€์ƒ‰ํ•œ๋‹ค.
ex. ๋…ธ๋ž˜๊ฐ€์‚ฌ์˜ ์ผ๋ถ€๋ถ„์œผ๋กœ ๋…ธ๋ž˜๋ฅผ ์ฐพ์œผ๋ ค๊ณ  ํ•  ๋•Œ!
ex. ๋ฌด์Šจ ์ƒŒ๋“œ์œ„์น˜์ธ์ง€ ๊ธฐ์–ต์ด ์•ˆ๋‚˜์„œ '์ƒŒ๋“œ์œ„์น˜' ๊ฒ€์ƒ‰ ํ›„ ์ฐพ์œผ๋ ค๊ณ  ํ•  ๋•Œ

SELECT recommend.recommend, recommend.description FROM recommend WHERE recommend.description LIKE '%์ƒŒ๋“œ์œ„์น˜%';

๊ทธ๋Ÿผ ์ƒŒ๋“œ์œ„์น˜๊ฐ€ ํฌํ•จ๋œ ์ƒํ’ˆ์ด ๋‚˜์˜จ๋‹ค.

SELECT recommend.recommend, recommend.description FROM recommend WHERE recommend.recommend LIKE 'cho%';
# recommend.recommend ์˜ ๊ฐ’์ด cho ๋กœ ์‹œ์ž‘ํ•˜๋ฉด ์ฟผ๋ฆฌ๋ฌธ์— ์˜ํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ์กฐํšŒ๋ฉ๋‹ˆ๋‹ค.

SELECT recommend.recommend, recommend.description FROM recommend WHERE recommend.description LIKE '%์ผ€์ดํฌ';
# recommend.description์˜ ๊ฐ’์ด ์ผ€์ดํฌ ๋กœ ๋๋‚˜๋ฉด ์ฟผ๋ฆฌ๋ฌธ์— ์˜ํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ์กฐํšŒ๋ฉ๋‹ˆ๋‹ค.

5-4. JOIN

๊ต์ง‘ํ•ฉ, ์ฆ‰ ์—ฐ๊ฒฐ์„ฑ์ด ์žˆ๋Š” ๋ถ€๋ถ„์„ ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค.

SELECT drinks.product, recommend.recommend, recommend.description
 # ํ•„์š”ํ•œ ์นผ๋Ÿผ์„ ๋‚˜์—ด ํ•ฉ๋‹ˆ๋‹ค.
FROM drinks # drinks ํ…Œ์ด๋ธ”์—
JOIN recommend # recommend ํ…Œ์ด๋ธ”์„ ๊ฒฐํ•ฉ์‹œํ‚ต๋‹ˆ๋‹ค.
ON drinks.id = recommend.product_id; # ON ๋’ค์—๋Š” ๊ต์ง‘ํ•ฉ, ์ฆ‰ ์—ฐ๊ฒฐ์„ฑ์ด ์žˆ๋Š” ๋ถ€๋ถ„(์นผ๋Ÿผ)์„ ์ ์–ด์ค๋‹ˆ๋‹ค.

JOIN + WHERE + LIKE ์กฐ๊ฑด๋ฌธ ํ•ฉ์ณ๋ณด๋ฉด ?!

SELECT drinks.id, drinks.name, recommend.recommend
FROM drinks
JOIN recommend
ON drins.id = recommend.product_id
WHERE drinks.product = 'americano';
profile
back-end ๊ฐœ๋ฐœ์ž

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