๊ฐ๋ ์ ๋ณด๊ธฐ ์ฝ๊ฒ ์ ๋ฆฌํด๋ดค๋ค. ์ด ํํธ๋ 100์ ๋ง๊ณ ๊ฐ๋ ๋ถ๋ถ์ด๋ฏ๋ก, ์ ์๋ ๋ชจ๋ฅด๋ฉด ์๋๋ค.
DB
ํน์ ๊ธฐ์ ์ด๋ ์กฐ์ง ๋๋ ๊ฐ์ธ์ด ํ์์ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ผ์ ํ ํํ๋ก ์ ์ฅํด ๋์ ๊ฒ์ ์๋ฏธํ๋ค.
DBMS
ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ด๋ฆฌ ๋ฟ๋ง ์๋๋ผ ์๊ธฐ์น ๋ชปํ ์ฌ๊ฑด์ผ๋ก ์ธํ ๋ฐ์ดํฐ์ ์์์ ํผํ๊ณ , ํ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ SW
DB ๋ฐ์
1960 : ํ๋ก์ฐ์ฐจํธ ์ค์ฌ์ ๊ฐ๋ฐ, ํ์ผ๊ตฌ์กฐ ์ฌ์ฉ
1970 : DB ๊ด๋ฆฌ๊ธฐ๋ฒ์ด ์ฒ์ ํ๋, ๊ณ์ธต-๋งํ DB๋ฑ์ฅ
1980 : ๊ด๊ณํ DB ์์ฉํ, Oracle, Sybase ๋ฑ์ฅ
1990 : ๊ฐ์ฒด ๊ด๊ณํ DB๋ก ๋ฐ์
SQL
๊ด๊ณํ DB์์ ๋ฐ์ดํฐ ์ ์, ์กฐ์, ์ ์ด๋ฅผ ์ํด ์ฌ์ฉํ๋ ์ธ์ด
SQL ๋ฌธ์ฅ๋ค์ ์ข ๋ฅ
DML : SELECT, INSERT, UPDATE, DELETE ๋ฑ ๋ฐ์ดํฐ ์กฐ์์ด
DDL : CREATE, ALTER, DROP, RENAME ๋ฑ ๋ฐ์ดํฐ ์ ์์ด
DCL : GRANT, REVOKE ๋ฑ ๋ฐ์ดํฐ ์ ์ด์ด
TCL : COMMIT, ROLLBACK ๋ฑ ํธ๋์ญ์
์ ์ด์ด
ํ ์ด๋ธ
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฐ์ฒด, ๋ก์ฐ(๊ฐ๋ก, ํ)์ ์นผ๋ผ(์ธ๋ก, ์ด)์ผ๋ก ๊ตฌ์ฑ
์ ๊ทํ
๋ฐ์ดํฐ์ ์ ํฉ์ฑ ํ๋ณด์ ๋ฐ์ดํฐ ์ ๋ ฅ/์์ /์ญ์ ์ ๋ฐ์ํ ์ ์๋ [์ด์ํ์]์ ๋ฐฉ์งํ๊ธฐ ์ํจ
๊ธฐ๋ณธํค
ํ ์ด๋ธ์ ์กด์ฌํ๋ ๊ฐ ํ์ ํ ๊ฐ์ง ์๋ฏธ๋ก ํน์ ํ ์ ์๋ ํ ๊ฐ ์ด์์ ์นผ๋ผ
์ธ๋ถํค
๋ค๋ฅธ ํ ์ด๋ธ์ ๊ธฐ๋ณธํค๋ก ์ฌ์ฉ๋๊ณ ์๋ ๊ด๊ณ๋ฅผ ์ฐ๊ฒฐํ๋ ์นผ๋ผ
๋ฐ์ดํฐ ์ ํ
CHAR(s) : ๊ณ ์ ๊ธธ์ด ๋ฌธ์์ด ์ ๋ณด
‘AA’ = ‘AA ’
VARCHAR(s) : ๊ฐ๋ณ ๊ธธ์ด ๋ฌธ์์ด ์ ๋ณด
‘AA’ != ‘AA ’
NUMERIC : ์ ์, ์ค์ ๋ฑ ์ซ์ ์ ๋ณด
DATE : ๋ ์ง์ ์๊ฐ ์ ๋ณด
CREATE TABLE ํ
์ด๋ธ์ด๋ฆ (
);
*ํ
์ด๋ธ ๋ช
์ ๋ค๋ฅธ ํ
์ด๋ธ์ ์ด๋ฆ๊ณผ ์ค๋ณต๋๋ฉด ์ ๋๋ค.
*ํ
์ด๋ธ ๋ด์ ์นผ๋ผ๋ช
์ ์ค๋ณต๋ ์ ์๋ค.
*๊ฐ ์นผ๋ผ๋ค์ , ๋ก ๊ตฌ๋ถ๋๊ณ ; ๋ก ๋๋๋ค.
*์นผ๋ผ ๋ค์ ๋ฐ์ดํฐ ์ ํ์ ๊ผญ ์ง์ ๋์ด์ผ ํ๋ค.
*ํ
์ด๋ธ๋ช
๊ณผ ์นผ๋ผ๋ช
์ ๋ฐ๋์ ๋ฌธ์๋ก ์์ํด์ผํ๋ค.
A-Z,a-z,0-9,_,$,#๋ง ์ฌ์ฉ ๊ฐ๋ฅ
DATETIME ๋ฐ์ดํฐ ์ ํ์๋ ๋ณ๋๋ก ํฌ๊ธฐ๋ฅผ ์ง์ x
์ ์ฝ์กฐ๊ฑด
1. PRIMARY KEY(๊ธฐ๋ณธํค) : ๊ธฐ๋ณธํค ์ ์
2. UNIQUE KEY(๊ณ ์ ํค) : ๊ณ ์ ํค ์ ์
3. NOT NULL : NULL ๊ฐ ์
๋ ฅ๊ธ์ง
4. CHECK : ์
๋ ฅ ๊ฐ ๋ฒ์ ์ ํ
5. FOREIGN KEY(์ธ๋ํค) : ์ธ๋ํค ์ ์
DESC(RIBE) ํ
์ด๋ธ๋ช
; -> ํ
์ด๋ธ ๊ตฌ์กฐ ํ์ธ(Oracle)
exec sp_help ‘db0.ํ
์ด๋ธ๋ช
’ -> (SQL Server)
go
ํ ์ด๋ธ ๊ตฌ์กฐ ๋ณ๊ฒฝ(์นผ๋ผ ์ถ๊ฐ, ์ญ์ ๋ฑ) DDL
ALTER TABLE ํ ์ด๋ธ๋ช
ADD ์นผ๋ผ๋ช ๋ฐ์ดํฐ ์ ํ;
DROP COLUMN ์นผ๋ผ๋ช ;
MODIFY (์นผ๋ผ๋ช ๋ฐ์ดํฐ์ ํ DEFAULT์ NOT
NULL); -> ์นผ๋ผ ๋ฐ์ดํฐ ์ ํ, ์กฐ๊ฑด ๋ฑ ๋ณ๊ฒฝ Oracle
ALTER (์นผ๋ผ๋ช ๋ฐ์ดํฐ์ ํ DEFAULT์ NOT NULL); -> SQL Server
RENAME COLUMN ๋ณ๊ฒฝ์ ์นผ๋ผ๋ช TO ๋ด์นผ๋ผ๋ช ; Orasp_rename ๋ณ๊ฒฝ์ ์นผ๋ผ๋ช , ๋ด์นผ๋ผ๋ช , ‘COLUMN’; SQ
DROP CONSTRAINT ์กฐ๊ฑด๋ช ; ์ ์ฝ์กฐ๊ฑด ์ญ์
DML
DDL ๋ช
๋ น์ด์ ๊ฒฝ์ฐ ์คํ์ AUTO COMMIT ํ์ง๋ง DML์ ๊ฒฝ์ฐ COMMIT์ ์
๋ ฅํด์ผ ํ๋ค.
SQL Server์ ๊ฒฝ์ฐ DML๋ AUTO COMMIT
INSERT INTO PLAYER (PLAYER) VALUES (‘PJS’);
UPDATE PLAYER SET BACK_NO = 60;
DELETE FROM PLAYER;
SELECT PLAYER_ID FROM PLAYER;
SELECT DISTINCT POSITION ์ ๊ตฌ๋ถ๊ฐ๋ง ์ถ๋ ฅex)GK, FW, DF, MF
SELECT PLAYER AS “์ ์๋ช ” FROM PLAYER;
์์ผ๋์นด๋
* : ๋ชจ๋
% : ๋ชจ๋
- : ํ ๊ธ์
ํฉ์ฑ ์ฐ์ฐ์
๋ฌธ์์ ๋ฌธ์ ์ฐ๊ฒฐ : ||(Oracle), +(SQL Server)
SELECT PLAYER_NAME + ‘์ ์’ “์ ๋ณด”
ํฉ์ฑ ์ฐ์ฐ์
๋ฌธ์์ ๋ฌธ์ ์ฐ๊ฒฐ : ||(Oracle), +(SQL Server)
SELECT PLAYER_NAME + ‘์ ์’ “์ ๋ณด”
TCL
ํธ๋์ญ์
: ๋ฐ์ ํ ๊ด๋ จ๋์ด ๋ถ๋ฆฌ๋ ์ ์๋ 1๊ฐ ์ด์์ DB ์กฐ์
COMMIT : ์ฌ๋ฐ๋ฅด๊ฒ ๋ฐ์๋ ๋ฐ์ดํฐ๋ฅผ DB์ ๋ฐ์
ROLLBACK : ํธ๋์ญ์
์์ ์ด์ ์ ์ํ๋ก ๋๋๋ฆผ
SAVEPOINT : ์ ์ฅ ์ง์
ํธ๋์ญ์
์ ํน์ฑ
1. ์์์ฑ : ํธ๋์ญ์
์์ ์ ์๋ ์ฐ์ฐ๋ค์ ๋ชจ๋ ์ฑ๊ณต์ ์ผ๋ก ์คํ๋๋์ง ์๋๋ฉด ์ ํ ์คํ๋์ง ์์์ผ ํจ
2. ์ผ๊ด์ฑ : ํธ๋์ญ์
์คํ ์ DB ๋ด์ฉ์ด ์๋ชป ๋์ง ์์ผ๋ฉด ์คํ ํ๋ ์๋ชป ๋์ง ์์์ผ ํจ
3. ๊ณ ๋ฆฝ์ฑ : ํธ๋์ญ์
์คํ ๋์ค ๋ค๋ฅธ ํธ๋์ญ์
์ ์ํฅ์ ๋ฐ์ ์๋ชป๋ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด์๋ ์๋๋ค.
4. ์ง์์ฑ : ํธ๋์ญ์
์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ๋๋ฉด DB์ ๋ด์ฉ์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ๋๋ค.
SAVEPOINT SVPT1; (Oracle)
ROLLBACK TO SVPT1; (Oracle)
SAVE TRAN SVPT1; (SQL Server)
ROLLBACK TRAN SVPT1; (SQL Server)
COMMIT;
์ฐ์ฐ์์ ์ข ๋ฅ
BETWEEN a AND b : a์ b ๊ฐ ์ฌ์ด์ ์์ผ๋ฉด ๋จ
IN (list) : ๋ฆฌ์คํธ์ ์๋ ๊ฐ์ค ์ด๋ ํ๋๋ผ๋ ์ผ์น
LIKE ‘๋น๊ต๋ฌธ์์ด’ : ๋น๊ต๋ฌธ์์ด๊ณผ ํํ๊ฐ ์ผ์น
IS NULL : NULL ๊ฐ์ธ ๊ฒฝ์ฐ
NOT IN (list) : list์ ๊ฐ๊ณผ ์ผ์นํ์ง ์๋๋ค
IS NOT NULL : NULL ๊ฐ์ ๊ฐ์ง ์๋๋ค.
์ฐ์ฐ์ ์ฐ์ ์์ : ()->NOT->๋น๊ต์ฐ์ฐ์->AND->OR
SELECT PLAYER_NAME ์ ์๋ช
FROM PLAYER
WHERE TEAM_ID = ‘K2’; -> ํID๊ฐ K2์ธ ์ฌ๋
WHERE TEAM_ID IN (‘K2’,‘K7’); -> K2,K7์ธ ์ฌ๋
WHERE HEIGHT BETWEEN 170 AND 180;
-> ํค๊ฐ 170 ~ 180์ธ ์ฌ๋
WHERE POSITION IS NULL; -> ํฌ์ง์ ์๋ ์ฌ๋
NULL ๊ฐ๊ณผ์ ์์น์ฐ์ฐ์ NULL ๊ฐ์ ๋ฆฌํดํ๋ค.
NULL ๊ฐ๊ณผ์ ๋น๊ต์ฐ์ฐ์ ๊ฑฐ์ง(FALSE)๋ฅผ ๋ฆฌํดํ๋ค.
ROWNUM : ์ํ๋ ๋งํผ์ ํ์ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉ(Or)
TOP : (SQL Server)
WHERE ROWNUM =1;
SELECT TOP(1) PLAYER_NAME FROM PLAYER;
๋ฌธ์ํ ํจ์
LOWER : ๋ฌธ์์ด์ ์๋ฌธ์๋ก
UPPER : ๋ฌธ์์ด์ ๋๋ฌธ์๋ก
ASCII : ๋ฌธ์์ ASCII ๊ฐ ๋ฐํ
CHR/CHAR : ASCII ๊ฐ์ ํด๋นํ๋ ๋ฌธ์ ๋ฐํ
CONCAT : ๋ฌธ์์ด1, 2๋ฅผ ์ฐ๊ฒฐ
SUBSTR/SUBSTRING : ๋ฌธ์์ด ์ค m ์์น์์ n๊ฐ์ ๋ฌธ์ ๋ฐํ
LENGTH/LEN : ๋ฌธ์์ด ๊ธธ์ด๋ฅผ ์ซ์ ๊ฐ์ผ๋ก ๋ฐํ
CONCAT(‘RDBMS’,‘ SQL’) -> ‘RDBMS SQL’
SUBSTR(‘SQL Expert’,5,3) -> ‘Exp’
LTRIM(‘xxxYYZZxYZ’,‘x’) -> ‘YYZZxYZ’
RTRIM(‘XXYYzzXYzz’,‘z’) -> ‘XXYYzzXY’
TRIM(‘x’ FROM ‘xxYYZZxYZxx’) -> ‘YYZZxYZ’
์ซ์ํ ํจ์
SIGN(n) : ์ซ์๊ฐ ์์๋ฉด1 ์์๋ฉด-1 0์ด๋ฉด 0 ๋ฐํ
MOD : ์ซ์1์ ์ซ์2๋ก ๋๋์ด ๋๋จธ์ง ๋ฐํ
CEIL/CEILING(n) : ํฌ๊ฑฐ๋ ๊ฐ์ ์ต์ ์ ์ ๋ฐํ
FLOOR(n) : ์๊ฑฐ๋ ๊ฐ์ ์ต๋ ์ ์ ๋ฆฌํด
ROUND(38.5235,3) -> 38.524
ROUND(38.5235,1) -> 38.5
ROUND(38.5235) -> 39
TRUNC(38.5235,3) -> 38.523
TRUNC(38.5235,1) -> 38.5
TRUNC(38.5235) -> 38
๋ ์งํ ํจ์
SYSDATE/GETDATE() ํ์ฌ๋ ์ง์ ์๊ฐ ์ถ๋ ฅ
EXTRACT/DATEPART ๋ ์ง์์ ๋ฐ์ดํฐ ์ถ๋ ฅ
TO_NUMBER(TO_CHAR(d,‘YYYY’))/YEAR(d)
SELECT ENAME,
CASE WHEN SAL >=3000 THEN ‘HIGH’
WHEN SAL >=1000 THEN ‘MID’
ELSE ‘LOW’
END AS SALARY_GRADE
FROM EMP;
NULL ๊ด๋ จ ํจ์
NVL(์1,์2)/ISNULL(์1,์2) : ์1์ ๊ฐ์ด NULL
์ด๋ฉด ์2 ์ถ๋ ฅ
NULLIF(์1,์2) : ์1์ด ์2์ ๊ฐ์ผ๋ฉด NULL์ ์
๋๋ฉด ์1์ ์ถ๋ ฅ
COALESCE(์1,์2) : ์์์ ๊ฐ์ํํ์์์ NULL
์ด ์๋ ์ต์ด์ ํํ์, ๋ชจ๋ NULL์ด๋ฉด NULL ๋ฐํ
ex)COALESCE(NULL,NULL,‘abc’) -> ‘abc’
์ง๊ณ ํจ์
1. ์ฌ๋ฌ ํ๋ค์ ๊ทธ๋ฃน์ด ๋ชจ์ฌ์ ๊ทธ๋ฃน๋น ๋จ ํ๋์ ๊ฒฐ๊ณผ
๋ฅผ ๋๋ ค์ฃผ๋ ํจ์์ด๋ค.
2. GROUP BY ์ ์ ํ๋ค์ ์๊ทธ๋ฃนํ ํ๋ค.
3. SELECT, HAVING, ORDER BY ์ ์ ์ฌ์ฉ ๊ฐ๋ฅ
-ALL : Default ์ต์
-DISTINCT : ๊ฐ์ ๊ฐ์ ํ๋์ ๋ฐ์ดํฐ๋ก ๊ฐ์ฃผ ์ต์
COUNT(*) : NULL ํฌํจ ํ์ ์
COUNT(ํํ์) : NULL ์ ์ธ ํ์ ์
SUM, AVG : NULL ์ ์ธ ํฉ๊ณ, ํ๊ท ์ฐ์ฐ
STDDEV : ํ์ค ํธ์ฐจ
VARIAN : ๋ถ์ฐ
MAX, MIN : ์ต๋๊ฐ, ์ต์๊ฐ
GROUP BY, HAVING ์ ์ ํน์ง
1. GROUP BY ์ ์ ํตํด ์๊ทธ๋ฃน๋ณ ๊ธฐ์ค์ ์ ํ ํ,
SELECT ์ ์ ์ง๊ณ ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
2. ์ง๊ณ ํจ์์ ํต๊ณ ์ ๋ณด๋ NULL ๊ฐ์ ๊ฐ์ง ํ์
์ ์ธํ๊ณ ์ํํ๋ค.
3. GROUP BY ์ ์์๋ ALIAS ์ฌ์ฉ ๋ถ๊ฐ
4. ์ง๊ณ ํจ์๋ WHERE ์ ์ ์ฌ ์ ์๋ค.
5. HAVING ์ ์๋ ์ง๊ณํจ์๋ฅผ ์ด์ฉํ์ฌ ์กฐ๊ฑด ํ์o
6. HAVING ์ ์ ์ผ๋ฐ์ ์ผ๋ก GROUP BY ๋ค์ ์์น
SEARCHED_CASE_EXPRESSION
CASE WHEN LOC = ‘a’ THEN ‘b’
SIMPLE_CASE_EXPRESSION
CASE LOC WHEN ‘a’ THEN ‘b’
์ด 2๋ฌธ์ฅ์ ๊ฐ์ ์๋ฏธ์ด๋ค.
ORDER BY ํน์ง
1. SQL ๋ฌธ์ฅ์ผ๋ก ์กฐํ๋ ๋ฐ์ดํฐ๋ค์ ๋ค์ํ ๋ชฉ์ ์
๋ง๊ฒ ํน์ ํ ์นผ๋ผ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ์ฌ ์ถ๋ ฅํ๋๋ฐ
์ฌ์ฉํ๋ค.
2. ORDER BY ์ ์ ์นผ๋ผ๋ช
๋์ ALIAS ๋ช
์ด๋ ์นผ๋ผ
์์๋ฅผ ๋ํ๋ด๋ ์ ์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
3. DEFAULT ๊ฐ์ผ๋ก ์ค๋ฆ์ฐจ์(ASC)์ด ์ ์ฉ๋๋ฉฐ
DESC ์ต์
์ ํตํด ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ์ด ๊ฐ๋ฅํ๋ค.
4. SQL ๋ฌธ์ฅ์ ์ ์ผ ๋ง์ง๋ง์ ์์นํ๋ค.
5. SELECT ์ ์์ ์ ์ํ์ง ์์ ์นผ๋ผ ์ฌ์ฉ ๊ฐ๋ฅ
Oracle์์๋ NULL์ ๊ฐ์ฅ ํฐ ๊ฐ์ผ๋ก ์ทจ๊ธํ๋ฉฐ SQL
Server์์๋ NULL์ ๊ฐ์ฅ ์์ ๊ฐ์ผ๋ก ์ทจ๊ธํ๋ค.
SELECT ๋ฌธ์ฅ ์คํ ์์
FROM -> WHERE -> GROUP BY -> HAVING ->
SELECT -> ORDER BY
SELECT TOP(2) WITH TIES ENAME, SAL
FROM EMP
ORDER BY SAL DESC;
์๋ ๊ธ์ฌ๊ฐ ๋์ 2๋ช
์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ถ๋ ฅํ๋๋ฐ ๊ฐ
์ ๊ธ์ฌ๋ฅผ ๋ฐ๋ ์ฌ์์ ๊ฐ์ด ์ถ๋ ฅํ๋ค(WITH TIES)
JOIN
JOIN : ๋ ๊ฐ ์ด์์ ํ
์ด๋ธ๋ค์ ์ฐ๊ฒฐ ๋๋ ๊ฒฐํฉํ์ฌ
๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ ๊ฒ
์ผ๋ฐ์ ์ผ๋ก ํ๋ค์ PK๋ FK ๊ฐ์ ์ฐ๊ด์ ์ํด JOIN
์ด ์ฑ๋ฆฝ๋๋ค. ์ด๋ค ๊ฒฝ์ฐ์๋ PK, FK ๊ด๊ณ๊ฐ ์์ด๋
๋
ผ๋ฆฌ์ ์ธ ๊ฐ๋ค์ ์ฐ๊ด๋ง์ผ๋ก JOIN์ด ์ฑ๋ฆฝ๊ฐ๋ฅํ๋ค.
5๊ฐ์ง ํ
์ด๋ธ์ JOIN ํ๊ธฐ ์ํด์๋ ์ต์ 4๋ฒ์ JOIN
๊ณผ์ ์ด ํ์ํ๋ค. (N-1)
EQUI JOIN
EQUI JOIN : 2 ๊ฐ์ ํ ์ด๋ธ ๊ฐ์ ์นผ๋ผ ๊ฐ๋ค์ด ์๋ก์ ํํ๊ฒ ์ผ์นํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ, ๋๋ถ๋ถ PK, FK์ ๊ด๊ณ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค.
SELECT PLAYER.PLAYER_NAME
FROM PLAYER
์ SQL์ฒ๋ผ ์ปฌ๋ผ๋ช ์์ ํ ์ด๋ธ ๋ช ์ ๊ธฐ์ ํด์ค์ผ ํจ
Non equi join
NON EQUI JOIN : 2๊ฐ์ ํ
์ด๋ธ ๊ฐ์ ์นผ๋ผ ๊ฐ๋ค์ด
์๋ก ์ ํํ๊ฒ ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ
‘=’ ์ฐ์ฐ์๊ฐ ์๋ BETWEEN, >, <= ๋ฑ ์ฐ์ฐ์ ์ฌ์ฉ
SELECT E.ENAME, E.JOB, E.SAL, S.GRADE
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HSAL;
์๋ E์ SAL์ ๊ฐ์ S์ LOSAL๊ณผ HSAL ๋ฒ์์์
์ฐพ๋ ๊ฒ์ด๋ค.
์งํฉ ์ฐ์ฐ์
์งํฉ ์ฐ์ฐ์ : ๋ ๊ฐ ์ด์์ ํ ์ด๋ธ์์ ์กฐ์ธ์ ์ฌ์ฉํ์ง ์๊ณ ์ฐ๊ด๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ ์ฌ์ฉ SELECT ์ ์ ์นผ๋ผ ์๊ฐ ๋์ผํ๊ณ SELECT ์ ์ ๋์ผ ์์น์ ์กด์ฌํ๋ ์นผ๋ผ์ ๋ฐ์ดํฐ ํ์ ์ด ์ํธ ํธํํ ๋ ์ฌ์ฉ ๊ฐ๋ฅ
์ผ๋ฐ ์งํฉ ์ฐ์ฐ์
1. UNION : ํฉ์งํฉ(์ค๋ณต ํ์ 1๊ฐ๋ก ์ฒ๋ฆฌ)
2. UNION ALL : ํฉ์งํฉ(์ค๋ณต ํ๋ ํ์)
3. INTERSECT : ๊ต์งํฉ(INTERSECTION)
4. EXCEPT,MINUS : ์ฐจ์งํฉ(DIFFERENCE)
5. CROSS JOIN : ๊ณฑ์งํฉ(PRODUCT)
์์ ๊ด๊ณ ์ฐ์ฐ์
๊ด๊ณํ DB๋ฅผ ์๋กญ๊ฒ ๊ตฌํ
1. SELECT -> WHERE
2. PROJECT -> SELECT
3. NATRUAL JOIN -> ๋ค์ํ JOIN
4. DIVIDE -> ์ฌ์ฉx
{a,x}{a,y}{a,z} divdie {x,z} = {a}
FROM ์ JOIN ํํ
1. INNER JOIN
2. NATURAL JOIN
3. USING ์กฐ๊ฑด์
4. ON ์กฐ๊ฑด์
5. CROSS JOIN
6. OUTER JOIN
INNER JOIN : JOIN ์กฐ๊ฑด์์ ๋์ผํ ๊ฐ์ด ์๋ ํ๋ง
๋ฐํ, USING์ด๋ ON ์ ์ ํ์์ ์ผ๋ก ์ฌ์ฉ
NATURAL JOIN
๋ ํ ์ด๋ธ ๊ฐ์ ๋์ผํ ์ด๋ฆ์ ๊ฐ๋ ๋ชจ๋ ์นผ๋ผ๋ค์ ๋ํด EQUI JOIN ์ํ, NATURAL JOIN์ด ๋ช ์๋๋ฉด ์ถ๊ฐ๋ก USING, ON, WHERE ์ ์์ JOIN ์กฐ๊ฑด์ ์ ์ํ ์ ์๋ค, SQL Sever๋ ์ง์x
USING ์กฐ๊ฑด์
๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง ์นผ๋ผ๋ค ์ค์์ ์ํ๋ ์นผ๋ผ์ ๋ํด์๋ง ์ ํ์ ์ผ๋ก EQUI JOIN์ ํ ์ ์๋ค, JOIN ์นผ
๋ผ์ ๋ํด์ ALIAS๋ ํ
์ด๋ธ ์ด๋ฆ๊ณผ ๊ฐ์ ์ ๋์ฌ๋ฅผ ๋ถ์ผ ์ ์๋ค, SQL Server ์ง์x
ON ์กฐ๊ฑด์
ON ์กฐ๊ฑด์ ๊ณผ WHERE ์กฐ๊ฑด์ ์ ๋ถ๋ฆฌํ์ฌ ์ดํด๊ฐ ์ฌ์ฐ๋ฉฐ, ์นผ๋ผ๋ช ์ด ๋ค๋ฅด๋๋ผ๋ JOIN ์กฐ๊ฑด์ ์ฌ์ฉํ ์ ์๋ ์ฅ์ ์ด ์๋ค, ALIAS๋ ํ ์ด๋ธ๋ช ๋ฐ๋์ ์ฌ์ฉ
CROSS JOIN
์์ชฝ ์งํฉ์ M*N๊ฑด์ ๋ฐ์ดํฐ ์กฐํฉ์ด ๋ฐ์ํ๋ค.
OUTER JOIN
JOIN ์กฐ๊ฑด์์ ๋์ผํ ๊ฐ์ด ์๋ ํ๋ ๋ฐํ ๊ฐ๋ฅํ๋ค, USING์ด๋ ON ์กฐ๊ฑด์ ๋ฐ๋์ ์ฌ์ฉํด์ผ ํจ
LEFT OUTER JOIN
์กฐ์ธ ์ํ์ ๋จผ์ ํ๊ธฐ๋ ์ข์ธก ํ ์ด๋ธ์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ, ๋์ค ํ๊ธฐ๋ ์ฐ์ธก ํ ์ด๋ธ์์ JOIN ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ์จ๋ค. ์ฐ์ธก ๊ฐ์์ ๊ฐ์ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ NULL ๊ฐ์ผ๋ก ์ฑ์ด๋ค.
RIGHT OUTER JOIN
LEFT OUTER JOIN์ ๋ฐ๋
FULL OUTER JOIN
์กฐ์ธ ์ํ์ ์ข์ธก, ์ฐ์ธก ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด JOINํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๋ค. ์ค๋ณต ๋ฐ์ดํฐ๋ ์ญ์ ํ๋ค.
๊ณ์ธตํ ์ง์
๊ณ์ธตํ ์ง์ : ํ ์ด๋ธ์ ๊ณ์ธตํ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ธฐ ์ํด ์ฌ์ฉ
START WITH : ๊ณ์ธต ๊ตฌ์กฐ ์ ๊ฐ์ ์์ ์์น ์ง์
CONNECT BY : ๋ค์์ ์ ๊ฐ๋ ์์ ๋ฐ์ดํฐ ์ง์
PRIOR : CONNECT BY ์ ์ ์ฌ์ฉ๋๋ฉฐ, ํ์ฌ ์ฝ์ ์นผ๋ผ์ ์ง์ ํ๋ค. PRIOR ์์ = ๋ถ๋ชจ ํํ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ณ์ธต๊ตฌ์กฐ์์ ๋ถ๋ชจ ๋ฐ์ดํฐ์์ ์์ ๋ฐ์ดํฐ(๋ถ๋ชจ-> ์์) ๋ฐฉํฅ์ผ๋ก ์ ๊ฐํ๋ ์๋ฐฉํฅ ์ ๊ฐ๋ฅผ ํ๋ค. ๋ฐ๋๋ ์ญ๋ฐฉํฅ ์ ๊ฐ
NOCYCLE : ๋์ผํ ๋ฐ์ดํฐ๊ฐ ์ ๊ฐ๋์ง ์์
ORDER SIBLINGS BY : ํ์ ๋
ธ๋๊ฐ์ ์ ๋ ฌ ์ํ
WHERE
๋ชจ๋ ์ ๊ฐ๋ฅผ ์ํํ ํ์ ์ง์ ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฐ์ดํฐ๋ง ์ถ์ถํ๋ค.(ํํฐ๋ง)
LEVEL
๋ฃจํธ ๋ฐ์ดํฐ์ด๋ฉด 1, ๊ทธ ํ์ ๋ฐ์ดํฐ๋ฉด 2, ๋ฆฌํ ๋ฐ์ดํฐ๊น์ง 1์ฉ ์ฆ๊ฐ
CONNECT_BY_ISLEAF
ํด๋น ๋ฐ์ดํฐ๊ฐ ๋ฆฌํ ๋ฐ์ดํฐ๋ฉด1, ๊ทธ๋ ์ง ์์ผ๋ฉด 0
CONNECT_BY_ISCYCLE
ํด๋น ๋ฐ์ดํฐ๊ฐ ์กฐ์์ด๋ฉด 1, ์๋๋ฉด 0 (CYCLE ์ต์ ์ฌ์ฉํ์ ์๋ง ์ฌ์ฉ ๊ฐ๋ฅ)
SYS_CONNECT_BY_PATH
๋ฃจํธ ๋ฐ์ดํฐ๋ถํฐ ํ์ฌ ์ ๊ฐํ ๋ฐ์ดํฐ๊น์ง์ ๊ฒฝ๋ก๋ฅผ ํ์ํ๋ค.
CONNECT_BY_ROOT
ํ์ฌ ์ ๊ฐํ ๋ฐ์ดํฐ์ ๋ฃจํธ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋ค. ๋จํญ ์ฐ์ฐ์์ด๋ค.
์ ํ ์กฐ์ธ
๋์ผ ํ ์ด๋ธ ์ฌ์ด์ ์กฐ์ธ, FROM ์ ์๋์ผ ํ ์ด๋ธ์ด 2๋ฒ ์ด์ ๋ํ๋๋ค. ๋ฐ๋์ ํ ์ด๋ธ ๋ณ์นญ์ ์ฌ์ฉํด์ผ ํจ
์๋ธ ์ฟผ๋ฆฌ
ํ๋์ SQL๋ฌธ์์ ํฌํจ๋์ด ์๋ ๋ ๋ค๋ฅธ SQL๋ฌธ, ์๋ ค์ง์ง ์์ ๊ธฐ์ค์ ์ด์ฉํ ๊ฒ์์ ์ฌ์ฉ
์๋ธ ์ฟผ๋ฆฌ ์ฌ์ฉ์ ์ฃผ์ ์ฌํญ
1. ์๋ธ์ฟผ๋ฆฌ๋ฅผ ๊ดํธ๋ก ๊ฐ์ธ์ ์ฌ์ฉํ๋ค.
2. ์๋ธ์ฟผ๋ฆฌ๋ ๋จ์ผ ํ ๋๋ ๋ณต์ ํ ๋น๊ต ์ฐ์ฐ์์
ํจ๊ป ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ๋จ์ผ ํ ๋น๊ต ์ฐ์ฐ์๋ ์๋ธ์ฟผ๋ฆฌ
์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋์ 1๊ฑด ์ดํ์ฌ์ผ ํ๊ณ ๋ณต์ ํ ๋น๊ต
์ฐ์ฐ์๋ ๊ฒฐ๊ณผ ๊ฑด์์ ์๊ด์๋ค.
3. ์๋ธ์ฟผ๋ฆฌ์์๋ ORDER BY๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๋ค.
4. SELECT, FROM, WHERE, HAVING, ORDER BY, INSERT-VALUES, UPDATE-SET ์ ์ ์ฌ์ฉ ๊ฐ๋ฅ
๋จ์ผ ํ ๋น๊ต ์ฐ์ฐ์
=,<,>,<> ๋ฑ
๋ค์ค ํ ๋น๊ต ์ฐ์ฐ์
IN, ALL, ANY, SOME ๋ฑ
์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ
ํ ํ, ํ ์นผ๋ผ๋ง์ ๋ฐํํ๋ ์๋ธ ์ฟผ๋ฆฌ
์ธ๋ผ์ธ ๋ทฐ
ํ ์ด๋ธ ๋ช ์ด ์ฌ ์ ์๋ ๊ณณ์ ์ฌ์ฉ, ORDER BY ์ฌ์ฉ ๊ฐ๋ฅ
๋ทฐ
ํ ์ด๋ธ์ ์ค์ ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ฐ๋ฉด, ๋ทฐ๋ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค. ๊ฐ์ ํ ์ด๋ธ์ด๋ผ๊ณ ๋ ํจ
๋ทฐ ์ฌ์ฉ ์ฅ์
1. ๋
๋ฆฝ์ฑ : ํ
์ด๋ธ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ๋ทฐ๋ฅผ ์ฌ์ฉํ๋ ์์ฉ ํ๊ทธ๋จ์ ๋ณ๊ฒฝํ์ง ์์๋ ๋๋ค.
2. ํธ๋ฆฌ์ฑ : ๋ณต์กํ ์ง์๋ฅผ ๋ทฐ๋ก ์์ฑํจ์ผ๋ก์จ ๊ด๋ จ ์ง์๋ฅผ ๋จ์ํ๊ฒ ์์ฑํ ์ ์๋ค.
3. ๋ณด์์ฑ : ์ง์์ ๊ธ์ฌ์ ๋ณด์ ๊ฐ์ด ์จ๊ธฐ๊ณ ์ถ์ ์ ๋ณด๊ฐ ์กด์ฌํ ๋ ์ฌ์ฉ
CREATE VIEW V_PLAYER_TEAM AS
DROP VIEW V_PLAYER_TEAM;
ROLLUP
Subtotal์ ์์ฑํ๊ธฐ ์ํด ์ฌ์ฉ, Grouping Columns์ ์๋ฅผ N์ด๋ผ๊ณ ํ์ ๋ N+1 Level์ Subtotal์ด ์์ฑ๋๋ค. ์ธ์ ์์์ ์ฃผ์
GROUPING : Subtotal์ total์ ์์ฑ
CUBE : ๊ฒฐํฉ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฐ์ ๋ํ์ฌ ๋ค์ฐจ์ ์ง๊ณ
๋ฅผ ์์ฑ, ROLLUP์ ๋นํด ์์คํ
์ ๋ถํ ์ฌํจ
GROUPING SETS : ์ธ์๋ค์ ๋ํ ๊ฐ๋ณ ์ง๊ณ๋ฅผ ๊ตฌํ
์ ์๋ค, ๋ค์ํ ์๊ณ ์งํฉ ์์ฑ ๊ฐ๋ฅ
์๋์ฐ ํจ์(๋ด์ฉ ์ ๋ฆฌํ ๋งํฌ : https://ongbike.tistory.com/401)
ํ๊ณผ ํ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ํ๊ฑฐ๋ ํ๊ณผ ํ๊ฐ์ ๋น๊ต, ์ฐ์ฐํ๋ ํจ์
RANK
ํน์ ํญ๋ชฉ์ ๋ํ ์์๋ฅผ ๊ตฌํ๋ ํจ์, ๋์ผ
ํ ๊ฐ์ ๋ํด์๋ ๋์ผํ ์์๋ฅผ ๋ถ์ฌ(1,2,2,4)
DENSE_RANK
๋์ผํ ์์๋ฅผ ํ๋์ ๋ฑ์๋ก ๊ฐ์ฃผ (1,2,2,3)
ROW_NUMBER
๋์ผํ ๊ฐ์ด๋ผ๋ ๊ณ ์ ํ ์์ ๋ถ์ฌ
SUM
ํํฐ์
๋ณ ์๋์ฐ์ ํฉ ๊ตฌํ ์ ์๋ค.
ex)๊ฐ์ ๋งค๋์ ๋ฅผ ๋๊ณ ์๋ ์ฌ์๋ค์ ์๊ธ ํฉ
MAX,MIN
ํํฐ์
๋ณ ์๋์ฐ์ ์ต๋,์ต์ ๊ฐ์ ๊ตฌํ ์ ์๋ค.
ex)๊ฐ์ ๋งค๋์ ๋ฅผ ๋๊ณ ์๋ ์ฌ์๋ค ์ค ์ต๋ ๊ฐ
AVG
์ํ๋ ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ์ ๋ํ ํต๊ณ ๊ฐ
ex)๊ฐ์ ๋งค๋์ ๋ด์์ ์์ ์ฌ๋ฒ๊ณผ ๋ค์ ์ฌ๋ฒ์ ํ๊ท
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
(ํ์ฌ ํ์ ๊ธฐ์ค์ผ๋ก ํํฐ์
๋ด์์ ์์ 1๊ฑด, ํ์ฌํ, ๋ค์ 1๊ฑด์ ๋ฒ์๋ก ์ง์ )
COUNT
์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ์ ๋ํ ํต๊ณ ๊ฐ
ex)๋ณธ์ธ์ ๊ธ์ฌ๋ณด๋ค 50 ์ดํ๊ฐ ์ ๊ฑฐ๋ 150 ์ดํ๋ก ๋ง์ ๊ธ์ฌ๋ฅผ ๋ฐ๋ ์ธ์์
FIRST_VALUE : ํํฐ์
๋ณ ์๋์ฐ์์ ๊ฐ์ฅ ๋จผ์ ๋์จ ๊ฐ์ ๊ตฌํ๋ค.(SQL Server๋ ์ง์x)
LAST_VALUE
ํํฐ์ ๋ณ ์๋์ฐ์์ ๊ฐ์ฅ ๋์ค์ ๋์จ ๊ฐ์ ๊ตฌํ๋ค.(SQL Server ์ง์x)
LAG
ํํฐ์ ๋ณ ์๋์ฐ์์ ์ด์ ๋ช ๋ฒ์งธ ํ์ ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋ค.(SQL Server ์ง์x)
LEAD
ํํฐ์ ๋ณ ์๋์ฐ์์ ์ดํ ๋ช ๋ฒ์งธ ํ์ ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋ค.(SQL Server ์ง์x)
RATIO_TO_REPORT
ํํฐ์ ๋ด ์ ์ฒด SUM๊ฐ์ ๋ํ ํ๋ณ ์นผ๋ผ ๊ฐ์ ๋ฐฑ๋ถ์จ์ ์์์ ์ผ๋ก ๊ตฌํ ์ ์๋ค. ๊ฒฐ๊ณผ ๊ฐ์ 0๋ณด๋ค ํฌ๊ณ 1๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค.
PERCENT_RANK
ํํฐ์
๋ณ ์๋์ฐ์์ ์ ์ผ ๋จผ์ ๋์ค๋ ๊ฒ์ 0, ์ ์ผ ๋ฆ๊ฒ ๋์ค๋ ๊ฒ์ 1๋ก ํ์ฌ ํ์ ์์๋ณ ๋ฐฑ๋ถ์จ์ ๊ตฌํ๋ค. 0>=,<=1
CUME_DIST : ํ์ฌ ํ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๊ฑด์์ ๋ํ ๋์ ๋ฐฑ๋ถ์จ์ ๊ตฌํ๋ค. >0, <=1
NTILE
ํํฐ์
๋ณ ์ ์ฒด ๊ฑด์๋ฅผ ์ธ์ ๊ฐ์ผ๋ก N๋ฑ๋ถํ
๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ ์ ์๋ค.
DCL
์ ์ ์์ฑํ๊ณ ๊ถํ์ ์ ์ดํ ์ ์๋ ๋ช ๋ น์ด Oracle๊ณผ SQL Server์ ์ฌ์ฉ์ ์ํคํ ์ฒ ์ฐจ์ด
Oracle
์ ์ ๋ฅผ ํตํด DB์ ์ ์์ ํ๋ ํํ, ID์ PW ๋ฐฉ์์ผ๋ก ์ธ์คํด์ค์ ์ ์์ ํ๊ณ ๊ทธ์ ํด๋นํ๋
์คํค๋ง์ ์ค๋ธ์ ํธ ์์ฑ ๋ฑ์ ๊ถํ์ ๋ถ์ฌ๋ฐ๊ฒ ๋จ
SQL Server
์ธ์คํด์ค์ ์ ์ํ๊ธฐ ์ํด ๋ก๊ทธ์ธ์ด๋ผ๋ ๊ฒ์ ์์ฑํ๊ฒ ๋๋ฉฐ, ์ธ์คํด์ค ๋ด์ ์กด์ฌํ๋ ๋ค์์ DB์ ์ฐ๊ฒฐํ์ฌ ์์ ํ๊ธฐ ์ํด ์ ์ ๋ฅผ ์์ฑํ ํ ๋ก๊ทธ์ธ๊ณผ ์ ์ ๋ฅผ ๋งคํํด ์ฃผ์ด์ผ ํ๋ค. Windows ์ธ์ฆ ๋ฐฉ์๊ณผ ํผํฉ ๋ชจ๋ ๋ฐฉ์์ด ์กด์ฌํจ
์์คํ ๊ถํ
์ฌ์ฉ์๊ฐ SQL ๋ฌธ์ ์คํํ๊ธฐ ์ํด ํ์ํ ์ ์ ํ ๊ถํ
TCL
GRANT : ๊ถํ ๋ถ์ฌ
REVOKE : ๊ถํ ์ทจ์
GRANT CREATE USER TO SCOTT;
CONN SCOTT/TIGER(ID/PW)
CREATE USER PJS IDENTIFIED BY KOREA7;
GRANT CREATE SESSION TO PJS;
GRANT CREATE TABLE TO PJS;
REVOKE CREATE TABLE FROM PJS;
๋ชจ๋ ์ ์ ๋ ๊ฐ๊ฐ ์์ ์ด ์์ฑํ ํ ์ด๋ธ ์ธ์ ๋ค๋ฅธ ์ ์ ์ ํ ์ด๋ธ์ ์ ๊ทผํ๋ ค๋ฉด ํด๋น ํ ์ด๋ธ์ ๋ํ ์ค๋ธ์ ํธ ๊ถํ์ ์์ ์๋ก๋ถํฐ ๋ถ์ฌ๋ฐ์์ผ ํ๋ค.
ROLE
์ ์ ์๊ฒ ์๋ง์ ๊ถํ๋ค์ ํ ๋ฒ์ ๋ถ์ฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฒ
CREATE ROLE LOGIN_TABLE;
GRANT CREATE TABLE TO LOGIN_TABLE;
DROP USER PJS CASCADE;
CASCADE
ํ์ ์ค๋ธ์ ํธ๊น์ง ์ญ์
์ ์ฐจํ SQL
SQL๋ฌธ์ ์ฐ์์ ์ธ ์คํ์ด๋ ์กฐ๊ฑด์ ๋ฐ๋ฅธ ๋ถ๊ธฐ์ฒ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ํน์ ๊ธฐ๋ฅ์ ์ํํ๋ ์ ์ฅ ๋ชจ๋์ ์์ฑํ ์ ์๋ค, Procedure, User Defined Function, Trigger ๋ฑ์ด ์์
์ ์ฅ ๋ชจ๋
PL/SQL ๋ฌธ์ฅ์ DB ์๋ฒ์ ์ ์ฅํ์ฌ ์ฌ์ฉ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ฌ์ด์์ ๊ณต์ ํ ์ ์๋๋ก ๋ง๋ ์ผ์ข ์ SQL ์ปดํฌ๋ํธ ํ๋ก๊ทธ๋จ, ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋๊ฑฐ๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ผ๋ก๋ถํฐ ์คํ๋ ์ ์๋ ์์ ํ ์คํ ํ๋ก๊ทธ๋จ
PL/SQL ํน์ง
1. Block ๊ตฌ์กฐ๋ก ๋์ด์์ด ๊ฐ ๊ธฐ๋ฅ๋ณ๋ก ๋ชจ๋ํ ๊ฐ๋ฅ
2. ๋ณ์, ์์ ๋ฑ์ ์ ์ธํ์ฌ SQL ๋ฌธ์ฅ ๊ฐ ๊ฐ์ ๊ตํ
3. IF, LOOP ๋ฑ์ ์ ์ฐจํ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฐจ์ ์ธ ํ๋ก๊ทธ๋จ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ค.
4. DBMS ์ ์ ์๋ฌ๋ ์ฌ์ฉ์ ์ ์ ์๋ฌ๋ฅผ ์ ์ํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
5. PL/SQL์ Oracle์ ๋ด์ฅ๋์ด ์์ผ๋ฏ๋ก ํธํ์ฑ ๊ตณ
6. ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ ํฅ์์ํจ๋ค.
7. Block ๋จ์๋ก ์ฒ๋ฆฌ -> ํต์ ๋์ ์ค์ผ ์ ์๋ค.
DECLARE : BEGIN~END ์ ์์ ์ฌ์ฉ๋ ๋ณ์์ ์ธ์์ ๋ํ ์ ์ ๋ฐ ๋ฐ์ดํฐ ํ์
์ ์ธ๋ถ
BEGIN~END : ๊ฐ๋ฐ์๊ฐ ์ฒ๋ฆฌํ๊ณ ์ ํ๋ SQL๋ฌธ๊ณผ ์ฌ๋ฌ ๊ฐ์ง ๋น๊ต๋ฌธ, ์ ์ด๋ฌธ์ ์ด์ฉ ํ์ํ ๋ก์ง ์ฒ๋ฆฌ
EXCEPTION : BEGIN~END ์ ์์ ์คํ๋๋ SQL๋ฌธ์ด ์คํ๋ ๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด ๊ทธ ์๋ฌ๋ฅผ ์ด๋ป๊ฒ ์ฒ
๋ฆฌํ ์ง ์ ์ํ๋ ์์ธ ์ฒ๋ฆฌ๋ถ
CREATE Procedure Procedure_name
REPLACE Procedure Procedure_name
DROP Procedure Procedure_name
/ <- ์ปดํ์ผ ํ๋ผ๋ ๋ช ๋ น์ด
T-SQL
๋ณธ์ ์ผ๋ก SQL Server๋ฅผ ์ ์ดํ๋ ์ธ์ด
CREATE Procedure schema_NAME.Procedure_name
Trigger
ํน์ ํ ํ
์ด๋ธ์ INSERT, UPDATE, DELETE์ ๊ฐ์ DML๋ฌธ์ด ์ํ๋์์ ๋, DB์์ ์๋์ผ๋ก ๋์ํ๋๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ, ์ฌ์ฉ์ ํธ์ถ์ด ์๋ DB ์๋ ์ํ
CREATE Trigger Trigger_name\
ํ๋ก์์ ์ ํธ๋ฆฌ๊ฑฐ์ ์ฐจ์ด์
ํ๋ก์์ ๋ BEGIN~END ์ ๋ด์ COMMIT, ROLLBACK๊ณผ ๊ฐ์ ํธ๋์ญ์ ์ข ๋ฃ ๋ช ๋ น์ด ์ฌ์ฉ๊ฐ๋ฅ, DB ํธ๋ฆฌ๊ฑฐ๋ BEGIN~END ์ ๋ด์ ์ฌ์ฉ ๋ถ๊ฐ
์ตํฐ๋ง์ด์
์ฌ์ฉ์๊ฐ ์ง์ํ SQL๋ฌธ์ ๋ํด ์ต์ ์ ์คํ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํ๋ ์ญํ ์ํ
๊ท์น๊ธฐ๋ฐ ์ตํฐ๋ง์ด์
์ฐ์ ์์๋ฅผ ๊ฐ์ง๊ณ ์คํ๊ณํ์ ์์ฑํ๋ค. ์ฐ์ ์์๊ฐ ๋์ ๊ท์น์ด ์ ์ ์ผ๋์ผ๋ก ํด๋น ์์ ์ ์ํํ๋ค๊ณ ํ๋จํ๋ค, ์ธ๋ฑ์ค ์ ๋ฌด์ SQL๋ฌธ์์ ์ฐธ์กฐํ๋ ๊ฐ์ฒด๋ฑ์ ์ฐธ๊ณ
๋น์ฉ๊ธฐ๋ฐ ์ตํฐ๋ง์ด์
ํ์ฌ ๋๋ถ๋ถ์ DB์์ ์ฌ์ฉ, SQL๋ฌธ์ ์ฒ๋ฆฌํ๋๋ฐ ํ์ํ ๋น์ฉ์ด ๊ฐ์ฅ ์ ์ ์คํ๊ณํ์ ์ ํํ๋ ๋ฐฉ์, ๋น์ฉ์ด๋ SQL๋ฌธ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์์๋๋ ์์์๊ฐ ๋๋ ์์ ์ฌ์ฉ๋์ ์๋ฏธ, ํ ์ด๋ธ,์ธ๋ฑ์ค,์นผ๋ผ ๋ฑ ๋ค์ํ ๊ฐ์ฒด ํต๊ณ์ ๋ณด์ ์์คํ ํต๊ณ์ ๋ณด ๋ฑ์ ์ด์ฉํ๋ค.
์คํ๊ณํ
SQL์์ ์๊ตฌํ ์ฌํญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ ์ฐจ์ ๋ฐฉ๋ฒ์ ์๋ฏธ, ์คํ๊ณํ์ ๊ตฌ์ฑํ๋ ์์์๋ ์กฐ์ธ ์์, ์กฐ์ธ ๊ธฐ๋ฒ, ์ก์ธ์ค ๊ธฐ๋ฒ, ์ต์ ํ ์ ๋ณด, ์ฐ์ฐ ๋ฑ์ด ์๋ค.
์ธ๋ฑ์ค
์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์๋๋ก ๋๋ ์ฑ ์ ์ฐพ์๋ณด๊ธฐ์ ์ ์ฌํ ๊ฐ๋ , ๊ฒ์ ์ฑ๋ฅ์ ์ต์ ํ๋ฅผ ๋ชฉ์ ์ผ๋ก ๋๊ณ ์์ง๋ง ๋๋ ค์ง ์ ์๋ค๋ ๋จ์ ์ด ์กด์ฌ B-TREE ์ธ๋ฑ์ค์์ ์ํ๋ ๊ฐ์ ์ฐพ๋ ๊ณผ์
1. ๋ธ๋์น ๋ธ๋ก์ ๊ฐ์ฅ ์ผ์ชฝ ๊ฐ์ด ์ฐพ๊ณ ์ ํ๋ ๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด ์ผ์ชฝ ํฌ์ธํฐ๋ก ์ด๋
2. ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด ๋ธ๋์น ๋ธ๋ก์ ๊ฐ ์ฌ์ด์ ์กด์ฌํ๋ฉด ๊ฐ์ด๋ฐ ํฌ์ธํฐ๋ก ์ด๋
3. ์ค๋ฅธ์ชฝ์ ์๋ ๊ฐ๋ณด๋ค ํฌ๋ฉด ์ค๋ฅธ์ชฝ ํฌ์ธํฐ๋ก ์ด๋
์ ์ฒด ํ
์ด๋ธ ์ค์บ
ํ ์ด๋ธ์ ์กด์ฌํ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ๊ฐ๋ฉด์ ์กฐ๊ฑด์ ๋ง์ผ๋ฉด ๊ฒฐ๊ณผ๋ก์ ์ถ์ถํ๊ณ ์กฐ๊ฑด์ ๋ง์ง ์์ผ๋ฉด ๋ฒ๋ฆฌ๋ ๋ฐฉ์์ผ๋ก ๊ฒ์
์ ์ฒด ํ ์ด๋ธ ์ค์บ์ ํ๋ ๊ฒฝ์ฐ
1. SQL๋ฌธ์ ์กฐ๊ฑด์ด ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ
2. SQL๋ฌธ์ ์ฃผ์ด์ง ์กฐ๊ฑด์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ธ๋ฑ์ค๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ
3. ์ตํฐ๋ง์ด์ ์ ์ทจ์ฌ ์ ํ
4. ๋ณ๋ ฌ์ฒ๋ฆฌ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ ๋ฑ
์ธ๋ฑ์ค ์ค์บ
์ธ๋ฑ์ค๋ฅผ ๊ตฌ์ฑํ๋ ์นผ๋ผ์ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ ์ก์ธ์ค ๊ธฐ๋ฒ
์ธ๋ฑ์ค ์ ์ผ ์ค์บ
์ ์ผ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋จ ํ๋์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ ๋ฐฉ์(์ค๋ณตX, ๊ตฌ์ฑ ์นผ๋ผ์ ๋ํด
๋ชจ๋ ‘=’ ๋ก ๊ฐ์ด ์ฃผ์ด์ง ๊ฒฝ์ฐ์๋ง ๊ฐ๋ฅ)
์ธ๋ฑ์ค ๋ฒ์ ์ค์บ
์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ์ฌ ํ ๊ฑด ์ด์์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ ๋ฐฉ์
์ธ๋ฑ์ค ์ญ์ ๋ฒ์ ์ค์บ
์ธ๋ฑ์ค์ ๋ฆฌํ ๋ธ๋ก์ ์๋ฐฉํฅ ๋งํฌ๋ฅผ ์ด์ฉํ์ฌ ๋ด๋ฆผ์ฐจ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ๋๋ค
NL Join
ํ๋ก๊ทธ๋๋ฐ์์ ์ฌ์ฉํ๋ ์ค์ฒฉ๋ ๋ฐ๋ณต๋ฌธ๊ณผ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ์กฐ์ธ์ ์ํ, ๋๋ค ์ก์ธ์ค ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ๋๋ค.
Sort Merge Join
์กฐ์ธ ์นผ๋ผ์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ์ฌ ์กฐ์ธ์ ์ํ, ์ค์บ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ ์ฝ์.
Hash Join
CPU ์์ ์์ฃผ๋ก ์ฒ๋ฆฌ, ํด์ ๊ธฐ๋ฒ ์ด์ฉ, NL Join์ ๋๋ค ์ก์ธ์ค ๋ฌธ์ ์ SMJ์ ์ ๋ ฌ ์์ ๋ถ๋ด์ ํด๊ฒฐํ๊ธฐ ์ํ ๋์์ผ๋ก ๋ฑ์ฅ
'๐์๊ฒฉ์ฆ > ๐SQLD๊ฐ๋ฐ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SQL] DB ์ค๊ณ(์ ๊ทํ,ROLLBACK, COMMIT) 1ํธ (0) | 2021.11.07 |
---|---|
์ ์์๋ฃ (0) | 2021.11.04 |
1์ด๋ง์ sqld ์ค์ต ํ๊ฒฝ ๊ตฌ์ถํ๊ธฐ (0) | 2021.11.02 |
[SQLD] ํ๋ฃจ๋ง์ ๊ฐ๋ ๋ฟ์๊ธฐ(feat. 2๋จ์. ๋ฐ์ดํฐ ๋ชจ๋ธ๊ณผ ์ฑ๋ฅ) (0) | 2021.10.27 |
[SQLD] ํ๋ฃจ๋ง์ ๊ฐ๋ ๋ฟ์๊ธฐ(feat. 1๋จ์. ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ์ดํด) (0) | 2021.10.27 |