[SQLD/개정] 최종 정리 노트 - 김강민SQLD (1/2)
해당 내용은 김강민 SQLD ‘SQLD 최종 정리강의 1편’과 관련된 내용입니다.
관련 영상 링크 : https://www.youtube.com/watch?v=PC3ypt_VGWI&t
당부 말씀드립니다. 제 게시글을 활용할 시, 본인 블로그에 출처 명시를 꼭 부탁드립니다.
1. SQL 명령문 개괄
★ SQL 연산 순서
SELECT – 5
FROM – 1
WHERE – 2
GROUP BY – 3
HAVING – 4
ORDER BY – 6
DML / DDL / DCL / TCL
DML – SELECT, DELETE, UPDATE, INSERT
DDL – CREATE, DROP, ALTER, MODIFY, RENAME, TRUNCATE
DCL – REVOKE, GRANT
TCL – COMMIT, ROLLBACK, SAVEPOINT
2. SELECT절
alias
- SELECT 절에 쓰는 경우
- as 생략 가능
- 컬럼명에 띄어쓰기 할땐 “직원 번호”
- FROM 절 : alias 사용 불가
CONCAT 연산자
- CONCAT(“a”, “b”) 인수는 반드시 2개만 가능
- ORACLE 연결 연산자 : 컬럼명1 || 컬럼명2
- SQL Server 연결연산자 : 컬럼명1 + 컬럼명2
3. SQL 연산자
- A IN (1,2,3) -> A = 1 or A = 2 or A = 3
-
LIKE에 쓰이는 와일드카드
- _ : 미지의 한 글자
- % : 0 이상 글자
- ESCAPE : 와일드 카드가 아닌 문자 그대로 인식하게 함. 문자는 아무거나 상관없음
SELECT * FROM EMP WHERE ENAME LIKE '_A__'; SELECT * FROM EMP WHERE ENAME LIKE '%A%'; SELECT * FROM EMP WHERE ENAME LIKE 'A@_A' ESCAPE '@'; -- 'A_A'라는 문자열 찾기, _를 문자열 취급
-
ROWNUM (ORACLE) : 가상으로 번호를 매겨서 같이 출력, alias 가능
SELECT EMPNO, SAL FROM EMP WHERE ROWNUM <=3 -- 정렬 전에 ROWNUM이 실행, ORDER BY SAL -- 추려진 3개 중에서만 ORDER BY 정렬
- TOP(n) (SQL Server) : 위에서부터 N번째 레코드까지 출력
4. NULL
1) NULL의 산출연산 = NULL
- NULL + 2, NULL -4, NULL X NULL = NULL
2) NULL의 비교연산 = 알수 없음 (UNKNOWN)
- WHERE에 (NULL)이 들어가면 FALSE 취급
3) NULL을 오름차순 정렬하면
- ORACLE : 맨 처음에 나옴 (+ 무한대)
- SQL Server : 맨 마지막에 나옴 (- 무한대)
4) NVL, NVL2, ISNULL, NULLIF, COALESCE
- NVL(K,0) : K가 NULL이면 0으로 바꿈
- ISNULL(K,0) : K가 NULL이면 0으로 바꿈
- NVL2(K,1,-1) : K가 NULL이 아니면 1, NULL이면 -1
- NULLIF(K,J) : K와 J가 같으면 NULL, 같지 않으면 K
- COALESCE(값1, 값2…) : ROW 기준 NULL 아닌 첫 번째 값
5. 정렬의 특성
- 가장 마지막에 실행
- 성능 느려질 수 있음
- NULL 정렬 시 ORACLE은 맨 처음, SQL Server는 맨 마지막
- SELECT에 안 들어 있어도 사용 가능
6. 숫자 함수
- CEIL/CEILING : 무조건 소수자리 올림
(ORACLE : CEIL / SQL Server : CEILING) -
FLOOR : 무조건 바닥으로 내림
SELECT CEILING($123.45), CEILING($-123.45), CEILING($0.0); -- 124.00, -123.00, 0.00 SELECT FLOOR(3.6), FLOOR(5.1), FLOOR(-1.6); -- 3, 5, -2
7. 문자열 함수
- INSTR : 특정 글자 위치 찾기
- SUBSTR : 특정 위치 글자 출력
- LPAD/RPAD : 문자열 왼/오른쪽을 특정 문자로 채워서 자리수 만큼 만듬
- LTRIM/RTRIM : 문자열 맨 왼/오른쪽 기준 특정 문자를 제거
SELECT INSTR('Liverpool', 'o', 1, 1) FROM DUAL; -- INSTR(문자열, 찾는글자, 시작위치, 몇번째) -- 7 SELECT SUBSTR('Liverpool', 6, 4) -- SUBSTR(문자열, 시작위치, 출력길이) -- pool SELECT LPAD('Liverpool', 5, '#') FROM DUAL; -- LPAD(문자열, 자리수, 채울문자) -- #####Liverpool SELECT LTRIM('Liverpool', 'L') FROM DUAL; -- LIRIM(문자열, 제거할문자) -- liverpool SELECT RTRIM('Liverpool', 'ol') FROM DUAL; -- RIRIM(문자열, 제거할문자) -- liverp <- o가 있는 만큼 제거됨
8. 날짜 함수
- TO_CHAR, TO_DATE
- SYSDATE (oracle)
- 날짜 데이터 + 숫자 : 숫자를 day로 인식
9. CASE
- 조건에 ELSE 없을 떄는 NULL 출력
10. 집계함수 : NULL과의 관계
A | B | C |
---|---|---|
NULL | NULL | 1 |
3 | 2 | 2 |
NULL | 2 | 3 |
SUM(A) -- 3
SUM(B) -- 4
COUNT(A) -- 1
COUNT(*) -- 3
SUM(A) + SUM(B) + SUM(C) -- 3 + 4 + 6 = 13
SUM(A+B+C) -- NULL + NULL + 7 = 7
11. JOIN
- NATUAL JOIN, USING : 중복된 컬럼 하나, Alias 사용 안됨
- A LEFT OUTER JOIN B : 왼쪽 전부 다 SELECT + B와 공통적인 부분
- FROM A, B, C : A, B JOIN 후 테이블을 가지고 C와 JOIN
12. 서브쿼리
- SELECT : SCALAR (단일값)
- FROM : Inline view (메인 쿼리의 컬럼 사용 가능)
- WHERE : 거의 모든 서브쿼리 사용 가능 (중첩 서브쿼리)
- GROUP BY : X
- HAVING : 거의 모든 서브쿼리 사용 가능 (중첩 서브쿼리)
- ORDER BY : SCALSR (단일값)
13. 집합연산자
- UNION, INTERSECT, MINUS (except)
- UNION ALL : 중복 데이터 O, 정렬 작업 X, 빠르다
14. DELETE, TRUNCATE, DROP
DELETE FROM EMP;
TRUNCATE TABLE EMP;
DROP TABLE EMP;
DELETE | TRUNCATE | DROP | |
---|---|---|---|
데이터 | 삭제 | 삭제 | 삭제 |
저장공간 | 유지 | 삭제 | 삭제 |
저장구조 | 유지 | 유지 | 삭제 |
ROLLBACK | 가능 | 불가능 | 가능 |
15. DML
- SELECT, INSERT, UPDATE, DELETE, MERGE(신유형)
16. 제약조건
- PK : UNIQUE + NOT NULL
17. VIEW
- 독편보
18. 그룹 함수
AGGREGATE FUNCTION
- COUNT, MIN, MAX, AVG, SUM 등 집계 함수
★ GROUP BY FUNCTION
https://godzz.tistory.com/30
-
하나의 SQL로 테이블을 한 번만 읽어서 빠르게 계산해주는 함수
- ROLLUP : 소그룹간의 소계 계산
- ROLLUP(A,B) != ROLLUP(B,A) – 인수의 순서에 영향을 받음
- CUBE : 결합 가능한 모든 값에 대한 집계 생성
- CUBE(A,B) = CUBE(B,A)
- GROUPING SETS : 원하는 부분의 소계만 추출