※ 제약조건 : 제약조건Constraints은 컬럼에 대한 속성 형태로 정의하지만 엄연히 오라클 데이터베이스 객체 중 하나이며 데이터 무결성을 보장하기 위한 용도로 사용된다. 제약조건에는 NOT NULL, UNIQUE, 기본키, 외래키, CHECK 등이 있다.
1. NOT NULL
컬럼을 정의할 때 NOT NULL 제약조건을 명시하면 해당 컬럼에는 반드시 데이터를 입력해야 한다. 즉 반드시 값이 들어 있어야 하는 컬럼에는 NOT NULL 제약조건을 만들어 사용한다. 다음 예제를 보면 NOT NULL 컬럼에 데이터를 넣지 않을 때 발생하는 오류를 확인할 수 있다.
● NOT NULL 설정
◈ 예제
COL_NOT_NULL 에 값을 입력하지 않았을 경우 오류가 발생.
2. UNIQUE
UNIQUE 제약조건은 말 그대로 해당 컬럼에 들어가는 값이 유일해야 한다는 의미다. 즉 중복 값을 허용하지 않는다.
● UNIQUE 설정
UNIQUE 제약조건 역시 데이터베이스 객체이므로, 컬럼 정의 부분에 UNIQUE를 명시하거나 별도로 CONSTRAINTS 키워드를 사용해 정의할 수 있다. UNIQUE와 NOT NULL을 같이 명시하면 해당 컬럼에 들어오는 값은 유일함은 물론 반드시 입력해야 한다. 또한 NULL 허용 컬럼에도 UNIQUE 제약조건을 붙일 수 있다.
◈ 예제
행을 생성했고 같은 값으로 행을 또 생성할 경우 오류 보고
3. 기본키(Primary key)
기본키Primary key라고도 하고 영어 그대로 ‘Primary key’라고 한다. 보통 테이블에 키를 생성했다라고 할 때, 이는 기본키를 의미한다. 기본키는 UNIQUE와 NOT NULL 속성을 동시에 가진 제약조건으로, 테이블 당 1개의 기본키만 생성할 수 있다.
● Primary key 설정
DBMS는 데이터 무결성을 보장하고 있다. 데이터 무결성이란 데이터의 정확성과 일관성을 유지한다는 뜻이다. 사원 테이블(employees)에는 사번(employee_id)과 사원명(emp_name) 컬럼이 있는데 특정한 사람을 식별하려면 사번은 반드시 한개이어야 한다. 만약 홍길동이란 사원의 사번이 두 개이거나 사번 자체가 들어가지 않고 데이터가 생성됐다면, 이 홍길동이란 사람을 정확히 식별할 수 있는 방법은 없다. 데이터 무결성을 DBMS에서 실질적으로 구현한 것이 바로 기본키(NOT NULL + UNIQUE)다.
◈ 예제
기본키는 NOT NULL이므로 NULL 입력이 불가능 하기때문에 오류보고
4. 외래키(Foreign key)
외래키Foreign key는 테이블 간의 참조 데이터 무결성을 위한 제약조건이다.
● Foreign key 설정
사원 테이블에는 부서번호(department_id) 컬럼이 있고, 부서정보는 부서 테이블(departments)에 있다. 만약 신규 사원이 입사해 데이터를 입력하는 와중에 부서 테이블에 없는 부서번호를 입력한다면 어떻게 될까? 논리적으로 봐도 합당하지 않고 이 신입사원에 대한 부서정보를 제대로 찾을 수 없다. 즉 참조 무결성이 깨진다. 하지만 외래키를 생성해 놓으면 부서정보에 없는 부서번호를 입력할 때 오라클은 오류를 발생시켜 잘못된 데이터가 입력되는 것을 방지한다. 참조 무결성을 보장하는 것이다.
삭제도 마찬가지다. 사원 테이블에서 사용하고 있는 부서 정보를 부서 테이블에서 삭제하면 무결성이 깨진다. 하지만 외래키를 생성해 놓으면 부서 테이블에서 해당 부서정보를 삭제할 때 오류가 발생해 데이터 삭제를 막아 참조 무결성이 보장된다. 부서 테이블에서 부서번호를 변경하는 것 역시 해당 부서가 참조되고 있다면 수정할 수 없다.
외래키에 대한 제약사항은 다음과 같다.
반드시 참조하는 테이블이 먼저 생성되어야 하며, 참조키가 참조 테이블의 기본키로 만들어져 있어야 한다.
외래키에 사용할 수 있는 컬럼 개수는 최대 32개다.
여러 컬럼을 외래키로 만들려면, 참조하는 컬럼과 외래키 컬럼의 순서와 개수는 같아야 한다.
5. CHECK
마지막으로 알아볼 제약조건으로 CHECK가 있다. 컬럼에 입력되는 데이터를 체크해 특정 조건에 맞는 데이터만 입력 받고 그렇지 않으면 오류를 뱉어 낸다.
※ 테이블 : 데이터를 넣고 수정하고 삭제한다. 데이터를 담고 있는 객체가 테이블이다. 테이블은 DBMS상에서 기본적인 객체로 로우(행)와 컬럼(열)으로 구성된 표이며 우리가 자주 사용하는 엑셀과 구조가 같다고 보면 이해하기 쉬울 것이다. SQL을 이용해 데이터를 조회, 삭제, 입력, 수정할 대상이며 그 결과를 담고 있는 것이 바로 테이블이다.
1. 테이블명과 컬럼명 규칙
● 테이블명, 컬럼명의 최대 크기는 30바이트다. ● 테이블명, 컬럼명으로 예약어는 사용할 수 없다. 예약어는 오라클에서 미리 선정한 단어로 SELECT, UPDATE,와 같은 구문 COUNT, ASC와 같은 SQL함수 등이 있으며 예약어 목록은 V$RESERVED_WORDS 시스템 뷰에서 조회할 수 있다. ● 테이블명, 칼럼명으로 문자, 숫자, '_', '&', '#'을 사용할 수 있지만 첫글자는 문자만 올 수 있다. ● 한 테이블에 사용 가능한 컬럼은 최대 255개까지이다.
2. 테이블 생성
● 기본구문
○ 데이터 타입 ˙ 컬럼에 입력될 데이터의 종류와 크기글 결정한다. ○ DEFAULT ˙ 입력이 누락됐을 때 기본 입력 값을 정의한다. ˙ Default 값을 지정하지 않으면 널 값이 저장된다. ○ 컬럼 레벨 제약 조건 ˙ PK, FK, UK, CHECK, NOT NULL 등을 지정한다. ○ 테이블 레벨 제약 조건 ˙ PK, FK, UK, CHECK만 지정한다. ˙ NOT NULL은 정의할 수 없다.
◈ 예제
3. 테이블 삭제
◈ 예제
4. 데이터 타입
● 문자 데이터 타입
▣ CHAR vs. VARCHAR2
CHAR와 VARCHAR2는 둘 다 문자를 저장하지만 저장된 결과는 서로 다를 수 있다. CHAR(10)와 VARCHAR2(10)에 'ABC'를 저장하면 CHAR(10)에는 10Byte가 저장되고 VARCHAR2(10)에는 3byte만 저장된다. CHAR 타입은 저장되는 입력 값과 상관없이 고정된 길이의 문자열을 갖는 반면에 VARCHAR2 타입은 입력 데이터만큼의 길이만 저장된다.
SQL은 구조화된 질의 언어Structured Query Language의 약자로 DBMS 상에서 데이터를 읽고 쓰고 삭제하는 등 데이터를 관리하기 위한 일종의 프로그램 언어다. C나 자바와 같은 일반 프로그래밍 언어는 절차적 언어라고 할 수 있는데 반해, SQL은 집합적 언어다. 절차적 언어의 특징은 프로그래밍 순서대로 로직이 처리되는 것인데(자바와 같은 객체지향형 언어도 절차적 언어에 그 뿌리를 두고 있다), 집합적 언어는 데이터를 특정 집합 단위로 분류해 이 단위별로 한 번에 처리하는 언어라고 할 수 있다
2. SQL종류
3. 데이터 베이스 객체의 종류
테이블 : 데이터를 담고 있는 객체
뷰 : 하나 이상의 테이블을 연결해 마치 테이블인 것처럼 사용하는 객체
인덱스 : 테이블에 있는 데이터를 빠르게 찾기 위한 객체
시노님 : 데이터베이스 객체에 대한 별칭을 부여하한 객체
시퀀스 : 일련번호 채번을 할 때 사용되는 객체
함수 : 특정 연산을 하고 값을 반환하는 객체
프로시저 : 함수와 비슷하지만 값을 반환하지 는 않는 객체
패키지 : 용도에 맞게 함수나 프로시저를 하나로 묶어 놓은 객체
4. SQL문 작성법
SQL 문은 대문자와 소문자를 구별하지 않습니다. 예를 들어SELECT와select를 동일하게 인식합니다.
SQL 문은 한 줄 또는 여러 줄로 작성할 수 있습니다.권장
명령어를 대문자로 작성하고 나머지를 소문자로 작성하면 가독성이 좋아집니다.
주석은 '--'(한줄 주석) 이나 '/* comment */'(범위 주석)을 사용하여 쓸 수 있다.