SQL์ด๋?
SQL(Structured Query Language) ๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ณด ์ ์ฅ ๋ฐ ์ฒ๋ฆฌ์ ์ฉ์ดํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ค. ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ ๋ณด๋ฅผ ํ ํํ๋ก ์ ์ฅํ๋ฉฐ, ํ๊ณผ ์ด์ ํตํด ๋ฐ์ดํฐ ์์ฑ๊ณผ ๋ฐ์ดํฐ ๊ฐ ๊ฐ์ ๋ค์ํ ๊ด๊ณ๋ฅผ ๋ํ๋ธ๋ค.
DBMS๋?
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ฐ์ดํฐ์ ์งํฉ์ด๋ผ๊ณ ํ๋ค๋ฉด, DBMS(๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ )์ ์ด๋ฌํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํ๊ณ ์ด์ํ ์ ์๋ ์ํํธ์จ์ด์ด๋ค. ์ ๋ณด์ ๋ํด์ ๋ค์์ ์ฌ์ฉ์๋ค์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ ์ ์๋๋ก ํด์ฃผ๋ ์ํํธ์จ์ด ๋๊ตฌ์ ์งํฉ ์ฌ์ฉ์ ๋๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ ์๊ตฌ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ ์ ํ ์๋ตํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํด์ค๋ค.
์ฅ์
- ์๋ฃ์ ํตํฉ์ฑ ์ฆ์ง
- ๋ฐ์ดํฐ์ ์ ๊ทผ์ฑ ์ฉ์ด
- ๋ฐ์ดํฐ ํต์ ๊ฐํ
- ์ ํ๋ฆฌ์ผ์ด์ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ ๋ฐ ๊ด๋ฆฌ ์ฉ์ด
- ๋ณด์ ๊ฐํ
DBMS์ ๋ถ๋ฅ
- ๊ณ์ธตํ(Hierarchical)
- ํธ๋ฆฌ ํํ๋ฅผ ๊ฐ๋ ๊ณ์ธตํ ๊ตฌ์กฐ
- ํ์ฌ๋ ์ฌ์ฉ X
- ๋งํ(Network)
- ํ์์ ์๋ ๊ตฌ์ฑ์๋ผ๋ฆฌ๋ ์ฐ๊ฒฐ๋ ๊ตฌ์กฐ
- ํ์ฌ๋ ์ฌ์ฉ X
- ๊ด๊ณํ(Relational)
- ํ ์ด๋ธ(table)์ด๋ผ๋ ์ต์ ๋จ์๋ก ๊ตฌ์ฑ
- ํ ์ด๋ธ์ ํ๋ ์ด์์ ์ด๊ณผ ํ์ผ๋ก ์ด๋ฃจ์ด์ง
- ๊ฐ์ฒด์งํฅํ(Object-Oriented)
- ๊ฐ์ฒด๊ด๊ณํ(Object-Relational)
์ฌ์ฉ๋๋ DBMS๋ค
- MYSQL
- Oracle์์ ์ ๊ณตํ๋ ์คํ ์์ค ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ
- NOSQL
- ํ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง ์๋ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์ํ ํ์ฅ(NOSQL ์ํํธ์จ์ด๋ฅผ ์คํํ๋ ์ปดํจํฐ์ ์ถ๊ฐ)์ด ๊ฐ๋ฅํ์ฌ ์ต์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง์ด ์ฌ์ฉ๋จ
- Microsoft SQL Server
- SQL๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ ๋ง์ดํฌ๋ก์ํํธ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ
- PostgreSQL
- DB2
- ACCESS
- SQLite
sql ๊ธฐ๋ณธ ๋ฌธ๋ฒ
USE - ์คํค๋ง(๋ฐ์ดํฐ๋ฒ ์ด์ค) ์ ํ
-- USE '์คํค๋ง๋ช
'
USE mh_dbSELECT - ์กฐํํ ๋ฐ์ดํฐ(column) ์ง์
-- SELECT '์ปฌ๋ผ๋ช
' FROM 'ํ
์ด๋ธ๋ช
'
SELECT member_id, name FROM member;
-- SELECT ์ FROM ์ฌ์ด์ *๋ฅผ ์ ์ผ๋ฉด ํ
์ด๋ธ์ ๋ชจ๋ ์ปฌ๋ผ์ ์กฐํํ๋ค.
SELECT * FROM member;
-- ๋ SQL์ ๋์ผํ ๊ธฐ๋ฅ
SELECT * FROM market_db.member;
SELECT * FROM member;;
๋ ผ๋ฆฌ์ฐ์ฐ์ ์ฌ์ฉ
-- ๋
ผ๋ฆฌ์ฐ์ฐ์ ์ฌ์ฉ ๊ฐ๋ฅ
SELECT TRUE OR FALSE AND FALSE;ย ย // 1 SELECT (TRUE OR FALSE) AND FALSE; // 0between ๋ฒ์ํํ
-- between์ ํตํ ๋ฒ์ ํํ
SELECT * FROM member
WHERE height between 160 and 165LIKE ๋ฌธ์์ด์ ์ผ๋ถ ๊ธ์ ๊ฒ์
-- mem_name ์ปฌ๋ผ ๊ฐ์ด '๋ธ'๋ก ์์ํ๋ 4๊ธ์ ๊ธ์ ๋ฐ์ดํฐ ์กฐํ
SELECT * FROM member WHERE mem_name LIKE '๋ธ___';
-- mem_name ์ปฌ๋ผ ๊ฐ์ด '๋ธ'๋ก ์์ํ๋ ๋ชจ๋ ๋ฐ์ดํฐ ์กฐํ
SELECT * FROM member WHERE mem_name LIKE '๋ธ%';
-- mem_name ์ปฌ๋ผ ๊ฐ์ '๋ธ'์ด ๋ค์ด๊ฐ๋ ๋ชจ๋ ๋ฐ์ดํฐ ์กฐํ
SELECT * FROM member WHERE mem_name LIKE '%๋ธ%';- ๊ธ์_ โ ๊ธ์๋ก ์์, ์ธ๋๋ฐ์ ์์ ๋ฐ๋ผ ๊ธ์ ์ง์
- ๊ธ์% โ ํด๋น ๊ธ์๋ก ์์ํ๋ ๋ชจ๋ ๋ฐ์ดํฐ ์กฐํ
- %๊ธ์% โ ๊ฐ์ ํด๋น ๊ธ์๊ฐ ๋ค์ด๊ฐ๋ ๋ชจ๋ ๋ฐ์ดํฐ ์กฐํ
WHERE - ํน์ ์กฐ๊ฑด ์กฐํ
-- member ํ
์ด๋ธ์์ mem_number ์ปฌ๋ผ ๊ฐ์ด 5์ด์์ธ ๋ฐ์ดํฐ ์กฐํ
SELECT * FROM member
WHERE mem_number >= 5;IN() - ์ฌ๋ฌ ๊ฐ ๋งค์นญ
-- addr ์ปฌ๋ผ๊ฐ์ด ๊ฒฝ๊ธฐ, ์ ๋จ, ๊ฒฝ๋จ์ธ ๋ฐ์ดํฐ ์กฐํ
SELECT * FROM member
WHERE addr IN('๊ฒฝ๊ธฐ', '์ ๋จ', '๊ฒฝ๋จ');
SELECT * FROM member
WHERE addr = '๊ฒฝ๊ธฐ' OR addr = '์ ๋จ' OR addr = '๊ฒฝ๋จ';์๋ธ ์ฟผ๋ฆฌ
SELECT mem_name, height
FROM member
WHERE height > (select height from member where mem_name LIKE '์์ดํํฌ');2๊ฐ์ SQL๋ฌธ์ ํ๋๋ก ๋ง๋ค๊ธฐ
ORDER BY ์กฐํ ๋ฐ์ดํฐ ์ ๋ ฌ
-- debut_date ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ (๊ธฐ๋ณธ ASC)
SELECT * FROM member
ORDER BY debut_date;- ASC โ ์ค๋ฆ์ฐจ์(๊ธฐ๋ณธ๊ฐ)
- DESC โ ๋ด๋ฆฝ์ฐจ์
-- height ์ปฌ๋ผ ๊ฐ์ด 164 ์ด์์ธ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ์ฌ
-- height ๊ฐ ๊ธฐ์ค ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ๊ณ ๋์ผํ ๊ฐ์ด๋ผ๋ฉด debut_date ๊ฐ ๊ธฐ์ค ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
SELECT * FROM member
WHERE height >= 164
ORDER BY height DESC, debut_date;LIMIT ์ถ๋ ฅ ๊ฐ์ ์ ํ
SELECT * FROM member
LIMIT 3; -- ์์ 3๊ฑด๋ง ์กฐํ
SELECT * FROM member
LIMIT 3, 2; -- 3๋ฒ์งธ ๋ฐ์ดํฐ๋ถํฐ 2๊ฑด๋ง ์กฐํ
LIMIT 2 OFFSET 3; -- ์์ ๋์ผ- LIMIT ์์, ๊ฐ์
- ์ฒ์๋ถํฐ N๊น์ง์ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์ด
- LIMIT์ OFFSET ์กฐํฉ์ผ๋ก๋ ์ถ๋ ฅ ๊ฐ์ ์ ํ ๊ฐ๋ฅ
DISTINCT ์ค๋ณต ๋ฐ์ดํฐ ์ ๊ฑฐ
-- addr ์ ๋ชจ๋ ์ปฌ๋ผ ๊ฐ์ ์ค๋ณต์ ์ ๊ฑฐํ์ฌ ์กฐํ
SELECT DISTINCT addr
FROM member;DISTINCT๋ฅผ ์ด ์ด๋ฆ ์์ ๋ถ์ด๋ฉด ์ค๋ณต๋ ๊ฐ์ 1๊ฐ๋ง ์ถ๋ ฅ
GROUP BY ๊ทธ๋ฃนํ
-- mem_id๊ฐ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์
-- ๊ทธ๋ฃนํ๋ ๋ฐ์ดํฐ์์ mem_id์ amount์ ํฉ๊ณ๋ฅผ ๊ตฌํจ
SELECT mem_id, SUM(amount) AS "ํฉ๊ณ"
FROM buy
GROUP BY mem_id
ORDER BY mem_id;์ง๊ณ ํจ์
- SUM() ์ปฌ๋ผ์ ํฉ๊ณ
- AVG() ์ปฌ๋ผ์ ํ๊ท
- MIN() ์ปฌ๋ผ์ ์ต์๊ฐ ๋ฐํ
- MAX() ์ปฌ๋ผ์ ์ต๋๊ฐ์ ๋ฐํ
- COUNT() ํ์ ๊ฐ์**(NULL ๊ฐ ํฌํจ)**
- COUNT(DISTINCT) : ํ์ ๊ฐ์ (์ค๋ณต ์ ์ธ, NULL๊ฐ ๋นํฌํจ)
- STDEV() ํ์ค ํธ์ฐจ
- VARIANCE() ๋ถ์ฐ
-- ์ง๊ณ ํจ์ ์์์ ์ฐ์ฐ๋ ๊ฐ๋ฅ
SELECT mem_id, SUM(amount*price) AS "์ด ๊ธ์ก"
FROM buy
GROUP BY mem_id
ORDER BY mem_id;HAVING ๊ทธ๋ฃน ์กฐ๊ฑด
-- mem_id ๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํ
-- ๊ทธ๋ฃนํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก amount*price ํฉ๊ณ๊ฐ 1000 ์ด์์ธ ๊ทธ๋ฃน๋ง ๋จ๊น
-- ์กฐ๊ฑด์ ๊ฑธ๋ฌ์ง ๊ทธ๋ฃน์์ amount*price ์ ํฉ๊ณ๋ฅผ ์กฐํ
SELECT SUM(amount*price) AS "์ด ๊ธ์ก"
FROM buy
GROUP BY mem_id
HAVING SUM(amount*price) >= 1000;- ์ง๊ณ ํจ์์ ๋ํด์ ์กฐ๊ฑด ์ ํํ๋ ํธ๋ฆฌํ ๊ฐ๋
- ๋ฐ๋์ GROUP BY์ ๋ค์์ ๋์์ผ ํจ
ROLLUP
- ์ดํฉ ๋๋ ์ค๊ฐํฉ๊ณ๊ฐ ํ์ํ ๋ ์ฌ์ฉ
- GROUP BY์ ๊ณผ ํจ๊ป WITH ROLLUP๋ฌธ ์ฌ์ฉ
JOIN
- ์ฌ๋ฌ ํ ์ด๋ธ์์ ๊ฐ์ ธ์จ ๋ ์ฝ๋๋ฅผ ์กฐํฉํ์ฌ ํ๋์ ํ ์ด๋ธ์ด๋ ๊ฒฐ๊ณผ ์งํฉ์ผ๋ก ํํ
- ๊ทธ๋ฅ ํฉ์น๋๊ฒ ์๋๋ผ,
ON์ ํตํด์ ์กฐ๊ฑด์ ๊ฑธ์ด์ฃผ๊ธฐ
๋ด์ฅํจ์
๋ฌธ์์ด ํจ์
- LENGTH() ๋ฌธ์์ด ๊ธธ์ด
- CONCAT() ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด์ ๋ชจ๋ ๊ฒฐํฉํ์ฌ ํ๋์ ๋ฌธ์์ด๋ก ๋ฐํ
- ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด ์ค ํ๋๋ผ๋ NULL์ด ์กด์ฌํ๋ฉด NULL ๋ฐํ
- LOCATE() ๋ฌธ์์ด ๋ด์์ ์ฐพ๋ ๋ฌธ์์ด์ด ์ฒ์์ผ๋ก ๋ํ๋๋ ์์น
- ์ฐพ๋ ๋ฌธ์์ด์ด ๋ฌธ์์ด ๋ด์ ์์ผ๋ฉด 0 ๋ฐํ
- MYSQL์ ์์ ์ธ๋ฑ์ค๊ฐ 1๋ถํฐ์
- LEFT() ๋ฌธ์์ด ์ผ์ชฝ๋ถํฐ ์ง์ ํ ๊ฐ์๋งํผ์ ๋ฌธ์๋ฅผ ๋ฐํ
- RIGHT() ๋ฌธ์์ด ์ค๋ฅธ์ชฝ๋ถํฐ ์ง์ ํ ๊ฐ์๋งํผ์ ๋ฌธ์๋ฅผ ๋ฐํ
- LOWER() ์๋ฌธ์๋ก
- UPPER() ๋๋ฌธ์๋ก
- REPLACE() ๋ฌธ์์ด์์ ํน์ ๋ฌธ์์ด์ ๋์ฒด ๋ฌธ์์ด๋ก ๊ต์ฒด
- TRIM() ๋ฌธ์์ด ์๋ค or ์์ชฝ์ ๋ชจ๋ ์๋ ํน์ ๋ฌธ์๋ฅผ ์ ๊ฑฐ
- BOTH ์ ๋์ ์กด์ฌํ๋ ํน์ ๋ฌธ์ ์ ๊ฑฐ
- LEADING ์ ๋ฌ ๋ฐ์ ๋ฌธ์์ด ์์ ์กด์ฌํ๋ ํน์ ๋ฌธ์ ์ ๊ฑฐ
- TRAILING ์ ๋ฌ ๋ฐ์ ๋ฌธ์์ด ๋ค์ ์กด์ฌํ๋ ํน์ ๋ฌธ์ ์ ๊ฑฐ
- ์ง์ ์ ๋ช ์ ์ํ๋ฉด BOTH๋ก ๋จ
- ์ ๊ฑฐํ ๋ฌธ์ ๋ช ์ ์์ผ๋ฉด ๊ณต๋ฐฑ ์ ๊ฑฐ
SELECT TRIM(LEADING "@@@" FROM "@@@wrwr@@@")
-- wrwr- FORMAT() ์ซ์ ํ์
์ ๋ฐ์ดํฐ๋ฅผ ์ธ ์๋ฆฌ๋ง๋ค ์ผํ๋ฅผ ์ฌ์ฉํ๋ ํ์์ผ๋ก ๋ณํ
- ๋ฌธ์์ด๋ก ๋ฐํ๋จ
- ๋๋ฒ์งธ ์ธ์๋ ๋ฐ์ฌ๋ฆผํ ์์ ๋ถ๋ถ์ ์๋ฆฟ์
- FLOOR() ๋ด๋ฆผ
- CEIL() ์ฌ๋ฆผ
- ROUND() ๋ฐ์ฌ๋ฆผ
- SQRT() ์์ ์ ๊ณฑ๊ทผ
- POW() ๋ฐ์์ ์ง์๋ฅผ ์ ๋ฌํ์ฌ ๊ฑฐ๋ญ์ ๊ณฑ
- EXP() ์ธ์๋ก ์ง์๋ฅผ ์ ๋ฌ๋ฐ์ e์ ๊ฑฐ๋ญ์ ๊ณฑ ๊ณ์ฐ
- LOG() ์์ฐ๋ก๊ทธ ๊ฐ์ ๊ณ์ฐ
- SIN() ์ฌ์ธ๊ฐ
- COS() ์ฝ์ฌ์ธ๊ฐ
- TAN() ํ์ ํธ๊ฐ
- ABS() ์ ๋๊ฐ
- RAND() 0.0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ 1.0๋ณด๋ค ์์ ํ๋์ ์ค์๋ฅผ ๋ฌด์์ ์์ฑ
- NOW() ํ์ฌ ๋ ์ง์ ์๊ฐ ๋ฐํ
- โYYYY-MM-DD HH:MM:SSโ ๋๋ YYYYMMDDHHMMSSํํ๋ก ๋ฐํ
- CURDATE() ํ์ฌ ๋ ์ง ๋ฐํ
- โYYYY-MM-DDโ ๋๋ YYYYMMDDํํ๋ก ๋ฐํ
- CURTIME() ํ์ฌ ์๊ฐ ๋ฐํ
- โHH:MM:SSโ ๋๋ HHMMSSํํ๋ก ๋ฐํ
- DATE() ์ ๋ฌ๋ฐ์ ๊ฐ์ ๋ ์ง ์ ๋ณด ๋ฐํ
- MONTH() ์
- DAY() ์ผ
- HOUR() ์๊ฐ
- MINUTE() ๋ถ
- SECOND() ์ด
- MONTHNAME() ์์ ํด๋นํ๋ ์ด๋ฆ
- DAYNAME() ์์ผ
- DAYOFWEEK() ํด๋น ์ฃผ์์ ๋ช๋ฒ์งธ ๋ ์ธ์ง ๋ฐํ 1-7์ฌ์ด
- ์ผ์์ผ = 1, ํ ์์ผ = 7
- DAYOFMONTH() ํด๋น ์์์ ๋ช ๋ฒ์จฐ ๋ ์ธ์ง ๋ฐํ 0๋ถํฐ 31 ์ฌ์ด
- DAYOFYEAR() ํด๋น ์ฐ๋์์ ๋ช๋ฒ์งธ ๋ ์ธ์ง ๋ฐํ 1-366์ฌ์ด
- DATE_FORMAT() ์ ๋ฌ๋ฐ์ ํ์์ ๋ง์ถฐ ๋ ์ง์ ์๊ฐ ์ ๋ณด ๋ฌธ์์ด๋ก ๋ฐํ