쌍용 강북 교육센터 국비학원 Day 30일차
Merge (병합)
어떤 2개 이상의 테이블에 존재하는 데이터를 다른 테이블 한 곳으로 모으는 것을 말한다.
merge into ( 병합될 테이블명1 (이하 A) ) using ( 병합할 테이블명2 (이하 B) ) on ( 비교조건 )
when matched then ( on 조건이 맞으면 update / delete )
update set ( 컬럼 조건들 )
when not matched then ( on 조건이 맞지 않으면 insert )
insert ( 컬럼명 ) values ( 밸류값 ) ; - (merge의 insert에는 into가 들어가지 않는다)
ON 조건절이 일치하면 UPDATE, 불일치하면 INSERT를 하는 쿼리이다. USING 절에 비교할 테이블 하나만 사용할 경우 dual 또한 사용 가능하다. 비교조건에 사용한 컬럼은 UPDATE 에서 사용이 불가능하다.
데이터 정의어 (Data Definition Language - DDL)
DDL문은 내부적으로 commit이 포함되어져 있기 때문에 자동적으로 commit이 실행되어 진다. 그러므로 rollback이 사용 가능한 상황이었어도 DDL문을 사용한 후에는 불가능하다.
Constraint (제약조건)
테이블의 해당 칼럼에 원하지 않는 데이터를 입력, 수정, 삭제 되는 것을 방지하기 위해 테이블 생성 또는 변경시 설정하는 조건이다. 제약조건의 이름은 오라클 전체에서 고유해야 한다. 즉, 중복을 허용하지 않는다. (저장된 데이터의 신뢰성을 높이기 위해 사용)
Sub Query 를 사용하여 어떤 테이블을 복사(생성) 할 경우 원본테이블에 존재하던 제약조건중 NOT NULL 제약만 복사가 되어지고 나머지 제약조건은 복사가 되지 않는다. 또한 복사되는 NOT NULL 제약의 제약조건명도 SYS_Cxxxx 로 변경되어진다.
제약조건은 테이블을 생성하면서 적용할 수도 있고, ALTER를 이용해 이미 생성된 테이블에 제약조건을 추가할 수도 있다.
테이블 생성시에 제약조건의 생성 종류에는 두가지가 존재한다.
칼럼 레벨 제약조건 생성 -> (컬럼) (타입) 제약조건
- 제약조건을 넣을 때 칼럼 바로옆에 명시한다.
로우 레벨 제약조건 생성 -> (컬럼) (타입) , CONSTRAINT (제약조건 명) 제약조건 (컬럼명)
- 테이블을 생성할 때 제약조건을 밑에 따로 명시한다. 가르키는 칼럼을 명시해야 하기때문에 뒤에 칼럼명을 명시해주어야 한다. (문법을 더 구체적으로 적을 수 있다는 장점이 있다. 제약조건의 이름을 선언할 수 있다)
오라클 제약조건의 종류
1. Primary Key (기본키, 대표식별자) 제약 [P]
- 하나의 테이블당 오로지 1개만 생성할 수 있다.
- 어떤 컬럼에 Primary Key 제약을 주면 그 컬럼에는 자동적으로 NOT NULL이 주어지면서 동시에 그 컬럼에는 중복된 값은 들어올 수 없고 오로지 고유한 값만 들어오게 되어진다.
- 컬럼 1개를 가지고 생성된 Primary Key 를 Single Primary Key 라고 부르고, 2개 이상일 경우 Composite Primary Key (복합키) 라고 부른다.
2. Unique 제약 [U]
- 하나의 테이블당 여러개 생성할 수 있다.
- 어떤 컬럼에 Unique 제약을 주면 그 컬럼에는 NULL을 허용할 수 있으며, 그 컬럼에는 중복된 값은 들어올 수 없고 오로지 고유한 값만 들어오게 되어진다.
- 여러개의 Unique Key 중에 후보키 (후보식별자)가 되려면 해당 칼럼은 NOT NULL 이어야 한다.
3. Check 제약 [C]
- 하나의 테이블당 여러개를 생성할 수 있다.
- insert 또는 update 시 어떤 컬럼에 입력되거나 수정되는 데이터값을 아무거나 허락하는 것이 아니라 조건에 맞는 데이터 값만 넣고자 할 경우에 사용된다.
- Check 뒤에 조건을 적어준다.
4. Foreign Key (외래키, 참조키) 제약 [R]
- 하나의 테이블당 여러개를 생성할 수 있다.
- 다른 테이블의 특정 칼럼을 참조하기 때문에 그 테이블에 없는 데이터는 넣을 수 없다.
- Foreign Key 제약에 의해 참조(references) 받는 컬럼은 반드시 중복된 값을 허락하지 않는 고유한 값만 가지는 컬럼이어야 한다.
- 참조를 받는 컬럼은 NOT NULL 이어야 하고 데이터 타입 또한 같아야 한다. ( = 참조받는 컬럼이 Primary Key 나 NOT NULL 인 Unique 이어야 한다)
- foreign key가 존재하는 컬럼을 가지는 테이블을 "자식" 테이블 이라고 부른다. 반대로 참조를 받는 컬럼은 "부모" 테이블이라고 한다.
문법 - foreign key (칼럼명) REFERENCES 참조할 테이블명 (참조할 칼럼명)
5. NOT NULL 제약 [C]
- 하나의 테이블당 여러개를 생성할 수 있다.
- 특정 컬럼에 NOT NULL 제약을 주면 그 컬럼에는 반드시 데이터 값을 주어야 한다.
- 또한 어떤 컬럼에 값을 입력하거나 수정할 때 NULL을 허용하지 않는다.
※ 테이블 제약조건 확인
USER_CONS_COLUMNS - 컬럼에 할당된 제약조건을 확인
USER_CONSTRAINTS - 유저가 소유한 모든 제약조건을 확인
'DB > Oracle' 카테고리의 다른 글
쌍용강북교육센터 국비 학원 Day 32일차 Oracle (PL/SQL문, Procedure, Function, 제어문) (0) | 2023.02.16 |
---|---|
쌍용강북교육센터 국비 학원 Day 31일차 Oracle (ALTER, Foreign key 옵션) (0) | 2023.02.15 |
쌍용강북교육센터 국비 학원 Day 29일차 Oracle (SET 연산자, UNION, PSEUDO Column, DML) (0) | 2023.02.13 |
쌍용강북교육센터 국비 학원 Day 28일차 Oracle (JOIN, INNER, OUTER, EQUI, SELF) (0) | 2023.02.10 |
쌍용강북교육센터 국비 학원 Day 27일차 Oracle (Sub Query, JOIN) (0) | 2023.02.09 |