비전공자 공부일기/:: DB - SQL

[한기교] SQL 활용 필기(7) - DML (INSERT, UPDATE, DELETE)

와니_ 2020. 5. 3. 13:10

데이터 삽입과 변경

 

< INSERT 절 >

ㅁ 단일행 입력

: 한번에 하나의 튜플을 테이블에 입력하는 방법

INSERT INTO 테이블명 [(속성명, ..., 속성명)]
VALUES (값, ..., 값)

- INTO 는 생략 가능

- 테이블명에 명시한 속성에 VALUES절에 지정한 값을 입력

- 테이블명에 속성을 명시하지 않으면 테이블 생성시 정의한 컬럼 순서와 동일한 순서로 입력함

 

 

ㅁ NULL의 입력

: 데이터를 입력하는 시점에서 해당 속성값을 모르거나, 미정일 때 사용

: NOT NULL 조건이 지정된 경우 입력이 불가능

 

1) 묵시적 방법

: INSERT INTO절에 해당 속성명 생략

 

2) 명시적 방법

: VALUES 절에 있는 속성값 대신 NULL 입력

 

 

ㅁ 서브 쿼리를 이용한 데이터 삽입

: 서브 쿼리의 결과를 테이블에 삽입

INSERT INTO 테이블
subquery


(ex)
INSERT INTO SAMPLETABLE
SELECT *
FROM EMPLOYEE
WHERE DNO = 30

- 한번에 여러 튜플 삽입 가능

- 서브쿼리의 결과 집합은 INSERT 명령문에 지정된 칼럼 개수와 데이터 타입이 일치해야 함

 

 

ㅁ 질의 결과를 새로운 테이블 생성 후 저장

SELECT 컬럼명, 컬럼명, ... INTO 대상테이블
FROM 테이블
WHERE 조건

단, 오라클의 경우 아래와 같이 작성해야 함

CREATE TABLE 테이블명
AS
SELECT 컬럼 리스트
FROM 테이블
[WHERE 조건]

*** 질의 결과로 만든 테이블은

1) 기존 테이블의 속성명과 타입 그대로 적용

2) NOT NULL 조건 그대로 적용

3) 다른 제약조건은 적용되지 않음

 

 

ㅁ 테이블 구조의 복사

: 구조만 복사하고 튜플들은 복사하고 싶지 않은 경우

 

- SELECT ~ INTO ~ 구문 사용

- WHERE 조건에 항상 거짓이 되는 조건을 기술함

---> SELECT문의 결과에 아무것도 조회되지 않음

---> 따라서 내용 없이 테이블의 구조만 복사 가능

SELECT * INTO 대상 테이블
FROM 복사할 테이블
WHERE 항상 거짓인 조건문

 

 

ㅁ 테이블의 구조 검색문

 

- 오라클

DESCRIBE[DESC] 테이블명

 

- MS SQL  --- 저장 프로시저를 수행시키기 위하여 EXEC명령어가 필요

sp_help 테이블명

 

 

 

ㅁ VALUES 이용한 다중행 입력

: MS-SQL 2008부터는 서브쿼리가 아닌 VALUES를 이용해서도 다중행 삽입이 가능

INSERT INTO table1
VALUES (속성값들), (속성값들)

 

 

 

< UPDATE 구문>

ㅁ UPDATE ~ SET 키워드

UPDATE 테이블명
SET column = 값, ...
[WHERE 조건]                   --> 생략 시 테이블의 모든 행이 수정됨

 

ㅁ 서브쿼리를 이용한 데이터 수정

- UPDATE문의 SET 절에서 서브 쿼리를 이용

- 다른 테이블에 저장된 데이터를 검색하여 한번에 여러 속성값을 수정할 수 있음

- SET절의 속성명은 서브 쿼리의 속성명과 달라도 됨

 

 

ㅁ 복수 속성값 변경

: 하나 이상의 속성값 한번에 변경

 

UPDATE 테이블명
SET 속성1=값1, 속성2=값2, ...
[WHERE 조건]

 

 

< DELETE 구문 >

 

ㅁ DELETE문 (데이터 삭제)

: 테이블에 저장된 데이터 삭제를 위한 조작어

DELETE [FROM] 테이블     ---> 테이블 제거가 아닌, 테이블 속 튜플 삭제
[WHERE 조건]             ---> 생략되면 테이블의 모든행 삭제

 

ㅁ 서브쿼리를 이용한 데이터 삭제

- WHERE 절에서 서브쿼리 이용

- 다른 테이블에 저장된 데이터를 검색하여 한번에 여러 행 삭제

- WHERE절의 속성명은 서브 쿼리의 속성명과 달라도 됨