SQLD 시리즈에 있는 모든 쿼리문은 Oracle 기준으로 작성됩니다.
데이터 유형은 데이터베이스의 테이블에 특정 자료를 입력할 때, 그 자료를 받아들일 공간을 자료의 유형별로 나누는 기준이다.
데이터 유형 | 설명 |
---|---|
CHAR(s) |
- 고정 길이 문자열 정보 (Oracle, SQL Server 모두 CHAR로 표현)
- 최대 길이만큼 공간을 채움 ex) 'AA' = 'AA ' |
VARCHAR(s) | - 가변 길이 문자열 정보(Oracle은 VARCHAR2로, SQL Server는 VARCHAR로 표현)
- 할당된 변수 값의 바이트만 적용 ex) 'AA' !='AA ' |
NUMBER | - 정수, 실수등 숫자 정보
- Oracle은 처음에 전체 자리수를 지정하고 그 다음 소수 부분의 자리수를 지정한다. ex) 정수부분이 6자리이고, 소수부분이 2자리인 경우 NUMBER(8,2) |
DATE | - 날짜와 시각 정보 - Oracle은 DATE로 표현 하며 1초단위 - SQL Server는 DATETIME로 표현하며 3.33ms 단위 |
테이블에 존재하는 모든 데이터를 고유하게 식별할 수 있으면서 반드시 값이 존재하는 단일 칼럼이나 칼럼의 조합들(후보키)중에 하나를 선정하여 기본키 칼럼으로 지정한다.
CREATE TABLE table_name(column_1 DATA_TYPE[default 형식],
column_2 DATA_TYPE[default 형식],
column_3 DATA_TYPE[default 형식]);
CREATE TABLE EMP01(
EMPNO NUMBER(4),
ENAME VARCHAR2(20),
SAL NUMBER(7,2));
DESC TABLE_NAME; //아래와 동일
DESCRIBE TABLE_NAME; //위와 동일
제약 조건이란 사용자가 원하는 조건의 데이터만 유지하기 위한.. 데이터의 무결성을 유지하기 위한 데이터베이스의 보편적인 방법으로 테이블의 특정 칼럼에 설정하는 제약이다.
테이블의 유일성을 보장하기 위한 제약조건
하나의 테이블에는 하나의 기본키만 가질 수 있다.
UNIQUE + NOT NULL
방법 1 > 컬럼레벨로 기본키 지정
하나의 컬럼을 이용하여 간단하게 기본키를 지정
CREATE TABLE table_name(
column_name[CONSTRAINT 제약조건이름] PRIMARY KEY;
);
방법 2 > 테이블레벨로 기본키 지정
하나이상의 컬럼을 이용하여 기본키를 지정할 수 있다.
CREATE TABLE table_name(
column_name DATA_TYPE
.
.
,CONSTRAINT 제약조건이름 PRIMARY KEY(column_name,[column_name2])
);
방법 2는 외워두자
제약 조건의 이름을 붙이는 이유는 아래와 같은 것들을 수행하는데 있어서 어떠한 제약조건이 붙어있는지 확인이 불가능 하기 때문이다.
- 제약조건의 이름을 통해 제약조건을 삭제하거나 변경
- 제약조건 이름은 다른 제약조건, 개체와도 중복될 수 없다.
테이블에 저장된 행 데이터를 고유하게 식별하기 위한 고유키를 정의한다.(중복X)
NULL은 고유키 제약의 대상이 아니므로 NULL값을 가진 행이 있더라도 고유키 제약이 아니다.
NULL 값 입력 금지
입력할 수 있는 값의 범위 등을 제한
CHECK 제약으로는 TRUE or FALSE로 평가할 수 있는 논리식을 지정한다.
NULL이 허용되며, 다른 테이블의 컬럼을 복사하여 기본키로 복사하는 경우 생성된다.
여러 속성을 이용할 수 있다.
'아직 정의되지 않은 미지의 값'
기본값. DEFAULT값을 미리 설정해두면 값을 입력하지 않아도 NULL값이 아닌 미리 정해둔 기본값이 입력된다.
칼럼별롱 데이터 유형을 다시 재정의 하지 않아도 되는 장점이 있지만, 기존 테이블의 제약조건 중에 NOT NULL만 새로운 복제 테이블에 적용이 되고 그 외에 제약조건은 복제되지 않는다.
EX)
CREATE TABLE EMP02
AS
SELECT * FROM EMP
WHERE DEPTNO=10;
CREATE TABLE EMP03
AS
SELECT * FROM EMP
WHERE 1=0; // WHERE 1=0; 조건은 항상 거짓임
//이를 이용하여 테이블의 데이터는 가져오지 않고 구조만 복사할 수 있다.
- 기존 테이블의 구조를 변경하기 위한 DDL 명령문이다.
- 테이블에 대한 구조를 변경하게 되면 기존에 저장되어 있던 데이터에 영향을 주게 된다.
ADD COLUMN or ADD CONSTRAINT
새로운 칼럼을 추가 or 새로운 제약조건을 추가
MODIFY COLUMN
칼럼을 수정
DROP COLUMN or DROP CONSTRAINT
칼럼을 삭제 or 제약조건을 삭제
RENAME COLUMN or RENAME TABLE
칼럼명 변경 or 테이블명 변경
제약조건 추가 or 기존 테이블에 칼럼 추가
형식
*****제약조건 추가*****
ALTER TABLE table_name
ADD CONSTRAINT 제약조건명 제약조건 (column_name);
// PLAYER 테이블에 TEAM 테이블과의 외래키 제약조건을 추가
// PLAYER 테이블의 TEAM_ID 칼럼이 TEAM 테이블의 TEAM_ID를 참조하는 조건
ALTER TABLE PLAYER
ADD CONSTRAINT PLAYER_FK FROREIGN KEY
(TEAM_ID) REFERENCES TEAM(TEAM_ID);
*****칼럼 추가*****
ALTER TABLE table_name
ADD(추가할 칼럼명,data_type expr,...);
ALTER TABLE EMP01
ADD(JOB VARCHAR2(9));
기존 테이블 칼럼에 데이터 유형,디폴트 값, NOT NULL 제약 조건 변경
ALTER TABLE table_name
MODIFY(column_name, data_type expr,...);
ALTER TABLE EMP01
MODIFY(JOB VARCHAR2(30));
ALTER TABLE TEAM_TEMP
MODIFY(ORIG_YYYY VARCHAR2(8)
DEFAULT '20020129' NOT NULL);
테이블 삭제 혹은 칼럼 삭제
*****테이블 삭제*****
DROP TABLE table_name;
DROP TABLE EMP01;
*****칼럼 삭제*****
ALTER TABLE table_name
DROP COLUMN column_name;
ALTER TABLE EMP01
DROP COLUMN JOB;
*****테이블명 변경*****
RENAME 변경해야할 테이블 명 TO 변경 후 테이블 명;
RENAME EMP01 TO EMPLOYEE;
*****칼럼명 변경*****
ALTER TABLE table_name
RENAME COLUMN 변경해야 할 칼럼명 TO 새로운 칼럼명
ALTER TABLE PLAYER
RENAME COLUMN PLAYER_ID TO TEMP_ID;
테이블에 들어있던 모든 데이터를 삭제
TRUNCATE TABLE table_name;
TRUNCATE TABLE EMP01;