4.1 UPDATE SET ๋ฌธ
ํ
์ด๋ธ์ ๊ธฐ์กด ๋ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ ๊ฒฝ์ฐ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํฉ๋๋ค UPDATE
.
ํํธ์ผ๋ก ์ฐ์ฐ์๋ ์ด์ ๋ํ ์ ๊ฐ์ ์ง์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ UPDATE
์ฐ์ฐ์์ ์ ์ฌ ํฉ๋๋ค. INSERT
๋ฐ๋ฉด ์ฐ์ฐ์์์๋ SELECT
๋ฐ์ดํฐ ๊ทธ๋ฃน์ผ๋ก ์ฆ์ ์์
ํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
์ค์ํ! ์ฐ์ฐ์์ ๋ชฉ์ ์ UPDATE
ํ
์ด๋ธ์ ํ ํ์ด ์๋ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ชจ๋ ํ์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ ์ค์๋ฅผ ํ๋ฉด ์ฝ๊ฒ ํ
์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์์ ์ ์์ต๋๋ค.
์์ฒญ์ ๋ํ ์ผ๋ฐ ๋ณด๊ธฐ:
UPDATE table SET
column 1 = expression 1,
column 2 = expression 2,
column 3 = expression 3
WHERE condition;
๋ชจ๋ ์ง์์ ๊ธ์ฌ๋ฅผ 100๋งํผ ์ธ์ํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค. ์ฟผ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
UPDATE employee SET
salary = salary+100;
๊ทธ๋ฆฌ๊ณ ์ด์ ๊ธ์ฌ๊ฐ 50,000 ๋ฏธ๋ง์ธ ๋ชจ๋ ์ฌ๋์ ๋ํด์๋ ๊ธ์ฌ๋ฅผ 20% ์ธ์ํ ๊ฒ์ ๋๋ค. ์์ฒญ ์์:
UPDATE employee SET
salary = salary*1.2
WHERE salary<50000;
๋ฌผ๋ก ๊ฐ๋ ์ ๊ธ์ฌ๋ฅผ 2 ๋ฐฐ๋ก ๋๋ฆด ๊ฒ์ ๋๋ค. ๊ทธ ์์ด๋ ์ด๋ป๊ฒ ๋ ์ ์์ต๋๊น?
UPDATE employee SET
salary = salary*2
WHERE id=4;
4.2 ๋ณต์กํ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์๋๋ฆฌ์ค
๋์์ ์ฌ๋ฌ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ๋ก ๊ฒฐ์ ํ๊ฑฐ๋ ํ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ๋ ๋ค๋ฅธ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ก ์ฑ์์ผ ํ๊ฑฐ๋ ๋จ์ํ ์ฒซ ๋ฒ์งธ ํ ์ด๋ธ์ ๋ณ๊ฒฝํ๋ ๊ณผ์ ์์ ๋ค๋ฅธ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ๋ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๊ทธ๋ฌ๋ฉด ๋๋ผ์์ด ์ฐ๋ฆฌ๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค.
์ง์ ํ ์ด๋ธ์ ์กด์ฌํ๋ ์ฌ์ฉ์ ํ ์ด๋ธ์ ๋ชจ๋ ์ฌ์ฉ์์ ๋ ๋ฒจ์ ๋ณ๊ฒฝํด ๋ด ์๋ค. ๋จ์ํ๋ฅผ ์ํด ์ฌ์ฉ์์ ์ผ์น๋ฅผ ์ด๋ฆ์ผ๋ก ํ์ธํฉ๋๋ค.
์ด ์ฟผ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ์์ฑํ๊ณ ์ถ์ต๋๊น?
UPDATE user SET
level = 80,
WHERE user . name IN ( list of names from employee table );
์ด์ ์ง์ ํ ์ด๋ธ์ ์ด๋ฆ ๋ชฉ๋ก์ ์ด ์ฟผ๋ฆฌ์ ์ถ๊ฐํด ๋ณด๊ฒ ์ต๋๋ค.
UPDATE user SET
level = 80,
WHERE user.name IN (select name from employee);
ํฅ๋ฏธ๋ก์ด! ์ด๋ฆ์ ์ป๊ธฐ ์ํ SQL ์ฟผ๋ฆฌ ์์ฒด๋ ์์ ์ค๋ช ๋ณด๋ค ํจ์ฌ ์งง์ ๊ฒ์ผ๋ก ๋ฐํ์ก์ต๋๋ค. SQL์ ๋ง๋ ์ฌ๋๋ค์ ๋นต์ ํ๋์ด ๋จน์ง ์์์ต๋๋ค.
๋น์ ์ ํ๋๊ฒ ๊ฐ์-์ด ์ ๊ทผ ๋ฐฉ์์ ์๋ํ์ง ์์ต๋๋ค. ๋จผ์ ์ด๋ฌํ ํ ์ด๋ธ์ ์กฐ์ธํด์ผ ํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค.
UPDATE table 1, table 2 SET
column 1 = expression 1,
column 2 = expression 2,
column 3 = expression 3
WHERE table 1.id = table 2.ref_id;
์กฐ๊ธ ๋ ์ด๋ ต๊ฒ ๋ง๋ค์ด ๋ด ์๋ค. ๊ธ์ฌ๊ฐ 50,000 ์ด์์ธ ์ฐ์ํ ์ง์์๊ฒ๋ง ๋ ๋ฒจ์ 80์ผ๋ก ์ค์ ํด์ผ ํฉ๋๋ค. ์์ ํ ์๋ฃจ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
UPDATE user, good_employees SET
user.level = 80
WHERE user.name = good_employees.name;
์ด๋ฌํ ํ
์ด๋ธ ์กฐ์ธ์ ์ค์ ๋ก ์ด๋ฏ๋ก INNER JOIN
๊ฒฐ๊ตญ์๋ ๋ ๋ฒ์งธ ํ
์ด๋ธ์์ ์ด๋ฆ์ด ์ผ์นํ๋ ์ฌ์ฉ์๋ง ๋จ๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ์ด๋ป๊ฒ๋ ์ข์ ์ง์์ ์ ํํด์ผ ํ๋ฏ๋ก ์ฝ๋๋ฅผ ๋ ์ถ๊ฐํด ๋ณด๊ฒ ์ต๋๋ค.
SELECT * FROM employee WHERE salary >= 50000
์ด์ ์ต์ข ์ฟผ๋ฆฌ์์ ์ด ํ ์ด๋ธ์ ๋์ฒดํฉ๋๋ค.
UPDATE user,
(SELECT * FROM employee WHERE salary >= 50000) good_emps
SET
user.level = 80
WHERE user.name = good_emps.name;
์ง๊ธ ๊ทธ๊ฒ๊ณผ ํจ๊ป ์ด์๋ผ.
GO TO FULL VERSION