일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 파이썬
- 이분탐색
- Zip
- java
- 백준
- 재귀함수
- 위클리 챌린지
- BFS
- Set
- python
- 카카오
- programmers
- Re
- 그리디
- divmod
- DateTime
- 자바
- 추석맞이 코딩챌린지
- dfs
- 프로그래머스
- Combinations
- 정렬
- lambda
- 정규식
- 동적 계획법
- backjoon
- heapq
- 수학
- KAKAO BLIND RECRUITMENT
- 다익스트라
Archives
- Today
- Total
상상쓰
[SQLD] 2-2. SQL 기본 및 활용 본문
1. ANSI/ISO SQL 조인
- INNER JOIN : TABLE_A INNER JOIN TABLE_B ON 조건 INNER JOIN TABLE_C ON 조건
- USING : TABLE_A INNER JOIN TABLE_B USING(?) (USING 안에 ALIAS 사용 X)
- CROSS JOIN : 모든 데이터의 조합
- LEFT (OUTER) JOIN : 조인 수행시 먼저 표기된 좌측 테이블에 해당하는 데이터를 먼저 읽은 후, 나중 표기된 우측 테이블에서 JOIN 대상 데이터를 읽어 온다.
- A LEFT OUTER JOIN B ON A.? = B.? == A, B WHERE A.? = B.?(+)
2. EXISTS
- EXISTS(서브쿼리) 의 서브쿼리 결과가 존재하면 True, 그렇지 않으면, False 를 리턴한다.
3. 집합 연산자의 종류
- UNION : 중복된 행은 하나의 행으로 만든다.
- UNION ALL : 중복된 행도 그대로 결과로 표시된다.
- INTERSECT : 여러 개의 SQL문의 결과에 대한 교집합이다. 중복된 행은 하나의 행으로 만든다.
- EXCEPT : 앞의 SQL문의 결과에서 뒤의 SQL문의 결과에 대한 차집합이다. 중복된 행은 하나의 행으로 만든다.
4. 일반 집합 연산자
- UNION
- INTERSECTION
- DIFFERENCE(= EXCEPT, MINUS(Oracle))
- PRODUCT(= CROSS JOIN)
5. Oracle 계층형 질의
- START WITH 루트 IS NULL CONNECT BY PRIOR 자식 = 부모(순방향 전개) ORDER SIBLINGS BY ? DESC
- 루트 노드의 LEVEL 값은 1이다.
- ORDER SIBLINGS BY절은 형제 노드 사이에서 정렬을 지정하는 구문이다.
6. 서브쿼리
- 연관(Correlated) 서브쿼리는 서브쿼리가 메인쿼리 컬럼을 포함하고 있는 형태의 서브쿼리이다.
- 다중 컬럼 서브쿼리는 서버쿼리의 결과로 여러 개의 컬럼이 반환되어 메인 쿼리의 조건과 비교되는데, SQL Server에서는 현재 지원하지 않는 기능이다.
- 스칼러 서브쿼리란 SELECT절에 사용되는 서브쿼리이다.
- Inline View, Dynamic View는 FROM절에 사용되는 서브쿼리이다.
7. 뷰 사용의 장점
- 독립성 : 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 된다.
- 편리성
- 보안성
8. ROLLUP, GROUPING SETS, CUBE
- GROUP BY ROLLUP(?1, ?2) = GROUP BY GROUPING SETS(?1, (?1, ?2), ())
- GROUPING(?) : ? 가 NULL이면 1, 그렇지 안으면, 0
- CUBE : 인자로 주어진 컬럼의 결합 가능한 모든 조합에 대해서 집계를 수행하므로 다른 그룹 함수에 비해 시스템에 대한 부하가 크다.
9. RANK 함수
- RANK() OVER(ORDER BY ~) : 동일 순위(1등 1등 3등 ...)
- ROW_NUMBER() OVER(ORDER BY ~) : 동일 순위(1등 2등 3등 ...)
- DENSE_RANK() OVER(ORDER BY ~) : 동일 순위(1등 1등 2등 ...)
- OVER(PARTITION BY ?) : ? 별
10. LAG, LEAD
- LAG 함수는 현재 읽혀진 데이터의 이전 값을, LEAD함수는 이후 값을 알아내는 함수이다. SQL Server에서는 지원하지 않는 함수이다.
11. DCL
- DBMS에 생성된 USER와 다양한 권한들 사이에서 중개 역할을 할 수 있도록 DBMS에서는 ROLE을 제공한다. 이러한 ROLE을 DBMS USER에게 부여하기 위해서는 GRANT 명령을 사용하며, ROLE을 회수하기 위해서는 REVOKE 명령을 사용한다.
- GRANT SELECT, UPDATE ON TABLE_A TO USER_A : USER_A에게 TABLE_A SELECT(WHERE 조건 검색) 와 UPDATE 권한을 부여
12. PL/SQL
- Block구조로 되어있어 각 기능별로 모듈화가 가능하다.
- IF, LOOP 등의 절차형 언어를 사용하여 절차적인 프로그램이 가능하도록 한다.
- DBMS 정의 에러나 사용자 정의 에러를 정의하여 사용할 수 있다.
- Oracle에 내장되어 있으므로 Oracle과 PL/SQL을 지원하는 어떤 서버로도 프로그램을 옮길 수 있다.
- Block으로 묶고 한 번에 전부를 서버로 보내기 때문에 통신량을 줄일 수 있다.
- 동적 SQL 또는 DDL 문장을 실행할 때 EXECUTE IMMEDIATE를 사용하여야 한다.
- 트리거 : COMMIT, ROLLBACK 실행 안됨, 프로시저 : COMMIT, ROLLBACK 실행 가능
13. SQL 실행계획
- CBO, 비용기반 옵티마이저 : 테이블 및 인덱스 등의 통계 정보를 활용하여 SQL문을 실행하는데 소요될 처리시간 및 CPU, I/O 자원량 등을 계산하여 가장 효율적일 것으로 예상되는 실행계획을 선택하는 옵티마이저
- 액세스 기법, 질의 처리 예상 비용, 조인 순서, 조인 방법 등이 표현
14. 인덱스
- 기본 인덱스 : Primary Key Index
- 인덱스는 조회만을 위한 오브젝트이며, 삽입, 삭제, 갱신의 경우 오히려 부하를 가증한다.
- Balance Tree는 관계형 데이터베이스에서 가장 많이 사용되는 인덱스이다.
- 테이블의 전체 데이터를 읽는 경우는 인덱스를 사용하지 않는 FTS를 사용한다.
- 인덱스가 존재하는 상황에서 데이터를 입력하면, 매번 인덱스 정렬이 일어나므로 데이터 마이그레이션 같이 대량의 데이터를 삽입할 때는 모든 인덱스를 제거하고, 데이터 삽입이 끝난 후에 인덱스를 다시 생성하는 것이 좋다.
- 인덱스를 이용한 데이터 조회는 항상 테이블 전체 스캔보다 빠른 것을 보장할 수 없다.
- 인덱스는 INSERT와 DELETE 작업과는 다르게 UPDATE 작업에는 부하가 없을 수도 있다.
15. Join 기법
- NL Join : 데이터를 집계하는 업무 보다는 OLTP의 목록 처리 업무에 많이 사용, 선택도가 낮은 테이블이 선행 테이블로 선택되는 것이 일반적으로 유리, 유니크 인덱스를 활용하여 수행시간이 적게 걸리는 소량 테이블을 조인할 때 적합하다. 조인 칼럼에 적당한 인덱스가 있어서 자연조인이 효율적일 때 유용하다.
- Hash Join : 소트 머지 조인하기에 두 테이블이 너무 커서 소트 부하가 심할 때 유용, 동등 조인에서만 사용할 수 있다.
'Programming' 카테고리의 다른 글
[SQLD] 2-1. SQL 기본 및 활용 (0) | 2022.03.08 |
---|---|
[SQLD] 1. 데이터 모델링의 이해 (0) | 2022.03.08 |
[DB] 데이터베이스 기초 (0) | 2021.11.03 |
[java] HashMap value(값)로 정렬하기 (0) | 2021.10.24 |
[java] PriorityQueue(우선순위 큐) 소개 (0) | 2021.10.24 |
Comments