3 minute read

해당 내용은 김강민 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

  1. SELECT 절에 쓰는 경우
  • as 생략 가능
  • 컬럼명에 띄어쓰기 할땐 “직원 번호”
  1. 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

  1. NATUAL JOIN, USING : 중복된 컬럼 하나, Alias 사용 안됨
  2. A LEFT OUTER JOIN B : 왼쪽 전부 다 SELECT + B와 공통적인 부분
  3. 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 : 원하는 부분의 소계만 추출