SQL강의나 관련 서적들을 보면,
보통은 SELECT문 소개하기에 앞서 CREATE문으로 Table 만드는 방법부터 설명합니다.
하지만 '엑셀로 배우는 SQL' 시리즈에선 CREATE문보다 SELECT문을 먼저 다뤘었는데요.
그 이유는 CREATE문을 먼저 배우게 되면 SQL에 대한 거부감이 들 수도 있기 때문입니다.
왜냐, CREATE문은 생각보다 많은 개념들을 담고 있기 때문이죠. (실제로 실무자들도 그렇게 자주 사용하지 않고요)
그래서 시리즈 초반에 살짝 스쳐가듯 다루기만 했었는데요.
이번 장에선 CREATE문이 어떻게 구성되어 있고,
앞선 실습들을 진행하기 위해 CREATE문을 어떻게 짜야할지 알아볼게요!
엑셀로 먼저 살펴보기
이번 장 역시 엑셀로 먼저 시작해 봅니다.
엑셀에서 다들 표 한 번쯤 만들어 보신 적 있으실 거예요.
표는 어떻게 만드나요? 순서를 정리해보자면 대강 이렇습니다.
1. 엑셀 Sheet에 표 이름을 적어준다 (ex. 음료 재고표)
2. 표의 항목을 열 순서대로 나열한다. (ex. No, 음료종류, 음료이름, 가격, 재고)
3. 각 항목에 맞는 표시 형식을 설정한다 (ex. No, 가격, 재고의 경우 숫자. 음료종류, 음료이름의 경우 텍스트)
SQL로 살펴보기
위 엑셀 표를 DB Table로 만들려면 어떻게 해야 할까요?
표 만드는 순서를 다시 살펴보고 SQL로 재해석해봅니다.
1. 엑셀 Sheet에 표 이름을 적어준다 (ex. 음료 재고표)
-> Table의 이름을 적어준다. (ex. beverage_stock)
2. 표의 항목을 열 순서대로 나열한다. (ex. No, 음료종류, 음료이름, 가격, 재고)
-> Table의 Column을 순서대로 나열한다. (ex. no, type, name, price, stock)
3. 각 항목에 맞는 표시 형식을 설정한다 (ex. No, 가격, 재고의 경우 숫자. 음료종류, 음료이름의 경우 텍스트)
-> 각 Column에 맞는 데이터 타입을 지정해 준다. (ex. no, price, stock -> integer. type, name -> varchar2)
CREATE문
위 내용을 인지한 상태로 CREATE문을 바로 살펴볼게요.
CREATE TABLE beverage_stock
(
no number,
type varchar2(20),
name varchar2(20),
price number,
stock number
);
어떤가요? 조금 감이 오시나요?
CREATE 문법은 다음과 같습니다.
{} 안의 내용은 반복 가능, []는 선택적으로 사용 가능 | 는 그중 1개 선택을 나타냅니다.
위 쿼리의 경우 선택 부분은 다 생략했고, 선택 불가한(꼭 넣어야 하는 내용인) 'Table이름', 'Column이름 데이터타입'만 사용했네요
CREATE TABLE 테이블이름
(
{컬럼이름 데이터타입 [NULL | NOT NULL | UNIQUE | DEFAULT 기본값 | CEHCK 체크조건]}
[PRIMARY KEY 속성이름(들)]
[FOREIGN KEY 속성이름 REFERENCES 테이블이름(속성이름)] [ON DELETE {CASCADE | SET NULL}]
);
선택항목들을 입문 시리즈에서 다 다루기엔 너무 어려울 수 있어서 필수 항목인 Table이름, Column이름, 데이터 타입에 다뤄볼게요
- Table 이름 : 이 Table의 이름을 말합니다. 사용자가 임의로 지정하는 값이고 SELECT문에선 FROM절에서 사용됩니다.
- Column 이름 : 각 항목. Column의 이름을 말합니다. 사용자가 임의로 지정하는 값이고 SELECT, WHERE 절에서 주로 사용됩니다.
- 데이터타입 : DBMS에서 지정해두는 데이터타입이 있습니다. Column이 어떤 데이터타입을 가지면 될지 명시해주는 부분입니다.
데이터타입
데이터 타입은 크게 4가지로 구분할 수 있습니다. 문자, 숫자, 날짜, LOB 타입입니다.
LOB 타입의 경우는 대용량 데이터를 저장할 수 있는 데이터 타입을 말합니다.
문자형 데이터 타입
문자형 데이터 타입은 말 그대로 문자를 저장하는 Column에 쓰이는 타입으로 괄호 안 숫자는 허용하는 Byte 크기를 의미합니다.
주로 사용되는 건 CHAR와 VARCHAR2인데 CHAR의 경우, 들어오는 값 길이가 고정적인 경우 (ex. Y , N) 사용되고 그 외에는
보통 VARCHAR2를 주로 사용합니다.
데이터 타입 | 설명 |
CHAR(n) | 고정길이 문자 / 최대 2000 Byte / 기본값은 1 byte |
VARCHAR2(n) | 가변길이 문자 / 최대 4000 Byte / 기본값은 1 byte |
NCHAR(n) | 고정길이 문자 / CHAR와 같지만, UTF-16 인코딩되어 다국어 입력 가능 / 최대 2000 Byte / 기본값은 1 Byte |
NVARCHAR(n) | 가변길이 문자 / VARCHAR와 같지만, UTF-16 인코딩되어 다국어 입력 가능 / 최대 2000 Byte / 기본값은 1 Byte |
LONG | 최대 2GB 크기의 가변길이 문자형. 하지만 주로 CLOB으로 대체되어 사용됨 |
RAW | 상대적으로 적은 양의 이진데이터 저장 / 최대 2000 Byte / 16진수, 2진수만 저장 가능 |
숫자형 데이터 타입
숫자형 데이터 타입은 숫자를 저장하는 Column에 쓰이는 타입이고, 주로 NUMBER형을 사용합니다.
괄호 안에 P는 전체 자리 수를 의미하고, S는 소수점 자릿수를 의미합니다. P와 S는 생략 가능하며 생략 시 기본값이 적용됩니다.
데이터 타입 | 설명 |
NUMBER(P,S) | 가변 숫자 / P (1~38, 기본값 38) / S (-84 ~ 127, 기본값 0) / 최대 22 Byte |
FLOAT(P) | NUMBER의 하위타입 / P (1~128, 기본값 128) / 이진수 기준 / 최대 22 Byte |
BINARY_FLOAT | 32비트 부동소수점 수 / 최대 4 Byte |
BINARY_DOUBLE | 64비트 부동소수점 수 / 최대 8 Byte |
날짜 데이터 타입
날짜 데이터 타입은 날짜를 저장하는 Column에 쓰이는 타입입니다. 보통 DATE 타입을 주로 사용합니다.
실무에선 데이터를 추가할 때 해당 데이터가 인입된 시점, 수정된 시점들을 기록해 놓기도 하는데 그럴 때 사용되곤 합니다.
데이터 타입 | 설명 |
DATE | BC 4712년 1월 1일부터 9999년 12월 31일, 연, 월, 일, 시, 분, 초 까지 입력 가능 |
TIMESTAMP | 연도, 월, 일, 시, 분, 초 + 밀리초까지 입력가능 |
LOB 데이터 타입
LOB은 Large Object의 줄임말입니다. 대용량 데이터, 가령 그래픽, 이미지, 사운드 등 비정형 데이터를 저장하거나 대용량의 텍스트값을 저장할 때 주로 사용됩니다. 문자형 데이터는 CLOB, NCLOB을 그래픽, 이미지, 동영상 등의 데이터는 BLOB을 주로 사용합니다.
데이터 타입 | 설명 |
CLOB | 문자형 대용량 객체 고정길이와 가변길이 문자집합 지원 |
NCLOB | 유니코드를 지원하는 문자형 대용량 객체 |
BLOB | 이진형 대용량 객체 |
BFILE | 대용량 이진 파일에 대한 위치,이름 저장 |
정리
이상으로 CREATE문과 데이터 타입에 대해 알아봤습니다.
초반 게시물에서 SQL 종류에 대해 다뤘었는데요.
CREATE문은 SQL 종류 중 DDL에 해당합니다. Table 구조를 관리하는 언어 종류죠.
앞서 배운 SELECT문, 이후 배울 INSERT문은 DML. 즉, Table 데이터를 조작하는 (조회, 추가 등) 언어 종류에 해당합니다.
SQL 종류로 봐도 알 수 있듯, 저희가 Table 구조를 조작할 일은 잘 없겠죠. 데이터 조작 업무가 훨씬 많을 것입니다.
하지만, 앞서 실습을 진행하기 위해서나 데이터 조작 시 참고를 위해서나
CREATE문과 데이터 타입은 어느 정도 알아 두는 게 도움이 되겠죠?
이번 장에선 Table을 만들었으나 다음 장에선 완성된 Table에 데이터를 넣기 위해 사용되는 INSERT문을 다뤄볼게요
이제 거의 끝이 보이네요, 앞으로도 열심히 정리해 보겠습니다. 🙂
[ 참고 ]
책 MySQL로 배우는 데이터베이스 개론과 실습
책 SQL 개발자 이론서 + 기출문제
블로그 코딩팩토리(https://coding-factory.tistory.com/416)
'Database > 엑셀로 배우는 SQL 실무 - 입문' 카테고리의 다른 글
[SQL] 엑셀로 배우는 SQL - 데이터 추가 (INSERT문, SELECT로 INSERT 하기) (0) | 2023.01.10 |
---|---|
[SQL] 엑셀로 배우는 SQL - 정렬 (ORDER BY ASC, DESC) (0) | 2023.01.08 |
[SQL] 엑셀로 배우는 SQL - 중복제거 (DISTINCT) (0) | 2023.01.07 |
[SQL] 엑셀로 배우는 SQL - NULL이란, IS NULL, IS NOT NULL (0) | 2023.01.06 |
[SQL] 엑셀로 배우는 SQL - 집계함수 (MIN, MAX, AVG, SUM, COUNT) (0) | 2023.01.05 |
댓글