행집합 연산을 수행하여 그룹별로 하나의 결과를 산출
SELECT ROUND(AVG(sal)) FROM emp;
SELECT AVG(comm) FROM emp;
SELECT AVG(NVL(comm,0)) FROM emp;
NULL을 제한 값을 가진 모든 레코드의 수를 반환.
count(*) 형식을 사용하면 NULL도 계산에 포함
SELECT COUNT(empno) FROM emp;
SELECT COUNT(*) FROM emp;
SELECT COUNT(comm) FROM emp;
SELECT * FROM emp;
레코드 내에 있는 여려 값 중 가장 큰 값을 반환
SELECT MAX(sal) FROM emp;
레코드 내에 있는 여러 값 중 가장 작은 값을 반환
SELECT MIN(sal) FROM emp;
SELECT MIN(ename) FROM emp;
레코드들이 포함하고 있는 모든 값을 다하여 반환
SELECT SUM(comm) FROM emp;
집계함수 적용 시 개별 컬럼을 지정할 수 없기 떄문에
개별 컬럼을 지정할 경우에는 반드시 GROUP BY 절에 지정한 컬럼만 가능
부서별로 근무하는 사원수
SELECT deptno, COUNT(*) FROM emp GROUP BY deptno;
부서별로 최고 급여
SELECT deptno, MAX(sal) FROM emp GROUP BY deptno;
10번 부서를 제외한 다른 부서의 급여 합계
SELECT deptno, SUM(sal) FROM emp
WHERE deptno!=10 GROUP BY deptno ORDER BY deptno DESC;
부서별 평균급여를 구하고 그 평균급여 중에서 최고 평균급여를 구하기
SELECT MAX(AVG(sal)) FROM emp GROUP BY deptno;
분기별로 입사한 사원의 수
SELECT TO_CHAR(hiredate,'Q') AS quarter,
COUNT(empno) AS count_member
FROM emp GROUP BY TO_CHAR(hiredate,'Q')
ORDER BY quarter ASC;
순위를 표현할 때 사용하는 함수
RANK(조건값) WITHIN GROUP (ORDER BY 조건값 컬럼명 [ASC | DESC] )
특정 데이터의 순위를 확인할 수 있음
SELECT RANK('SMITH') WITHIN GROUP (ORDER BY ename) "RANK"
FROM emp;
SELECT ename FROM emp ORDER BY ename;
emp테이블에서 empno,ename,sal, 급여순위 출력
SELECT empno, ename, sal,
RANK() OVER (ORDER BY sal) AS RANK_ASC,
RANK() OVER (ORDER BY sal DESC) RANK_DESC
FROM emp;
RANK() OVER (PARTITION BY ~ ORDER BY)
emp테이블에서 10번 부서에 속한 직원들의 사번과 이름,급여,해당 부서내의
급여 순위를 출력
SELECT empno, ename, sal, RANK() OVER (ORDER BY sal DESC)"RANK"
FROM emp WHERE deptno=10;
emp테이블을 조회하여 사번, 이름, 급여, 부서번호, 부서별 급여 순위를 출력
SELECT empno,ename,sal,deptno,
RANK() OVER (PARTITION BY deptno ORDER BY sal DESC) "RANK"
FROM emp;
검색하고자 했던 데이터뿐만 아니라 조인에 사용된 테이블의 모든 데이터가 반환되는 현상
SELECT * FROM emp,dept;
Oracle 전용
조건절이 Equality Condition(=)에 의하여
조인이 이루어짐
SELECT emp.ename, emp.deptno, dept.dname
FROM emp, dept
WHERE emp.deptno = dept.deptno;
테이블에 알리아스 부여하기
SELECT e.ename, e.deptno, d.dname
FROM emp e, dept d
WHERE e.deptno=d.deptno;
컬럼을 호출 할 때 테이블명 또는 테이블 알리아스 생략
(한 쪽 테이블에만 컬럼이 존재할 경우 테이블명 또는 테이블 알리아스 생략
가능)
SELECT ename, e.deptno, dname
FROM emp e, dept d
WHERE e.deptno=d.deptno;
테이블의 어떤 column도 join할 테이블의 column에 일치하지 않을 때
사용하고 조건은 동등(=)이외의 연산자를 갖음
between and,not between and,is null,is not null, in, not in
사원이름,급여,급여등급 구하기(emp,salgrade 테이블 이용)
SELECT e.ename,e.sal,s.grade
FROM emp e, salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal;
같은 테이블이 서로 조인됨
사원이름과 해당 사원의 관리자 이름 구하기(관리자가 없는 사원 제외)
SELECT e.ename 사원이름, m.ename 관리자이름
FROM emp e, emp m
WHERE e.mgr = m.empno;
누락된 행의 반대 테이블의 조인 조건에 (+)기호 표시
SELECT DISTINCT e.deptno, d.deptno
FROM emp e, dept d
WHERE e.deptno(+) = d.deptno;
사원이름과 해당 사원의 관리자 이름 구하기 (관리자가 없는 사원도 표시)
SELECT e.ename 사원이름, m.ename 관리자이름
FROM emp e, emp m
WHERE e.mgr = m.empno(+);