Search
Duplicate

2 과목 정리

태그
01
테이블명과 칼럼명은 반드시 문자로 시작해야한다.
02
FROM 절에 테이블에 대한 별칭을 사용했을 때 SELECT 절에서는 반드시 테이블명이 아닌 별칭을 사용해야 한다.
03
등가조인은 반드시 기본키, 외래키 관계에 의해서만 성립되는것은 아니다. 조인칼럼이 1:1 로 매핑이 가능하면 사용할 수 있다.
04
상호 연관 서브쿼리는 서브쿼리가 메인쿼리의 행수 만큼 실행되는 쿼리로서 실행 속도가 상대적으로 떨어지는 SQL 문장이다. 그러나 복잡한 일반 배치 프로그램을 대체할 수 있기 때문에 조건에 맞는다면 적극적인 검토가 필요하다.
TOP-N 서브쿼리는 INLINE VIEW 의 정렬된 데이터를 ROWNUM 을 이용해 결과 행 수를 제한하거나 TOP(N) 조건 을 사용하는 서브쿼리이다.
INLINE VIEW 는 FROM 절에 사용되는 서브쿼리로서 실질적인 OBJECT 는 아니지만, SQL 문장에서 마치 VIEW 나 테이블처럼 사용되는 서브쿼리이다.
다중행 연산자는 IN,ANY, ALL 이 있으며 서브쿼리의 결과로 하나 이상의 데이터가 RETURN 되는 서브쿼리이다.
05
절차형 SQL 을 이용하여 PROCEDURE, TRIGGER, USER DEFINED FUNCTION 을 만들 수 있다.
06
비용 기반 옵티마이저는 비용을 기반으로 최적의 작업을 수행한다. 따라서 인덱스 스캔보다 전체 테이블 스캔이 비용이 낮다고 판단하면 적절한 인덱스가 존재하더라도 전체 테이블 스캔으로 SQL 문을 수행할 수 있다.
07
실행 계획을 시각화한 것이다.
SQL 문의 처리 절차를 시각적으로 표현한 것이다.
인덱스 스캔 및 전체 테이블 스캔 등의 액세스 기법을 표현할 수 있다.
SQL 처리 흐름도에서는 성능적인 측면도 표현할 수 있다. 일량적인 측면의 표현과 인덱스 스캔 또는 테이블 스캔 등을 표현할 수 있다.
08
FROM 절에 아무리 많은 테이블이 나열되더라도 항상 2개씩 조인된다. 테이블과 테이블 사이 또는 앞에서 이미 수행된 조인의 결과 집합과 테이블, 조인 결과와 조인 결과 사이에서 조인이 처리된다.
09
해시조인
해시 조인은 해시 함수를 사용해서 주소를 계산하고 조인을 수행한다.
해시 조인을 할 때는 선행 테이블의 크기가 작아야 한다.
해시 조인은 CPU 연산이 많이 발생한다.
10
NESTED LOOP 방식의 조인절차
선행 테이블에서 조건을 만족하는 첫번째 행을 찾는다 → 선행 테이블의 조인 키를 가지고 후행 테이블에 조인 키가 존재하는지 찾으러 가서 조인을 시도한다 → 후행 테이블의 인덱스에 선행 테이블의 조인 키가 존재하는지 확인한다. → 인덱스에서 추출한 레코드 식별자를 이용하여 후행 테이블을 액세스 한다.
11
기본키와 외래키 관계에서 외래키에 인덱스가 없을 때 SORT MERGE 방식이 NESTED LOOP 방식 조인보다 효율적이다.
12
SELECT EMPNO, ENAME FROM EMP WHERE EMPNO = 1; // 위 SELECT 문에서 TABLE 을 탐색하지 않고 FETCH 하는 법 CREATE TABLE EMP_TEST ( EMPNO VARCHAR(20) PRIMARY KEY , ENAME VARCHAR(50) ORGANIZATION INDEX; )
SQL
복사
13
EMPLOYEE(ENO, ENAME, ADDRESS, SCORE, DNO) DEPENDENT(ENO, ENAME, BIRTHDAY, RELATION) // 위의 데이터 베이스에서 부양가족을 2 명 이상 가진 사원의 // 사번, 성명, 부양가족 수를 검색하는 질의 SELECT E.ENO, E.ENAME, T.CNT FROM EMPLOYEE E, ( SELECT ENO, COUNT(*) AS CNT FROM DEPENDENT GROUP BY ENO HAVING COUNT(*) >= 2 ) T WHERE E.ENO = T.ENO;
SQL
복사
14
인덱스 튜닝
인덱스를 경유한 테이블의 RANDOM 액세스 부하가 심할 때, 클러스터 테이블이나 IOT 를 활용하는 방안을 고려할 수 있다.
인덱스를 경유한 테이블 액세스 횟수가 같더라도 인덱스 구성에 따라 스캔 효율이 달라진다. 따라서 인덱스 스캔 효율을 높이기 위해 인덱스 칼럼 순서를 바꿔야 할 때가 종종 있다.
조건절이 WHERE DEPTNO = 10 AND ENAME = ‘SCOTT’ 일 때 인덱스를 [DEPTNO + ENAME] 순으로 구성하나 [ENAME + DEPTNO] 순으로 구성하나 인덱스 스캔 효율에 차이가 없다.
인덱스 칼럼순서를 아무리 바꾸어도 테이블 RANDOM 액세스 횟수는 줄지 않는다.
15
// 현재 행을 기준으로 파티션 내에서 앞의 한 건, // 현재 행 뒤의 한 건의 범위를 지정하는 OVER 옵션은? ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
SQL
복사
16
ELSE 조건을 생략하면 NULL 이 반환된다.
17
스칼라 서브쿼리는 SELECT 문에서 사용하는 서브쿼리로 한 행만 반환한다.
인라인뷰 : FROM 절
서브쿼리 : WHERE 절
18
(날짜1 - 날짜2) 의 결과는 일수가 나온다.
19
COUNT(칼럼명) 을 실행하면 NULL 값은 제외한다.
20
SELECT DECODE(EMPNO, 1, 'A', 'B') FROM EMP; // 같은 내용 SELECT CASE ENPNO WHEN 1 THAN 'A' ELSE 'B' END FROM EMP;
SQL
복사