SQL 시작하기: CREATE 문
데이터 조작 언어(Data Manipulation Language, DML)는 테이블에 데이터를
검색(SELECT)
삽입(INSERT)
수정(UPDATE)
삭제(DELETE)
하는데 사용된다. 즉, DML의 대상은 테이블이므로 반드시 테이블이 있어야 한다.
바로 그 테이블을 조작하는 언어를 데이터 정의 언어(Data Definition Language, DDL)라 한다.
데이터 정의 언어(DDL)는 데이터베이스, 테이블, 뷰, 인덱스 등의 개체를
생성(CREATE)
삭제(DROP)
변경(ALTER)
한다.
데이터베이스 생성하고 삭제하기
데이터베이스 생성하는 CREATE 문의 기본 형식
CREATE DATABASE [데이터베이스 이름]
Create DATABASE TestDB
DROP 문으로 데이터베이스 삭제하기
DROP DATABASE [데이터베이스 이름]
Drop DATABASE TestDB
테이블 생성하고 삭제하기
테이블 생성하는 CREATE 문의 기본 형식
CREATE TABLE [테이블 이름] (
열 1 자료형,열 2 자료형, ...)
Create TABLE doit_create_table(
col_1 INT,
col_2 NVARCHAR(50),
col_3 DATETIME
)
DROP 문으로 테이블 삭제하기
DROP TABLE [테이블 이름]
Drop TABLE doit_create_table
테이블에 데이터 삽입, 수정, 삭제하기
INSERT 문의 기본 형식
INSERT INTO 테이블 [열1, 열2, ...] VALUES [값1, 값2,...]
우선 테이블을 생성한다.
USE DoItSQL;
Create TABLE doit_dml(
col_1 INT,
col_2 NVARCHAR(50),
col_3 DATETIME
)
GO
INSERT INTO doit_dml (col_1, col_2, col_3) VALUES(1, 'DoItSQL', '2021-01-01')
select * from doit_dml ← 테이블 확인
INSERT 문의 특이 사항
첫째, 테이블에 데이터를 삽입할 때 열 이름을 생략할 수 있다. 다만, 테이블의 열 순서와 개수에 맞춰 데이터를 채워야 한다
INSERT INTO doit_dml VALUES(2, N'열 이름 생략', '2021-01-02')
col_1, col_2만 입력하려면?
INSERT INTO doit_dml(col_1, col_2) VALUES(3, N'col_3 생략')
삽입하려는 데이터의 순서 변경
INSERT INTO doit_dml(col_1, col_3, col_2) VALUES(4, '2021-01-03', N'열 순서 변경')
여러 데이터를 한 번에 삽입하고 싶다면, 소괄호로 묶어 쉼표로 구분한다.
INSERT INTO doit_dml (col_1, col_2, col_3)
VALUES (5, N'데이터 입력 5', '2021-01-03'), (6, N'데이터 입력 6', '2021-01-03'), (7, N'데이터 입력 7', '2021-01-03')
참고, NULL을 허용하지 않도록 테이블을 생성하려면
CREATE TABLE doit_notnull(
col_1 INT,
col_2 NVARCHAR(50) NOT NULL
col_3 DATETIME
)
GO
INSERT INTO doit_notnull(col_1) VALUES(1) ← 실행시 에러 발생
INSERT INTO doit_notnull(col_1, col_2) VALUES(1, N'not null') ← 정정
UPDATE 문으로 데이터 수정하기
UPDATE 문의 기본 형식
UPDATE [테이블 이름] SET [열1=값1, 열2=값2,...] WHERE [열]=[조건값]
UPDATE doit_dml SET col_2 = N'데이터 수정' WHERE col_1= 4
해석: col_1에서 4를 값는 행의 col_2 내용을 '데이터 수정'으로 수정하라
테이블 전체의 col_1에 10을 더하라
update doit_dml set col = col_1 + 10
DELETE 문으로 데이터 삭제하기
DELETE 문의 기본 형식
DELETE [테이블 이름] WHERE [열]=[조건값]
DELETE doit_dml WHERE col_1= 14
해석: col_1에서 14 값을 갖는 행을 삭제하라
DELETE doit_dml
전체 삭제
다른 테이블에 검색 결과 입력하기
INSERT ... SELECT 문
INSERT 대상 테이블 SELECT 열 FROM 기존 테이블
stock 테이블에서 symbol이 'MSFT'이고, 2021년1월1일부터 2021년1월31일까지의 데이터를 doit_stock 테이블에 저장하라.
테이블 생성
CREATE TABLE doit_stock(
date DATETIME,
symbol NVARCHAR(255),
[open] FLOAT,
[high] FLOAT,
[low] FLOAT,
[close] FLOAT,
adj_close FLOAT,
volume bigint
);
쿼리
insert doit_stock select * from stock where symbol ='MSFT' and date >= '2021-01-01' and date < '2021-02-01'
새 테이블을 생성하며 검색 결과 입력하기
INSERT ... INTO 기본 형식
SELECT 열 INTO 새 테이블 FROM 기존 테이블
stock 테이블에서 symbol이 'MSFT'이고, 2021년1월1일부터 2021년1월31일까지의 데이터를, doit_stock2 테이블을 자동으로 생성한 뒤 저장하라. 이후 doit_stock2 테이블을 사용하지는 않을 것이므로 테이블 삭제 쿼리도 입력하라.
select * into doit_stock2 from stock where symbol ='MSFT' and date >= '2021-01-01' and date <'2021-02-01' ;
해석: stock 테이블에 있는 모든 열을 doit_stock2 테이블에 저장하는데, 그 중에서 symbol ='MSFT'이고 날짜가 1.1-1.31까지인 것만 저장하겠다.
select * from doit_stock2 ;
drop table doit_stock2;
퀴즈 10. 숫자 형식의 열 3개(col_1, col_2, col_3)를 가진 doit_quiz 테이블을 생성하세요.
crerate table doit_quiz(
col_1 int,
col_2 int,
col_3 int,
)
퀴즈 11. doit_quiz 테이블에 col_1, col_2, col_3 열 순서대로 (5,3,7) epdlxjdhk (1,4,9) 데이터를 삽입하세요.
insert into doit_quiz values(5,3,7),(1,4,9)
select * from doit_quiz
퀴즈 12. doit_quiz 테이블에서 col_2 값이 3인 데이터를 5로 수정하세요.
update doit_quiz set col_2 = 5 where col_2 = 3
퀴즈 13. doit_quiz 테이블에서 col_1 값 5를 삭제하세요.
delete doit_quiz where col_1=5
퀴즈 12. doit_quiz 테이블을 삭제하세요.
drop table doit_quiz