SQLD 대비 핵심 요약하기
데이터 정확성과 일관성을 유지하고 데이터 결손과 부정합이 없음을 보증
Data Query Language
SELECT 문은 (DDL, DML, DCL, TCL)에 속하지 않고 DQL이라 표현
SELECT * | 컬럼명 | 표현식
FROM 테이블명 또는 뷰명
WHERE 조회조건
GROUP BY 그룹핑컬럼명
HAVING 그룹핑 필터링 조건
ORDER BY 정렬컬럼명 [ASC|DESC];
FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY
(AS 정의에 영향!)
파싱 순서 유의
예약어 사용 불가
아래의 경우 쌍따옴표 (문자열은 홑따옴표!!!!!)
1) 공백
2) 언더스코어(_)를 제외한 특문 포함
3) 대소문자 구분
테이블처럼 조회하여 볼 수 있지만 실제 데이터베이스에 저장된 데이터는 아님
DBMS에서의 함수는
input 값이 주어지면 그에 맞는 output 값을 주는 객체
ANSI 표준으로 작성되는 INNER JOIN, OUTER JOIN, CROSS JOIN, NATURAL JOIN
FROM A INNER JOIN B
ON A.COLUMN = B.COLUMN
일 때
FROM A INNER JOIN B
USING (COLUMN)
과 동일
사용 가능한 곳: SELECT, FROM, WHERE, HAVING, ORDER BY, INSERT, DELETE, UPDATE
GROUP BY 절에 서브쿼리 사용 불가
서브쿼리문 안에 ORDER BY 사용 불가 (TOP-N 등 예외 있음)
WHERE COL1 > ALL(서브쿼리);SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE (DEPTNO, SAL) IN (
SELECT DEPTNO, MAX(SAL)
FROM EMP
GROUP BY DEPTNO
);
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP E1
WHERE SAL > (
SELECT AVG(SAL)
FROM EMP E2
WHERE E1.DEPTNO = E2.DEPTNO
GROUP BY DEPTNO
);
SELECT문 결과를 합침
두 집합의 컬럼 구성, 순서까지 일치해야 함
데이터타입 크기는 달라도 괜찮음
합집합
UNION: 중복 데이터는 한 번만
UNION ALL: 중복 데이터도 출력
중복 데이터가 없어도 UNION <-> UNION ALL은 성능 차이 존재
교집합
공통(중복) 데이터만 출력
INTERSECT
차집합
한 쪽에만 존재하는 행 출력
A-B 와 B-A는 다름
다중행 함수
반드시 한 컬럼
GROUP BY 필요
GROUP BY 절에 사용하는 함수
여러가지 GROUP BY 동시에 가능
SELECT DEPTONO, JOB, SUM(SAL)
FROM EMP
GROUP BY
GROUPING SETS(DEPTNO, JOB);
다음과 동일
GROUP BY A + GROUP BY B 합집합
SELECT DEPTNO, NULL AS JOB, SUM(SAL)
FROM EMP
GROUP BY DEPTNO
UNION ALL
SELECT NULL, JOB, SUM(SAL)
FROM EMP
GROUP BY JOB;
합계 출력을 추가하고 싶다면
GROUPING SETS(DEPTNO, JOB, ()); 처럼 () 입력
SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY
ROLLUP(DEPTNO, JOB);
다음과 동일
SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY DEPTNO, JOB
UNION ALL
SELECT DEPTNO, NULL, SUM(SAL)
FROM EMP
GROUP BY DEPTNO
UNION ALL
SELECT NULL, NULL, SUM(SAL)
FROM EMP;
SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY
CUBE(DEPTNO, JOB);
다음과 동일 (GROUPING SETS)
SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY
GROUPING SETS(DEPTNO, JOB, (DEPTNO, JOB), ());
다음과 동일 (UNION ALL)
SELECT NULL AS DEPTNO, NULL AS JOB, SUM(SAL)
FROM EMP
UNION ALL
SELECT NULL, JOB, SUM(SAL)
FROM EMP
GROUP BY JOB
UNION ALL
SELECT DEPTNO, NULL, SUM(SAL)
FROM EMP
GROUP BY DEPTNO
UNION ALL
SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY DEPTNO, JOB;