์ 1์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์
1. ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๋ฐ์ดํฐ๋ฅผ ์ผ์ ํ ํํ๋ก ์ ์ฅํด ๋์ ๊ฒ
- ๊ณ์ธตํ DB: ํธ๋ฆฌ ํํ์ ์๋ฃ๊ตฌ์กฐ์ ๋ฐ์ดํฐ ์ ์ฅ (1:N)
- ๋คํธ์ํฌํ DB: ์ค๋์ ๋ฉค๋ฒ ํํ๋ก ๋ฐ์ดํฐ ์ ์ฅ (M:N)
- ๊ด๊ณํ DB: ์งํฉ ์ฐ์ฐ๊ณผ ๊ด๊ณ ์ฐ์ฐ ๊ฐ๋ฅ
2. ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค (RDB: Relational Databae)
- ํ์ผ ์์คํ ๋จ์ : ๋์์ ์ฝ์ /์์ /์ญ์ ๋ถ๊ฐ๋ฅํด ๋ฐ์ดํฐ ๊ด๋ฆฌ๊ฐ ์ด๋ ค๊ณ ๋ณต์ฌ๋ณธ ํ์ผ์ ๋ง๋ค์ด ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฐ์ดํฐ์ ๋ถ์ผ์น์ฑ์ ๋ฐ์
- RDB ์ฅ์ : ์ ๊ทํ๋ฅผ ํตํด ์ด์ ํ์๊ณผ ์ค๋ณต์ ๊ฑฐ, ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ, ๋ฐ์ดํฐ ํ๋ณต/๋ณต๊ตฌ ๊ฐ๋ฅ, ๋ณํ ์ ์ด, ๋์์ฑ ๊ด๋ฆฌ๋ฅผ ํตํด ๋ฐ์ดํฐ ๊ณต์ , ๋ฐ์ดํฐ ํํ ๋ฐฉ๋ฒ ๋ฑ ์ฒด๊ณํ
3. SQL ๋ฌธ์ฅ๋ค์ ์ข ๋ฅ
- SQL: ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ ์ ์/์กฐ์/์ ์ด๋ฅผ ์ํด ์ฌ์ฉํ๋ ์ธ์ด
๋ช ๋ น์ด ์ข ๋ฅ | ๋ช ๋ น์ด | ์ค๋ช |
๋ฐ์ดํฐ ์กฐ์์ด(DML) | SELECT |
|
INSERT UPDATE DELETE |
|
|
๋ฐ์ดํฐ ์ ์์ด(DDL) | CREATE ALTER DROP RENAME |
|
๋ฐ์ดํฐ ์ ์ด์ด(DCL) | GRANT REVOKE |
|
ํธ๋์ญ์ ์ ์ด์ด(TCL) | COMMIT ROLLBACK |
|
4. ํ ์ด๋ธ: RDB์ ๊ธฐ๋ณธ ๋จ์, ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฐ์ฒด, ์นผ๋ผ๊ณผ ํ์ 2์ฐจ์ ๊ตฌ์กฐ
์ฉ์ด | ์ค๋ช |
ํ ์ด๋ธ | ํ๊ณผ ์นผ๋ผ์ 2์ฐจ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ์ ์ ์ฅ ์ฅ์, ๋ฐ๋ฒ ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ |
์นผ๋ผ/์ด | 2์ฐจ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ํ ์ด๋ธ์์ ์ธ๋ก ๋ฐฉํฅ์ผ๋ก ์ด๋ฃจ์ด์ง ํ๋ํ๋์ ํน์ฑ ์์ฑ(๋ ์ด์ ๋๋ ์ ์์) |
ํ (Row) | 2์ฐจ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ํ ์ด๋ธ๋ก์์ ๊ฐ๋ก ๋ฐฉํฅ์ผ๋ก ์ด๋ฃจ์ด์ง ์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ |
5. ERD (Entity Relationship Diagram)
- ๊ด๊ณ์ ์๋ฏธ๋ฅผ ์ง๊ด์ ์ผ๋ก ํํํ ์ ์๋ ์๋จ
- ๊ตฌ์ฑ์์: ์ํฐํฐ(Entity), ๊ด๊ณ(Relationship), ์์ฑ(Attribute) 3๊ฐ์ง
- ํ๊ธฐ๋ฒ: IE, Barker
์ 2์ SELECT๋ฌธ
1. SELECT ๋?
- ํ
์ด๋ธ์์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ ์ฌ์ฉํ๋ ๋ฌธ๋ฒ
- SELECT CUST_ID, CUST_NAME, BIRTH_DAY
FROM TB_CUST → ๊ณ ๊ฐ ์ ๋ณด ํ ์ด๋ธ
WHERE MONEY = 10000; → ํํฐ๋ง - TB_CUST ํ
์ด๋ธ์์ (FROM) ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฒ ์
TB_CUST ํ ์ด๋ธ์์ MONEY (๋ณด์ ๊ธ์ก)์ด 10000์ธ ํํ(ํ)๋ง ๊ฐ์ ธ์ค๊ฒ ์
์ถ๋ ฅ๋๋ ํํ(ํ)์ ๋ํด CUST_IS, CUST_NAME, BIRTH_DAY ์ปฌ๋ผ(์ด)๋ง ๊ฐ์ ธ์ค๊ฒ ์
2. SELECT * FROM TB_PRO;
- TB_PRO ํ ์ด๋ธ์ ๋ชจ๋ ์ปฌ๋ผ ์ ๋ณด๋ฅผ ์ถ๋ ฅํจ
- * ํ๋๋ง ์จ๋ ๋ชจ๋ ์ปฌ๋ผ ํํ
3. SELECT DISTINCT PRO_TYPE FROM TB_PRD;
- TB_PRD ํ ์ด๋ธ์ PRD_TYPE ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ๊ฐ์ ์ค๋ณต์์ด(๋จ ํ๋์) ์ถ๋ ฅ
4. AS
- SELECT ๋ถ๋ถ์์ ์ถ๋ ฅํ๋ ค๋ ์ปฌ๋ผ์ ๋ํด ์๋ก์ด ๋ณ๋ช (ALIAS)์ ๋ถ์ฌ, ์ฆ ์ปฌ๋ผ๋ช ์ ์ด๊ฑธ๋ก ํ๊ฒ ์
- ์ฃผ์! ๋์ด์ฐ๊ธฐ ๋ถ๊ฐ, ๋ฌธ์๋ก ์์ํด์ผํจ, ์์ฝ์ด ๋ถ๊ฐ๋ฅ, ๊ฐ๋ฅ ํน์๋ฌธ์($, _, #)
5. SELECT ์ฌ์น์ฐ์ฐ : =, -, X, /
6. SELECT์์ ์ฐ๊ฒฐ ์ฐ์ฐ (||): ๋ฌธ์์ด ์ฐ๊ฒฐ, ๋ฌธ์์ด์์๋ ‘ ‘์ฌ์ฉ(“ “ ์ฌ์ฉํ๋ฉด ์ค๋ฅ ๋จ)
7. SELECT ๋ฌธ ์คํ ์์(FWGHS)
- FROM
- WHERE
- GROUP BY
- HAVING
- SELECT ORDER BY
์ 3์ ํจ์
1. ๋ด์ฅํจ์(Built-in Function)
- ๋ฒคํฐ์์ ์ ๊ณตํ๋ ํจ์์ธ ๋ด์ฅ ํจ์(Built-in Function)
- ์ฌ์ฉ์๊ฐ ์ ์ํ ์ ์๋ ํจ์(User Defined Function)
- SQL์ ๋์ฑ ๊ฐ๋ ฅํ๊ฒ ํด์ฃผ๊ณ ๋ฐ์ดํฐ ๊ฐ์ ๊ฐํธ ์กฐ์ํ๋๋ฐ ์ฌ์ฉ
- ํต์ฌ์ ์ธ ๊ธฐ๋ฅ๋ค์ ์ด๋ฆ/ํ๊ธฐ๋ฒ์ด ๋ฌ๋ผ๋ ๋๋ถ๋ถ์ ๋ฐ๋ฒ ๊ฐ ๊ณตํต์ ์ผ๋ก ์ ๊ณต
- ๋ด์ฅํจ์๋ ๋ค์ ํจ์์ ์ ๋ ฅ ๊ฐ์ ๋ฐ๋ผ ๋จ์ผํ ํจ์ / ๋ค์คํ ํจ์
- ํจ์๋ ์
๋ ฅ๊ฐ์ด ์๋ฌด๋ฆฌ ๋ง์๋ ์ถ๋ ฅ๊ฐ์ ํ๋๋ผ๋ M:1 ๊ด๊ณ์
- ๋จ์ผํ ํจ์: ๋จ์ผ ํ ๋ด์ ์๋ ํ๋์ ๊ฐ ๋๋ ์ฌ๋ฌ ๊ฐ์ด ์
๋ ฅ ์ธ์๋ก ์ฌ์ฉ
- ๋ฌธ์ํ ํจ์, ์ซ์ํ ํจ์, ๋ ์งํ ํจ์, ๋ณํํ ํจ์, NULL ๊ด๋ จ ํจ์
- ์ถ์ถ๋๋ ๊ฐ ํ๋ง๋ค ์์ ์ ์ํ
- ๊ฐ ํ๋ง๋ค ํ๋์ ๊ฒฐ๊ณผ ๋ฐํ
- SELECT, WHERE, ORDER BY, UPDATE์ SET์ ์ ์ฌ์ฉ๊ฐ๋ฅ
- ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝ ๊ฐ๋ฅ
- ์ค์ฒฉํด์ ์ฌ์ฉ ๊ฐ๋ฅ
- ๋ฌธ์ํ ํจ์
- LOWER(๋ฌธ์์ด), UPPER(๋ฌธ์์ด), ASCII(๋ฌธ์์ด), LENFTH/LEN(๋ฌธ์์ด), CONCAT(๋ฌธ์์ด1, ๋ฌธ์์ด2)
- CHR/CHAR(ASCII ๋ฒํธ): ASCII ์ฝ๋ ๋ฒํธ๋ฅผ ๋ฌธ์๋ ์ซ์๋ก ๋ฐ๊ฟ์ค
ex: CHR(65) / CHAR(65) → ‘A’ - SUBSTR/SUBSTRING(๋ฌธ์์ด, m[, n]): ๋ฌธ์์ด ์ค m์์น์์ n๊ฐ์ ๋ฌธ์ ๊ธธ์ด์ ํด๋นํ๋ ๋ฌธ์ ๋๋ ค์ค, n์ด ์๋ต ๋๋ฉด ๋ง์ง๋ง ๋ฌธ์๊น์ง์
ex: SUBSTR(“hello”, 3, 2) / SUBSTRING(“hello”, 3, 2) → ‘ll’ - LTRIM(๋ฌธ์์ด [, ์ง์ ๋ฌธ์]): ๋ฌธ์์ด์ ์ฒซ ๋ฌธ์๋ถํฐ ํ์ธํด ์ง์ ๋ฌธ์๊ฐ ๋ํ๋๋ฉด ํด๋น ๋ฌธ์ ์ ๊ฑฐ(์ง์ ๋ฌธ์๊ฐ ์๋ต๋๋ฉด ๊ณต๋ฐฑ ๊ฐ์ด ๋ํดํธ), SQL Server์์๋ ์ง์ ๋ฌธ์ ์ฌ์ฉX(๊ณต๋ฐฑ๋ง ์ ๊ฑฐ ๊ฐ๋ฅ)
ex: LTRIM(‘xxxYYZZxYZ’, ‘x’) → ‘YYZZxYZ’ - RTRIM(๋ฌธ์์ด [, ์ง์ ๋ฌธ์]): ๋ฌธ์์ด ๋ง์ง๋ง ๋ฌธ์๋ถํฐ ํ์ธํด ์ง์ ๋ฌธ์ ๋ํ๋๋ ๋์ ํด๋น ๋ฌธ์ ์ ๊ฑฐ(์ง์ ๋ฌธ์ ์๋ต๋๋ฉด ๊ณต๋ฐฑ), SQL Server์์๋ ์ง์ ๋ฌธ์ ์ฌ์ฉX(๊ณต๋ฐฑ๋ง ์ ๊ฑฐ ๊ฐ๋ฅ)
ex: RTRIM(‘XXYYzzXYzz’, ‘z’) → ‘XXYYzzXY’ - TRIM([leading|trailing|both ์ง์ ๋ฌธ์ FROM ๋ฌธ์์ด): ๋จธ๋ฆฌ๋ง, ๊ผฌ๋ฆฌ๋ง, ๋๋ ์์ชฝ ์ง์ ๋ฌธ์ ์ ๊ฑฐ(leading | trailing | both๊ฐ ์๋ต๋๋ฉด both๊ฐ ๋ํดํธ), SQL Server์์๋ ์ง์ ๋ฌธ์ ์ฌ์ฉX(๊ณต๋ฐฑ๋ง ์ ๊ฑฐ ๊ฐ๋ฅ)
- TRIM(‘x’ FROM ‘xxYYZZxYZxx’) → ‘YYZZxYZ
- ์ซ์ํ ํจ์
- ABS(์ซ์), ROUND(์ซ์ [, m])
- SIGN(์ซ์): ์ซ์ ์์, ์์, 0์ธ์ง ๊ตฌ๋ณ (ex: SIGN(-20), SIGN(20), SIGN(0) → -1, 1, 0)
- MOD(์ซ์1, ์ซ์2): ์ซ์1์ ์ซ์2๋ก ๋๋ ๋๋จธ์ง ๊ฐ ๋ฆฌํด(%์ฐ์ฐ์๋ก ๋์ฒด ๊ฐ๋ฅ)
ex: MOD(7,3) / 7%3 → 1 - CEIL/CEILING(์ซ์): ์ซ์๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์ต์ ์ ์ ๋ฆฌํด
ex: CEIL(38.123) / CEILING(38.123) → 39 / 39 - FLOOR(์ซ์): ์ซ์๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ต๋ ์ ์ ๋ฆฌํด
ex: FLOOR(38.123), FLOOR(-38.123) → 38, -39 - TRUNC(์ซ์ [, m]): ์ซ์๋ฅผ ์์ m์๋ฆฌ์์ ์๋ผ๋ฒ๋ฆผ, SQL ์ ๊ณตX
ex: TRUNC(38.5235, 3) → 38.523 - SIN, COS, TAN,…: ์ซ์์ ์ผ๊ฐํจ์ ๊ฐ ๋ฆฌํด
- EXP(), POWER(), SQRT(), LOG(), LN(): ์ซ์ ์ง์, ๊ฑฐ๋ ์ ๊ณฑ, ์ ๊ณฑ๊ทผ, ์์ฐ ๋ก๊ทธ ๊ฐ ๋ฆฌํด
- ๋ ์งํ ํจ์
- SYSDATE / GETDATE(): ํ์ฌ ๋ ์ง์ ์๊ฐ ์ถ๋ ฅ
- EXTRACT(‘YEAR’|’MONTH’|’DAY’ from d) / DATEPART(‘YEAR’|’MONTH’|’DAY’, d): ๋ ์ง ๋ฐ์ดํฐ์์ ๋
/์/์ผ ๋ฐ์ดํฐ ์ถ๋ ฅ ๊ฐ๋ฅ (์๊ฐ/๋ถ/์ด๋ ๊ฐ๋ฅ)
ex) โจ์ค๋ผํด: EXTRACT(MONTH FROM HIREDATE) ์ ์ฌ์ FROM EMP;โจ
SQL: SELECT ENAME, HIREDATE, DATEPART(MONTH, HIREDATE) ์ ์ฌ์ FROM EMP; - TO_NUMER(TO_CHAR(d, ‘YYYY’)) / YEAR(d), TO_NUMER(TO_CHAR(d, ‘MM’)) / MONTH(d),
- TO_NUMER(TO_CHAR(d, ‘DD’)) / DAY(d): ์์๋ ๊ฐ์ ๊ธฐ๋ฅ, TO_NUMBER ์ ์ธ์ ๋ฌธ์ํ์ผ๋ก ์ถ๋ ฅ
- ์ฐ์ฐ
๋ ์ง + ์ซ์ = ๋ ์ง ; ์ซ์๋งํผ์ ๋ ์๋ฅผ ๋ ์ง์ ๋ํจ
๋ ์ง - ์ซ์ = ๋ ์ง ; ์ซ์๋งํผ์ ๋ ์๋ฅผ ๋ ์ง์์ ๋บ
๋ ์ง1 - ๋ ์ง2 = ๋ ์ง์ ; ๋ค๋ฅธ ํ๋์ ๋ ์ง์์ ํ๋์ ๋ ์ง๋ฅผ ๋นผ๋ฉด ์ผ์๊ฐ ๋์ด
๋ ์ง + ์ซ์/24 = ๋ ์ง ; ์๊ฐ์ ๋ ์ง์ ๋ํจ
- ๋ณํํ ํจ์
- ๋ฐ์ดํฐ ์ ํ ๋ฐํ ์ข
๋ฅ
- ๋ช ์์ ๋ฐ์ดํฐ ์ ํ ๋ณํ: ๋ฐ์ดํฐ ๋ณํํ ํจ์๋ก ๋ฐ์ดํฐ ์ ํ์ ๋ณํํ๋๋ก ๋ช ์ํด ์ฃผ๋ ๊ฒฝ์ฐ
- ์์์ ๋ฐ์ดํฐ ์ ํ ๋ณํ: ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋์ผ๋ก ๋ฐ์ดํฐ ์ ํ์ ๋ณํํด ๊ฒ์ฐํ๋ ๊ฒฝ์ฐ
- ๋ณํํ ํจ์ ์ข ๋ฅ
- ์ค๋ผํด
TO_NUMER(๋ฌธ์์ด): alphanumeric ๋ฌธ์์ด์ ์ซ์๋ก ๋ณํ
TO_CHAR(์ซ์|๋ ์ง [, FORMAT]): ์ซ์๋ ๋ ์ง๋ฅผ ์ฃผ์ด์ง FORMAT ํํ๋ก ๋ฌธ์์ด ํ์ ์ผ๋ก ๋ฐํ
TO_DATE(๋ฌธ์์ด [, FORMAT]): ๋ฌธ์์ด์ ์ฃผ์ด์ง FORMAT ํํ๋ก ๋ ์ง ํ์ ์ผ๋ก ๋ณํ - SQL
CAST (expression AS data_type [(length)]): expression ์ ๋ชฉํ ๋ฐ์ดํฐ ์ ํ์ผ๋ก ๋ณํ
CONVERT (data_type [(length)], expression [, style]): expression ์ ๋ชฉํ ๋ฐ์ดํฐ ์ ํ์ผ๋ก ๋ณํ
- ๋ฐ์ดํฐ ์ ํ ๋ฐํ ์ข
๋ฅ
- NULL ๊ด๋ จ ํจ์
- NVL(ํํ์ 1, ํํ์ 2) / ISNULL(ํํ์1, ํํ์2): ํํ์ 1์ ๊ฒฐ๊ณผ๊ฐ NULL์ด๋ฉด ํํ์2 ๊ฐ ์ถ๋ ฅ, ํํ์1๊ณผ ํํ์2์ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ์ ์ด ๊ฐ์์ผ ํจ, ๊ฒฐ๊ณผ๊ฐ์ NULL์ด ์๋ ๋ค๋ฅธ ๊ฐ์ ์ป๊ณ ์ ํ ๋ ์ฃผ๋ก ์ฌ์ฉ
- NULLIF(ํํ์1, ํํ์2): ํํ์1์ด ํํ์2์ ๊ฐ์ผ๋ฉด NULL, ๋ค๋ฅด๋ฉด ํํ์1 ๋ฆฌํด
- CONALESCE(ํํ์1, ํํ์2,…): ์์์ ๊ฐ์ ํํ์์์ NULL์ด ์๋ ์ต์ด์ ํํ์, ์ธ์ ์ซ์ ํ์ X, ์์์ ๊ฐ์ EXPR์์ NULL์ด ์๋ ์ต์ด์ EXPR ๋ํ๋(๋ง์ฝ ๋ชจ๋ EXPR์ด NULL์ด๋ฉด NULL ๋ฆฌํด)
- NULL๊ณผ ๊ณต์งํฉ: SELECT 1 FROM DUAL WHERE 1 = 2; ์ ๊ฐ์ ์กฐ๊ฑด์ด ๋ํ์ ์ธ ๊ณต์งํฉ ๋ฐ์ ์ฟผ๋ฆฌ, ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐใ
ํ ๊ฑด๋ ์๋ ๊ฒฝ์ฐ๋ฅผ ๊ณต์งํฉ, NULL ๋ฐ์ดํฐ์๋ ๋ ๋ค๋ฅด๊ฒ ์ดํดํด์ผ ํจ
- ๋ค์คํ ํจ์: ์ฌ๋ฌ ๋ ์ฝ๋์ ๊ฐ๋ค์ ์
๋ ฅ ์ธ์๋ก ์ฌ์ฉ
- ์ฌ๋ฌ ๊ฐ์ ํ์ด ์ ๋ ฅ, ํ๋์ ๊ฐ ๋ฐํ
- ์ง๊ณํจ์๊ฐ ๋ค์ค ํ ํจ์
- SUM, AVG, MAX, MIN, COUNT ๋ฑ
์ 4์ WHERE ์
1. WHERE
- ์์ ์ด ์ํ๋ ์๋ฃ๋ง์ ๊ฒ์ํ๊ธฐ ์ํด ์ด์ฉ
- WHERE ์ ์ ์กฐ๊ฑด์ด ์๋ FTS(full table scan) ๋ฌธ์ฅ์ SQL ํ๋ 1์ฐจ ๊ฒํ ๋์์
2. WHERE ์ฐ์ฐ์ ์ข ๋ฅ
- ์ฒ๋ฆฌ ์์: ๋ถ์ ์ฐ์ฐ์ → ๋น๊ต ์ฐ์ฐ์ → ๋ ผ๋ฆฌ ์ฐ์ฐ์
3. ์ฐธ๊ณ
- ์ค๋ผํด์ ‘ ‘ ์ ๋ ฅํ๋ฉด NULL๋ก ์ ๋ ฅ๋์ด ์กฐํํ๋ ค๋ฉด IS NULL ์กฐ๊ฑด์ผ๋ก ์กฐํํ์ฌ์ผ ํจ. SQL์์๋ ‘ ‘ ๋ก ์ ์ฅ ๋ฐ ์กฐํ ๊ฐ๋ฅ
4. CASE ํํ (IF-THEN-ELSE ๋ ผ๋ฆฌ์ ์ ์ฌํ ๋ฐฉ์)
- CASE ํํ์ IF-THEN-ELSE ๋ ผ๋ฆฌ์ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ํํ์ ์์ฑ
- SQL ๋น๊ต ์ฐ์ฐ ๊ธฐ๋ฅ์ ๋ณด์ํ๋ ์ญํญ
- ANSI/ISO ํ์ค์๋ CASE Expression์ด๋ผ๊ณ ํ์
- ํจ์์ ๊ฐ์ ์ฑ๊ฒฉ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ Oracle์ DECODE ํจ์์ ๊ฐ์ ๊ธฐ๋ฅ
- ๋จ์ผํ CASE ํํ์ ์ข
๋ฅ
- ๊ฒ์ CASE ํํ์: ๊ฐ๋ณ ์กฐ๊ฑด ํ์ธํ๊ณ ๋ฐํ
- ๋จ์ CASE ํํ์: ํํ์ ๊ฐ ๊ธฐ์ค, ์ฌ๋ฌ ์กฐ๊ฑด์ ํ์ธ
- DECODE: ์ฌ๋ฌ ์กฐ๊ฑด ๋น๊ตํ๊ณ ์ผ์นํ๋ ์กฐ๊ฑด์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ
์ 5์ GROUP BY, HAVING ์
1. ์ง๊ณํจ์
- ์ฌ๋ฌ ํ๋ค์ ๊ทธ๋ฃน์ด ๋ชจ์ฌ์ ๊ทธ๋ฃน ๋น ๋จ ํ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋๋ ค์ฃผ๋ ๋ค์คํ ํจ์
- GROUP BY ์ ์ ํ๋ค์ ์๊ทธ๋ฃน
- SELECT ์ , HAVING ์ , ORDER BY ์ ์ ์ฌ์ฉ
- ์ง๊ณํจ์๋ช (ALL | Distinct ์นผ๋ผ)
- ์ฃผ๋ก ์ซ์ํ์์ ์ฌ์ฉ, MIN MAX COUNT ๋ ๋ฌธ์ ๋ ์ง๋ ์ ์ฉ ๊ฐ๋ฅ
- ์ง๊ณํจ์ ์ข ๋ฅ: COUNT(*), COUNT(NULL ์ ์ธ), SUM(NULL ์ ์ธ), AVG(NULL ์ ์ธ), MIN, MAX, STDDEV(ํํ์์ ํ์คํธ์ฐจ ์ถ๋ ฅ), VARIAN(ํํ์์ ๋ถ์ฐ ์ถ๋ ฅ), ๊ธฐํ
2. GROUP BY ์
- FROM ์ ๊ณผ WHERE ์ ๋ค์ ์ด, ๋ฐ์ดํฐ๋ฅผ ์์ ๊ทธ๋ฃน์ผ๋ก ๋ถ๋ฅํ์ฌ ์๊ทธ๋ฃน๋ณ ๊ธฐ์ค์ ์ ํ ํ, SELECT์ ์ ์ง๊ณ ํจ์๋ฅผ ์ฌ์ฉ
- ์ง๊ณํจ์์ ํต๊ณ ์ ๋ณด๋ NULL ์ ์ธํ๊ณ ์ํ
- SELECT์ ๊ณผ ๋ฌ๋ฆฌ ALIAS ์ฌ์ฉ ๋ถ๊ฐ
- ROLLUP ์ด๋ CUBE์ ์ํ ์๊ณ๊ฐ ๊ณ์ฐ๋ ๊ฒฐ๊ณผ์๋ GROUPING(EXPR)=1 ์ด ํ์
- ๊ทธ ์ธ ๊ฒฐ๊ณผ์๋ GROUPING(EXPR)=0 ์ด ํ์
3. HAVING ์
- GROUP BY์ ์ ๊ธฐ์คํญ๋ชฉ์ด๋ ์๊ทธ๋ฃน์ ์ง๊ณํจ์๋ฅผ ์ด์ฉํ ์กฐ๊ฑด ํ์
- GROUP BY์ ์ ์ํ ์๊ทธ๋ฃน๋ณ๋ก ๋ง๋ค์ด์ง ์ง๊ณ ๋ฐ์ดํฐ ์ค, HAVING์ ์์ ์ ํ ์กฐ๊ฑด์ ๋์ด ๋ง์กฑํ๋ ๋ด์ฉ๋ง ์ถ๋ ฅ
- ์ผ๋ฐ์ ์ผ๋ก GROUP BY์ ๋ค์ ์์นํ์ง๋ง GROUP BY ์์ด๋ ์ฌ์ฉ ๊ฐ๋ฅ
- WHERE ์ ์กฐ๊ฑด ๋ณ๊ฒฝ์ ๋์ ๋ฐ์ดํฐ ๊ฐ์๊ฐ ๋ณ๊ฒฝ๋๋ฏ๋ก ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ๊ฐ์ด ๋ณ๊ฒฝ ๊ฐ๋ฅ
- HAVING ์ ์กฐ๊ฑด ๋ณ๊ฒฝ์ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ์๊ณ ์ถ๋ ฅ๋๋ ๋ ์ฝ๋ ๊ฐ์๋ง ๋ณ๊ฒฝ ๊ฐ๋ฅ
4. GROUP BY ์ ๊ณผ HAVING ์ ์ ํน์ฑ
- GROUP BY ์ ์ํ ์๊ทธ๋ฃน๋ณ ๋ง๋ค์ด์ง ์ง๊ณ ๋ฐ์ดํฐ ์ค HAVING ์กฐ๊ฑด ๋ง์กฑํ๋ ๋ด์ฉ๋ง ์ถ๋ ฅ
- ๊ฐ๋ฅํ๋ฉด GROUP BY ํ๊ธฐ ์ ์, WHERE ์ ๋ก ๊ณ์ฐ ๋์์ ์ค์ด๋๊ฒ ํจ๊ณผ์ ์
- WHERE ์ ์ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ Group์ผ๋ก ๋๋๊ธฐ ์ ์ ํ์์๋ ์กฐ๊ฑด์ ๋ฏธ๋ฆฌ ์ ๊ฑฐ ํ๋ ์ญํ
- HAVING ์ ์ GROUP BY๋ก ๋ง๋ค์ด์ง ์๊ทธ๋ฃน์ ๋ํด์๋ง ์กฐ๊ฑด์
5. CASE ํํ์ ํ์ฉํ ์๋ณ ๋ฐ์ดํฐ ์ง๊ณ: ํจ์ (CASE( ))~GROUP BY
- ๋ชจ๋ธ๋ง์ ์ 1์ ๊ทํ๋ก ์ธํด ๋ฐ๋ณต๋๋ ์นผ๋ผ์ ๊ฒฝ์ฐ ๊ตฌ๋ถ ์นผ๋ผ์ ๋๊ณ ์ฌ๋ฌ ๊ฐ์ ๋ ์ฝ๋๋ก ๋ง๋ค์ด์ง ์งํฉ์, ์ ํด์ง ์นผ๋ผ ์๋งํผ ํ์ฅํด์ ์ง๊ณ ๋ณด๊ณ ์๋ฅผ ๋ง๋๋ ๊ธฐ๋ฒ
6. ์ง๊ณํจ์์ NULL ์ฒ๋ฆฌ
- ๋ ํฌํธ ์ถ๋ ฅ ๋ NULL์ด ์๋ 0์ ํ์ํ๊ณ ์ถ์ ๊ฒฝ์ฐ์๋ NVL(SUM(SAL), 0)์ด๋, ISNULL(SUM(SAL), 0)์ฒ๋ผ ์ ์ฒด SUM์ ๊ฒฐ๊ณผ๊ฐ NULL์ธ ๊ฒฝ์ฐ(๋์ ๊ฑด์๊ฐ ๋ชจ๋ NULL์ธ ๊ฒฝ์ฐ)์๋ง ํ ๋ฒ NVL/ISNULL ํจ์ ์ฌ์ฉ
์ 6์ ORDER BY ์
1. ORDER BY ์ ๋ ฌ
- SQL ๋ฌธ์ฅ์ผ๋ก ์กฐํ๋ ๋ฐ์ดํฐ๋ค์ ๋ชฉ์ ์ ๋ง๊ฒ ํน์ ์นผ๋ผ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ์ฌ ์ถ๋ ฅ
- ORDER BY ์ ์ ์นผ๋ผ๋ช ๋์ SELECT ์ ์์ ์ฌ์ฉํ ALIAS ๋ช , ์นผ๋ผ ์์๋ฅผ ๋ํ๋ด๋ ์ ์๋ ์ฌ์ฉ์ด ๊ฐ๋ฅ
- ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ฆ์ฐจ์, SQL ๋ฌธ์ฅ ์ ์ผ ๋ง์ง๋ง์ ์์น, SELECT์ ์์ ์ค์ง ํ ๊ฐ๋ง ์ฌ ์ ์์
- ์ซ์ํ ํ์ ์ ์ค๋ฆ์ฐจ์์ ์์ ๊ฐ / ๋ ์งํ ํ์ ์ ์ค๋ฆ์ฐจ์์ ๋น ๋ฅธ ๋ ๋ถํฐ ์ถ๋ ฅ
- ORDER BY์๋ GROUP BY ์นผ๋ผ์ด๋ SELECT ์นผ๋ผ๋ง ์ฌ ์ ์์
- Oracle์์ null์ ๊ฐ์ฅ ํฐ ๊ฐ์, SQL Server์์ ๊ฐ์ฅ ์์ ๊ฐ์ผ๋ก ๊ฐ์ฃผ
2. SELECT ๋ฌธ์ฅ ์คํ ์์
- 1) ๋ฐ์ท ๋์ ํ ์ด๋ธ ์ฐธ๊ณ (FROM) → 2) ๋ฐ์ท ๋์ฐ ๋ฐ์ดํฐ ์๋ ๊ฒ์ ์ ๊ฑฐ(WHERE) → 3) ํ๋ค์ ์๊ทธ๋ฃนํ (GROUP BY) → 4) ๊ทธ๋ฃนํ๋ ๊ฐ์ ์กฐ๊ฑด์ ๋ง๋ ๊ฒ๋ง ์ถ๋ ฅ(HAVING) → 5) ๋ฐ์ดํฐ ๊ฐ์ ์ถ๋ ฅ/๊ณ์ฐ (SELECT) → 6) ๋ฐ์ดํฐ ์ ๋ ฌ (ORDER BY)
์ 7์ ์กฐ์ธ(JOIN)
1. JOIN - ๋ ๊ฐ ์ด์์ ํ ์ด๋ธ๋ค์ ์ฐ๊ฒฐ / ๊ฒฐํฉํ์ฌ ๋ฐ์ดํฐ ์ถ๋ ฅ
- JOIN์ ๊ด๊ณํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ๊ฐ์ฅ ํฐ ์ฅ์ , ๋ํ์ ํต์ฌ ๊ธฐ๋ฅ์
- ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ ํ๋ค์ PK ๋ FK ๊ฐ์ ์ฐ๊ด์ ์ํด JOIN์ด ์ฑ๋ฆฝ
- ์ด๋ค ๊ฒฝ์ฐ์๋ PK, FK ๊ด๊ณ๊ฐ ์์ด๋ ๋
ผ๋ฆฌ์ ์ธ ๊ฐ๋ค์ ์ฐ๊ด๋ง์ผ๋ก JOIN ์ฑ๋ฆฝ ๊ฐ๋ฅ
- ํ๋์ SQL ๋ฌธ์ฅ์์ ์ฌ๋ฌ ํ ์ด๋ธ์ ์กฐ์ธํด์ ์ฌ์ฉํ ์๋ ์์
- FROM ์ ์ ์ฌ๋ฌ ํ ์ด๋ธ์ด ๋์ด๋๋๋ผ๋ SQL์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋๋ ๋ ๊ฐ์ ์งํฉ ๊ฐ์๋ง JOIN์ด ์ผ์ด๋จ
- FROM ์ ์ A, B, C 3๊ฐ์ ํ ์ด๋ธ์ด ๋์ด๋์๋๋ผ๋ ํน์ 2๊ฐ์ ํ ์ด๋ธ๋ง ๋จผ์ ์กฐ์ธ๋๊ณ , ๊ทธ ์กฐ์ธ๋ ์๋ก์ด ๊ฒฐ๊ณผ ์งํฉ๊ณผ ๋จ์ ํ ๊ฐ์ ํ ์ด๋ธ์ด ๋ค์ ์ฐจ๋ก๋ก ์กฐ์ธ
2. EQUI JOIN (๋ฑ๊ฐ ์กฐ์ธ)
- ๋ ํ ์ด๋ธ์ ์นผ๋ผ ๊ฐ์ด ์ ํํ๊ฒ ์ผ์นํ๋ ๊ฒฝ์ฐ, ๋๋ถ๋ถ PK ↔๏ธ FK ๊ด๊ณ ๊ธฐ๋ฐ
- JOIN ์กฐ๊ฑด์ WHERE ์ ์ ๊ธฐ์ , JOIN~ON~
- ์กฐ๊ฑด ์ ์ ํ ์ด๋ธ์ ๋ํ ALIAS ๋ช ์ ์ ์ฉํด SQL๋ฌธ์ ์์ฑํ์ ๊ฒฝ์ฐ, WHERE ์ ๊ณผ SELECT ์ ์๋ ํ ์ด๋ธ๋ช ์ด ์๋ ALIAS๋ฅผ ์ฌ์ฉ
3. Non EQUI JOIN (๋น๋ฑ๊ฐ ์กฐ์ธ)
- ๋ ํ ์ด๋ธ์ ์นผ๋ผ ๊ฐ์ด ์ ํํ๊ฒ ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ
- Non EQUI JOIN์ ๊ฒฝ์ฐ์๋ “=“ ์ฐ์ฐ์๊ฐ ์๋ ๋ค๋ฅธ (Between, >, >=, <, <= ๋ฑ) ์ฐ์ฐ์๋ค์ ์ฌ์ฉํด JOIN ์ํ
- WHERE ํ ์ด๋ธ1.์นผ๋ผ๋ช 1 BETWEEN ํ ์ด๋ธ2.์นผ๋ผ๋ช 1 AND ํ ์ด๋ธ2.์นผ๋ผ๋ช 2;
์ 8์ ํ์ค ์กฐ์ธ
1. STANDAR SQL (ํ์ค SQL) ๊ฐ์
- ํ์ค SQL์ ๊ธฐ๋ฅ
- STANDAR JOIN ๊ธฐ๋ฅ ์ถ๊ฐ (CROSS, OUTER JOIN ๋ฑ ์๋ก์ด FROM ์ JOIN ๊ธฐ๋ฅ๋ค)
- SCALAR SUBQUERT, TOP-N QUERY ๋ฑ์ ์๋ก์ด ์๋ธ์ฟผ๋ฆฌ ๊ธฐ๋ฅ๋ค
- ROLLUP, CUBE, GROUPING SETS ๋ฑ์ ์๋ก์ด ๋ฆฌํฌํ ๊ธฐ๋ฅ
- WINDOW FUNCTION ๊ฐ์ ์๋ก์ด ๊ฐ๋ ์ ๋ถ์ ๊ธฐ๋ฅ๋ค
- ์ผ๋ฐ ์งํฉ ์ฐ์ฐ์ → ํ์ฌ SQL
- UNION ์ฐ์ฐ → UNION ๊ธฐ๋ฅ: ํฉ์งํฉ
- INTERSECTION ์ฐ์ฐ → INTERSECT ๊ธฐ๋ฅ: ๊ต์งํฉ
- DIFFERENCE ์ฐ์ฐ → EXCEPT ๊ธฐ๋ฅ(Oracle์ MINUS): ์ฐจ์งํฉ
- PRODUCT ์ฐ์ฐ → CROSS JOIN ๊ธฐ๋ฅ: ๊ณฑ์งํฉ
- ์์ ๊ด๊ณ ์ฐ์ฐ์ → ํ์ฌ SQL
- SELECT ์ฐ์ฐ → WHERE ์ : ์กฐ๊ฑด์ ๋ง๋ ํ ์กฐํ
- PROJECT ์ฐ์ฐ → SELECT ์ : ์กฐ๊ฑด์ ๋ง๋ ์นผ๋ผ ์กฐํ
- (NATURAL) JOIN ์ฐ์ฐ → ๋ค์ํ JOIN ๊ธฐ๋ฅ: ์ฌ๋ฌ ์กฐ์ธ ์กด์ฌ
- DIVIDE ์ฐ์ฐ ํ์ฌ ์ฌ์ฉ X
2. FROM ์ ์ JOIN ํํ
- ANSI/ISO SQL์์ ํ์ํ๋ FROM ์ ์ JOIN ํํ
: INNER JOIN / NATURAL JOIN / USING ์กฐ๊ฑด์ / ON ์กฐ๊ฑด์ / CROSS JOIN / OUTER JOIN - ๊ธฐ์กด WHERE ์ ๊ทธ๋๋ก ์ฌ์ฉ ๊ฐ๋ฅ
- FROM ์ ์์ JOIN ์กฐ๊ฑด์ ๋ช ์์ ์ผ๋ก ์ ์ ๊ฐ๋ฅ
3. INNER JOIN - ๋ด๋ถ JOIN
- JOIN ์กฐ๊ฑด์์ ๋์ผํ ๊ฐ์ด ์๋ ํ๋ง ๋ฐํ
- DEFAULT ์ต์ ์ด๋ฏ๋ก ์๋ต์ด ๊ฐ๋ฅํ์ง๋ง, CROSS JOIN / OUTER JOIN ๊ณผ๋ ๊ฐ์ด ์ฌ์ฉ X
- USING ์กฐ๊ฑด์ ์ด๋ ON ์กฐ๊ฑด์ ์ ํ์์ ์ผ๋ก ์ฌ์ฉ
- ์ค๋ณต ํ ์ด๋ธ์ ๊ฒฝ์ฐ ๋ณ๊ฐ์ ์นผ๋ผ์ผ๋ก ํ์
- SELECT ~ FROM ~ INNER JOIN DEPT ON ~
4. NATURAL JOIN
- ๋ ํ ์ด๋ธ๊ฐ ๋์ผํ ์ด๋ฆ์ ๊ฐ๋ ๋ชจ๋ ์นผ๋ผ์ ๋ํด EQUI JOIN ์ํ
- USING, ON, WHERE์์ JOIN ์ ์X
- JOIN์ ์ฌ์ฉ๋ ์นผ๋ผ์ ๊ฐ์ ๋ฐ์ดํฐ ํ์
- ALIAS๋ ์ ๋์ฌ ๋ถ์ผ ์ X
- “์ฌ์ ๋ฒํธ์ ์ฌ์ ์ด๋ฆ, ์์ ๋ถ์ ์ฝ๋์ ์์ ๋ถ์ ์ด๋ฆ์ ์ถ๋ ฅํ์์ค”
SELECT DEPTNO, EMPNO, ENAME, DNAME FROM EMP NATURAL JOIN DEPT;
5. USING ์กฐ๊ฑด์
- FROM ์ ์์ USING ์กฐ๊ฑด์ ์ ์ด์ฉํด ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง ์นผ๋ผ๋ค ์ค์์ ์ํ๋ ์นผ๋ผ์ ๋ํด์๋ง ์ ํ์ ์ผ๋ก EQUI JOIN์ ํ ์ ์์
- SQL Server์์๋ ์ง์ X
- JOIN ์นผ๋ผ์ ๋ํด์๋ ALIAS๋ ํ ์ด๋ธ ์ด๋ฆ ๋ถ์ผ ์X
- JOIN์์ ์ฌ์ฉ๋๋ ์นผ๋ผ์ 1๊ฐ๋ง ํ์
- Oracle SQL>> SELECT * FROM DEPT JOIN DEPT_TEMP USING(DEPTNO);
6. ON ์กฐ๊ฑด์
- ์นผ๋ผ๋ช ์ด ๋ฌ๋ผ๋ JOIN ์ฌ์ฉ ๊ฐ๋ฅ
- WHERE ๊ฒ์ ์กฐ๊ฑด์ ์ถฉ๋ ์์ด ์ฌ์ฉ ๊ฐ๋ฅ
- ON ์กฐ๊ฑด์ ์์ ์ฌ์ฉ๋ ๊ดํธ๋ ์ต์ ์
- ALIAS ๋ฐ ํ
์ด๋ธ๋ช
๋ฐ๋์ ์ฌ์ฉ
- WHERE ์ ๊ณผ ํผ์ฉ
- SQL>> “๋ถ์์ฝ๋ 30์ธ ๋ถ์์ ์์ ์ฌ์ ์ด๋ฆ ๋ฐ ์์ ๋ถ์ ์ฝ๋, ๋ถ์์ฝ๋, ๋ถ์ ์ด๋ฆ์ ์ถ๋ ฅํ์์ค”โจ
SELECT E.ENAME, E.DEPTNO, D.DEPTNO, D.DNAME FROM EMP Eโจ
JOIN DEPT D ON (E.DEPTNO = D.DPETNO) WHERE E.DEPTNO = 30;
- SQL>> “๋ถ์์ฝ๋ 30์ธ ๋ถ์์ ์์ ์ฌ์ ์ด๋ฆ ๋ฐ ์์ ๋ถ์ ์ฝ๋, ๋ถ์์ฝ๋, ๋ถ์ ์ด๋ฆ์ ์ถ๋ ฅํ์์ค”โจ
- ON ์กฐ๊ฑด์ + ๋ฐ์ดํฐ ๊ฒ์ฆ ์กฐ๊ฑด ์ถ๊ฐ
- SQL>> “๋งค๋์ ์ฌ์๋ฒํธ๊ฐ 7698๋ฒ์ธ ์ฌ์๋ค์ ์ด๋ฆ ๋ฐ ์์ ๋ถ์ ์ฝ๋, ๋ถ์ ์ด๋ฆ์ ์ถ๋ ฅํ์์ค”โจ
SELECT E.ENAME, E.MGR, D.DEPTNO, D.DNAME FROM EMP Eโจ
JOIN DEPT D ON (E.DEPTNO = D.DEPTNO) WHERE E.MGR = 7698;
- SQL>> “๋งค๋์ ์ฌ์๋ฒํธ๊ฐ 7698๋ฒ์ธ ์ฌ์๋ค์ ์ด๋ฆ ๋ฐ ์์ ๋ถ์ ์ฝ๋, ๋ถ์ ์ด๋ฆ์ ์ถ๋ ฅํ์์ค”โจ
- ON ์กฐ๊ฑด์ ์์
- SQL>> “ํ๊ณผ ์คํ๋์ ํ
์ด๋ธ์ ํ ID๋ก ์กฐ์ธํ์ฌ ํ์ด๋ฆ, ํID, ์คํ๋์ ์ด๋ฆ์ ์ฐพ์๋ณธ๋ค. STADIUM์๋ ํID๊ฐ HOMETEAM_ID๋ผ๋ ์นผ๋ผ์ผ๋ก ํ์๋์ด ์์”โจ
SELECT TEAM_NAME, TEAM_ID, STADIUM_NAME FROM TEAMโจ
JOIN STADIUM ON TEAM.TEAM_ID = STADIUM.HOMETEAM_ID ORDER BY TEAM_ID;
- SQL>> “ํ๊ณผ ์คํ๋์ ํ
์ด๋ธ์ ํ ID๋ก ์กฐ์ธํ์ฌ ํ์ด๋ฆ, ํID, ์คํ๋์ ์ด๋ฆ์ ์ฐพ์๋ณธ๋ค. STADIUM์๋ ํID๊ฐ HOMETEAM_ID๋ผ๋ ์นผ๋ผ์ผ๋ก ํ์๋์ด ์์”โจ
- ๋ค์ค ํ
์ด๋ธ JOIN
- SQL>> “์ฌ์๊ณผ DEPT ํ
์ด๋ธ์ ์์ ๋ถ์๋ช
, DEPT_TEMP ํ
์ด๋ธ์ ๋ฐ๋ ๋ถ์๋ช
์ ๋ณด๋ฅผ ์ฐพ์๋ณธ๋ค”โจ
SELECT E.EMPNO, D.DEPTNO, D.DNAME, T.DNAME New_DNAME FROM EMPLOYEE Eโจ
JOIN DEPT D ON (E.DEPTNO = D.DEPTNO) JOIN DEPT_TEMP T ON (E.DEPTNO = T.DEPTNO);
- SQL>> “์ฌ์๊ณผ DEPT ํ
์ด๋ธ์ ์์ ๋ถ์๋ช
, DEPT_TEMP ํ
์ด๋ธ์ ๋ฐ๋ ๋ถ์๋ช
์ ๋ณด๋ฅผ ์ฐพ์๋ณธ๋ค”โจ
7. CROSS JOIN (= CARTESIAN PRODUCT / CROSS PRODUCT)
- JOIN ์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ ์๊ธธ ์ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ์ ์กฐํฉ
- JOIN ํ ๋ ์ ์ ํ JOIN ์กฐ๊ฑด ์นผ๋ผ์ด ์๋ ๊ฒฝ์ฐ ์ฌ์ฉ
- ์๊ธธ ์ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ ์กฐํฉ์ ์ถ๋ ฅ
- ๊ฒฐ๊ณผ๋ ์์ชฝ ์งํฉ์ M*N ๊ฑด์ ๋ฐ์ดํฐ ์กฐํฉ ๋ฐ์
8. OUTER JOIN
- JOIN ์กฐ๊ฑด์์ ๋์ผํ ๊ฐ์ด ์๋ ํ๋(NULL๋) ์ถ๋ ฅ
- USING ์กฐ๊ฑด์ ์ด๋ ON ์กฐ๊ฑด์ ์ ํ์๋ก ์ฌ์ฉ
- IN/ON ์ฐ์ฐ์ X
- ํ์๊ฐ ๋๋ฝ๋ ์นผ๋ผ์ด ์์ ๊ฒฝ์ฐ OUTER JOIN ์ค๋ฅ, FULL OUTER JOIN ๋ฏธ์ง์
- FULL OUTER JOIN ๋ฏธ์ง์์ผ๋ก STANDART JOIN ์ฃผ๋ก ์ฌ์ฉ
- LEFT OUTER JOIN (↔๏ธ RIGHT)
- ์ข์ธก ํ ์ด๋ธ์์ ๋จผ์ ๋ฐ์ดํฐ ์ฝ๊ณ , ์ฐ์ธก ํ ์ด๋ธ์์ JOIN ๋์ ์ฝ๊ธฐ
- ์ข์ธก ๊ธฐ์ค, OUTER ํค์๋ ์๋ต ๊ฐ๋ฅ
- RIGHT OUTER JOIN - LEFT๋ ๋ฐ๋
- FULL OUTER JOIN
- ํฉ์งํฉ ๊ฐ๋ , LEFT, RIGHT ๋ค ์ฝ์ด ์ด
- ์กฐ์ธ์ด ๋๋ ๋ชจ๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ ์ฝ์ด JOIN ํจ
9. INNER JOIN vs. OUTER JOIN vs. CROSS JOIN ๋น๊ต
- INNER: B-B, C-C
- LEFT OUTER: B-B, C-C, D-NULL, E-NULL
- RIGHT OUTER: A-NULL, B-B, C-C
- FULL: NULL-A, B-B, C-C, D-NULL, E-NULL
- CROSS: B-A, B-B, B-C, C-A, C-B, C-C, D-A, D-B, D-C, E-A, D-B, D-C
'Computer Science ๐ > SQLD' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SQLD] 2๊ณผ๋ชฉ - 3์ฅ. ๊ด๋ฆฌ ๊ตฌ๋ฌธ (5) | 2024.11.18 |
---|---|
[SQLD] 2๊ณผ๋ชฉ - 2์ฅ. SQL ํ์ฉ (1) | 2024.11.18 |
[SQLD] 1๊ณผ๋ชฉ - 2์ฅ. ๋ฐ์ดํฐ ๋ชจ๋ธ๊ณผ SQL (3) | 2024.11.18 |
[SQLD] ๊ณผ๋ชฉ1 - 1์ฅ. ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ์ดํด (8) | 2024.11.08 |