μ€λΌν΄(Oracle) - (DQL) : ν¨μ(λ€μ€ν ν¨μ)
- μ€λΌν΄μμλ (1)λ΄μ₯ν¨μμ μ¬μ©μκ° νμμ μν΄μ μ§μ μ μν (2)μ¬μ©μ μ μ ν¨μλ‘ λλμ΄μ§.
- λ¨μΌν ν¨μμ λ€μ€ν ν¨μ(μ§κ³ ν¨μ)λ‘ λλμ΄μ§.
SELECT ENAME, SUM(SAL)
FROM EMP;
β οΈ ν΄λΉ 컀맨λλ μ€λ₯κ° λλ€. μ?
π SUM(SAL)
μ κ²°κ³Όκ° νλλ§ λμ€λλ°(SAL νλͺ©μ λν ν©κ³μ΄λ―λ‘) ENAME
μ κ° νμ΄ λ€ λμ€κΈ° λλ¬Έ
μ΄κ²μ ν΄κ²°νκΈ° μν΄μ GROUP BY
λ₯Ό μ΄μ©ν΄ κ·Έλ£Ή λ¨μλ‘ λ¬Άμ΄μΌ ν¨!
SELECT DEPTNO, SUM(SAL)
FROM EMP
GROUP BY DEPTNO; -- κΈμ¬μ λν ν©κ³λ₯Ό λΆμλ³λ‘ λ¬Άμ΄μ€.
πΈ μμ© μμ . μ§μ λ³λ‘ κΈμ¬ ν©κ³, κΈμ¬ νκ· , ν΄λΉ μ§μ κ΅°μ μ§μ μ«μλ₯Ό μΆλ ₯
SELECT JOB, SUM(SAL), TRUNC(AVG(SAL)), COUNT(*)
FROM EMP
GROUP BY JOB
ORDER BY AVG(SAL) DESC;
SUM ν¨μ (ν©κ³)
DISTINCT
: μ€λ³΅ μ κ±°ALL
: μ¬μ©νμ§ μμλ κΈ°λ³Έμ μΌλ‘ ALL νΉμ±μ κ°μ§λλ€.
SELECT SUM(DISTINCT SAL) AS μ€λ³΅μ κ±°, -- SAL νλͺ© μ€ μ€λ³΅μΈκ² μμΌλ©΄ μ κ±°λ ν λν΄μ§.
SUM(ALL SAL) AS μ λΆ,
SUM(SAL) AS κΈ°λ³Έ
FROM EMP;
κΈ°ν ꡬ문
SELECT COUNT(*) FROM EMP; -- μ 체 λͺ λͺ
μΈμ§( == νμ μ)
SELECT COUNT(COMM) FROM EMP; -- COMMμμ NULLμ΄ μλ μ¬μμ μ
πΈ λΆμ λ²νΈκ° 20μΈ μ¬μ μ€ μ μ¬μΌμ΄ κ°μ₯ μ΅κ·ΌμΈ μ¬μ μΆλ ₯
SELECT MAX(HIREDATE)
FROM EMP
WHERE DEPTNO = 20;
πΈ μ μμ± μμ
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
GROUP BY
- νλμ κ²°κ³Όλ₯Ό νΉμ μ΄μ λ¬Άμ΄μ μΆλ ₯νλ κ²μ κ·Έλ£Ήν νλ€κ³ ν©λλ€.
- μ΄ λ, μΆλ ₯ν΄μΌ ν λμ μ΄ μ§μ μ GROUP BYλ‘ μν ν©λλ€.
SELECT TRUNC(AVG(SAL)) νκ· κΈμ¬, DEPTNO
FROM EMP
GROUP BY DEPTNO;
πΈ λΆμ λ²νΈ λ° μ§μ± λ³ νκ· κΈμ¬λ‘ μ λ ¬νκΈ°
SELECT DEPTNO, JOB, AVG(SAL)
FROM EMP
GROUP BY DEPTNO, JOB
ORDER BY DEPTNO, JOB;
πΈ GROUP BY μ μ μ¬μ©νμ¬ λΆμ λ²νΈλ³ νκ· μΆκ° μλΉ μΆλ ₯
SELECT DEPTNO, NVL(AVG(COMM),0) AS λΆμλ³νκ· μλΉ
FROM EMP
GROUP BY DEPTNO;
πΈ λΆμ μ½λ, κΈμ¬ ν©κ³, λΆμ νκ· , λΆμ μ½λ μ μ λ ¬
SELECT DEPTNO, SUM(SAL),
TRUNC(AVG(SAL)) AS νκ· κΈμ¬,
COUNT(*) μΈμμ
FROM EMP
GROUP BY DEPTNO
ORDER BY DEPTNO;
HAVING μ
SELECT
λ¬ΈμGROUP BY
κ° μ‘΄μ¬ν λλ§ μ¬μ© κ°λ₯- κ·Έλ£Ήνλ κ°μ λ²μλ₯Ό μ ννλ μ©λλ‘ μ¬μ©
WHERE
μ μ λͺ» μ°λ μ΄μ λGROUP BY
μWHERE
κ° μνλλ μμ μ΄ λ€λ₯΄κΈ° λλ¬Έ!
SELECT DEPTNO, JOB, AVG(SAL)
FROM EMP
GROUP BY DEPTNO, JOB
HAVING AVG(SAL) >= 2000
ORDER BY DEPTNO, JOB;
πΈ WHERE μ κ³Ό HAVING μ μ λͺ¨λ μ¬μ©ν κ²½μ°
SELECT DEPTNO, JOB, AVG(SAL)
FROM EMP
WHERE SAL <= 2500
GROUP BY DEPTNO, JOB
HAVING AVG(SAL) >= 2000
ORDER BY DEPTNO, JOB;
πΈμ°μ΅λ¬Έμ πΆ
1. HAVINGμ μ μ¬μ©νμ¬ EMP ν μ΄λΈμ λΆμλ³ μ§μ± μ νκ· κΈμ¬κ° 500 μ΄μμΈ μ¬μλ€μ λΆμ λ²νΈ, μ§μ± , λΆμλ³ μ§μ± μ νκ· κΈμ¬κ° μΆλ ₯
SELECT DEPTNO, JOB, AVG(SAL)
FROM EMP
GROUP BY DEPTNO, JOB
HAVING AVG(SAL) >= 500
ORDER BY DEPTNO, JOB;
2. EMP ν μ΄λΈμ μ΄μ©νμ¬ λΆμλ²νΈ, νκ· κΈμ¬, μ΅κ³ κΈμ¬, μ΅μ κΈμ¬, μ¬μμλ₯Ό μΆλ ₯, λ¨, νκ· κΈμ¬λ₯Ό μΆλ ₯ ν λλ μμμ μ μΈνκ³ λΆμ λ²νΈλ³λ‘ μΆλ ₯
SELECT DEPTNO,
TRUNC(AVG(SAL)) AS "νκ· κΈμ¬",
MAX(SAL) AS "μ΅κ³ κΈμ¬",
MIN(SAL) AS "μ΅μ κΈμ¬",
COUNT(*) AS "μ¬μ μ"
FROM EMP
GROUP BY DEPTNO
ORDER BY DEPTNO DESC;
3. κ°μ μ§μ± μ μ’ μ¬νλ μ¬μμ΄ 3λͺ μ΄μμΈ μ§μ± κ³Ό μΈμμ μΆλ ₯
SELECT JOB, COUNT(JOB) AS μ¬μμ
FROM EMP
GROUP BY JOB
HAVING COUNT(JOB) >= 3;
4. μ¬μλ€μ μ μ¬ μ°λλ₯Ό κΈ°μ€μΌλ‘ λΆμλ³λ‘ λͺ λͺ μ΄ μ μ¬νλμ§ μΆλ ₯
SELECT EXTRACT(YEAR FROM HIREDATE) AS μ
μ¬μΌ,
DEPTNO,
COUNT(*) μ¬μμ
FROM EMP
GROUP BY EXTRACT(YEAR FROM HIREDATE), DEPTNO
ORDER BY μ¬μμ;
5. μΆκ° μλΉμ λ°λ μ¬μ μμ λ°μ§ μλ μ¬μμλ₯Ό μΆλ ₯ (O, Xλ‘ νκΈ° νμ)
SELECT NVL2(COMM,'O','X') AS μΆκ°μλΉ,
COUNT(NVL2(COMM,'O','X')) AS μ¬μμ
FROM EMP
GROUP BY NVL2(COMM,'O','X');
6. κ° λΆμμ μ μ¬ μ°λλ³ μ¬μ μ, μ΅κ³ κΈμ¬, κΈμ¬ ν©, νκ· κΈμ¬λ₯Ό μΆλ ₯
SELECT DEPTNO,
EXTRACT(YEAR FROM HIREDATE) AS μ
μ¬λ
λ,
COUNT(*) μ¬μμ,
MAX(SAL) μ΅κ³ κΈμ¬,
TRUNC(AVG(SAL)) νκ· κΈμ¬,
SUM(SAL) ν©κ³
FROM EMP
GROUP BY EXTRACT(YEAR FROM HIREDATE),DEPTNO
ORDER BY DEPTNO;