sql 추가 정리
- semi-join
- b에만 있는 칼럼이 결과에 존재 → b에 대한 a의 세미조인
- view merging
- 옵티마이저가 sql실행을 최적화하기 위해서 sql을 가공하는것으로 옵티마이저가 자동으로 실행한다.
- 불가능한 경우
- 집합연산자 사용, connect by 사용, rownum사용, 집계함수 사용, 분석함수 사용
- 절차형 sql = PL/SQL
- 프로시저: 쿼리집합
- 사용자 정의 함수 : 일련의 sql 처리
- 트리거 : 어떤일이 발생할때 같이 처리
- 커서
- sql 결과를 담아놓는 일종의 포인터
- 공유불가
- 공백문자, 줄바꿈, 대소문자 차이, 주석, owner, 힌트 사용
- 오름차순이면 null이 가장 먼저!
- 서브쿼리 종류
- correlated subquery
- 메인쿼리값을 서브쿼리가 사용하고 서브쿼리의 값을 메인쿼리가 계산하는 쿼리
- access subquery
- filter subquery
- early filter subquery
- 자연 조인
- a,b,c와 b,c,d 자연조인하면 a,b,c,d 중복 제거
- alias 사용불가, 동일한 칼럼은 모두 조인 참가, 칼럼 두개이상일때 join~using 사용
- 분산 데이터베이스 투명성
- 분할, 위치, 지역 사상, 중복, 장애, 병행 투명성
- 조인조건 없으면 카테시안 곱이 발생
- inner join
- from customer as a self join customer as b on
- nologging
- Index organized table
- 일반 테이블이라면 키값을 통해 인덱스를 탐색하여 rowid를 구하고 rowid로 다시 테이블의 데이터를 찾는 두번의 과정
- 따라서 테이블 탐색하지 않고 fetch 가능
- 하드파싱 소프트파싱 같은 질의에 변수값만 다름
- 물리적 io는 메모리에 데이터가 없을때 논리적 io는 있을때
- 배치단위에는 merge sort
- dynamic sql string 변수에 쿼리를 저장
- pl 에서 테이블 생성 가능
엔티티
- 식별 가능해야 함
- 인스턴스가 한 개 밖에 없는 엔터티는 집합이 아니므로 엔터티 성립이 되지 않는다.
- 업무프로세스에 의해 사용
- 주식별자만 존재하고 일반속성이 없는 경우 적절한 엔터티라고 할 수 없으나, 예외적으로 관계 엔터티만 주식별자 속성만 가지고 잇어도 엔터티로 인정한다.
- 예외적으로, 통계 업무 엔터티, 코드를 위한 엔터티, 시스템 처리시 내부 필요에 의한 엔터티는 관계 생략이 되는 경우가 있다.
- 발생시점에 따라 중심, 기본, 행위 엔터티
- DDL
- CHAR는 문자열을 비교할 때 공백을 채워서 비교하는 방법을 사용한다. 그에 반해 VARCHAR은 맨 처음부터 한 문자씩 비교하고 공백도 하나의 문자로 취급하므로 끝의 공백이 다르면 다른 문자로 판단한다.
- 고유키 + Not null = 기본키
- 해당 칼럼 크기를 늘릴 순 있지만 줄일 순 없다. 기존 데이터 훼손 우려 때문
- 해당 칼럼이 NULL 값만 가지고 있거나 테이블에 아무 행도 없으면 칼럼의 폭을 줄일 수 있다.
- Where절
- 서브쿼리
- 서브쿼리에서는 ORDER BY를 사용하지 못한다. ORDER BY 절은 메인쿼리의 마지막 문장에 위치해야 한다.
- row chaning
- 행 길이가 너무 길어서 두개의 블록에 걸쳐 저장
- row migration
- 수정이 발생할때 해당 블록에 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장
- 입출력 불필요 많이 발생 성능 저하
- 실행계획
- table access full - index(range scan) - table access(rowid) - nested loop join
- index(range scan) - table access(rowid) - nested loop join - select
- 이름 같은 savepoint 에 rollback 하면 첫번째 걸로 rollback
- coalesce는 null 이 아닌 첫번째로 ㄱ
- nvl(a,b) a가 널이면 b
- nvl2(a,b,c) a가 널이아니면 b 널이면 c
- nullif(a,b) a와 b가 같으면 null 같지않으면 a
- decode(a,b,c) a가 b와 같으면 c 출력
- having 절에 집계함수로 사용된 칼럼은 select로 조회가 불가