- 데이터를 보관하고 관리하기 위한 객체의 구조를 정의하기 위한 언어이다.
🧩 CREATE
- 데이터베이스 상 테이블 구조를 생성하는 명령어이다.
- 예를 들어 고객 정보를 저장해두기 위한 테이블이 필요해서 정보를 담을 그릇을 가장 먼저 만든다.
CREATE TABLE C.Info (
이름 vachar2(10),
생년 number(4),
phone varchar2(15),
첫방문일 date,
고객번호 varchar2(10)
);
- 컬럼명은 영문, 한글, 숫자 모두 가능하나 시작만 문자로 해준다.
char는 고정된 크기 문자열 할당된 길이만큼 문자로 채운다.
- 컬럼 뒤에 데이터 유형을 지정하는 것은 필수이다.
🪄 제약조건 (CONSTRAINT)
CREATE TABLE C.Info (
이름 vachar2(10),
생년 number(4) default 9999,
phone varchar2(15) not null,
첫방문일 date,
고객번호 varchar2(10) Primary key
);
| | |
|---|
| default | 기본값 지정 | |
| not null | null 입력 불가 | |
| primary key | 기본키 지정 | PK는 not null / PK는 unique 한 값 (테이블 내 중복 없음) |
| foreign key | 외래키 지정 | 테이블 당 여러개 가능 |
🧠 문제 1
김호호씨가 아래와 같이 테이블 menu를 생성한 후 유효한 튜플 값 4개를 삽입했다. 이 경우 SQL-a와 SQL-b의 실행 결과를 각각 구하시오.
<테이블 생성>
CREATE TABLE MENU (
메뉴명 varchar2(10) primary key,
가격 number(10)
);
<SQL-a>
SELECT count(*) FROM MENU;
<SQL-b>
SELECT count(메뉴명) FROM MENU;
- 둘 다 숫자 4가 출력된다.
count(*)는 전체 행의 수 카운트를 의미하며 null을 포함한다.
count(컬럼명)은 null 제외한 행 수 카운트를 의미한다.
- 메뉴명 컬럼은
Primary key이므로 null 값을 가질 수 없다.
- 따라서 *를 통해 전체 행을 추출한
SQL-a와 메뉴명이란 컬럼명을 명시한 SQL-b 결과가 동일하다.
🧠 문제 2
김호호씨가 아래와 같이 테이블 menu를 생성한 후 유효한 튜플 값 4개를 삽입했다. 이 경우 SQL-a와 SQL-b의 실행 결과를 각각 구하시오.
<테이블 생성>
CREATE TABLE MENU (
메뉴명 varchar2(10) primary key,
가격 number(10)
);
<SQL-a>
SELECT count(*) FROM MENU;
<SQL-b>
SELECT count(가격) FROM MENU;
- 4 / 컬럼에 포함된 null 값의 개수에 따라 서로 실행 결과가 다를 수 있다.
- [가격] 컬럼은
NOT NULL 제약조건이 붙지도 않았고 Primay key도 아니다.