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
복사