[SQLD] CREATE로 시작하는 이야기, 데이터의 첫걸음 DDL

서연·2025년 11월 5일
post-thumbnail

📖 DDL [출처]

  • 데이터를 보관하고 관리하기 위한 객체의 구조를 정의하기 위한 언어이다.

🧩 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, // 값이 없으면 9999로 기본값 지정 
  phone varchar2(15) not null, // null 입력 불가
  첫방문일 date,
  고객번호 varchar2(10) Primary key // 기본키로 지정하여 동명이인이 있어도 빠르게 찾을 수 있음
);
default기본값 지정
not nullnull 입력 불가
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도 아니다.

0개의 댓글