본문 바로가기
Do it! SQL 입문/이론

SQL 시작하기

by Hwanii_ 2023. 6. 18.
728x90

03-6 테이블 생성하고 데이터 조작하기

p.106 ~ 128

 

1.

데이터 조작 언어 DML은 테이블에 데이터를

검색, 삽입, 수정, 삭제 하는데 사용 한다.

SELECT, INSERT, UPDATE, DELETE가 이에 해당한다.

 

즉, DML의 대상은 테이블 이므로

DML을 사용하려면 반드시 테이블이 있어야 한다.

 

바로 그 테이블을 조작하는 언어를 데이터 정의 언어 == DDL 이라 한다.

 

DDL은 데이터베이스, 테이블, 뷰, 인덱스 등의 개체를 CREATE, DROP ALTER 한다.

(각각 생성, 삭제, 변경 을 의미)

 

참고

 

DML :

data manipulation language

 

DDL : 

data definition language

 

2.

사실, DDL의 경우는 데이터베이스 관리자만 사용하기 때문에,

 

DML을 중점적으로 익혀두기로 하자.

 

3.

데이터베이스 생성하고 삭제하기

 

생성은 CREATE 문을 사용한다.

 

 

 

삭제는  DROP 문을 사용한다.

 

4.

USE 문으로 데이터베이스를 선택 한다.

 

 

5.

가지고 있는 테이블 확인

 

 

아무것도 없으면 EMPTY로 뜬다.

 

 

6.

테이블 생성하고 삭제하기

 

 

3개의 열을 생성했다.

각 열의 자료형은 숫자, 문자, 날짜형 이다.

 

테이블을 삭제하려면

 

DROP 문을 사용한다.

 

DROP TABLE TEST01 

 

하면 해당 TABLE이 바로 삭제된다.

 

 

만약, 현재 삭제하려는 테이블이 다른 테이블과 종속 관계이면서

부모 테이블인 경우는 삭제에 실패 한다.

 

이런경우, 테이블을 삭제하려면 

종속 관계를 모두 제거한 뒤 자식 테이블을 모두 삭제 해야 한다.

 

7.

테이블에 데이터 삽입, 수정, 삭제 하기

 

INSERT 문으로 데이터를 삽입한다.

 

INSERT INTO 테이블 (칼럼명1, 칼럼명2, 칼럼명3, ..) VAULES (값1, 값2, 값3, ..)

 

데이터를 삽입, 수정, 삭제하려면 테이블이 필요 하다.

 

데이터를 삽입할 때 자료형과 맞지 않으면 오류가 발생한다.

 

 

8.

NULL을 허용하지 않도록 테이블을 생성하기

 

NULL은 어떠한 값도 정의되지 않은 상태를 의미한다.

 

테이블에 NULL이 생성됬으면 그 이유로는 

테이블을 생성할 때 NULL을 허용했기 때문이다.

 

만약 NULL을 허용하지 않도록 열을 정의하면 

NULL을 삽입할 때 오류가 발생한다.

 

CREATE TABLE TEST01 (

칼럼명1 INT,

칼럼명2 NVARCHAR(50) NOT NULL

);

 

으로 TABLE을 생성하면

칼럼명2에 해당하는 값은 NULL을 넣을 수 없게 된다.

 

 

9.

UPDATE 문으로 데이터 수정하기.

 

테이블에 삽입된 데이터를 수정하려면 UPDATE 문을 사용한다.

UPDATE 문의 기본 형식은 아래와 같다.

 

UPDATE [테이블 이름] SET [열1 = 값1, 열2 = 값2, 열3 = 값3, ..]

WHERE [열] = [조건]

 

UPDATE 문은 사용 방법이 매우 간단하며, WHERE 문을 생략 할 수 있다.

 

하지만 WHERE 조건을 누락하면 테이블의 전체 데이터가 수정되므로

사용할 때 조건에 대해서 항상 주의하도록 해야 한다.

 

어떤 열의 데이터를 새롭게 SET 할건지 열을 지정해줘야 원하는

값만 SET 할 수 있게 된다.

 

10.

DELETE 문으로 데이터 삭제하기.

 

기본형식은 아래와 같다.

 

DELETE [테이블 이름] WHERE [열] = [조건]

 

근데,

MySQL 에서 DELETE 구문을 사용할때 FROM을 넣어줘야 에러가 나지 않는다.

 

 

11.

외래키로 연결된 데이터 입력, 삭제 하기

 

 관계형 데이터베이스는 테이블 간 참조 관계 이다.

 

>>

관계형 데이터베이스는 데이터의 무결성을 유지해야 하므로,

부모 테이블에 없는 데이터를 자식 테이블이 가지면 안 되는 것이 원칙이다.

 

이 원칙을 유지하면 데이터가 잘못 입력되거나 삭제되는 것을 방지할 수 있다.

 

12.

외래키는 테이블이 관계를 구성할 때 참조하는 열을 의미한다.

 

[ 회원 ]

회원 번호 회원 이름 회원 주소
1000 이지스 서울
1001 퍼블리싱 대전
1002 주식회사  제주도

 

[ 주문 ]

주문 번호 회원 번호 주문 상품 배송 주소
100 1000 SQL 서울
101 1001 SQL 대전
102 1000 SQL 서울

 

위의 이미지는,

회원 테이블의 회원 번호 열이 기본키 (PK) 이고,

주문 테이블의 회원 번호 열이 외래키 (FK) 이다.

 

부모, 자식 테이블 생성

 

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은

컬럼 추가, 컬럼 변경 (타입 등을 변경), 컬럼 이름 변경, 컬럼 삭제, 테이블 이름 변경 을 가능하게 한다.

 

만약에,

INSERT INTO doit_child VALUES (1) 을 하면,

자식 테이블에 데이터를 입력하는 구문인데,

부모 테이블에 해당 데이터가 없는 상태이므로, 오류가 발생한다.

 

이러한 오류는 부모 테이블에 데이터를 먼저 입력해야 해결할 수 있다.

부모 테이블에 데이터를 입력하고 같은 데이터를 자식 테이블에 입력하면 정상적으로 데이터를 입력 가능 하다.

 

INSERT INTO doit_parent VALUES (1)

INSERT INTO doit_child VALUES (1)

 

SELECT * FROM doit_parent

SELECT * FROM doit_child

 

13.

12의 부모 테이블의 데이터만 삭제를 시도.

외래키 제약 조건으로 오류가 발생한다.

 

DELETE doit_parent WHERE col_1 = 1

>> 불가능

 

위의 오류를 수정하려면, 자식 테이블의 데이터를 먼저 삭제하고,

부모 테이블의 데이터를 삭제해야 한다.

 

DELETE doit_child WHERE col_1 = 1

DELETE doit_parent WHERE col_1 = 1

>> 가능

 

14.

이번에는 테이블 삭제를 시도.

 

앞에서는 입력하는 데이터가 부모 테이블에 있는지 여부에 따라 입력과 삭제가 영향을 받았다.

 

하지만, 테이블 삭제의 경우 데이터가 없고 외래키 설정만 되어 있어도 오류가 발생 한다.

 

DROP TABLE doit_parent

>> 불가능

 

만약 외래키가 설정된 테이블을 삭제하려면 자식 테이블, 부모 테이블 순서로 삭제해야 한다.

 

DROP TABLE doit_child

DROP TABLE doit_parent

>>  가능

 

만약, 자식 테이블의 데이터는 유지하면서 부모 테이블을 삭제하고 싶으면

제약 조건을 제거해서 테이블 삭제를 진행하는 방법도 존재 한다.

 

제약 조건을 삭제하는 명령어는 DROP CONSTRAINT 이다.

이때 제약 조건의 이름을 명시해야 한다.

 

-- 제약 조건을 가진 테이블 다시 생성.

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 FK__doit_chil__col_1__44FF419A;

 

DROP TABLE doit_parent;

 

테이블명을 드래그한 상태에서 ALT + F1을 누르면 해당 창이 뜬다.

 

 

 

테이블의 제약 조건을 확인해서, FK를 DROP 하고,

부모 테이블 삭제를 할 수 있다.

 

위의 내용은 외래키 관련 내용이였고, 외래키를 생성하거나 테이블을 삭제 하는 등의 작업은

해당 테이블을 사용하는 여러 서비스에 영향을 미칠 수 있다.

 

간단하게 정리했고, 이런 기능과 문법이 있다는 정도 정리 하겠다.

 

15.

다른 테이블에 검색 결과 입력하기.

 

데이터를 다루다 보면 검색 결과를 다른 테이블에 입력하고 싶을 수 있다.

 

INSERT... SELECT문을 조합하면, 검색 결과를 다른 테이블에 입력할 수 있다.

 

INSERT ... SELECT 문의 기본 형식.

>>

INSERT 대상 테이블 SELECT 열  FROM 기존 테이블

 

16.

-- 데이터를 저장할 테이블 생성

 

CREATE TABLE doit_stock (

date DATETIME,

symbol NVARCHAR(255),

[open] FLOAT,

[high] FLOAT,

[low] FLOAT,

[close] FLOAT,

adj_close FLOAT,

volume bigint

);

 

 

 

-- 데이터 확인

SELECT * FROM doit_stock;

 

-- 테이블 삭제

DROP TABLE doit_stock;

 

INSERT ... SELECT 문으로 데이터를 입력할 때는 앞에서 배운 INSERT 문과 마찬가지로

열 개수와 자료형이 일치해야 한다.

 

17.

새 테이블을 생성하며 검색 결과 입력하기

 

SELECT ... INTO 기본 형식

 

>> 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;

 

반응형

'Do it! SQL 입문 > 이론' 카테고리의 다른 글

테이블을 서로 통합하는 조인  (0) 2023.06.21
SQL 시작하기  (0) 2023.06.21
나만의 SQL 실습 환경 만들기  (0) 2023.06.18
SQL 시작하기  (1) 2023.06.16
SQL 시작하기  (1) 2023.06.16