SQLD 정리 - 1

DEV_HOYA·2023년 11월 13일

SQLD

목록 보기
6/7
post-thumbnail

📌 SQL 명령문 개괄

✅ 연산순서

  1. FROM
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. SELECT
  6. ORDER BY

✅ 종류

  • DDL : ALTER, CREATE, DROP, MODIFY, TRUNCATE, RENAME
  • DML : SELECT, INSERT, DELETE, UPDATE
  • DCL : GRANT, REVOKE
  • TCL : COMMIT, ROLLBACK

📌 SELECT

✅ DISTINCT(집약)

  • 중복된 값을 하나의 값으로 집약
DISTINCT deptno, mgr
-- deptno, mgr 괄호 묶어서 DISTINCT한거랑 같음
-- = GROUP BY(deptno, mgr)

✅ ALIAS

  • SELECT절
    • AS 생략가능
    • 컬럼명에 띄어쓰기 "mgr no"(따옴표로 묶어줌)
  • FROM절
    • AS 사용불가

✅ CONCAT( , )

  • 인수가 반드시 2개
+ : SQL SERVER
|| : ORACLE

📌 논리연산자

  • NOT : NOT A
  • AND : A AND B
  • OR : A OR B

✅ 연산순위

  1. NOT
  2. AND
  3. OR
(NOT 조건) AND 조건  AND (NOT 조건) OR 조건
(( 조건    AND 조건) AND    조건) OR 조건

📌 SQL 연산자

A BETWEEN 1 AND 2
-- 1 <= A <= 2
A IN (1,2,3)
-- A=1 OR A=2 OR A=3

✅ LIKE

  • _ : 미지의 한 글자
  • % : 0이상 글자

✅ escape

  • 와일드카드( _ , %)를 문자로 취급
SELECT
FROM EMP
WHERE ID LIKE '%A\_%' escape'\';  -- _를 문자취급, 중간에 A_가 있는 문자 검색
-- \는 아무문자나 가능

✅ ROWNUM (ORACLE)

  • ROWNUM = 1 포함
  • WHERE절에서 사용
SELECT empno, sal
FROM emp
WHERE rownum <= 3
ORDER BY sal DESC;
-- 정렬이 가장 마지막에 실행됨
-- 정렬 전에 rownum으로 3개를 뺴오고 그 3개행에 대해 정렬

✅ TOP (SQL SERVER)

  • SELECT절에서 사용
  • TOP(N) 컬럼명 : 상위 N개 행

📌 NULL

✅ NULL의 정의

  • 부재, 모르는 값

✅ 산술연산

  • NULL + 2 = NULL
  • NULL - 4 = NULL
  • NULL * NULL = NULL

✅ 비교연산

  • NULL = NULL
  • NULL = 2
    => 알수없음(UNKNOWN)
    => WHERE (UNKNOWN) => FALSE로 인식

✅ 정렬상 의미

  • ORACLE : 제일 큰 값, 무한대
  • SQL SERVER : 제일 작은 값, -무한대

✅ 함수

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아닌 첫번째 값

📌 정렬

✅ 정렬의 특성

  • 가장 마지막 실행
  • 성능이 느려질 가능성(SORT)
  • NULL값과의 관계(오라클에서는 제일 큰 값 취급)
  • SELECT에 없는 컬럼으로 정렬가능

✅ 컬럼번호 정렬

  • 출력되는 컬럼의 수 보다 큰값 불허
SELECT empno, ename
FROM EMP
ORDER BY 1, 2;

✅ 인수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
  • ROUND() : 반올림
  • CEIL() / CEILING() : 올림

📌 문자열함수

UPPER( ) : 대문자로
LOWER( ) : 소문자로
LPAD("값", "문자길이", "채울문자") : 왼쪽에 공백 OR 문자를 채움
RPAD("값", "문자길이", "채울문자") : 오른쪽에 공백 OR 문자를 채움
LTRIM("값", "제거할 문자") : 왼쪽부터 공백 OR 문자를 제거
RTRIM("값", "제거할 문자") : 오른쪽부터 공백 OR 문자를 제거
SUBSTR("값", "시작위치", "길이") : 시작위치부터 길이만큼 자른다.(인덱스는 0이아닌 1부터 시작)
INSTR("값1", "값2") : 값1에서 값2의 시작위치를 반환, 못찾으면 0반환

📌 날짜함수

  • TO_CHAR(날짜 OR 숫자, 문자열포맷)
  • TO_DATE(문자열, 날짜포맷)
  • SYSDATE : 현재시간(ORACLE)
  • GETDATE() : 현재시간(SQL SERVER)
  • 날짜데이터 + 100 : 100일 이후(DAY)

📌 DECODE / CASE

CASE WHEN 조건1 THEN 결과1
	 WHEN 조건2 THEN 결과2
     ELSE 걸과3
END;
-- ELSE가 없고 조건1, 조건2를 만족못하면 NULL이 출력

📌 집계함수

ABC
NULLNULL1
322
NULL23
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을 포함

📌 GROUP BY

  • 집약기능
  • 그룹수준
  • WHERE절 이후에 실행

📌 JOIN

  • NATURAL JOIN : 중복된 컬럼 하나만 출력, 중복컬럼 제일 앞에등장, ALIAS 사용가능
  • JOIN USING : 중복된 컬럼 하나만 출력, 중복컬럼 제일 앞에등장, ALIAS 사용불가
A LEFT OUTER JOIN B
A COL1 = B COL1(+)
-- 같은 의미이다

✅ JOIN 순서

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테이블 전체스캔 여러번 수행

✅ 다중행 연산자

  • IN
  • ANY
  • ALL
  • EXISTS : '1', 'X', 'A'(존재) => TRUE

📌 집합연산자

  • UNION ALL : 중복데이터 O, 정렬작업 X, 빠르다
  • UNION : 정렬작업 O, 느리다
  • INTERSECT : 정렬작업 O, 느리다
  • MINUS(EXCEPT) : 정렬작업 O, 느리다

📌 DDL

  1. TRUNCATE : 구조남음, DDL(커밋, 롤백 불가)
  2. DROP : 구조삭제
  3. DELETE : DML(커밋, 롤백 가능)

📌 DML

  1. INSERT
  2. UPDATE
  3. DELETE
  4. MERGE

📌 제약조건

  • PK : UNIQUE + NOT NULL, 1개만 존재
  • UNIQUE
  • NOT NULL

📌 DCL

  • GRANT
  • REVOKE

✅ ROLE의 특징

  • 객체

📌 VIEW

독편보

  • 독립성
  • 편리성
  • 보안성

📌 그룹함수

  • ROLLUP
  • CUBE
  • GROUPING SETS
  • GROUPING
ROLLUP(A,B) != ROLLUP(B,A)
CUBE(A,B) == CUBE(B,A)

📌 TCL

  • COMMIT
  • ROLLBACK

✅ AUTO COMMIT

AUTO COMMIT OFF AND BEGIN TRANSACTION;
-- SQL SERVER에서 DDL의 COMMIT기능 없애기

0개의 댓글