๋ฌธ์ฅ ์คํ ์์
FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY
1. ๋ฐ์ท ๋์ ํ ์ด๋ธ์ ์ฐธ์กฐ (FROM)
2. ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒ์ ์ ๊ฑฐ (WHERE)
3. ๊ทธ๋ฃนํ (GROUP BY)
4. ๊ทธ๋ฃนํ ์กฐ๊ฑด (HAVING)
5. ์ถ๋ ฅ (SELECT)
6. ์ ๋ ฌ (ORDER BY)
SQL ๋ฌธ์ฅ๋ค์ ์ข ๋ฅ
๋ฐ์ดํฐ ์กฐ์์ด(DML) : SELECT , INSERT , UPDATE , DELETE
๋ฐ์ดํฐ ์ ์์ด(DDL) : CREATE , ALTER , DROP , RENAME
๋ฐ์ดํฐ ์ ์ด์ด(DCL) : GRANT , REVOKE
ํธ๋์ญ์
์ ์ด์ด(TCL) : COMMIT , ROLLBACK
DISTINCT
์ค๋ณต๋ ๊ฒฝ์ฐ 1๊ฑด๋ง ์ถ๋ ฅ
๋ฐ์ดํฐ ๊ทธ๋ฃนํ/์ง๊ณ (GROUP BY)
๊ฐ์ ๊ฐ์ ๊ฐ์ง ํ๋ผ๋ฆฌ ํ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ญ์นจ
์ฅ๋ฅด๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃน
DISTINCT deptno,mgr == GROUP BY (deptno,mgr) ๊ฐ์ ์๋ฏธ
๋ณ์นญ ์ฌ์ฉ(ALIAS) AS
SELECT - 1. AS ์๋ต๊ฐ๋ฅ / 2. ์ปฌ๋ผ๋ช ๋์ด์ฐ๊ธฐ ( ex. " ์ง์ ๋ฒํธ " )
FROM - AS ์ฌ์ฉ๋ถ๊ฐ
๋ฌธ์์ด ํฉ์น๊ธฐ(CONCAT)
์ธ์ ๋ฌด์กฐ๊ฑด 2๊ฐ
SELECT CONCAT( ' abc ' , ' 123 ' ) ๋ฌธ์์ด๊ฒฐ๊ณผ
FROM ํ ์ด๋ธ;
SQL Server - " + "
ORACLE - " || "
์ฐ์ฐ์์ ์ฐ์ ์์
1. NOT
2. AND
3. OR
A BETWEEN 1 AND 2 --> 1 <= A <= 2
A IN (1,2,3) --> A= 1 or 2 or 3
LIKE ์ฐ์ฐ์
๋ฌธ์์ด์์ ์์ผ๋์นด๋(%)๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ ๋ฌธ์๊ฐ ํฌํจ๋ ์๋ฃ๋ฅผ ์ฝ๊ฒ ๊ฒ์ํ ์ ์๋ค.
" % " : ๋ชจ๋ ๋ฌธ์
" _ " : ํ๊ธ์
ESCAPE ์๋ณ์
_ , % ๋ฅผ ๋ฌธ์๋ก ์ทจ๊ธํ ์ ์๊ฒ ํด์ฃผ๋ ์๋ณ์
" \ " ์ ๊ฐ์ escape ์๋ณ์๋ ์๋ฌด ๋ฌธ์๋ ์๋ ์ฌ์ฉ ๊ฐ๋ฅ
์กฐํ ์๋ฒ ์ ์ฉํ๊ธฐ/์ํ๋ ๊ฐ์๋ง ์กฐํ(ROWNUM)
ROWNUM(ORACLE) - 1 ์ ํฌํจ
ORDER BY ๊ฐ ๋ง์ง๋ง์ ์คํ !!
์์ ๋ฐ์ดํฐ ์ถ๋ ฅ (TOP)
TOP(n) : ์์ n ๊ฐ์ ํ์ ๊ฐ์ ธ์จ๋ค.
NULL
์์ง ์ ์๋์ง ์์ ๊ฐ , ๋ชจ๋ฅด๋ ๊ฐ
NULL ์ 0 ๊ณผ ๊ณต๋ฐฑ์ด๋์ ๋ค๋ฅด๋ค.
์ฐ์ฐ
NULL์ ํน์ ๊ฐ๋ณด๋ค ํฌ๋ค,์ ๋ค๋ผ๊ณ ํํํ ์ ์๋ค.
NULL๊ฐ ๊ณผ์ ์ฐ์ฐ์ NULL๊ฐ์ ๋ฆฌํดํ๋ค. ( ๋น๊ต์ฐ์ฐ์ FALSE ๋ฆฌํด )
NULL + 40 = NULL
NULL ๊ฐ์ ์กฐ๊ฑด์ ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ IS NULL , IS NOT NULL ์ด๋ ํค์๋ ์ฌ์ฉ
์ ๋ ฌ์์์ ์๋ฏธ
ORACLE - ๊ฐ์ฅ ํฐ ๊ฐ
SQL Server - ๊ฐ์ฅ ์์ ๊ฐ
ISNULL/NVL ํจ์
ํํ์1์ ๊ฒฐ๊ณผ๊ฐ์ด NULL์ด๋ฉด ํํ์2์ ๊ฐ์ ์ถ๋ ฅํ๋ค.
NVL(ํํ์1, ํํ์2)
ISNULL(ํํ์1, ํํ์2)
--์์--
ISNULL(Colum,0)
NVL2 ํจ์
NVL2 ํจ์๋ NULL์ด ์๋ ๊ฒฝ์ฐ ์ง์ ๊ฐ1์ ์ถ๋ ฅํ๊ณ , NULL์ธ ๊ฒฝ์ฐ ์ง์ ๊ฐ2๋ฅผ ์ถ๋ ฅํ๋ค.
- ํจ์ : NVL2("๊ฐ", "์ง์ ๊ฐ1", "์ง์ ๊ฐ2") // NVL2("๊ฐ", "NOT NULL", "NULL")
NULLIF ํจ์
ํํ์1์ด ํํ์2์ ๊ฐ์ผ๋ฉด NULL์ , ๊ฐ์ง ์์ผ๋ฉด ํํ์1์ ๋ฆฌํดํ๋ค.
NULLIF(ํํ์1, ํํ์2)
COALESCE ํจ์
์์์ ๊ฐ์ ํํ์์์ NULL ์ด ์๋ ์ต์ด์ ํํ์์ ๋ํ๋ธ๋ค.
๋ชจ๋ ํํ์์ด NULL์ด๋ผ๋ฉด NULL ์ ๋ฆฌํดํ๋ค.
COALESCE(ํํ์1, ํํ์2, … )
์ ๋ ฌ(ORDER BY)
SELECT๋ฌธ์ ์ฌ์ฉํ ๋ ์ถ๋ ฅ๋๋ ๊ฒฐ๊ณผ๋ฌผ์ ํ ์ด๋ธ์ ์ ๋ ฅ๋๋ ์์๋๋ก ์ถ๋ ฅ๋๋ ๊ฒ์ด ๊ธฐ๋ณธ์ด๋ค.
SELECT ๋ฌธ ๋ง์ง๋ง์ ์์น , ๊ฐ์ฅ ๋ง์ง๋ง์ ์คํ / ์ฑ๋ฅ์ด ๋๋ ค์ง ์ ์๋ค
(null ์ ๋ ฌ์ ORACLE ์์๋ ๋ฌดํ๋๋ก ์ทจ๊ธ )
ASC : ์ค๋ฆ์ฐจ์(๊ธฐ๋ณธ๊ฐ) / DESC : ๋ด๋ฆผ์ฐจ์
์ถ๋ ฅ๋๋ ์ปฌ๋ผ์ ์๋ณด๋ค ํฐ ๊ฐ์ ํ์ฉํ์ง ์๋๋ค .
์ธ์๊ฐ 2๊ฐ ์ผ๋
sal DESC , ename ASC : sal ์ด ๊ฐ์ผ๋ฉด ename ์ค๋ฆ์ฐจ์
cf) ์ถ๋ ฅ๋์ง ์๋ ์ปฌ๋ผ๋ช ์ผ๋ก ์ ๋ ฌ์ด ๊ฐ๋ฅํ๋ค .
SELECT ename ORDER BY sal;
sal ์ด ์์ด๋ ์ ๋ ฌ๊ฐ๋ฅ
์ซ์ํจ์
๋ฌธ์์ด ํจ์
LOWER(c): ์ฃผ์ด์ง ์๋ฃ c์ ๋ชจ๋ ๋ฌธ์๋ฅผ ์๋ฌธ์๋ก ๋ณํํ์ฌ ๋ฐํ
UPPER(c): ์ฃผ์ด์ง ์๋ฃ c์ ๋ชจ๋ ๋ฌธ์๋ฅผ ๋๋ฌธ์๋ก ๋ณํํ์ฌ ๋ฐํ
LPAD(๊ฐ, ์ด๋ฌธ์๊ธธ์ด, ์ฑ์ธ ๋ฌธ์)
์ค๋ผํด์์ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ์ ํน์ ๋ฌธ์๋ฅผ ์ฑ์์ ๋ฌธ์์ด ๊ธธ์ด๋ฅผ ๋ง์ถ ๋๋ LPAD, RPAD ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
์ฃผ๋ก ์ซ์ ์์ '0'์ ์ฑ์์ ๋ฌธ์์ด ๊ธธ์ด๋ฅผ ๋ง์ถ ๋ ์์ฃผ ์ฌ์ฉํ๋ค. ๋ฌธ์์ด์ ์๋ฆฟ์๋ฅผ ๊ณ ์ ํ ๋๋ ์ฌ์ฉํ๋ค.
LPAD(123, 5, '0') → ๊ฒฐ๊ณผ: 00123
LPAD(123, 8, '0') → ๊ฒฐ๊ณผ: 00000123
RPAD ํจ์๋ ์ง์ ํ ๊ธธ์ด๋งํผ ์ค๋ฅธ์ชฝ๋ถํฐ ์ฑ์๋ฌธ์๋ก ์ฑ์ด๋ค.
TRIM ํจ์
๋ฌธ์์ด์ ์์ชฝ ๊ณต๋ฐฑ์ ์ ๊ฑฐํ๋ ๊ธฐ๋ณธ์ ์ธ ํจ์
LTRIM("๋ฌธ์์ด", "์ต์ ")
LTRIM ํจ์๋ ๋ฌธ์์ด์ ์ผ์ชฝ(์ข์ธก) ๊ณต๋ฐฑ ์ ๊ฑฐ, ๋ฌธ์ ์ผ์ชฝ ๋ฐ๋ณต์ ์ธ ๋ฌธ์๋ฅผ ์ ๊ฑฐ๋ฅผ ํ๋ค.
SUBSTR
SQL์์ ํจ์ substring์ ํ๋์ ํ๋ ๋ฐ์ดํฐ์ ์ผ๋ถ๋ฅผ ์ฝ๋๋ฐ ์ฌ์ฉ๋๋ค.
๋ ์ง ํจ์
๋ฐ์ดํฐ์ ํ๋ณํ์ ์ผ์ผํจ๋ค.
TO_CHAR()
๋ ์ง, ์ซ์ ๋ฑ์ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ณํํ๋ ํจ์์ด๋ค.
TO_DATE()
๋ฌธ์๋ฅผ ๋ ์ง ๋ฐ์ดํฐ ํ์ ์ผ๋ก ๋ณํํด ์ฃผ๋ ํจ์
ํ์ฌ ์๊ฐ ์กฐํ
SYSDATE() - ORACLE
GETDATE() - SQL Server
๋ ์ง ๋ฐ์ดํฐ ์ฐ์ฐ
๋ ์ง + 100 : 100์ day(๊ธฐ๋ณธ๊ฐ)
1/24/60์ 1์ผ์ 24์๊ฐ์ผ๋ก ๋๋๊ณ 60๋ถ์ผ๋ก ๋๋ด์ผ๋ฏ๋ก 1๋ถ์ ์๋ฏธ
์กฐ๊ฑด์ ๋ฐ๋ผ์ ๊ฐ์ ์ง์ (CASE)
CASE ์ปฌ๋ผ
WHEN ์กฐ๊ฑด1 THEN ๊ฐ1
WHEN ์กฐ๊ฑด2 THEN ๊ฐ2
ELSE ๊ฐ3
END
์ปฌ๋ผ์ด ์กฐ๊ฑด1 ์ผ๋๋ ๊ฐ1 , ์กฐ๊ฑด2 ์ผ๋๋ ๊ฐ2 ๋ฐํ
์กฐ๊ฑด์ ๋ง์ง ์๋ ๊ฒฝ์ฐ ๊ฐ3 ๋ฐํ
ELSE ๊ฐ ์๊ณ ์กฐ๊ฑด1,์กฐ๊ฑด2๊ฐ ๋ง์กฑํ์ง ์์๊ฒฝ์ฐ NULL ์ ๋ฐํ
์ง๊ณํจ์(SUM,COUNT)
SUM์ ์ ํํ ์ด(Column)์ ํฉ์ ๊ณ์ฐํ๋ค. NULL๊ฐ์ ๋ฌด์ํ๊ณ ๊ณ์ฐ
SUM(A+B+C) ์ SUM(A) +SUM(B) + SUM(C) ๋ ๋ค๋ฅด๋ค
COUNT๋ ํน์ ์ด(Column)์ ํ์ ๊ฐ์๋ฅผ ์ธ๋ ํจ์์ด๋ค.
COUNT(*)๋ก ์์ฑํ๋ฉด ํ ์ด๋ธ์ ์กด์ฌํ๋ ํ์ ๊ฐ์๊ฐ ๋ฐํ๋๊ณ ,
ํน์ ์ด์ ๋ํด์ COUNT๋ฅผ ์ํํ๋ฉด ํด๋น ์ด์ด NULL์ด ์๋ ํ์ ๊ฐ์๋ฅผ ๋ฐํํ๋ค.
๋ฐ์ดํฐ ๊ทธ๋ฃนํ/์ง๊ณ (GROUP BY)
๊ฐ์ ๊ฐ์ ๊ฐ์ง ํ๋ผ๋ฆฌ ํ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ญ์นจ
์ฅ๋ฅด๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃน
SELECT ์ง๊ณํจ์(์ปฌ๋ผ1), ์ง๊ณํจ์(์ปฌ๋ผ2) ..
FROM ํ
์ด๋ธ
GROUP BY ์ปฌ๋ผ
HAVING
๊ทธ๋ฃน์ ๋ํ ์กฐ๊ฑด์ , ๊ทธ๋ฃน ์ค ์กฐ๊ฑด์ ๋ง๋ ๊ทธ๋ฃน๋ง ๋จ๊น๋๋ค.
JOIN
Natural JOIN ์ ์ค๋ณต๋ ์ปฌ๋ผ์ ํ๋์ ์ปฌ๋ผ์ผ๋ก ๋ํ๋ด๊ณ ์ ์ผ ์์ ๋ฑ์ฅํ๋ค.
USING ์กฐ๊ฑด์
FROM์ ์ USING ์กฐ๊ฑด์ ์ ์ด์ฉํ๋ฉด ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง ์ปฌ๋ผ๋ค ์ค์์ ์ํ๋ ์ปฌ๋ผ์ ๋ํด์๋ง EQUI JOIN์ ํ ์ ์๋ค.
sql server์์๋ ์ง์ํ์ง ์๋๋ค.
SELECT *
FROM DEPT JOIN DEPT_TEMP
USING (DEPTNO) ;
USING ์กฐ๊ฑด์ ์์๋ ํ ์ด๋ธ ์ด๋ฆ์ด๋ ALIAS, ์ ๋์ฌ๋ฅผ ๋ถ์ผ ์ ์๋ค.
LEFT OUTER JOIN
์ผ์ชฝ ํ ์ด๋ธ ๋ชจ๋ ๋ฐ์ดํฐ + ์ค๋ณต๋ฐ์ดํฐ๋ค์ด ๊ฒ์๋จ
๊ฐ์ด ์๋ ๊ฒฝ์ฐ NULL ๊ฐ์ผ๋ก ์ฑ์ด๋ค.
A LEFT OUTER JOIN ๊ฐ์์๋ฏธ Acol = Bcol(+)
๋์ ์ปฌ๋ผ(+) : ๊ธฐ์คํ ์ด๋ธ์ด ์๋ ๋ค๋ฅธ ํ ์ด๋ธ
์๋ธ์ฟผ๋ฆฌ
EXISTS ์ฐ์ฐ์
EXISTS ์ฐ์ฐ์๋ ์๋ธ์ฟผ๋ฆฌ์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋์ง ์ฒดํฌํ๊ณ ์กด์ฌํ ๊ฒฝ์ฐ TRUE๋ฅผ ๋ฐํ
NOT EXISTS ์ฐ์ฐ์
NOT EXISTS๋ EXISTS์ ๋ฐ๋๋ก ์๋ธ์ฟผ๋ฆฌ์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๊ฐ ์กฐํ๋๋ค.
(TRUE → FALSE, FALSE → TRUE) ๋ฐํ ๊ฐ์ด ๋ฐ๋๋ก ๋ฐ๋์ด์ ์๋ธ์ฟผ๋ฆฌ์ ์กด์ฌํ์ง ์๋ ๋ฐ์ดํฐ๋ง ์กฐํ
์งํฉ์ฐ์ฐ์(UNION/INTERSECT/MINUS)
UNION ALL : ์ค๋ณต๋ฐ์ดํฐ O , ์ ๋ ฌ์์ X , ๋น ๋ฅด๋ค
ํ ์ด๋ธ ์ญ์ (DROP TABLE)
ํ
์ด๋ธ ์์ฒด ์ญ์ ๋ช
๋ น์ด
ํ
์ด๋ธ ์์ฒด๊ฐ ๋ชจ๋ ์ง์์ง๋ฉฐ , ์ธ๋ฑ์ค๋ ์ญ์ ๋จ
DROP TABLE ํ
์ด๋ธ๋ช
;
ํ ์ด๋ธ์ ๋ฐ์ดํฐ ์ ๋ถ ์ญ์ (TRUNCATE)
ํด๋น ํ
์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ์ญ์ ๋์ง๋ง ํ
์ด๋ธ ์์ฒด๊ฐ ์ง์์ง๋ ๊ฒ์ ์๋๋ค.
์ธ๋ฑ์ค๋ ํจ๊ป TRUNCATE ๋๋ค.
TRUNCATE TABLE ํ
์ด๋ธ๋ช
;
TRUNCATE ๋ช
๋ น์ด๋ UNDO๋ฅผ ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ์ง ์๊ธฐ ๋๋ฌธ์ ๋์ผ ๋ฐ์ดํฐ๋ ์ญ์ ์ DELETE ๋ณด๋ค ๋น ๋ฅด๋ค.
DROP , TRUNCATE - Auto Commit / DDL
DELETE - ์ฌ์ฉ์ Commit / Commit ์ด์ ์ Rollback ๊ฐ๋ฅ DML
TRUNCATE ๊ณผ DROP ์ ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ์ง ์๋๋ค .
VIEW
ํ ์ด๋ธ์ ์ค์ ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ฐ๋ฉด, ๋ทฐ(view)๋ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค.
๋ทฐ๋ ๋จ์ง ๋ทฐ ์ ์ (view definition)๋ง์ ๊ฐ์ง๊ณ ์๋ค.
์ง์์์ ๋ทฐ๊ฐ ์ฌ์ฉ๋๋ฉด ๋ทฐ ์ ์๋ฅผ ์ฐธ์กฐํด์ DBMS ๋ด๋ถ์ ์ผ๋ก ์ง์๋ฅผ ์ฌ์์ฑ ํ์ฌ ์ง์๋ฅผ ์ํํ๋ค.
๋ทฐ๋ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์์ง๋ง ํ ์ด๋ธ์ด ์ํํ๋ ์ญํ ์ ์ํํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ํ ์ด๋ธ(virtual table)์ด๋ผ๊ณ ๋ ํ๋ค.
๋ทฐ์ ์ฅ์
๋ ๋ฆฝ์ฑ : ํ ์ด๋ธ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ๋ทฐ๋ฅผ ์ฌ์ฉํ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ณ๊ฒฝํ์ง ์์๋ ๋๋ค.
ํธ๋ฆฌ์ฑ : ๋ณต์กํ ์ง์๋ฅผ ๋ทฐ๋ก ์์ฑํจ์ผ๋ก์จ ๊ด๋ จ ์ง์๋ฅผ ๋จ์ํ๊ฒ ์์ฑํ ์ ์๋ค.
๋ณด์์ฑ : ์ง์์ ๊ธ์ฌ์ ๋ณด์ ๊ฐ์ด ์จ๊ธฐ๊ณ ์ถ์ ์ ๋ณด๊ฐ ์กด์ฌํ๋ค๋ฉด ๋ทฐ๋ฅผ ์์ฑํ ๋ ํด๋น ์ปฌ๋ผ์ ๋นผ๊ณ ์์ฑํด์ ๊ฐ์ถ ์ ์๋ค.
ROLLUP
ROLLUPํจ์๋ ์๊ทธ๋ฃน๊ฐ์ ํฉ๊ณ๋ฅผ ๊ณ์ฐํ๋ ํจ์์ ๋๋ค.
ROLLUP์ ์ฌ์ฉํ๋ฉด GROUP BY๋ก ๋ฌถ์ ๊ฐ๊ฐ์ ์๊ทธ๋ฃน ํฉ๊ณ์ ์ ์ฒด ํฉ๊ณ๋ฅผ ๋ชจ๋ ๊ตฌํ ์ ์์ต๋๋ค.
SELECT ์ํID, ์, SUM(๋งค์ถ์ก) AS ๋งค์ถ์ก
FROM ์๋ณ๋งค์ถ
GROUP BY ROLLUP(์ํID, ์);
NULL๊ฐ์ผ๋ก ํ์๋ ๋ถ๋ถ๋ค์ด ๋ฐ๋ก ROLLUPํจ์๋ฅผ ์จ์ ๋์จ ํฉ๊ณ์ ๋๋ค.
CUBE
CUBEํจ์๋ ํญ๋ชฉ๋ค ๊ฐ์ ๋ค์ฐจ์์ ์ธ ์๊ณ๋ฅผ ๊ณ์ฐํฉ๋๋ค.
ROLLUP๊ณผ ๋ฌ๋ฆฌ GROUP BY์ ์ ๋ช ์ํ ๋ชจ๋ ์ปฌ๋ผ์ ๋ํด ์๊ทธ๋ฃน ํฉ๊ณ๋ฅผ ๊ณ์ฐํด์ค๋๋ค.
SELECT ์ํID, ์, SUM(๋งค์ถ์ก) AS ๋งค์ถ์ก
FROM ์๋ณ๋งค์ถ
GROUP BY CUBE(์ํID, ์);
ROLLUPํจ์๋ฅผ ์ฌ์ฉํ์ ๋๋ณด๋ค ๊ฒฐ๊ณผ๊ฐ ์ข ๋ ๋ณต์กํฉ๋๋ค. ์ํID๋ณ ํฉ๊ณ๋ฟ๋ง ์๋๋ผ ์๋ณ ํฉ๊ณ๊น์ง ํ ๋ฒ์ ๋ณผ ์ ์์ต๋๋ค.
GROUPING SETS
GROUPING SETS๋ ํน์ ํญ๋ชฉ์ ๋ํ ์๊ณ๋ฅผ ๊ณ์ฐํ๋ ํจ์์ ๋๋ค.
SELECT ์ํID, ์, SUM(๋งค์ถ์ก) AS ๋งค์ถ์ก
FROM ์๋ณ๋งค์ถ
GROUP BY GROUPING SETS(์ํID, ์);
์์ ROLLUP, CUBE์ ๋นํด ํจ์ฌ ๊ฒฐ๊ณผ๊ฐ ๋จ์ํฉ๋๋ค.
์๋์ฐ ํจ์
SQL์ ์๋์ฐ ํจ์๋ ํ๊ณผ ํ ๊ฐ์ ๋น๊ต, ์ฐ์ฐ, ์ ์ํ๊ธฐ ์ํ ํจ์์ด๋ค. ๋ถ์ํจ์ ๋๋ ์์ํจ์๋ผ๊ณ ํ๊ธฐ๋ ํ๋ค.
ROWS๋ ๊ฐ ํ์ ์์น๊ณ , RANGE๋ ๊ฐ์ ๋ฒ์
ROWS์ RANGE ์ฐจ์ด์
ROWS์ RANGE ์ฐจ์ด
ROWS : ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฌผ๋ฆฌ์ ์์น(ROWNUM)๋ก ๊ตฌ๋ถํ์ฌ ๋ชจ๋ ํ์ด 1๊ฐ์ ํ์ผ๋ก ์ธ์ํ๋ค.
RANGE: ORDER BY ์ ์ ๋ช ์๋ ์นผ๋ผ์ผ๋ก ๋ ผ๋ฆฌ์ ์ธ ํ ์งํฉ์ ๊ตฌ์ฑํ๋ฉฐ, ์งํฉ์ผ๋ก ๋ฌถ์ธ ๊ทธ๋ฃน์ด 1๊ฐ์ ํ์ผ๋ก ์ธ์ํ๋ค.
์์ ์์ ๋ SALES_QUARTER ์นผ๋ผ์ ๊ฐ์ผ๋ก ํ ์งํฉ์ ์ง์ ํ์๋ค. ORDER BY์ ๋ช ์๋ ์นผ๋ผ์ ๋ฐ๋ผ์ ํ ์งํฉ์ด ๋ฐ๋ ์ ์๋ค.
RANK
RANK ํจ์๋ ์ค๋ณต ๊ฐ๋ค์ ๋ํด์ ๋์ผ ์์๋ก ํ์ํ๊ณ ,
์ค๋ณต ์์ ๋ค์ ๊ฐ์ ๋ํด์๋ ์ค๋ณต ๊ฐ์๋งํผ ๋จ์ด์ง ์์๋ก ์ถ๋ ฅํ๋๋ก ํ๋ ํจ์ ์ ๋๋ค.
SELECT empNo, empName, salary,
RANK() OVER (ORDER BY salary DESC) RANK๋ฑ์
FROM employee;
DENSE_RANK
DENSE_RANK ํจ์๋ ์ค๋ณต ๊ฐ๋ค์ ๋ํด์ ๋์ผ ์์๋ก ํ์ํ๊ณ ,
์ค๋ณต ์์ ๋ค์ ๊ฐ์ ๋ํด์๋ ์ค๋ณต ๊ฐ ๊ฐ์์ ์๊ด์์ด ์์ฐจ์ ์ธ ์์ ๊ฐ์ ์ถ๋ ฅํ๋๋ก ํ๋ ํจ์ ์ ๋๋ค.
SELECT empNo, empName, salary,
DENSE_RANK() OVER (ORDER BY salary DESC) DENSE_RANK๋ฑ์
FROM employee;
๊ณ์ธตํ ์ฟผ๋ฆฌ(CONNECT BY)
๊ณ์ธตํ ๊ตฌ์กฐ๋ ์ํ ์์ง๊ด๊ณ์ ํธ๋ฆฌํํ์ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ง ํํ๋ฅผ ๋งํฉ๋๋ค.
์๋ฅผ ๋ค์๋ฉด ํน์ ํ์ฌ์ ๋ถ์, ํน์ ํ๊ต์ ํ๊ณผ๋ฑ์ด ์์ต๋๋ค.
๊ณ์ธตํ ์ฟผ๋ฆฌ๋ ํ ์ด๋ธ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ธตํ ๊ตฌ์กฐ๋ก ๋ฐํํ๋ ์ฟผ๋ฆฌ๋ฅผ ๋งํฉ๋๋ค.
์ํ์์
1. START WITH ์ ์ ์์ ์กฐ๊ฑด์ ์ฐพ์ต๋๋ค.
2. CONNECT BY ์ ์ ์ฐ๊ฒฐ์กฐ๊ฑด์ ์ฐพ์ต๋๋ค.
START WITH : ๋ฃจํธ ๋ฐ์ดํฐ๋ฅผ ์ง์ ํ๋ค. / ๋ฃจํธ ๋ ธ๋์ ๋ ๋ฒจ๊ฐ์ 0 ์ด๋ค.
ORDER SIBLINGS BY : ํ์ ๋ ธ๋ ์ฌ์ด์์ ์ ๋ ฌ์ ์ํํ๋ค.
CONNECT BY PRIOR ์์ = ๋ถ๋ชจ : ๋ถ๋ชจ -> ์์ ์๋ฐฉํฅ ์ ๊ฐ
'์๊ฒฉ์ฆ > SQLD' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SQLD] 5. SQL ํ์ฉ - 1 (0) | 2023.03.16 |
---|---|
[SQLD] 4. SQL ๊ธฐ๋ณธ - 2 (0) | 2023.03.15 |
[SQLD] 3. SQL ๊ธฐ๋ณธ - 1 (0) | 2023.03.14 |
[SQLD] 2. ๋ฐ์ดํฐ ๋ชจ๋ธ๊ณผ ์ฑ๋ฅ (0) | 2023.03.13 |
[SQLD] 1. ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ์ดํด (0) | 2023.03.06 |