쌍용교육센터에서 공부한 내용을 정리하며 기록하는 글이고 주관적인 생각이 들어갈 수 있습니다.
잘못된 내용이나 피드백 및 생각 공유는 언제든 환영입니다.
댓글로 남겨주시면 확인 후 수정하겠습니다.
내용에 대한 소스 코드는 https://github.com/2jaehoon/ssangyonng.git에 올려두었습니다.
sequence
- 순차적인 번호를 제공하는 객체
- Oracle 11g까지는 DBMS가 종료되면 설정해놓은 번호만큼 사라진다.
(12c부터는 해당 문제가 사라짐)
- 쿼리문이 실패되면 해당 번호가 사라진다.
- user_squences DD에서 sequence를 확인할 수 있다.
* sequence 생성
create sequence 시퀀스명
start with 시작번호
maxvalue 끝번호
increment by 증가값
cache 메모리 저장해놓을 수의 갯수
반복여부
* sequence 삭제
drop sequence 시퀀스명
* sequence 사용
- 현재 번호 얻기( 접속자 세션에 시퀀스가 생성되었을 때에만 사용 가능 )
시퀀스명.currval
- 다음 번호 얻기( 접속자 세션에 시퀀스가 없다면 시퀀스를 File 영역에서 시퀀스의 번호를
변경하고, 접속자 세션에 로드한다. 접속자 세션에 시퀀스가 존재하면 다음 번호를 얻는다. )
시퀀스명.nextval
여러 개의 테이블을 조합하여 검색
- union, join
* union
- 테이블을 수직으로 붙여서 검색할 때 사용
- 컬럼의 개수와 데이터 형만 일치하면 검색 가능
- SQL Injection 공격이 가능
-- union : 중복된 레코드는 검색하지 않는다.
-- union all : 중복된 레코드를 검색한다.
select 컬럼명, ...
from 테이블명
union [all]
select 컬럼명, ...
from 테이블명;
* join
- 테이블을 수평으로 붙여서 검색할 때 사용
- inner join, outer join, self join을 사용할 수 있다.
- ANSI 문법, Oracle join 문법 두 가지를 사용할 수 있다.
- 저장 공간의 효율성을 위해 테이블을 분리하여 설계하고 정보를 저장하여 사용한다.
- 사용자에게 필요한 정보를 join을 사용하여 조합하여 제공해야 한다.
- driving table에 따라 join속도가 달라진다.
* inner join
- 서로 다른 테이블에 같은 값이 있는 레코드만 검색하는 조인
- ANSI 문법, Oracle join 문법 두 가지를 사용할 수 있다.
- ANSI
-- select문에서 테이블명.컬럼명로 검색하려면
-- 테이블에 alias를 설정하지 않을 때 사용 가능
select 컬럼명, alias.컬럼명
from 테이블명 alias
inner join 조인할 테이블명 alias
on 조인조건
where 검색조건;
-- 조인조건에서 서로 다른 테이블을 연결할 조건, 서로 연결할 컬럼으로 연결 시키는 것
-- 연산자를 사용
-- 컬럼 값이 같은 것을 비교하여 조회 : EQUI Join
-- 컬럼 값이 다른 것 : NON EQUI Join
- Oracle
-- select문에서 테이블명.컬럼명로 검색하려면
-- 테이블에 alias를 설정하지 않을 때 사용 가능
select 컬럼명, alias.컬럼명
from 테이블명 alias, 조인할 테이블명 alias, ...
where ( 조인 조건 ) and ( 검색 조건 );
-- 조인조건에서 서로 다른 테이블을 연결할 조건, 서로 연결할 컬럼으로 연결 시키는 것
* outer join
- 한쪽 테이블에만 레코드가 존재해도 검색되는 join
- ANSI 문법 : left, right, full outer를 지원하고 oracle 문법을 사용하면
left, right만 지원
- ANSI
-- select문에서 테이블명.컬럼명로 검색하려면
-- 테이블에 alias를 설정하지 않을 때 사용 가능
select 컬럼명, alias.컬럼명
from 테이블명 alias
[ left|right|full ] outer join 조인할 테이블명 alias
on 조인조건
-- 조인조건에서 서로 다른 테이블을 연결할 조건, 서로 연결할 컬럼으로 연결 시키는 것
- Oracle
-- select문에서 테이블명.컬럼명로 검색하려면
-- 테이블에 alias를 설정하지 않을 때 사용 가능
select 컬럼명, alias.컬럼명
from 테이블명 alias, 조인할 테이블명 alias
where ( 조인 조건 ) and ( 검색 조건 )
-- 조인조건에서 서로 다른 테이블을 연결할 조건, 서로 연결할 컬럼으로 연결 시키는 것
-- 조인 조건에서 alias(+)=alias.컬럼명 (+)를 레코드가 없는 컬럼에 붙인다.
driving 테이블
- 조인에 key가 되는 테이블
- driving 테이블에 대해 조인 속도가 달라진다.
- driving 테이블 선정 조건
PK를 가진 테이블이 driving 테이블이 될 것
PK가 없을 때에는 레코드 수 혹은 레코드의 다양성이 적은 테이블이 driving 테이블이 된다.
정규화
- 이상 현상과 중복을 최소화하게 데이터를 구조화하는 프로세스이다.
- 정규화가 진행되면 테이블이 분리되어 정보가 저장
- 정규화되지 않은 테이블을 무정규 테이블이라고 한다.
- 속도 향상을 위해 분리한 테이블을 합치는 작업을 역정규화라 한다.
이상 현상
- 삽입 이상 : 레코드를 insert시에 의도하지 않은 값들도 함께 insert가 되는 현상
- 삭제 이상 : 레코드를 delete할 때, 의도하지 않은 값까지 함께 삭제되는 현상
- 변경 이상 : 레코드의 값을 update할 때, 일부 레코드만 변경되어 불일치성이 생기는 현상
정규화 순서
1. 도메인의 원자성
2. 부분 함수 종속 제거
3. 이행 함수 종속 제거
4. 결정자가 후보키가 아닌 것을 제거
5. 다치 종속 제거
6. 조인 종속 제거
* 1NF( 도메인의 원자성 )
- 도메인의 원자성 : 컬럼 하나에는 하나의 값이 저장될 수 있도록 만든다.
* 2NF( 부분함수 종속 제거 )
- 1NF를 만족하고 PK가 여러 개인 테이블이 만들어 진 후 처리하는 정규화
- 결정자( 검색 키 컬럼 ), 종속자( 검색 키를 사용하여 비교하는 컬럼 )
- 완전함수 종속 : ( 모든 결정자를 사용하여 의미 있는 레코드를 검색 )
- 부분함수 종속 : ( 결정자 중 하나 또는 n 개로 의미있는 레코드를 검색 )
* 3NF ( 이행함수 종속 제거 )
- 2NF를 만족한 후 이행함수 종속 제거하는 정규화
- 이행함수 종속( 결정자가 아닌 후보키( 일반 컬럼 )으로 의미있는 레코드를 검색 )
'성장 일기 > 쌍용교육센터' 카테고리의 다른 글
0201/인덱스, JDBC (0) | 2023.02.01 |
---|---|
0131/계정 권한, 백업 및 복원, view (0) | 2023.01.31 |
0127/테이블 제약 조건 (0) | 2023.01.27 |
0126/집계함수 (0) | 2023.01.26 |
0125/집계함수 (0) | 2023.01.25 |