SQL์ ์ข ๋ฅ(โ๏ธDML/โ๏ธDDL/โ๏ธDCL) *๋์๋ฌธ์๋ฅผ ๊ตฌ๋ณํ์ง ์์, ๋ฐ์ดํฐ ๊ฐ์ ๊ฒฝ์ฐ๋ ๊ตฌ๋ณํ๋ค.
DML : ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ์ง์ ์กฐ์ํ๋ ๊ธฐ๋ฅ์ ๋งํจ
๐ ์์ธ ์ค๋ช ๐
Data Manipulation Language
- ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ CRUDํ๋ ๊ธฐ๋ฅ์ ํจ
SQL๋ฌธ
INSERT
UPDATE
DELETE
SELECT
# ์ค์ต
๐ฑ SELECT ์ปฌ๋ผ๋ช FROM ํ ์ด๋ธ๋ช WHERE ์กฐ๊ฑด์ ;
select Name form city where CountryCode='kor' ;
๐ฑ INSERT INTO ํ ์ด๋ธ๋ช (์ปฌ๋ผ๋ช ) VALUES(๊ฐ);
๋ชจ๋ ์ปฌ๋ผ์ ๋ํด์ ์ง์ ๋ ๊ฒฝ์ฐ "ํ ์ด๋ธ๋ช (์ปฌ๋ผ๋ช )" ์ด ์์ด๋ ๋๋ค. ์ฆ ์์ SQL๋ฌธ์์
insert into city values (10000, 'Sample', 'KOR','Test',100000);
๋ผ๊ณ ํด๋ ๋๋ค.
๐ฑ UPDATE ํ ์ด๋ธ๋ช SET ์ปฌ๋ผ๋ช =๊ฐ, ... WHERE ์กฐ๊ฑด์ ;
๐ฑ DELETE FROM ํ ์ด๋ธ๋ช WHERE ์กฐ๊ฑด์ ;
๐ฅ UPDATE์ DELETE ์ฌ์ฉ์ ์ฃผ์ํ ์ !
>> where ์ ์ ๋งค์นญ๋๋ ๊ฐ์ด ํ๋์ผ ๋๋ ๋ฌธ์ ๊ฐ ์์ผ๋, ์ฌ๋ฌ๊ฐ์ ๋ ์ฝ๋๊ฐ ๋งค์นญ๋ ๋๋ ๋ชจ๋ ๋ ์ฝ๋๊ฐ ์์ ๋๊ฑฐ๋ ์ญ์ ๋ ์ ์์ผ๋ ์ํ๋ ๋ ์ฝ๋์ธ์ง ํ๋์ ๋ ์ฝ๋๊ฐ ๋ง๋์ง ํ์ธํด์ผ ํ๋ค.
>> select ํ๊ณ update, select ํ๊ณ delete ํ๋ ์ต๊ด์ ๊ธธ๋ฌ์ผ ํ๋ค!
๐ฑ ๐ฑ DISTINCT
- Select๋ฌธ์ ๊ฒฐ๊ณผ์์ ํน์ ์ปฌ๋ผ๋ง ์ถ๋ ฅํ ๊ฒฝ์ฐ ์ค๋ณต๋ ๊ฐ๋ค์ด ๋์ค๋ฉด ์ด๋ฅผ ์ ๊ฑฐํด์ ํ์ํ๋ ๊ธฐ๋ฅ
SELECT DISTINCT ์ปฌ๋ผ๋ช 1, ์ปฌ๋ผ๋ช 2, ... FROM ํ ์ด๋ธ๋ช
ex. ๊ตญ๊ฐ์ฝ๋๊ฐ 'KOR'์ธ ๋์๋ค์ ๊ตญ๊ฐ์ฝ๋๋ฅผ ์ค๋ณต์ ๊ฑฐํ์ฌ ํ์ํ์์ค.
๋ณดํต, ์ค๋ณต์ ์ ๊ฑฐํด์ ์ค์ ๊ฐ์ด ์ผ๋ง๋ ๋์๋์ง ํ์ธ ํ ๋ ๋ง์ด ์ฌ์ฉํ๋ค.
๐ฑ ๐ฑ ๋ ผ๋ฆฌ์ฐ์ฐ์(AND, OR, NOT)
- Select๋ฌธ์ ์กฐ๊ฑด์ ์ ๋ ผ๋ฆฌ ์กฐ๊ฑด ์ ์ฉํด์ ์ ์ฉํ ์ ์๋ ์ฐ์ฐ์
SELECT * FROM ํ ์ด๋ธ๋ช WHERE (NOT) ์กฐ๊ฑด1 AND/OR (NOT)์กฐ๊ฑด2 ... (not์ !=)
ex. ๊ตญ๊ฐ ์ฝ๋๊ฐ 'KOR' ์ด๋ฉด์ ์ธ๊ตฌ๊ฐ 100๋ง ์ด์์ธ ๋์๋ฅผ ์ฐพ์๋ผ.
ex. ๊ตญ๊ฐ ์ฝ๋๊ฐ 'KOR', 'CHN', 'JPN'์ธ ๋์๋ฅผ ์ฐพ์๋ผ. // ๊ตญ๊ฐ ์ฝ๋๊ฐ 'KOR'์ด ์๋๋ฉด์ ์ธ๊ตฌ 100๋ง ์ด์์ธ๊ฒ ์ฐพ์๋ผ
๐ฑ ๐ฑ ๋ ผ๋ฆฌ์ฐ์ฐ์(IN, BETWEEN)
- '~ ์ค์์' , '์ด๋์์ ๋ถํฐ ~ ์ด๋๊น์ง'
ex. city ํ ์ด๋ธ์์ ๊ตญ๊ฐ์ฝ๋๊ฐ 'KOR'์ด๊ณ ์ธ๊ตฌ๊ฐ 100๋ง ์ด์ 500๋ง ์ดํ์ธ ๋์๋ฅผ ์ฐพ์๋ผ.
ex. ๊ตญ๊ฐ์ฝ๋๊ฐ 'KOR' 'CHN' 'JPN' ์ธ ๋์๋ฅผ ์ฐพ์๋ผ.
๐ฑ ๐ฑ ๊ฒฐ๊ณผ ์ ๋ ฌ (ORDER BY)
- select ๋ฌธ์ ๊ฒฐ๊ณผ ๊ฐ์ ํน์ ์ปฌ๋ผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์/๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ (๊ธฐ๋ณธ๊ฐ์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์)
SELECT * FROM ํ ์ด๋ธ๋ช WHERE ์กฐ๊ฑด์ ORDER BY ์ปฌ๋ผ๋ช desc/asc
(์ปฌ๋ผ ์ฌ๋ฌ๊ฐ์ด๋ฉด ์์๋๋ก 1์ฐจ ์ ๋ ฌ, 2์ฐจ ์ ๋ ฌ .. )
ex. city ํ ์ด๋ธ์์ ๊ตญ๊ฐ์ฝ๋์ ์ธ๊ตฌ์๋ฅผ ์ถ๋ ฅํ๋ผ! ๊ตญ๊ฐ์ฝ๋๋ณ ์ค๋ฆ ์ฐจ์, ๋์ผ ๊ตญ๊ฐ์ฝ๋ ์ผ์์๋ ์ธ๊ตฌ ์์ ์ญ์์ผ๋ก ํ์ํด๋ผ.
๐ฑ ๐ฑ ๊ฒฐ๊ณผ๊ฐ ์ผ๋ถ ์กฐํ
Select ์ปฌ๋ผ๋ช 1, ์ปฌ๋ผ๋ช 2, … from ํ ์ด๋ธ๋ช where ์กฐ๊ฑด์ limit ์ซ์
mySQL์์๋ limit, Oracle์์๋ ROWNUM, SQLServer์์๋ Top
ex. ๊ตญ๊ฐ์ฝ๋๊ฐ ‘KOR’์ธ ๋์๋ค ์ค ์ธ๊ตฌ์ ๋ง์ ์์๋ก ์์ 10๊ฐ๋ง ํ์ํ์์ค.
Select * from city where CountryCode=’KOR’ ORDER BY desc limit 10
๐ฑ ๐ฑ ์งํฉ ํจ์
ํ ์ด๋ธ์ ์ ์ฒด ๋ ์ฝ๋๋ฅผ ๋์์ผ๋ก ํน์ ์ปฌ๋ผ์ ์ ์ฉํด์ ํ ๊ฐ์ ๊ฐ์ ๋ฆฌํดํ๋ ํจ์
- Count() – ๋ ์ฝ๋์ ๊ฐ์ ๋ฆฌํด,
- avg() -์ปฌ๋ผ๊ฐ์ ํ๊ท , sum() – ์ปฌ๋ผ๊ฐ์ ํฉ,
- min(), Max() – ์ปฌ๋ผ๊ฐ์ ์ต์, ์ต๋
- first(), last() - ์ฃผ์ด์ง ORDER BY์ ์ ์ํ ๊ฐ์ค ์ฒซ๋ฒ์งธ๋ฅผ ๊ฐ๋ฆฌํจ๋ค /์ฃผ์ด์ง ORDER BY์ ์ ์ํ ๊ฐ์ค ๋ง์ง๋ง
ex. City ํ ์ด๋ธ์์ ๊ตญ๊ฐ ์ฝ๋๊ฐ ‘KOR’์ธ ๋์๋ค์ ์ธ๊ตฌ์ ์ดํฉ/ ํ๊ท ์ ๊ตฌํ์์ค.
Select count(*) from city where ContryCode=’KOR’
๐ฑ ๐ฑ ์ ์ฉํ ํจ์
- Length() : ๋ ์ฝ๋์ ๋ฌธ์์ด ์ปฌ๋ผ์ ๊ธ์์๋ฅผ ๋ฆฌํด SELECT length(OGPLC) FROM IL_ITEM
- Mid() : ๋ฌธ์์ด์ ์ค๊ฐ ๋ถ๋ถ์ ๋ฆฌํด mid(์ปฌ๋ผ,์์์ธ๋ฑ์ค,.๊ธธ์ด)
- Upper()/lower() : ๋ฌธ์์ด์ ๋๋ฌธ์/์๋ฌธ์๋ก ๋ฆฌํด
- Round() : ๋ ์ฝ๋์ ์ซ์ ์ปฌ๋ผ๊ฐ์ ๋ฐ์ฌ๋ฆผํด์ ๋ฆฌํด mid(์ปฌ๋ผ,.๋ฐ์ฌ๋ฆผ ์๋ฆฌ์(0์ด ์ฒซ์งธ์๋ฆฌ))
Ex.
countryํ ์ด๋ธ์์ ๋๋ผ ์ ์ธ๊ธ์ ๋๋ฌธ์๋ก: SELECT upper(mid(NAME,1,3)) FROM Country
countryํ ์ด๋ธ์์ ๊ธฐ๋์๋ช ์ ์์์ ์ฒซ์งธ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผ: SELECT round(life,0)) FROM Country
๐ฑ ๐ฑ ๐ฑ JOIN
: ์๋ก ๋ค๋ฅธ ํ ์ด๋ธ์ ๊ณตํต ์ปฌ๋ผ ๊ธฐ์ค์ผ๋ก ํฉ์น๋ ํ ์ด๋ธ ๋จ์ ์ฐ์ฐ.
์กฐ์ธ์ ๊ฒฐ๊ณผ ํ ์ด๋ธ์ ์ด์ ํ ์ด๋ธ์ ์ปฌ๋ผ์์ ํฉ๊ณผ ๊ฐ๋ค.
(cityํ ์ด๋ธ์ ์ปฌ๋ผ์ด 10๊ฐ๊ฐ ์๊ณ , country์ ์ปฌ๋ผ์ด 5๊ฐ๊ฐ ์๋ค๋ฉด join ํ, 15๊ฐ์ ์ปฌ๋ผ์ ๊ฐ์ง๋ ํ ์ด๋ธ์ด ๋๋ค.)
Select * from ํ ์ด๋ธ1 join ํ ์ด๋ธ2 on ํ ์ด๋ธ1.์ปฌ๋ผ๋ช = ํ ์ด๋ธ2.์ปฌ๋ผ๋ช
์กฐ์ธ์ ์๋ก ๋ค๋ฅธ ํ ์ด๋ธ์ ๊ฐ์ ์ปฌ๋ผ๋ช ์ด ์กด์ฌํ๋ฉด ๊ตฌ๋ถ์ ์ํด ํ ์ด๋ธ๋ช .์ปฌ๋ผ๋ช ์ผ๋ก ์ฌ์ฉํด์ ํ์ํ๋ค.
Ex. cityํ ์ด๋ธ๊ณผ country ํ ์ด๋ธ์ ์กฐ์ธํ์์ค. (city.CountryCode = country.Code)
SELECT * FROM city Join CountryOn city.CountryCode = country.Code;
Ex. ๊ตญ๊ฐ์ฝ๋์ ํด๋น ๋๋ผ์ GNP๋ฅผ ํ์ ํ์์ค.
SELECT city.CountryCode, country.GNP FROM city Join CountryOn city.CountryCode = country.Code;
SELECT DISTINCT city.CountryCode, country.GNP FROM city Join CountryOn city.CountryCode = country.Code;
JOIN์ ์ข ๋ฅ
: ์กฐ์ธ์ NULL๊ฐ์ ํ์ฉํ๋ ๋ด๋ถ์กฐ์ธ(null๊ฐ ๋ถ๊ฐ)๊ณผ ์ธ๋ถ์กฐ์ธ(null๊ฐ ํ์ฉ)์ผ๋ก ๊ตฌ๋ถ
INNER JOIN | ์กฐ์ธ์ NULL๊ฐ์ ํ์ฉํ์ง ์์ |
LEFT JOIN | ์กฐ์ธ์ JOIN์ ์ผ์ชฝ ํ
์ด๋ธ์ NULL๊ฐ์ ํฌํจํด์ ํ์ A join B ์ผ๋, A์์ null๊ฐ์ด ์ ์ธ๋๋ฉด ์๋๋ ์ํฉ์ ์ฌ์ฉ |
RIGHT JOIN | ์กฐ์ธ์ JOIN์ ์ค๋ฅธ์ชฝ ํ
์ด๋ธ์ NULL๊ฐ์ ํฌํจํด์ ํ์ A join B ์ผ๋, B์์ null๊ฐ์ด ์ ์ธ๋๋ฉด ์๋๋ ์ํฉ์ ์ฌ์ฉ |
FULL JOIN | MYSQL์ ์ง์ํ์ง ์์ |
Ex. country ํ ์ด๋ธ์๋ ์กด์ฌํ์ง๋ง ๋์๊ฐ ํ๋๋ ์๋ ๋๋ผ๊ฐ ์๋์ง ํ์ธํ์์ค. ( = country ๊ฐ์ด ์กด์ฌํ์ง ์๋ city๋ ํฌํจ)
SELECT COUNT(*) FROM city left join country on city.CountryCode = country.Code
Right join์ด๋ฉด, country ์ค ๋์ ์๊ฐ ํ๋๋ ์๋ country๋ ํฌํจ
๐ฑ ๐ฑ ๋ณ๋ช ALIAS
์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์์ฑ์, ์ปฌ๋ผ๋ช ์ ๋ํ ๋ณ๋ช ์ ์ฌ์ฉํด ํ์ํ๋ ๊ธฐ๋ฅ. (์กฐ์ธํ ๋ ๋ง์ด ์ฌ์ฉํ๋ค.)
SELECT ํ ์ด๋ธ๋ช 1.์ปฌ๋ผ๋ช 1 AS ๋ณ๋ช 1, ํ ์ด๋ธ๋ช 2.์ปฌ๋ผ๋ช 2 AS ๋ณ๋ช 2 FROM ~
Ex. City ์ country ์กฐ์ธํด์ ๊ตญ๊ฐ์ฝ๋๊ฐ ‘kor’์ ๋๋ผ์ ์ถ์ฝํ์๋ช ๊ณผ ์ ์๋ช ์ ํ์ํด๋ผ!
SELECT city.countryCode AS ABBR, country.Name AS fullName FROM city WHERE city.CountryCode ='KOR'
๐ฑ ๐ฑ ๋ทฐ VIEW
์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ๊ฐ์ ์์ํ ์ด๋ธ๋ก ์ ์ฅํด์ ์ฌ์ฉํ ์ ์๋ค. (์ฌ์ฉ ๋๋๋ฉด DROP VIEW๋ก ์ญ์ ํด์ผ ํ๋ค.)
CREATE VIEW ๋ทฐ๋ช AS ( SELECT… ์ฟผ๋ฆฌ) : ( SELECT… ์ฟผ๋ฆฌ) ๊ฒฐ๊ณผ ๊ฐ์ ํ ์ด๋ธ ๋ทฐ๋ก ๋ง๋ค์ด๋ผ!
EX.๊ตญ๊ฐ ์ฝ๋๊ฐ “KOR”์ธ ๋์๋ค์ ๊ตญ๊ฐ์ฝ๋์ ๊ตญ๊ฐ๋ช (Name)์ ๋ทฐ๋ก ์์ฑํ์์ค.
CREATE VIEW sampleView as select city.countryCode As Abbr, country.Name As FulName
from city join country
on city.CountryCode = country.Code where city.CountryCode = ‘KOR’;
๋ทฐ ๊ฒฐ๊ณผ๋ฅผ select * from sampleView; ๋ก ํ์ธ ํ๋ฉด ๋๋ค
DROP VIEW
๐ฑ ๐ฑ ๐ฑ SELECT INTO
: ์ฟผ๋ฆฌ๊ฒฐ๊ณผ๋ฅผ ์ ํ ์ด๋ธ๋ก ๋ง๋ ๋ค.
MYSQL์์๋ CREATE TABLE ํ ์ด๋ธ๋ช SELECT * FROM ํ ์ด๋ธ๋ช
: ๊ธฐ์กด์ ์กด์ฌํ์ง ์๋ ํ ์ด๋ธ์ด ์๋ก ์์ฑ๋๋ค. (์ผ์ข ์ ๋ทฐ์ ๊ฐ์ ํจ๊ณผ)
Ex. cityํ ์ด๋ธ์ ๋ด์ฉ์์ ๊ตญ๊ฐ์ฝ๋๊ฐ ‘KOR’์ธ ๋์๋ฅผ ์ฐพ์ city_new ํ ์ด๋ธ์ ๋ฃ์ผ์์ค.
CREATE TABLE city_new SELECT * from city
๐ฑ ๐ฑ ๐ฑ INSERT INTO SELECT
: ์ฟผ๋ฆฌ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ์กด์ ํ ์ด๋ธ์ ์ถ๊ฐํ๋ค. (๊ธฐ์กด ํ ์ด๋ธ์ด ์กด์ฌํด์ผ ํจ)
INSERT INTO ํ ์ด๋ธ๋ช 1 SELECT * FROM ํ ์ด๋ธ๋ช 2 WHERE ์กฐ๊ฑด์
: SELECT ํ๋ ํ ์ด๋ธ๊ณผ INSERT ํ๋ ํ ์ด๋ธ์ ๋์ผํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค.
: ๋๊ฐ์ ๋ณ๋ ์ฟผ๋ฆฌ๋ฅผ ํ๋๋ก ํฉ์นจ
Ex. City ํ ์ด๋ธ์ ๋ด์ฉ์์ ๊ตญ๊ฐ์ฝ๋๊ฐ ‘KOR’์ธ ๋์๋ฅผ ์ฐพ์ city_kor ํ ์ด๋ธ์ ๋ฃ์ผ์์ค.
๐ฑ ๐ฑ ๐ฑ CASE … WHEN …END
: SQL์ ์กฐ๊ฑด๋ฌธ(if/switch)์ ํด๋นํ๋ค.
CASE WHEN ์กฐ๊ฑด๊ฐ1 THEN …
WHEN ์กฐ๊ฑด๊ฐ2 THEN…
ELSE…
END
Ex. City ํ ์ด๋ธ์์ ๋์๋ช ์ด 3์๊ฐ ๋์ด๊ฐ๋ ๊ฒฝ์ฐ์ ์์ชฝ ์ธ ์๋ง ๋๋ฌธ์๋ก ์ถ๋ ฅํ๊ณ ๋์์ ์ธ๊ตฌ๋ฅผ ๊ฐ์ด ํ์ํ์์ค.
SELECT CASE WHEN length(NAME)>3 THEN upper(mid(NAME,1,3))
WHEN LENGTH(NAME) <=3 THEN NAME
END, POPULATION FROM City;
DDL : ๋ฐ์ดํฐ ๋ฒ ์ด์ค ํ ์ด๋ธ ์์ฑ, ์์ , ์ญ์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ๋งํจ
๐ ์์ธ ์ค๋ช ๐
Data Definition Language
- ํ ์ด๋ธ ์คํค๋ง๋ฅผ ์ ์, ์์ ํ๋ ๊ธฐ๋ฅ(ํ ์ด๋ธ ์์ฑ/ ์ปฌ๋ผ ์ถ๊ฐ/ ํ์ ๋ณ๊ฒฝ/ ๊ฐ์ข ์ ์ฝ์กฐ๊ฑด ์ง์ /์์ ๋ฑ)
SQL๋ฌธ
CREATE
DROP
ALTER
DCL : ๋ฐ์ดํฐ ๋ฒ ์ด์ค ํ ์ด๋ธ์ ์ ๊ทผ ๊ถํ ์กฐ์ํ ์ ์๋ ๊ธฐ๋ฅ์ ๋งํจ
๐ ์์ธ ์ค๋ช ๐
Data Control Language
- ๋๋น๋ ํ ์ด๋ธ ์ ๊ทผ๊ถํ์ด๋, CRUD ๊ถํ์ ์ ์ํ๋ ๊ธฐ๋ฅ
- ํน์ ์ฌ์ฉ์์๊ฒ ํ ์ด๋ธ์ ์กฐํ ๊ถํ ํ๊ฐ/ ๊ธ์งํ๋ ๊ธฐ๋ฅ
SQL๋ฌธ
GRANT
REVOKE
SQL : Structured Query Language
๋๊ธ