SQL - DDL
DDL
- Data Definition Language
- 데이터 정의 언어
- 객체(OBJECT)를 만들고(CREATE) 수정(ALTER)하고 삭제(DELETE)
- 데이터가 아닌 데이터의 구조 자체를 정의
- Oracle 객체(OBJECT) 종류
- 테이블(TABLE)
- 뷰(VIEW)
- 시퀀스(SEQUENCE)
- 인덱스(INDEX)
- 패키지(PACKAGE)
- 프로시저(PROCEDUAL)
- 함수(FUNCTION)
- 트리거(TRIGGER)
- 동의어(SYNONYM)
- 사용자(USER)
CREATE
- 객체 생성
-- TABLE 생성 예시
CREATE TABLE 테이블명 (
컬럼명 자료형(크기),
컬럼명 자료형(크기),
...
);
-- 제약 조건 추가 TABLE 생성
CREATE TABLE 테이블명 (
컬럼명 자료형(크기) [DEFAULT 기본값] [제약조건],
컬럼명 자료형(크기) [DEFAULT 기본값] [제약조건],
...
);
-
CREATE TABLE MEMBER (
MEMBER_ID VARCHAR2(20),
MEMBER_PWD VARCHAR2(20),
MEMBER_NAME VARCHAR2(20),
MEMBER_DATE DATE DEFAULT SYSDATE
);
테이블을 생성했다.
-
생성한 테이블을 확인해보았다.
아직은 데이터를 추가하지 않았기때문에
컬럼만 보인다.
계정명 아래 테이블 폴더를 열어보면
테이블이 추가되어 있는 것을 확인할 수 있다.
-
테이블 구조를 조회하는 방법이다.
DESC는 description이라고 한다. 서술, 묘사 등…!
컬럼 주석
COMMENT ON COLUMN 테이블명.컬럼명 IS '주석 내용';
주석 추가 전.
-
주석 추가 후.
Data Dictionary
- 데이터의 자원을 효율적으로 관리하기 위해 다양한 정보를 저장하는 시스템 테이블
- 사용자가 테이블을 생성하거나 수정할 때 자동으로 생성
- 사용자가 직접 수정하거나 삭제 불가능
- 시스템이 관리하는 테이블이기 때문에 내용을 알 수 없음
- 오라클에서 사용자가 내용을 알아볼 수 있도록 내용을 변환하여 데이터 딕셔너리 뷰를 제공
-- 테이블 구조 조회
SELECT *
FROM USER_TABLES
WHERE TABLE_NAME = 'MEMBER';
-- 테이블 컬럼 정보 조회
SELECT *
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = 'MEMBER';
ALTER
- 테이블 내용을 수정할 때 사용
- 컬럼의 추가/삭제, 제약조건의 추가/삭제, 컬럼의 자료형 변경, DEFAULT 값 변경
- 제약조건 수정은 불가(삭제 후 재생성)
1) 컬럼 추가
ALTER TABLE 테이블명
ADD (컬럼명 자료형(크기));
2) 컬럼 수정
ALTER TABLE 테이블명
MODIFY 컬럼명 자료형(크기)
...
MODIFY 컬럼명 자료형(크기);
3) 컬럼 삭제
ALTER TABLE 테이블명
DROP COLUMN 컬럼명;
4) 컬럼 이름 변경
ALTER TABLE 테이블명
RENAME COLUMN 기존 컬럼명 TO 변경 컬럼명
5) 제약조건 추가
ALTER TABLE 테이블명
ADD CONSTRAINT 제약조건명 제약조건(컬럼명)
...
ADD CONSTRAINT 제약조건명 제약조건(컬럼명);
6) 제약조건 삭제
ALTER TABLE 테이블명
DROP CONSTRAINT 제약조건명
...
DROP CONSTRAINT 제약조건명;
7) 제약조건명 변경
ALTER TABLE 테이블명
RENAME CONSTRAINT 기존 제약조건명 TO 변경 제약조건명;
8) 테이블명 변경
ALTER TABLE 테이블명
RENAME TO 변경 테이블명;
-- OR
RENAME 테이블명 TO 변경 테이블명;
DROP
- 객체 삭제
-- TABLE 삭제 예시
DROP TABLE 테이블명;
Oracle 데이터형
데이터형 | 설명 |
---|---|
CHAR(크기) | 고정길이 문자 데이터(최대 2,000 Byte) |
VARCHAR2(크기) | 가변길이 문자 데이터(최대 4,000 Byte) |
NUMBER | 숫자 데이터(최대 40자리) |
NUMBER(길이) | 숫자 데이터로, 길이 지정 가능하다 (최대 38자리) |
DATE | 날짜 데이터(BC 4712년 1월 1일 ~ AD 4712년 12월 31일) |
LONG | 가변 길이 문자형 데이터(최대 2GB) |
LOB | 2GB까지의 가변길이 바이너리 데이터 저장 가능 (이미지, 실행파일 등 저장 가능) |
ROWID | DB에 저장되지 않는 행을 식별할 수 있는 고유 값 |
BFILE | 대용량의 바이너리 데이터 저장 가능(최대 4GB) |
TIMESTAMP | DATE형의 확장된 형태 |
INTERVAL YEAR TO MONTH | 연도과 월을 이용하여 기간 저장 |
INTERVAL DAY TO SECONT | 일, 시, 분, 초를 이용하여 기간 저장 |
CHAR
CHAR(크기)
- 크기: 문자열 크기 지정
- 지정한 크기보다 적은 문자열 입력 시 남은 공간은 공백
- 데이터는 큰따옴표(“)를 사용
- 대소문자 구분
값 | 데이터 타입 | 저장 되는 값 | 설명 |
---|---|---|---|
KIMCH | CHAR(6) | KIMCHI | |
CHAR(9) | KIMCHI*** | 공백 3칸(3BYTE) | |
CHAR(3) | ERROR | ||
김치 | CHAR(6) | 김치 | 한글은 한 글자당 3BYTE |
CHAR(9) | 김치*** | 공백 3BYTE | |
CHAR(3) | ERROR |
VARCHAR2
VARCHAR2(크기)
- 가변
- 크기: 문자열 크기 지정
- 크기가 0일 경우 NULL로 인식
- 데이터는 큰따옴표(“)를 사용
- 대소문자 구분
값 | 데이터 타입 | 저장 되는 값 | 설명 |
---|---|---|---|
KIMCH | CHAR(6) | KIMCHI | |
CHAR(9) | KIMCHI*** | 가변 데이터형이기 때문에 공백 없이 저장 | |
CHAR(3) | ERROR | ||
김치 | CHAR(6) | 김치 | 한글은 한 글자당 3BYTE |
CHAR(9) | 김치*** | 가변 데이터형이기 때문에 공백 없이 저장 | |
CHAR(3) | ERROR |
NUMBER
NUMBER(전체 자리수, 소수점 이하 자리수)
- 전체 자리수: 1~38
- 소수점 이하 자리수: -84~127
값 | 데이터 타입 | 저장 되는 값 | 설명 |
---|---|---|---|
12345.678 | NUMBER | 12345.678 | |
NUMBER(7) | 12346 | 7자리이지만 정수는 5자리이므로 5개만 표현, 첫 번째 소수로 인해 반올림 되어 저장 | |
NUMBER(7, 1) | 12345.7 | 7자리이지만 정수 5자리와 소수 1자리만 표현, 두 번째 소수로 인해 반올림 되어 저장 | |
NUMBER(7, 3) | ERROR | 7자리, 소수점 이하 3자리로 정수는 총 4자리인데 실제 값의 정수는 5자리이므로 오류 | |
NUMBER(7, -2) | 12300 | s가 -2여서 소수점 왼쪽 두 번째 자리 4가 반올림되어 저장 | |
0.1234 | NUMBER(4, 5) | ERROR | 유효숫자는 4개가 맞지만 소수점 아래가 5자리인데 4자리이므로 오류 |
0.01234 | NUMBER(4, 5) | 0.01234 | |
0.0001234 | NUMBER(3, 7) | ERROR | 소수점 이하 일곱 째 자리까지 유효숫자는 4개인데 p가 3이므로 오류 |
0.00001234 | NUMBER(3, 7) | 0.0000123 | 소수점 이하 일곱 째 자리까지 유효숫자는 3개이기 때문에 마지막 4 제외 |
DATE
- 일자 정보 관리
- 기본적으로 년/월/일 정보만 표기
- 날짜 연산 및 비교 가능
연산 | 결과 타입 | 설명 |
---|---|---|
날짜 + 숫자 | DATE | 날짜에서 숫자만큼 며칠 후 |
날짜 - 숫자 | DATE | 날짜에서 숫자만큼 며칠 전 |
날짜 - 날짜 | NUMBER | 두 날짜의 일수 차 |
날짜 + 숫자/24 | DATE | 날짜 + 시간 |