IT Story/SQL Story

SQL 시작하기: CREATE 문

bravesong 2022. 11. 24. 14:59

데이터 조작 언어(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