Data Manipulation language, DML
SELECT 검색
INSERT 삽입
UPDATE 수정
DELETE 삭제
그 테이블을 조작하는 언어를 데이터 정의 언어 data definition language, DDL 이라고 한다.
CREATE DATABASE [데이터베이스 이름]
CREATE DATABASE TestDB
DROP DATABASE TestDB
CREATE TABLE 테이블 이름 (
열1 자료형,
열2 자료형,
(...생략...)
)
e.g.
CREATE TABLE doit_create_table (
col_1 INT,
col_2 NVARCHAR(50,
col_3 DATETIME
)
DROP TABLE doit_create_table
현재 삭제하려는 테이블이 다른 테이블과 종속 관계이면서 부모 테이블인 경우 삭제에 실패
종속 관계에서 부모 테이블을 삭제하고 싶다면 자식 테이블과의 종속 관계를 제거한 뒤 자식 테이블을 모두 삭제해야 한다.
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)
VLUES (1, 'DoItSQL', '2021-01-01')
1) 테이블에 데이터를 삽립할 때 열 이름을 생략할 수 있다.
- 열 이름을 생략하려면 VALUES 문 뒤에 테이브르이 열 수선와 개수에 마주처 데이터를 채워야 한다
INSERT INTO doit_dml
VALUES (2, N'열 이름 생략', '2021-01-02')
INSERT INTO doit_dml(col_1, col_2)
VALUES (3, N'col_3 값 생략')
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')
CREATE TABLE doit_notnull(
col_1 INT,
col_2 NVARCHAR(50) NOT NULL
)
GO
INSERT INTO doit_notnull (col_1) VALUES (1)
UPDATE [테이블 이름] SET [열1 = 값1, 열2 = 값2, ...]
WHERE [열] = [조건]
UPDATE doit_dml SET col_2 = N'데이터 수정'
WHERE col_1 = 4
UPDATE doit_dml SET col_1 = col_1 + 10
DELETE [테이블 이름] WHERE [열] = [조건]
DELETE doit_dml WHERE col_1 = 14
관계형 데이터베이스는 데이터의 무결성을 유지해야 하므로 부모 테이블에 없는 데이터를 자식 테이브링 가지면 안 되는 것이 원칙이다
CREATE TABLE doit_parent (col_1 INT PRIMARY KEY);
CREATE TABLE doit_child (col_1 INT);
ALTER TABLE doit_child
ADD FOREIGN KEY (col_1) REFERENCES doit_parent(col_1);
INSERT INTO doit_parent VALUES (1)
INSERT INTO doit_child VALUES (1)
SELECT FROM doit_parent
SELECT FROM doit_child
DELETE doit_child WHERE col_1=1
DELETE doit_parent WHERE col_1=1
--자식 테이블을 삭제한 뒤 부모 테이블 삭제
DROP TABLE doit_child
DROP TABLE doit_parent
--제약 조건을 가진 테이블 다시 생성
CREATE TABLE doit_parent (col_1 INT PRIMARY KEY);
CREATE TABLE doit_child (col_1 INT);
ALTER TABLE doit_child
ADD FOREIGN KEY (col_1) REFERENCES doit_parent(col_1);
--제약 조건을 제거한 뒤, 부모 테이블 삭제
ALTER TABLE doit_child
DROP CONSTRAINT FKdoit_chilcol_1__44FF419A;
DROP TABLE doit_parent;
INSERT 대상테이블
SELECT 열 FROM 기존 테이블
--데이터를 저장할 테이블 생성
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';
--데이터 확인
SELECT * FROM doit_stock;
--테이블 삭제
DROP TABLE doit_stock;
검색 결과가 여러 테이블에서 조인한 것이고 열의 개수가 많으면, 매번 자료형을 확인하고 테이블을 생성한 다음 검색 결과를 입력하기란 쉽지 않다.
테이블의 데이터를 복사할 때 자주 사용하는 방법
SELECT문으로 검색한 데이터를 입력할 때 사용자가 정의한 테이블 이름으로 테이블을 자동으로 생성하고 데이터를 입력
SELECT 열 INTO 새로운 테이블 FROM 기존 테이블
--테이블 생성하며 검색된 데이터 입력
SELECT * INTO doit_stock2 FROM stock
WHERE symbol = 'MSFT'
and date >= '2021-01-01' and date < '2021-02-01';
--데이터 확인
SELECT * FROM doit_stock2;
--테이블 삭제
DROP TABLE doit_stock2;
퀴즈 10 숫자형식의 열3개(col_1,col_2,col_3)를 가진 doit_quiz 테이블을 생성
CREATE TABLE doit_quiz (
col_1 INT,
col_2 INT,
col_3 INT
)
퀴즈 11 doit_quiz의 테이블에 col_1, col_2, col_3 열 순서대로 (5, 3, 7) 데이터와 (1, 4, 9) 데이터를 삽입
INSERT INTO doit_quiz (col_1, col_1, col_3) VALUES (5, 3, 7), (1, 4, 9)
퀴즈 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
퀴즈 14 doit_quiz 테이블을 삭제
DROP TABLE doit_quiz