프로그래밍/SQLD

10. SQLD 마지막 총 정리 - 최후의 발악

량아이 2022. 9. 3. 18:51

큰일이다 아직 1회독 밖에 하지 못했지만 생각보다 조졌다는 생각이 안들어서 미루고 미루다 결국 여기까지 오게 되었다.

진짜 SQLD를 발라버렸는지 내가 발라졌는지는 9월의 31일에 나올 뿐 일단 마지막 발악으로 총 정리를 하기로 했다.

중간에 정신차리고 한번 sql 총 정리 영상을 찾아보게 됐는데, 단 2개의 영상으로 많은 사람을 구원했던 김강민SQLP영상을 쭉 보니 아 생각보다 1회독으로 머리에 들어온게 야간 있구나를 알게되었고(그냥 아 이거 봤었는데 정도) 또 처음보는 것들도 좀 있어서 당황했다.

이상 잡담은 거두절미하고 마지막 발악 가자!


명령문 개괄

순서 : FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY

종류 : DML - Select, Insert, Delete, Update

          DDL - Alter, Create, Modity, Drop

          DCL - Grant, Revoke

          TCL - Rollback, Commit

 

SELECT

- (SELECT)DISTINT(집약) -> 10, 20, 20, 30, 30, ...   -> 10, 20, 30

         ㄴDISTINT(deptno, mar) = GROUP BY(deptno, mgr)

 

- ALIAS - SELECT : 'as' 생략가능, 컬럼명에 띄어쓰기가 있는 경우 " "사용        예)"직원 번호"

               - FROM : 'as' 사용 불가능

 

-CONCAT - 문자열 합치기 (문자열을 포함한 이어붙이기면 아래와 같은 기호를 사용)

                   - + : SQL Server

                   - \\ : Oracle

 

논리연산자

                  - AND : A and B 둘 다 포함

                  - OR : A or B 둘 중 하나

                  - NOT : not A, B 둘 다 아닌

                  *연산 순위 : NOT - AND - OR

 

SQL 연산자

                   - BETWEEN AND

                   - IN   -> A in (1, 2, 3) -> A = 1 or A = 2 or a = 3 

                    중 아무거나

                   - LIKE - 문자열 검색

                              - _ 미지의 한 글자

                              - % 한 글자 이상

                              - ESCAPE 와일드 카드 ( _ , % )를 문자로 취급

                    예시) ename like 'A @_ A'          = @는 아무 문자든 상관 없다
                                         escape '@'               _ 와 % 앞에 특수문자를 지정 함으로서 _ 와 %를 포함한 문자를 검색할 수 있다

                   - (WHERE) ROWNUM (ORACLE)

                                       TOP (SQL Server)

where rownum ≤ 3  *위에서부터 3개만큼 가져옴
order by sal
*이때 rownum이 먼저 3개를 뽑고 나온 데이터에 order by가 실행되 그 3개로 정렬이 되게 된다. 이때, 인라인뷰를 사용해주면 된다.
TOP(n)
*상위 n개 출력

 

NULL

          - NULL의 정의

                     ㄴ부재, 모르는 값

                     ㄴ NULL의 연산 - NULL을 포함한 모든 사칙연산의 답은 NULL이다

                     ㄴ 정렬 상 의미 (오름차순 기준)

                                            - ORACLE : (null이 맨 마지막에 나옴)

                                            - SQL Server : -(최소의 값, null이 맨 앞에 나옴)

           - NVL(값1, 값2)                  값1 is null -> 값 2

                                                            is not null -> 값 1

             NVL2(값1, 값2, 값3)        값1 is null -> 값 3

                                                            is not null -> 값 2

             IS NULL(값1, 값2)

             NULL IF(값1, 값2)            값1 = 값2 -> null

                                                            ≠       -> 값 1

             COALESCE(값1, 값2, ...) 널이 아닌 첫번째 값 -> 값1 is null,

                                                                                         값2 is null,

                                                                                         값3 is not null

                                                                                          -> 값3

 

정렬

        - 정렬의 특성 1. 가장 마지막 실행

                             2. 성능이 느려질 수 있다.

                             3. null값과의 관계

        - 컬럼 번호 정렬 *출력되는 컬럼의 수 보다 큰 값 불허

        - 인수 두 개 *sal desc, ename asc -> sal에 같은 값이 있으면 ename 오름차순으로 정렬

        - order by sal *sal이 셀렉트에 없어도 sal로 정렬 가능

 

숫자함수

              - ROUND 자릿수 *자릿수만큼 반올림

              - CEIL(Oracle) *소수점 첫째 자리에서 반올림

                CEILING (SQL Server)

 

문자열 함수

                   - UPPER / LOWER

                   - LPAD / RPAD *지정한 문자 길이만큼 지정한 문자로 채운다 미표기시 공백문자

                   - LTRIM / RTRIM *지정한 반복적인 문자를 지운다. 미표기시 공백 지움

                   - SUB STRING *SUBSTR(문자열, 앞에서 n번째부터, 뒤에서 n번째 제외) 추출, 뒤 n번 미입력시 끝까지 출력

                      IN STRING *INSTR(문자열, 검색할 문자열) 검색할 문자열이 몇번째에 있는지 출력

 

날짜함수

              - TO_CHAR

              - TO_DATE

              - SYSDATE(Oracle) *현재시간 출력

                 GETDATE(SQL Server)

              - 날짜데이터 + 100 -> 100일 이후(숫자를 day로 인식)

 

DECODE / CASE

case
         when   then
         when   then
else *else가 없는경우 조건1, 조건2 에 만족 x => null출력
end

 

집계함수

              -NULL과의 관계

SQL NULL과의 관계

 

GROUP BY

                    - 집약기능, 그룹 수준으로 정보를 바꿈

                    - HAVING : 그룹에 대한 조건식

 

JOIN

          - NATURAL JOIN *둘 다ailas사용 불가

            USING

            *중복된 컬럼 하나로 출력

          - LEFT OUTER JOIN

             A left outer join B =Acoll  = Bcoll (+)  *같은 의미 이다

          - 조인 순서 FROM A, B, C

                            ->A 와 B가 먼저 조인이 되고 나온 데이터와 C가 조인된다.

 

서브쿼리

             - SELECT 스칼라

                 FROM 인라인뷰

                 WHERE 거의 모든 서브쿼리

                 GROUP BY X

                 HAVING  거의 모든 서브쿼리

                 ORDER BY 스칼라

            - IN

               ANY

               ALL

               EXIST

 

집합연산자 

SQL 집합연산자

 

DDL

        - "TCL" 

        - TRANCATE VS DROP - 구조도 삭제(철거)

          ㄴ입주민 퇴거(구조남음)

          TRANCATE VS DELETE 

            DDL                     DML

     *ROLLBACK, COMMIT 과 연관되서 나온다.

 

DML

         - INSERT

            UPDATE

            DELETE

            MARGE

 

제약조건

              - PK :UNIQUE & NOT NULL

              - UNIQUE

              - NOT NULL

 

DCL

         - GRANT

         - REVOKE

 

VIEW

          -독.편.부 *독립성, 편리성, 보안성

 

그룹함수

              - ROLL UP

              - CUBE

              - GROUPING SETS

              - GROUPING

SQL 그룹함수

 

TCL

        - COMMIT

        - ROLLBACK

 

윈도우함수

                  - ROWS *물리적인 행 단위

                     RANGE *논리적인 행 단위(같은 값인건 하나로 침)

                  - RANK *중복 건너뛴다 (1, 1, 3, 3, 5)

                     DENSE_RANK *중복 안건너뜀 (1, 1, 2, 2, 3)

                  - PARITION BY *중복제거 안함, 데이터 전체 출력

                     ORDER BY *중복제거

 

계층형 질의

                   - PRIOR 자식 데이터 = 부모데이터

                   - 부모에서 자식으로 가면 "순방향"

SQL 계층형 질의

 

절차형 PL/SQL

                         - PROCEDURE : 동작을 절차적 일괄 처리, 값을 반환하지 않음

                         - FUNTION : 사용자 정의 함수

                         - TRIGGER : DB 에서 자동으로 동작하도록 작성된 프로그램

                         - USER DEFINED : 사용자 정의 예외

                         -EXCEPTION :블록을 실행하는 도중 발생하는 에러 -> 생략 가능

 

데이터 모델링

                        - 데이터 모델화

                        1. 데이터 구조화 - 절차도에 따라 프로그램이 이루어짐

                        2. 데이터 자체의 관계 - 데이터의 핵심적인 정보들을 연결시켜 모든 업무를 포괄

                        3. 객체지향 - 객체를 중심으로 DB화

 

엔터티

           - 특징

           - 분류 : 유.개.사   기.중.행

                       형 념 건   본 심 위

 

속성

        - INSTANCE의 특성 = 속성

        - 기.설.파

           본 계 생

 

도메인

           - 데이터 유현, 크기, 제약조건

           - CHECK, PK

           - 값의 범위

 

관계

SQL 관계도

 

식별자

           - 식별자 : 하나의 엔터티에 구성되어 있는 여러개의 속성중에 엔터티를 대표할 수 있는 속성

                          _______________________으로 표기

           - 비식별자 : 부모 엔터티로부터 속성은 받았지만 주식별자로 사용되지 않고 일반적인 속성으로 사용하는 경우

                             -------------------------로 표기

           - 주식별자 : 유.최.불.존    IS NOT NULL

                              일 소 변 재

                              성 성 성 성

식별 비식별
강한관계
SQL구문 복잡
PK 속성 수 ↑
약한관계
조인 ↑ => 느려진다

           - ERD규칙  1. 시선 좌상 -> 우하

                              2. 관계명 반드시 표기 안해도 됨

                              3. UML -> 객체지향에서만 쓰임

 

성능 데이터 모델링

                             - 아키텍처  -> 성능개편에 가장 효과적

                             - SQL 명령문 수정

 

정규화

           - 방법 1차 - 원자성

                     2차 - 부분함수 종속 제거

                     3차 - 이행함수 종속 제거

          - 이상현상

          - 성능 : SELECT ↓

                      INSERT, UPDATE ↑

 

반정규화

SQL 반정규화

 

대량 데이터에 따른 성능

                                     - ROW MIGRATION

                                        CHANING

                                     - LIST

                                        RANGE -> 관리 쉬움, 가장 많이 쓰임

                                        HASH -> 관리 어렵

 

슈퍼 / 서브 타입

SQL 슈퍼 / 서브 타입

분산 데이터 베이스

                             - 데이터 무결성 해침!

 

조인 수행 원리

                       - NL : 랜덤 액세스, 대용량 소트 작업시 유리

                       - SORT MERGE : JOIN키를 기준으로 정렬 -> 등가, 비등가

                       - HASH : 등가 JOIN only

                                       선행테이블 작다

                                       HASH처리 별도 공간 필요

 

옵티마이저

                 - CBO : 경로

                 - RBO : 규칙

 

인덱스

           - DB 테이블에 대한 검색 성능을 높혀준다.

           - 부정형, like, 묵시적 형변환 에는 사용하지 않는다.

           - 인덱스 사용시 INSERT, UPDATE, DELETE의 성능이 감소된다

 

실행계획

              - 들여쓰기가 더 안쪽으로 되어있는 순서 부터 실행된다.

SQL 실행계획 순서


여기까지가 김강민님의 강의를 듣고 그대로 가져온 내용!

계속 고민하다가 늦게 신청하는 바람에 멀리가서 시험치기 때문에 새벽 6시에 일어나는 것보다 밤새는것이 컨디션적으로도 더 좋기에 밤새면서 문제집 푼거 두어번정도 훑어보고 시험치려고 한다.

한방 합격 기원!