집약DISTINCT deptno, mgr
-- deptno, mgr 괄호 묶어서 DISTINCT한거랑 같음
-- = GROUP BY(deptno, mgr)
+ : SQL SERVER
|| : ORACLE
(NOT 조건) AND 조건 AND (NOT 조건) OR 조건
(( 조건 AND 조건) AND 조건) OR 조건
A BETWEEN 1 AND 2
-- 1 <= A <= 2
A IN (1,2,3)
-- A=1 OR A=2 OR A=3
SELECT
FROM EMP
WHERE ID LIKE '%A\_%' escape'\'; -- _를 문자취급, 중간에 A_가 있는 문자 검색
-- \는 아무문자나 가능
SELECT empno, sal
FROM emp
WHERE rownum <= 3
ORDER BY sal DESC;
-- 정렬이 가장 마지막에 실행됨
-- 정렬 전에 rownum으로 3개를 뺴오고 그 3개행에 대해 정렬
FALSE로 인식NVL(값1, 값2)
-- 값1이 NULL이면 값2, 아니면 그대로 값1
ISNULL(값1, 값2)
-- 값1이 NULL이면 값2, 아니면 그대로 값1
NVL2(값1, 값2, 값3)
-- 값1이 NULL이면 값3, 아니면 값2
NULLIF(값1, 값2)
-- 값1과 값2가 같으면 NULL, 다르면 값1
COALESCE(값1, 값2, ...)
-- NULL아닌 첫번째 값
SELECT empno, ename
FROM EMP
ORDER BY 1, 2;
SAL DESC, ENAME ASC
-- SAL이 같으면 ENAME 오름차순
SELECT ENAME
FROM EMP
ORDER BY SAL
-- SAL이 SELECT에 없어도 정렬가능
ROUND(138.94, 1)
-- 138.9
CEIL(27.5)
-- 28
UPPER( ) : 대문자로
LOWER( ) : 소문자로
LPAD("값", "문자길이", "채울문자") : 왼쪽에 공백 OR 문자를 채움
RPAD("값", "문자길이", "채울문자") : 오른쪽에 공백 OR 문자를 채움
LTRIM("값", "제거할 문자") : 왼쪽부터 공백 OR 문자를 제거
RTRIM("값", "제거할 문자") : 오른쪽부터 공백 OR 문자를 제거
SUBSTR("값", "시작위치", "길이") : 시작위치부터 길이만큼 자른다.(인덱스는 0이아닌 1부터 시작)
INSTR("값1", "값2") : 값1에서 값2의 시작위치를 반환, 못찾으면 0반환
CASE WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
ELSE 걸과3
END;
-- ELSE가 없고 조건1, 조건2를 만족못하면 NULL이 출력
| A | B | C |
|---|---|---|
| NULL | NULL | 1 |
| 3 | 2 | 2 |
| NULL | 2 | 3 |
SUM(A) = 3
SUM(B) = 4
SUM(A) + SUM(B) + SUM(C) = 3 + 4 + 6 = 13
SUM(A+B+C) = 7 -- 새로운 컬럼 만들기 NULL, 7, NULL
COUNT(A) = 1 -- NULL을 제외
COUNT(*) = 3 -- NULL을 포함
A LEFT OUTER JOIN B
A COL1 = B COL1(+)
-- 같은 의미이다
FROM A,B,C => A,B를 먼저 JOIN해서 테이블을 만들고 C와 JOIN해서 최종테이블을 만든다.
SELECT : 스칼라 서브쿼리
FROM : 인라인 뷰(메인쿼리에서 서브쿼리 컬럼 사용가능)
WHERE : 중첩 서브쿼리(거의 모든 서브쿼리)
GROUP BY : X
HAVING : 중첩 서브쿼리(거의 모든 서브쿼리)
ORDER BY : 스칼라 서브쿼리
SELECT
FROM A
WHERE (SELECT
FROM B
WHERE A.COL1 = B.COL1);
-- A에 해당하는 값을 B테이블 전체스캔 여러번 수행
독편보
ROLLUP(A,B) != ROLLUP(B,A)
CUBE(A,B) == CUBE(B,A)
AUTO COMMIT OFF AND BEGIN TRANSACTION;
-- SQL SERVER에서 DDL의 COMMIT기능 없애기