SQL(Structured Query Language)SQL ๋ฌธ๋ฒ ์์SQL ์ค์ ์คํ ์์TABLEํ
์ด๋ธ ์กฐํํ
์ด๋ธ ์์ฑํ
์ด๋ธ ์ญ์ ํ
์ด๋ธ ๋ณ๊ฒฝDBEntity(์ํฐํฐ)Attribute(์์ฑ)Relationship(๊ด๊ณ)Identifier(์๋ณ์)๋ฐ์ดํฐ ์ฝ์
(INSERT)column ์ ํ ์กฐํ (SELECT)์ ์ฒด ํ
์ด๋ธ *LIMIT OFFSET๋ ์ฝ๋ ์ญ์ (DELETE)๋ ์ฝ๋ ์์ (UPDATE)๊ธฐํ ํจ์wildecards(%, _)NULL ์ฒดํฌASGROUP BYJOINInner JOINSELF INNER JOINOUTER JOINLEFT OUTER JOINRIGHT OUTER JOINFULL OUTER JOINJOIN ์ ๋ฆฌ๋ณธAPPLY ์ฐ์ฐ์Inline view (์ธ๋ผ์ธ ๋ทฐ)Multi Row Sub Query (๋ค์ค ํ ์๋ธ์ฟผ๋ฆฌ)MSSQL๋ฐ์ดํฐ ๊ฒ์BETWEEN A AND BROLLUPPIVOTCASE WHENํ๋ก์์ ์ค๋ฅ ์ฒ๋ฆฌํจ์Stored Procedure(์ ์ฅ ํ๋ก์์ )์ผ๋ฐ ์ฟผ๋ฆฌ๋ฌธ VS ์ ์ฅ ํ๋ก์์ ๋ช
๋ น์ดMERGE ๊ตฌ๋ฌธWHEN ๊ตฌ๋ฌธdbodbo์ ์คํค๋ง ์ฐจ์ดTriggerMSSQL ํธ๋ฆฌ๊ฑฐqueryUNIONCursor๋ฌธCursorํน์ง๋ด ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋STRING_AGG()CHARINDEX()IIFTOP์์์ผ์ ์ข
๋ฃ์ผ์ ์ฌ์ด ๋ชจ๋ ์ผ์ ์กฐํ
SQL(Structured Query Language)
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ ์, ์กฐ์, ์ ์ดํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ช
๋ น์ด
- DDL(๋ฐ์ดํฐ ์ ์์ด) : ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ์์ฑํ๊ฑฐ๋ ํ ์ด๋ธ์ ๋ง๋๋ ์ธ์ด
- DML(๋ฐ์ดํฐ ์กฐ์์ด) : ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฑฐ๋ ์์ , ์ญ์ ํ๋ ๋ฑ์ ์ญํ ์ ํ๋ ์ธ์ด
- DCL(๋ฐ์ดํฐ ์ ์ด์ด) : ์ฌ์ฉ์์ ๊ถํ์ ์ค์ ํ๋ ์ธ์ด
SQL ๋ฌธ๋ฒ ์์
SELECT โ FROM โ WHERE โ GROUP BY โ HAVING โ ORDER BY
SQL ์ค์ ์คํ ์์
FROM โ ON โ JOIN โ WHERE โ GROUP BY โ HAVING โ SELECT โ DISTINCT โ ORDER BY
- FROM : ๊ฐ ํ ์ด๋ธ ํ์ธ
- ON : ์กฐ์ธ ์กฐ๊ฑด ํ์ธ
- JOIN : ํ ์ด๋ธ ์กฐ์ธ(๋ณํฉ)
- WHERE : ๋ฐ์ดํฐ ์ถ์ถ ์กฐ๊ฑด ํ์ธ
- GROUP BY : ํน์ ์นผ๋ผ์ผ๋ก ๋ฐ์ดํฐ ๊ทธ๋ฃนํ
- HAVING : ๊ทธ๋ฃนํ ์ดํ ๋ฐ์ดํฐ ์ถ์ถ ์กฐ๊ฑด ํ์ธ
- SELECT : ๋ฐ์ดํฐ ์ถ์ถ
- DISTINCT : ์ค๋ณต ์ ๊ฑฐ
- ORDER BY : ๋ฐ์ดํฐ ์ ๋ ฌ
TABLE
ํ ์ด๋ธ ์กฐํ
- ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
SELECT ํ๋๋ช FROM ํ ์ด๋ธ๋ช ORDER BY ํ๋๋ช DESC;
- ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
SELECT ํ๋๋ช FROM ํ ์ด๋ธ๋ช ORDER BY ํ๋๋ช ASC;
ํ ์ด๋ธ ์์ฑ
CREATE TABLE users( id INTEGER PRIMARY KEY, name TEXT ); CREATE TABLE ํ ์ด๋ธ๋ช ( ์ปฌ๋ผ1 ๋ฐ์ดํฐํ์ ์ ์ฝ์กฐ๊ฑด, ์ปฌ๋ผ2 ๋ฐ์ดํฐํ์ ์ ์ฝ์กฐ๊ฑด, ์ปฌ๋ผ3 ๋ฐ์ดํฐํ์ ์ ์ฝ์กฐ๊ฑด, ... ); // NOT NULL : ๊ณต๋ฐฑ์ ํ์ฉํ์ง ์๊ฒ ๋ค๋ ์ต์ // AUTO_INCREMENT : ์๋ฃํ์ด INT(์ ์ํ)์ผ๋ ์ ์ฉ ๊ฐ๋ฅ, ๋ฐ์ดํฐ๊ฐ ๋ง์์ง ๋๋ง๋ค 1์ฉ ์๋ ์ฆ๊ฐ // PRIMARY KEY : ์ค๋ณต ๊ฐ ํ์ฉ ์ํ๋ ์ปฌ๋ผ 1๊ฐ ์ ํ (ํ ์ด๋ธ ๋ด ๊ณ ์ ๊ฐ ํ์ํ ๊ฒฝ์ฐ)
ํ ์ด๋ธ ์ญ์
DROP TABLE users;
ํ ์ด๋ธ ๋ณ๊ฒฝ
- table ์ด๋ฆ ๋ณ๊ฒฝ
ALTER TABLE <๊ธฐ์กด table๋ช > RENMAE TO <๋ณ๊ฒฝํ๊ณ ์ถ์ table๋ช >
- ์๋ก์ด column ์ถ๊ฐ
ALTER TABLE <table๋ช > ADD COLUMN <์ถ๊ฐํ colum๋ช > <column ํ์ > <์ต์ >;
- column ์ด๋ฆ ๋ณ๊ฒฝ
ALTER TABLE <table๋ช > RENAME COLUMN <๊ธฐ์กด column๋ช > TO <๋ณ๊ฒฝํ๊ณ ์ถ์ column๋ช >;
- ํ ์ด๋ธ ์์ฑ ๋ณ๊ฒฝ
ALTER TABLE [ํ ์ด๋ธ๋ช ] change [ํด๋นํ๋] [๋ฐ๊ฟ ํ๋๋ช ] [๋ณ๊ฒฝํ ์์ฑ]
DB
Entity(์ํฐํฐ)
- ํ ์ด๋ธ
- ์ ๋ฌด์์ ํ์ํ๊ณ ์ ์ฉํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ์งํฉ์ ์ธ ๊ฒ์ด๋ค.
- ์ธ์คํด์ค์ ์งํฉ
- ์์ฑ์ด ์กด์ฌํด์ผํ๊ณ ๋ค๋ฅธ ์ํฐํฐ์ ์ต์ ํ ๊ฐ ์ด์์ ๊ด๊ณ๊ฐ ์์ด์ผํจ
Attribute(์์ฑ)
- ์ปฌ๋ผ
- ์ธ์คํด์ค๋ก ์๋ง์ ๋์ด์ ๋ถ๋ฆฌ๋์ง ์๋ ์ต์์ ๋ฐ์ดํฐ ๋จ์
Relationship(๊ด๊ณ)
- ํ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๋ฐ์ดํฐ ๋ด์ฉ์ ์ ์ฒด ์งํฉ์ ์๋ฏธ
Identifier(์๋ณ์)
- ํ๋์ ์ํฐํฐ ๋ด์ ๊ตฌ์ฑ๋์ด ์๋ ์ฌ๋ฌ ์์ฑ๋ค ์ค์ ์ํฐํฐ๋ฅผ ๋ํํ ์ ์๋ ์์ฑ
- ํ๋์ ์ํฐํฐ ์์๋ ๋ฐ๋์ ์ ์ผํ ์๋ณ์๊ฐ ์กด์ฌํด์ผ ํจ
๋ฐ์ดํฐ ์ฝ์ (INSERT)
INSERT INTO users (name, age) VALUES ('ํ๊ธธ๋', 23);
table์ column์ ์๋ ๋ชจ๋ VALUE๋ฅผ ๋ฃ์๋์๋ column๋ช
์ ์ ์ด์ฃผ์ง ์์๋ ๋จ
column ์ ํ ์กฐํ (SELECT)
์ ์ฒด ํ ์ด๋ธ *
LIMIT
์์์ N๊ฐ์ ๋ฐ์ดํฐ
SELECT rowid, name FROM users LIMIT 2;
OFFSET
์์ N๊ฐ ์ ๊ฑฐ
SELECT rowid, name FROM users LIMIT 1 OFFSET 2;
๋ ์ฝ๋ ์ญ์ (DELETE)
DELETE FROM users WHERE rowid=2; SELECT rowid, * FROM users; rowid name age address ----- ---- --- ------- 1 ํ๊ธธ๋ 30 ์์ธ 3 ๊ฐ๋๋ค 23 ๋ถ์ฐ
๋ ์ฝ๋ ์์ (UPDATE)
UPDATE users SET name="ํ๊ธธ๋", address="์ ์ฃผ๋" WHERE rowid='3' SELECT * FROM users; rowid name age address ----- ---- --- ------- 1 ํ๊ธธ๋ 30 ์์ธ 3 ํ๊ธธ๋ 23 ์ ์ฃผ๋
๊ธฐํ ํจ์
- COUNT : ์ ํํ ํ์ ๋ ์ฝ๋ ๊ฐฏ์ ์กฐํ
SELECT COUNT(*) FROM users; // users ํ ์ด๋ธ ์ ์ฒด ๋ ์ฝ๋ ๊ฐฏ์
- AVG : ํ๊ท
SELECT AVG(age) FROM users WHERE age>=30; // 30์ด ์ด์์ธ ์ฌ๋๋ค ๋์ด์ ํ๊ท
- MAX : ๊ฐ์ฅ ๋์ ๊ฐ
SELECT name, MAX(age) FROM users; // ๋์ด๊ฐ ๊ฐ์ฅ ๋ง์ ์ฌ๋๊ณผ ๊ทธ ๋์ด๋ฅผ ์กฐํ
wildecards(%, _)
- % : ์ด ์๋ฆฌ์ ๋ฌธ์์ด์ด ์กด์ฌํ ์๋ ์๋ ์๋ ์๋ค
- _ : ๋ฌด์กฐ๊ฑด ๋จ์ผ ๋ฌธ์๊ฐ ๋ค์ด๊ฐ์ผ ํ๋ค
SELECT * FROM users WHERE name LIKE '%๋';
NULL ์ฒดํฌ
WHERE col_name is not null WHERE col_name is null
SELECT ANIMAL_TYPE, INFNULL(NAME, 'No name') NAME, SEX_UPON_INTKE FROM ANIMAL_INS
AS
SELECT ๋ฌธ์ ์ฌ์ฉํ ๋ ๊ฒฐ๊ณผ๋ก ๋์ค๋ ์นผ๋ผ์ AS๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ์นญ์ ์ค ์ ์๋ค.
GROUP BY
๊ฐ์ ๊ฐ์ ๊ฐ์ง ํ๋ผ๋ฆฌ ํ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ญ์ณ์ค๋๋ค.
ex) ํ์ด ๋๊ฐ๊ฐ ๋๊ฑธ ํ๋์ ํ์ผ๋ก ํฉ์น๊ธฐ ์ํจ
์ง๊ณํจ์
- count
- sum
- max
- min
- avg
JOIN
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ โ๋ ๊ฐ ์ด์์ ํ ์ด๋ธโ์ ์ฐ๊ฒฐํ์ฌ โํ๋์ ๊ฒฐ๊ณผ์ ํ ์ด๋ธโ๋ก ๋ง๋๋๊ฒ์ ์๋ฏธ
- Inner Join
- Outer Join
Inner JOIN
๋ ํ
์ด๋ธ์์ โ๊ณตํต๋ ๊ฐโ์ ๊ฐ์ง๊ณ ์๋ ํ๋ค๋ง์ ๋ฐํํฉ๋๋ค.
SELECT * FROM ํ ์ด๋ธ1 INNER JOIN ํ ์ด๋ธ2 ON ํ ์ด๋ธ1.์ด = ํ ์ด๋ธ2.์ด;
SELF INNER JOIN
ํ๋์ ํ
์ด๋ธ ๋ด์์ ๋ค๋ฅธ ์ด์ ์ฐธ์กฐํ๊ธฐ ์ํด ์ฌ์ฉํ๋ โ์๊ธฐ ์์ ๊ณผ์ ์กฐ์ธโ๋ฐฉ๋ฒ
SELECT ํ ์ด๋ธ1.์ด, ํ ์ด๋ธ2.์ด FROM ํ ์ด๋ธ1 t1 JOIN ํ ์ด๋ธ1 t2 ON ํ ์ด๋ธ1.์ด = ํ ์ด๋ธ2.์ด;
OUTER JOIN
๋ ํ
์ด๋ธ์์ โ๊ณตํต๋ ๊ฐ์ ๊ฐ์ง์ง ์๋ ํ๋คโ๋ ๋ฐํ
LEFT OUTER JOIN
โ์ผ์ชฝ ํ
์ด๋ธ์ ๋ชจ๋ ํโ๊ณผ โ์ค๋ฅธ์ชฝ ํ
์ด๋ธ์์ ์ผ์ชฝ ํ
์ด๋ธ๊ณผ ๊ณตํต๋ ๊ฐโ์ ๊ฐ์ง๊ณ ์๋ ํ๋ค์ ๋ฐํ
SELECT * FROM ํ ์ด๋ธ1 LEFT JOIN ํ ์ด๋ธ2 ON ํ ์ด๋ธ1.์ด = ํ ์ด๋ธ2.์ด;
RIGHT OUTER JOIN
โ์ค๋ฅธ์ชฝ ํ
์ด๋ธ์ ๋ชจ๋ ํโ๊ณผ โ์ผ์ชฝ ํ
์ด๋ธ์์ ์ค๋ฅธ์ชฝ ํ
์ด๋ธ๊ณผ ๊ณตํต๋ ๊ฐโ์ ๊ฐ์ง๊ณ ์๋ ํ๋ค์ ๋ฐํ
SELECT * FROM ํ ์ด๋ธ1 RIGHT JOIN ํ ์ด๋ธ2 ON ํ ์ด๋ธ1.์ด = ํ ์ด๋ธ2.์ด;
FULL OUTER JOIN
๋ ํ
์ด๋ธ์์ โ๋ชจ๋ ๊ฐโ์ ๋ฐํ
SELECT * FROM ํ ์ด๋ธ1 FULL OUTER JOIN ํ ์ด๋ธ2 ON ํ ์ด๋ธ1.์ด = ํ ์ด๋ธ2.์ด;
JOIN ์ ๋ฆฌ๋ณธ
INNER JOIN
(๋ด๋ถ์กฐ์ธ)์ ๋ ํ ์ด๋ธ์ ์กฐ์ธํ ๋ ๋ ํ ์ด๋ธ์ ๋ชจ๋ ์ง์ ํ ์ด์ ๋ฐ์ดํฐ๊ฐ ์์ด์ผํ๋ค.OUTER JOIN
(์ธ๋ถ์กฐ์ธ)์ ๋ ํ ์ด๋ธ์ ์กฐ์ธํ ๋ 1๊ฐ์ ํ ์ด๋ธ์๋ง ๋ฐ์ดํฐ๊ฐ ์์ด๋ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.CROSS JOIN
(์ํธ์กฐ์ธ)์ ํ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ํ๊ณผ ๋ค๋ฅธ ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ํ์ ์กฐ์ธํ๋ ๊ธฐ๋ฅ์ด๋ค.SELF JOIN
(์์ฒด์กฐ์ธ)์ ์์ ์ด ์์ ๊ณผ ์กฐ์ธํ๋ค๋ ์๋ฏธ๋ก 1๊ฐ์ ํ ์ด๋ธ์ ์ฌ์ฉํ๋ค.
APPLY ์ฐ์ฐ์
SELECT .. FROM [์ธ๋ถ ํ ์ด๋ธ] CROSS | OUTER APPLY (SELECT .. FROM [๋ด๋ถ ํ ์ด๋ธ] WHERE [์กฐ์ธ ์กฐ๊ฑด์])
CROSS APPLY
= INNER JOIN- ๋ด๋ถ ํ ์ด๋ธ์ ์งํฉ์ผ๋ก๋ถํฐ ์กฐ์ธ ํค๋ก ๊ฒฐํฉํ ์ธ๋ถ ํ ์ด๋ธ์ ํ๋ง์ ๋ฐํํฉ๋๋ค.
OUTER APPLY
= LEFT OUTER JOIN- ๋ด๋ถ ํ ์ด๋ธ์ ์งํฉ์ผ๋ก๋ถํฐ ์กฐ์ธ ํค์ ๊ฒฐํฉํ ์ธ๋ถ ํ ์ด๋ธ์ ํ + ๊ทธ๋ ์ง ์์ ํ ์ ๋ถ๋ฅผ ๋ฐํํฉ๋๋ค. ๊ทธ๋ ์ง ์์ ํ์ ์ด์์ NULL์ ํ์ํฉ๋๋ค.
Inline view (์ธ๋ผ์ธ ๋ทฐ)
SELECT ์ ์ ๊ฒฐ๊ณผ๋ฅผ FROM ์ ์์ ํ๋์ ํ
์ด๋ธ์ฒ๋ผ ์ฌ์ฉํ๊ณ ์ถ์ ๋ ์ฌ์ฉ
Multi Row Sub Query (๋ค์ค ํ ์๋ธ์ฟผ๋ฆฌ)
IN
: ๊ฐ์ ๊ฐ์ ์ฐพ์ (=)
>ANY
: ์ต์๊ฐ์ ๋ฐํ
<ANY
: ์ต๋๊ฐ์ ๋ฐํ
<ALL
: ์ต์๊ฐ์ ๋ฐํ
>ALL
: ์ต๋๊ฐ์ ๋ฐํ
> any(a, b) : a,b ์ค ์ต์๋ณด๋ค ํฐ > all(a, b) : a,b ์ค ์ต๋๋ณด๋ค ํฐ < any(a, b) : a,b ์ค ์ต๋๋ณด๋ค ์์ < all(a, b) : a,b ์ค ์ต์๋ณด๋ค ์์
where์ ์ด ์๋! ์๋ธ์ฟผ๋ฆฌ์ min, max๋ฅผ ์ฌ์ฉํด๋ ๋ฌธ์ ๊ฐ ์์
MSSQL
๋ฐ์ดํฐ ๊ฒ์
์์ n๊ฐ์ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์ค๊ธฐ
SELECT TOP n * FROM ํ ์ด๋ธ๋ช
์นผ๋ผ์ด ํจํด๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
SELECT * FROM ํ ์ด๋ธ๋ช WHERE ์นผ๋ผ LIKE 'ํจํด' // 'k%'(k๋ก ์์๋๋),'%k%'(์ค๊ฐ์ k๊ฐ ์๋), 'k%'(k๋ก ๋๋๋) // 'p_'(p๋ก ์์ํ๋ 2์๋ฆฌ), '_ _p'(3์๋ฆฌ ๋ฐ์ดํฐ์ค p๋ก ๋๋๋)
isnull, not null ์ฒ๋ฆฌ
WHERE ISNULL(์นผ๋ผ,"") // is null WHERE ISNULL(์นผ๋ผ,"")<> // not null
BETWEEN A AND B
SELECT * FROM employeeWHERE salary WHERE BETWEEN 300 AND 500; // salary๊ฐ 300์ด์ 500์ดํ์ธ ๋ฐ์ดํฐ ์กฐํ
ROLLUP
GROUP BY๋ฌธ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ ํจ์์ธ๋ฐ, GROUP BY๋ก GROUPING๋ ํ๋ค ๋ฐ์ดํฐ ์ดํฉ์ ๋ํ๋ด๋๋ฐ ์ฌ์ฉ
SELECT job, deptno, SUM(sal) AS total_sal FROM emp WHERE job IN ('MANAGER', 'CLERK', 'SALESMAN') GROUP BY ROLLUP(job, deptno)
์๊ณ ์ ๊ฑฐ ๋ฐฉ๋ฒ
SELECT job, deptno, SUM(sal) AS total_sal FROM emp WHERE job IN ('MANAGER', 'CLERK', 'SALESMAN') GROUP BY ROLLUP(job, deptno) HAVING GROUPING(job) = 1 OR GROUPING
PIVOT
ํ์ผ๋ก ๋์ด์๋ ๋ฐ์ดํฐ๋ค์ ์ด๋ก ๋ณํํด์ ๋ณด์ฌ์ฃผ๋ ํจ์
SELECT [PIVOT์ด1], [PIVOT์ด2], ...FROM ํ ์ด๋ธ๋ช PIVOT (๋ํ๋ด๊ณ ์ํ๋ ๊ฐ, FOR ํ->์ด๋ก ๋ฐ๊ฟ ์ด IN ([PIVOT์ด1], [PIVOT์ด2], ...)) as ๋ณ์นญ // UNPIVOT์ ๋ฐ๋
CASE WHEN
CASE WHEN ์กฐ๊ฑด์ THEN ์ฐธ์ผ๋ ๊ฐ ELSE ๊ฑฐ์ง์ผ๋ ๊ฐ END ์ปฌ๋ผ๋ช
ํ๋ก์์ ์ค๋ฅ ์ฒ๋ฆฌ
RAISERROR('๋ฉ์์ง', ์ค๋ฅ์ฌ๊ฐ๋, ์ํ[์ต์ ]) // 1~10 : ์ผ๋ฐ ์ฌ์ฉ์ ์ ๋ณด // 11~16 : ์ฌ์ฉ์ ์ ์ ์ค๋ฅ // 17~25 : ์์คํ ์ค๋ฅ
ํจ์
1. ์์นํจ์ ROUND(์์น๊ฐ, ๋ฐ์ฌ๋ฆผ์์น) // ๋ฐ์ฌ๋ฆผ ๋ฐ ์๋ฅด๊ธฐ ABS(์์น๋ฐ์ดํฐ) // ์ ๋๊ฐ SIGN(์์น๋ฐ์ดํฐ) // ๋ถํธ SQRT(์์น๊ฐ) // ์ ๊ณฑ๊ทผ POWER(์์น๊ฐ, n) // n์น 2. ๋ฌธ์์ด ํจ์ ์ ๋ฆฌ Ascii() // ๋ฌธ์์ด์ ์ ์ผ ์ผ์ชฝ ๋ฌธ์์ ์์คํค ์ฝ๋ ๊ฐ์ ๋ฐํ Char() // ์ ์ ์์คํค ์ฝ๋๋ฅผ ๋ฌธ์๋ก ๋ฐํ Charindex() // ๋ฌธ์์ด์์ ์ง์ ํ ์์ ์์น๋ฅผ ๋ฐํ Difference() // ๋ ๋ฌธ์์์ SOUNDEX ๊ฐ ๊ฐ์ ์ฐจ์ด๋ฅผ ์ ์๋ก ๋ฐํ Left(), Right() // ๋ฌธ์์ด ์ผ์ชฝ์ด๋ ์ค๋ฅธ์ชฝ์์๋ถํฐ ์ง์ ํ ์๋งํผ์ ๋ฌธ์๋ฅผ ๋ฐํ Len() // ๋ฌธ์์ด์ ๊ธธ์ด ๋ฐํ Lower() // ๋๋ฌธ์๋ฅผ ์๋ฌธ์๋ก ๋ฐํ Ltrim(), Rtrim() // ๋ฌธ์์ด์ ์ผ์ชฝ์ด๋ ์ค๋ฅธ์ชฝ ๊ณต๋ฐฑ ์ ๊ฑฐ Nchar() // ์ง์ ํ ์ ์ ์ฝ๋์ ์ ๋์ฝ๋ ๋ฌธ์ ๋ฐํ Replace() // ๋ฌธ์์ด์์ ๋ฐ๊พธ๊ณ ์ถ์ ๋ฌธ์ ๋ค๋ฅธ ๋ฌธ์๋ก ๋ฐํ Replicate() // ๋ฌธ์์์ ์ง์ ํ ํ์๋งํผ ๋ฐ๋ณต Reverse() // ๋ฌธ์์ด์ ์ญ์์ผ๋ก ์ถ๋ ฅ Space() // ์ง์ ํ ์๋งํผ์ ๊ณต๋ฐฑ ๋ฌธ์ ๋ฐํ Substring() // ๋ฌธ์,์ด์ง๋ํ ์คํธ ๋๋ ์ด๋ฏธ์ง ์์ ์ผ๋ถ๋ฅผ ๋ฐํ Unicode() // ์์ ์๋ ์ฒซ๋ฒ์งธ ๋ฌธ์์ ์ ๋์ฝ๋ ์ ์ ๊ฐ์ผ ๋ฐํ Upper() // ์๋ฌธ์๋ฅผ ๋๋ฌธ์๋ก ๋ฐํ Isnumeric() // ํด๋น ๋ฌธ์์ด์ด ์ซ์ํ์ด๋ฉด 1 ์๋๋ฉด 0์ ๋ฐํ Isdate() // ํด๋น ๋ฌธ์์ด์ด Datatime์ด๋ฉด 1 ์๋๋ฉด 0์ ๋ฐํ
Stored Procedure(์ ์ฅ ํ๋ก์์ )
ํน์ ๋ก์ง์ ์ฟผ๋ฆฌ๋ฅผ ํจ์๋ก ๋ง๋ค์ด ๋์ ๊ฒ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ด์์ SQL ๋ช ๋ น์ ์ปดํ์ผํ ๋ ์บ์๋ฅผ ์ด์ฉํ ์ ์์ผ๋ฏ๋ก ์ฒ๋ฆฌ๊ฐ ๋งค์ฐ ๋น ๋ฅด๋ค.
- ๋ฐ๋ณต์ ์ผ๋ก SQL ๋ช ๋ น์ ์คํํ ๊ฒฝ์ฐ ๋งคํ ๋ช ๋ น๋ง๋ค ๋คํธ์ํฌ๋ฅผ ๊ฒฝ์ ํ ํ์๊ฐ ์๋ค.
- ์ดํ๋ฆฌ์ผ์ด์ ๋ง๋ค ์๋ก ๋ง๋ค ํ์์์ด ์ด๋ฏธ ๋ง๋ค์ด์ง ํ๋ก์์ ๋ฅผ ๋ฐ๋ณต ์ฌ์ฉํ๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ก์ง์ ์์ ์ ํ๋ก์์ ๋ ์๋ฒ์ธก์ ์์ผ๋ฏ๋ก ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ค์ ์ปดํ์ผํ ํ์๊ฐ ์๋ค.
์ ์ฅํ๋ก์์ ์ ํจ์์ ์ฐจ์ด
์ ์ฅํ๋ก์์
: ์ผ๋ จ์ ์์ ์ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ, ๋ฆฌํด๊ฐ์ด ์๊ฑฐ๋ ๋ง์ ์๋ ์์, ์๋ฒ์์ ์คํ๋๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋น ๋ฆ
ํจ์
: ์ฌ๋ฌ ์์ ์ ์ํ ๊ธฐ๋ฅ, ๋ฆฌํด๊ฐ์ด ํ์, ํด๋ผ์ด์ธํธ์์ ์คํ๋๊ธฐ ๋๋ฌธ์ ํ๋ก์์ ๋ณด๋ค ๋๋ฆฌ๋ค.
์ผ๋ฐ ์ฟผ๋ฆฌ๋ฌธ VS ์ ์ฅ ํ๋ก์์
์ผ๋ฐ ์ฟผ๋ฆฌ๋ฌธ ์๋ ๋ฐฉ์
๊ตฌ๋ฌธ๋ถ์ โ ๊ฐ์ฒด ์ด๋ฆ ํ์ธ โ ์ฌ์ฉ๊ถํ ํ์ธ โ ์ต์ ํ โ ์ปดํ์ผ ๋ฐ ์คํ๊ณํ ๋ฑ๋ก(๋ฉ๋ชจ๋ฆฌ(์บ์)) โ ์คํ
- ๊ตฌ๋ฌธ๋ถ์ : ๊ตฌ๋ฌธ ์์ฒด์ ์ค๋ฅ๊ฐ ์๋์ง ๋ถ์
- ๊ฐ์ฒด ์ด๋ฆ ํ์ธ : ํ ์ด๋ธ์ด ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋์ง ํ์ธ
- ์ฌ์ฉ๊ถํ ํ์ธ : ํ์ฌ ํ ์ด๋ธ์ ์ ๊ทผ์ค์ธ ์ฌ์ฉ์๊ฐ ๊ถํ์ด ์๋์ง ํ์ธ
- ์ต์ ํ : ํด๋น ์ฟผ๋ฆฌ๋ฌธ์ด ๊ฐ์ฅ์ข์ ์ฑ๋ฅ์ ๋ผ ์ ์๋ ๊ฒฝ๋ก๋ฅผ ๊ฒฐ์
- ์ปดํ์ผ ๋ฐ ์คํ ๊ณํ ๋ฑ๋ก : ํด๋น ์คํ๊ณํ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ๋ฆฌ(์บ์)์ ๋ฑ๋ก
์ ์ฅ ํ๋ก์์ ์๋ ๋ฐฉ์
- ์ ์ฅํ๋ก์์ ์ ์ ๋จ๊ณ
- ๊ตฌ๋ฌธ๋ถ์ : ๊ตฌ๋ฌธ์ ์ค๋ฅ ํ์
์ง์ฐ๋ ์ด๋ฆ ํ์ธ
: ์ ์ฅ ํ๋ก์์ ๋ฅผ ์ ํ๋ ์์ ์์ ํด๋น ๊ฐ์ฒด(ํ ์ด๋ธ)๊ฐ ์กด์ฌํ์ง ์์๋ ์๊ด์๋ค. ํ๋ก์์ ์คํ ๋น์์ ํ ์ด๋ธ ์กด์ฌ ์ฌ๋ถ ํ์ธํจ(๊ฐ์ฒด์ด๋ฆ ํ์ธ)- ์์ฑ๊ถํ ํ์ธ : ํ์ฌ ์ฌ์ฉ์๊ฐ ์ ์ฅ ํ๋ก์์ ๋ฅผ ์์ฑํ ๊ถํ์ด ์๋์ง ํ์ธ
- ์์คํ ํ ์ด๋ธ ๋ฑ๋ก : ์ ์ฅ ํ๋ก์์ ์ ์ด๋ฆ ๋ฐ ์ฝ๋๊ฐ ์์คํ ํ ์ด๋ธ์ ๋ฑ๋ก
Create Procedure โ ๊ตฌ๋ฌธ ๋ถ์โ ์ง์ฐ๋ ์ด๋ฆ ํ์ธ โ ์์ฑ๊ถํ ํ์ธ โ ์์คํ
ํ
์ด๋ธ์ ๋ฑ๋ก
- ์ฒ์ ์ ์ฅ ํ๋ก์์ ์คํ
- ์ ์ ๋จ๊ณ์์ ์ง์ฐ๋ ์ด๋ฆํ์ธ์์ ๋ฏธ๋ฃจ์ด๋์๋ ํด๋น ๊ฐ์ฒด ์กด์ฌ ์ ๋ฌด๋ฅผ ๊ฐ์ฒด ์ด๋ฆ ํ์ธ์ ํตํด ์ํํ๋ค.
๊ตฌ๋ฌธ๋ถ์ ๋จ๊ณ ๋น ์ง ์ผ๋ฐ ์ฟผ๋ฆฌ๋ฌธ ์๋ ๋ฐฉ์๊ณผ ๋์ผ
- ์ดํ ์ ์ฅ ํ๋ก์์ ์คํ
- ๋ฉ๋ชจ๋ฆฌ(์บ์)์ ์๋ ๊ฒ์ ๊ทธ๋๋ก ๊ฐ์ ธ์ ์ฌ์ฌ์ฉํ๊ฒ ๋์ด ์ํ์๊ฐ์ ๋จ์ถ
์ ์ฅ ํ๋ก์์ ๋๋ฒ์งธ ์คํ โ ๋ฉ๋ชจ๋ฆฌ(์บ์)ํ์ธ โ ์คํ
๋ช ๋ น์ด
CREATE PROC ํ๋ก์์ ๋ช AS SQL ๋ฌธ // ์ ์ฅ ํ๋ก์์ CREATE PROC ํ๋ก์์ ๋ช ๋ณ์์ ์ธ AS SQL ๋ฌธ // ์ธ์๋ฅผ ๊ฐ์ง๋ ์ ์ฅ ํ๋ก์์ CREATE PROC ํ๋ก์์ ๋ช WITH ENCRYPTION AS SQL ๋ฌธ // ์ ์ฅ ํ๋ก์์ ๋ณด์ ์ค์ CREATE PROC ํ๋ก์์ ๋ช ์ธ์1 ๋ฐ์ดํฐํ, ...์ธ์2 ๋ฐ์ดํฐํ OUTPUT AS SQL๋ฌธ RETURN ๋ฆฌํด๊ฐ // RETURN ๊ฐ์ ๊ฐ์ง๋ ์ ์ฅ ํ๋ก์์ DROP PROCEDURE ํ๋ก์์ ๋ช 1, ํ๋ก์์ ๋ช 2 // ์ ์ฅ ํ๋ก์์ ์ญ์ EXEC ํ๋ก์์ ๋ช ํ๋ผ๋ฏธํฐ // ํ๋ก์์ ํธ์ถ
BEGINโฆEND // ๋ฌธ์ฅ์ ๋ธ๋ก (SQL๋ฌธ๊ณผ ๋ณ์์ ์ธ์ BEGIN~END ์ฌ์ด์ ์์ฑ) BEGIN END๋ ์๋ต๊ฐ๋ฅ DECLARE @๋ณ์๋ช ๋ฐ์ดํฐํ // ๋ณ์ ์ ์ธ SET @๋ณ์๋ช =๊ฐ // ๋ณ์์ ๊ฐ ์ง์ SET NOCOUNT ON // ๊ฒฐ๊ณผ ์ ์ฉ๋ ํ์ ๊ฐ์๋ฅผ ํ์ํ์ง ์๋๋กํ๋ ์ต์ PRINT @๋ณ์๋ช // ํ๊ฐ์ ๋ณ์ ์ถ๋ ฅ SELECT @๋ณ์1, @๋ณ์2 // ์ฌ๋ฌ๊ฐ์ ๋ณ์ ์ถ๋ ฅ IF // ์กฐ๊ฑด ์ํ ์ํ1 ELSE ์ํ2 WHILE ์กฐ๊ฑด1 // ๋ฐ๋ณต ์ํ BEGIN IF ์กฐ๊ฑด2 BREAK - WHILE ๋ฃจํ๋ฅผ ๋น ์ ธ๋๊ฐ๋ค CONTINUE - ์ํ์ ์ฒ๋ฆฌํ์ง ์๊ณ ์กฐ๊ฑด1๋ก ๋๋์๊ฐ๋ค ์ํ END EXEC ์ ์ฅํ๋ก์์ // SQL๋ฌธ์ ์คํ EXEC @(๋ณ์๋ก ์ง์ ๋ SQL๋ฌธ) GO // BATCH๋ฅผ ๊ตฌ๋ถ ์ง์
ํ
์ด๋ธ์ ๋ฐ์ดํฐ ์ ๋ฌด ํ์ธ
IF EXISTS (SELECT๋ฌธ) // ์กฐ๊ฑด๋ฌธ BEGIN // ๊ฐ์ด ํ๋์ด์ ์์ ์ ์คํ SELECT1 END ELSE BEGIN // ๊ฐ์ด ์์ ๋ ์คํ SELECT2 END // ๋ฆฌํดํ์ bool
ํ
์ด๋ธ์์ ์ต์์ ํ์ค์ ๋ฐ์ดํฐ๋ค ์ ๋ฌด
IF EXISTS (SELECT TOP 1 1 from ...) // ๋ณด๊ธฐ ํธํ๋ผ๊ณ ํ๋๊ฑฐ์ BEGIN ... END // ()์์ ์ฟผ๋ฆฌ๋ฌธ์ด ์๋๋ ์๋๋ ์์ผ๋ฉด (BEGIN)
MERGE ๊ตฌ๋ฌธ
UPDATE, DELETE, INSERT๋ฅผ ํ ๋ฒ์ ์์
์ด ๊ฐ๋ฅ
(merge๋ฌธ์ ์ ์ฐ๋ฉด select๋ก if๋ฌธ์ ๊ฑธ์ด์ผ upadate๋ insert๊ฐ ๊ฐ๋ฅ)
MERGE INTO (๋ณ๊ฒฝํ ํ ์ด๋ธ) USING (๋น๊ตํ ํ ์ด๋ธ) ON (์กฐ๊ฑด๋ฌธ) WHEN MATCHED THEN (์กฐ๊ฑด์ ๋ง์กฑํ ๊ฒฝ์ฐ) UPDATE SET WHEN NOT MATCHED THEN (์กฐ๊ฑด์ ๋ง์กฑํ์ง ์์ ๊ฒฝ์ฐ) DELETE
- Target ํ
์ด๋ธ๊ณผ Source ํ
์ด๋ธ ๋ชจ๋ ์กด์ฌํ๋ ๊ฒฝ์ฐ์
MATCHED
์กฐ๊ฑด์ ํด๋นํ๊ณ , ํด๋น ํ์ Target ํ ์ด๋ธ์ ํ์ Updateํ๊ฑฐ๋ Deleteํ ์ ์๋ค.
- Target ํ
์ด๋ธ์๋ ์กด์ฌํ์ง๋ง Source ํ
์ด๋ธ์๋ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ๋
NOT MATCHED BY SOURCE
์กฐ๊ฑด์ ํด๋นํ๋ฉฐ, ํด๋น ํ์ MATCHED์ ๋ง์ฐฌ๊ฐ์ง๋ก Target ํ ์ด๋ธ์ ํ์ Updateํ๊ฑฐ๋ Deleteํ ์ ์๋ค.
- Source ํ
์ด๋ธ์๋ ์กด์ฌํ์ง๋ง Target ํ
์ด๋ธ์๋ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ๋
NOT MATHCED BY TARGET
์กฐ๊ฑด์ ํด๋นํ๊ณ , ํด๋น ํ์ Target ํ ์ด๋ธ๋ก INSERT๋ง ๊ฐ๋ฅํ๋ค.
WHEN ๊ตฌ๋ฌธ
MATCHED
- MERGE๋ฌธ์
1๊ฐ
๋ง ํฌํจ
- MATCHED์ ์ 2๊ฐ ํฌํจ์ํฌ ๊ฒฝ์ฐ, ์ถ๊ฐ ์กฐ๊ฑด(AND condition)์ ์ ์ง์ ํด์ผ ํ๊ณ ๊ฐ๊ฐ UPDATE/DELETE ๋์์ ์ง์ ํด์ผ ํ๋ค.
NOT MATCHED BY TARGET
- MERGE๋ฌธ์๋
1๊ฐ
๋ง ํฌํจ
- BY TARGET์ ์๋ตํ ์ ์๋ค.
- ON์ ์ ์ผ์นํ์ง ์์ง๋ง ์ถ๊ฐ ๊ฒ์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ๋ชจ๋ ํ์ ๋ํด INSERT ์ํํ๋ค.
NOT MATCHED BY SOURCE
- MERGE๋ฌธ์
์ต๋ 2๊ฐ
- WHEN MATCHED๊ฐ ์ ์ฉ๋์ง ์์ ๊ฒฝ์ฐ์๋ง ์ ์ฉ
- 2๊ฐ ํฌํจ์ํฌ ๊ฒฝ์ฐ, ์ถ๊ฐ ์กฐ๊ฑด์ ์ ์ง์ ํด์ผ ํ๊ณ ๊ฐ๊ฐ UPDATE/DELETE ๋์์ ์ง์
- ์ถ๊ฐ ๊ฒ์ ์กฐ๊ฑด์ ๋์ ํ ์ด๋ธ์ ์ด๋ง ์ฐธ์กฐํ ์ ์๋ค.
dbo
dbo
(database owner)์ ์ฝ์๋ก ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋ณธ์ ์ผ๋ก ํฌํจ๋๋ ์คํค๋ง ์ด๋ฆ์
๋๋ค.์คํค๋ง
๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ์ฒด(ํ
์ด๋ธ, ๋ทฐ ๋ฑ)๋ฅผ ๊ตฌ์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๋
ผ๋ฆฌ์ ์ธ ์ปจํ
์ด๋์
๋๋ค.dbo์ ์คํค๋ง ์ฐจ์ด
- TEST๋ผ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด ์์ ์(dbo)๊ฐ test์ผ์ง๋ผ๋, table์ด๋ผ๋ ํ ์ด๋ธ์ test.table๋ก ์ฐธ์กฐํ ์ ์๋ค.
- ํ ์ด๋ธ๋ช ์์ ๋ถ๋ ๋ช ์นญ์ ์คํค๋ง ์ด๋ฆ
Trigger
ํน์ ํ
์ด๋ธ์ INSERT, DELETE, UPDATE ๋ฑ๊ณผ ๊ฐ์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ ์๋์ผ๋ก ์คํ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋ฆฌ๊ฑฐ
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ INSERT, DELETE, UPDATE ๋ฑ์ ์์
์ด ๋ฐ์ํ ๋ ํน์ ์์
์ ์๋์ผ๋ก ์คํํ๋ค.
- ํ์ด๋จธ ๋๋ ์ค์ผ์ค๋ง ํธ๋ฆฌ๊ฑฐ
์ ๊ธฐ์ ์ผ๋ก ๋ฐ๋ณต๋๋ ์์
์ ์์ฝํ์ฌ ์ง์ ๋ ์๊ฐ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์คํํ ์ ์๋ค.
- ์ด๋ฉ์ผ ๋๋ ๋ฉ์์ง ๊ธฐ๋ฐ ํธ๋ฆฌ๊ฑฐ
์ด๋ฉ์ผ ๋์ฐฉ, ๋ฉ์์ง ์์ ๋ฑ๊ณผ ๊ฐ์ ์ธ๋ถ ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ๊ณ ํด๋น ์ด๋ฒคํธ์ ๋ํด ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ ๊ตฌํ์ด ๊ฐ๋ฅ
- ํ์ผ ์์คํ ํธ๋ฆฌ๊ฑฐ
ํ์ผ ๋๋ ๋๋ ํ ๋ฆฌ์ ์์ฑ, ์์ ๋๋ ์ญ์ ์ ๊ฐ์ ํ์ผ ์์คํ
๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์งํ๊ณ ์ฐ๊ด๋ ์์
์ ์คํํ ์ ์๋ค.
- ์ธ๋ถ API ํธ์ถ ๊ธฐ๋ฐ ํธ๋ฆฌ๊ฑฐ
์ธ๋ถ ์๋น์ค๋ API ํธ์ถ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ํน์ ์์
์ด ์๋์ผ๋ก ์คํ๋๋๋ก ์ค์ ํ ์ ์๋ค.
MSSQL ํธ๋ฆฌ๊ฑฐ
- ์๋์ผ๋ก ์คํ๋๋ ํ๋ก์์ ์ ์ผ์ข , ์๋์ผ๋ก๋ ์คํ ๋ถ๊ฐ
- ํ ํ ์ด๋ธ๊ณผ ๊ด๋ จ๋์ด์๋ง ์กด์ฌ ํ ์ ์์
-- ํธ๋ฆฌ๊ฑฐ ์์ฑ CREATE TRIGGER [TriggerName] ON [TableName] [AFTER, BEFORE] INSERT, UPDATE, DELETE // ์ํ๋ ์ด๋ฒคํธ ์ง์ AS BEGIN // ์คํ๋ ์ฝ๋ ๋๋ ์์ ์ ์ฌ๊ธฐ์ ์์ฑ END;
query
set nocount on; select CodeID, CodeName from Information.CommonCodeDetail where CodeTypeID = 'AREA' and // ๋ ผ๋ฆฌ์ฐ์ฐ์ and, or CodeName like '%' + isnull(@CodeName, '') + '%' // isnull(null๊ฐ์ด ์๋ ์นผ๋ผ๋ช ,'') set nocount off;
UNION
2๊ฐ ์ด์์ SELECT ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํ๋๋ก ์ฐํฉํด์ฃผ๋ ์งํฉ ์ฐ์ฐ์
- ์ด์ ๊ฐ์์ ์์๊ฐ ๋ชจ๋ ์ฟผ๋ฆฌ์์ ๋์ผํด์ผํจ
- ๋ฐ์ดํฐ ํ์์ด ํธํ๋์ด์ผํฉ๋๋ค
union all์ ์ค๋ณต๊ฐ๋ ์ ๋ถ ๋ณด์ฌ์ค โ ์๋๋ ๋ ๋น ๋ฆ
union์ ๋ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ์ ์ค๋ณต๊ฐ์ ์ ๊ฑฐํด์ ๋ณด์ฌ์ค
-- UNION select [์ปฌ๋ผ1], [์ปฌ๋ผ2], [์ปฌ๋ผ3], ... FROM ํ ์ด๋ธ๋ช UNION select [์ปฌ๋ผ1], [์ปฌ๋ผ2], [์ปฌ๋ผ3], ... FROM ํ ์ด๋ธ๋ช -- UNION ALL select [์ปฌ๋ผ1], [์ปฌ๋ผ2], [์ปฌ๋ผ3], ... FROM ํ ์ด๋ธ๋ช UNION ALL select [์ปฌ๋ผ1], [์ปฌ๋ผ2], [์ปฌ๋ผ3], ... FROM ํ ์ด๋ธ๋ช
Cursor๋ฌธ
Cursor
- ๋ฐ์ดํฐ ์์ ์ ํ ๋ ํ ์ด๋ธ์์ ์งํฉ ๋จ์๊ฐ ์๋ ํ ๋จ์๋ก ์ฒ๋ฆฌ๋ฅผ ํด์ผํ ๋ ์ฌ์ฉํ๋ ๋ฐฉ์
- DML (SELECT, UPDATE, DELETE, INSERT)
ํน์ง
- ์งํฉ์ด ์๋ ํ ๋จ์๋ก ์์ ์ ์ํํ๊ธฐ๋๋ฌธ์ ์๋๊ฐ ๋๋ฆฌ๋ค
- ํ ์ด๋ธ์์ ์ฌ๋ฌ ๊ฐ์ ํ์ ์กฐํํ ํ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ฅผ ํ ํ์ฉ ์ฒ๋ฆฌํ๋ ๋ฐฉ์
DECLARE
: ์ปค์๋ฅผ ์ ์ํ๋ ๋ฑ ์ปค์์ ๊ด๋ จ๋ ์ ์ธ์ ํ๋ ๋ช
๋ นOPEN
: ์ปค์๊ฐ ์ง์ ๊ฒฐ๊ณผ์ ์ฒซ๋ฒ์งธ ํํ(ํ)์ ํฌ์ธํธ ํ๋๋ก ์ค์ ํ๋ ๋ช
๋ นFETCH
: ์ง์ ๊ฒฐ๊ณผ์ ํํ๋ค ์ค ํ์ฌ์ ๋ค์ ํํ(ํ)๋ก ์ปค์๋ฅผ ์ด๋์ํค๋ ๋ช
๋ นCLOSE
: ์ง์ ์ํ ๊ฒฐ๊ณผ์ ๋ํ ์ฒ๋ฆฌ ์ข
๋ฃ ์ ์ปค์๋ฅผ ๋ซ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ช
๋ นDELLOCATE
: ์ปค์์ ์ปค์ ์ด๋ฆ ๋๋ ์ปค์ ๋ณ์ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ๊ฑฐ๋ด ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋
SELECT physical_memory_kb, virtual_memory_kb, committed_kb, commmitted_target_kb, FROM sys.dm_os_sys_info;
physical_memory_kb
: ์๋ฒ์ ์ค์น๋ ์ด ์ค์ ๋ฉ๋ชจ๋ฆฌ
virtual_memory_kb
: SQL Server์์ ์ฌ์ฉํ ์ ์๋ ์ด ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์
Committed_kb
: ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ด์ง์์ ์ฌ์ฉํ๊ธฐ ์ํด ๋ฒํผ ์บ์์์ ํ์ฌ ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ ์
Committed_target_kb
: ๋ฒํผ ์บ์๊ฐ ์ฌ์ฉํ๊ณ ์ํ๋ ๋ฉ๋ชจ๋ฆฌ ์
STRING_AGG()
์ฌ๋ฌ ํ์ ์ปฌ๋ผ ๊ฐ์ ํ๋์ ์ปฌ๋ผ์ผ๋ก ํฉ์น ๋
SELECT job, STRING_AGG(ename, ',') WITHIN GROUP(ORDER BY ename) enames FROM emp WHERE job IN ('MANAGER', 'SALESMAN') GROUP BY job
CHARINDEX()
๋ฌธ์์ด์์ ํน์ ๋ฌธ์๋ฅผ ์ฐพ๊ณ ์์น๋ฅผ ๋ฐํํ๋ ํจ์
- ๋ฌธ์์ด์ ์๋ถํฐ ๋๋ ํน์ ์์น๋ถํฐ ๋ฌธ์๋ฅผ ๊ฒ์
CHARINDEX(โ์ฐพ์ ๋ฌธ์โ, โ๋ฌธ์์ดโ, โ์์์์นโ)
๊ธฐ๋ณธ์ฌ์ฉ๋ฒ
SELECT CHARINDEX('sql', 'Microsoft SQL Server')
์์์์น๋ฅผ ์ง์ ํ์ฌ ์ฐพ๊ธฐ
SELECT CHARINDEX('sql', 'Microsoft SQL Server', 11)
๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ฌ ์ฐพ๊ธฐ
SELECT CHARINDEX('SQL', 'Microsoft SQL Server' COLLATE Latin1_General_CS_AS) // ๋์๋ฌธ์ ๊ตฌ๋ถ : COLLATE Latin1_General_CS_AS // ๋์๋ฌธ์ ๊ตฌ๋ฌธ์ํจ : COLLATE Latin1_General_CI_AS (๊ธฐ๋ณธ๊ฐ)
๋๋ฒ์งธ ๋ฌธ์ ์ฐพ๊ธฐ
DECLARE @str VARCHAR(100) = 'SQL Server 2017, SQL Server 2019' SELECT CHARINDEX('sql', @str, CHARINDEX('sql', @str) + 1)
IIF
์ฐธ๊ณผ ๊ฑฐ์ง ๋ ๊ฒฝ์ฐ์ ๊ฐ๋ง ๋ฆฌํด์ด ๊ฐ๋ฅ
DECLARE @score INT = 80 SELECT IIF(@score >= 70, 'ํฉ๊ฒฉ', '๋ถํฉ๊ฒฉ') AS score // score // ํฉ๊ฒฉ
TOP
์กฐํ ๊ฐ์๋ฅผ ์ ํํ๋ ๊ฒฝ์ฐ
SELECT TOP(5) ename, job, sal FROM emp ORDER BY sal // sal๋ก ์ ๋ ฌ ํ 5๊ฐ๋ง ์กฐํ
์์์ผ์ ์ข ๋ฃ์ผ์ ์ฌ์ด ๋ชจ๋ ์ผ์ ์กฐํ
// ์ฌ๊ท ์ฟผ๋ฆฌ(WITH CTE) WITH DateRange(Date) AS ( SELECT CONVERT(DATE, '2021-12-01') --์์์ผ์ UNION ALL SELECT DATEADD(d, 1, Dates) FROM DateRange WHERE Dates < CONVERT(DATE, '2021-12-7) --์ข ๋ฃ์ผ์ ) SELECT * FROM DateRange OPTION (MAXRECURSION 0) // ์ฌ๊ท ์ฟผ๋ฆฌ์ ๋ฐ๋ณต ํ์๋ฅผ ์ค์ ํ๋ ๋ถ๋ถ // 0์ ๋ฌดํ๋ฐ๋ณต, ์๋ตํ๋ฉด ์ต๋ 100ํ๊น์ง๋ง ๋ฐ๋ณต // 2021-12-01 ~ 2021-12-07
// master..spt_value SELECT DATEADD(d, number, CONVERT(DATE, '2021-12-01')) Dates FROM master..spt_values WHERE type = 'p' AND number <= DATEDIFF(d, CONVERT(DATE, '2021-12-01'), CONVERT(DATE, '2021-12-07')) // 2021-12-01 ~ 2021-12-07