이론에서는 SELECT, INSERT, DELETE, UPDATE 4가지를 DML로 보지만,
실무에서는 SELECT 를 DQL(Data Query Language)로 구분한다.
조회 (SELECT) 과 수정 (INSERT,DELETE,UPDATE)을 같이하는 것은 효율이 떨어진다. 또 동시 수정은 하면 안된다. 따라서 조회(Nosql)와 수정(rdbms)을 구분하는 것이다.
-- 기본형식
INSERT INTO 테이블이름(컬럼목록) VALUES(값나열);
-- tcity 테이블 구조 확인
desc tcity;

-- 하나의 데이터 삽입
INSERT INTO tCity(name,area,popu,metro,region) Value('제주',1,10,'y','제주');
-- 다른 방법(컬럼 목록 생략)
INSERT INTO tCity Value('제주',1,10,'y','제주');

모든 컬럼에 값을 대입할 때는 컬럼 목록을 생략하고 values에 순서대로 값을 나열해도 된다.
: 여러개의 데이터를 한꺼번에 삽입하는 것
truncate table tcity; -- 테이블의 모든 데이터 삭제

-- 여러 개 데이터 동시 삽입
INSERT INTO tCity (name, area, popu, metro, region) VALUES
('서울',605,974,'y','경기'),
('부산',765,342,'y','경상'),
('오산',42,21,'n','경기'),
('청주',940,83,'n','충청'),
('전주',205,65,'n','전라'),
('순천',910,27,'n','전라'),
('춘천',1116,27,'n','강원'),
('홍천',1819,7,'n','강원');

샘플데이터를 만들 때 사용하고 실제로는 잘 사용하지 않을 것이다.
: 다른 테이블로부터 조회한 목록을 삽입
INSERT INTO 테이블 이름(컬럼목록)
SELECT 컬럼 목록
FROM 원본테이블
INSERT INTO tStaff(name, depart, gender, joindate, grade, salary, score)
SELECT name, region, metro, '20210629', '신입', area, popu
FROM tCity
WHERE region = '경기';
새로운 테이블을 만들어 조회한 데이터를 삽입
CREATE TABLE 테이블이름 AS
SELECT 구문;
구조만 복사하고자 하는 경우에는 WHERE 절에 거짓인 조건을 기술하면 된다.
-- dept 테이블의 모든 데이터를 복사해서 새로운 테이블 생성
create table deptcopy as
select * from dept;
-- emp 테이블의 구조만 복사
create table empcopy as
select * from emp where 0=1;

여러개의 INSERT 구문을 수행할 때 INSERT와 INTO 사이에 IGNORE을 추가하면 에러가 발생하더라도 다음 스크립트를 수행한다
-- 테이블 생성
create table memberTBL(SELECT userID, name, addr FROM usertbl limit 3);
-- 제약조건 추가
ALTER TABLE MEMBERTBL ADD CONSTRAINT pk_memberTBL primary key(userid);

INSERT INTO memberTBL VALUES('karina', '카리나', '수원' );
INSERT INTO memberTBL VALUES('aeri', '지젤', '서울' );
SELECT * FROM memberTBL;
-- 기본키 중복 안되기 때문에 에러지만 수행은 가능
INSERT IGNORE INTO memberTBL VALUES('karina', '카리나', '수원' );
INSERT IGNORE INTO memberTBL VALUES('aeri', '지젤', '서울' );
SELECT * FROM memberTBL;

DELETE FROM 테이블이름 [WHERE 조건];
조건이 없으면 모든 데이터를 삭제한다.
-- 이름이 부산인 데이터 삭제
DELETE FROM tCity
where name = '부산';
-- 모든 데이터 삭제
DELETE FROM tCity;
작업취소 명령어
rollback;
UPDATE 테이블이름
SET 필드이름 = 새로운 값
[WHERE 조건];
-- tCity 테이블에서 name이 서울인 데이터의 popu는 1000으로 region은 충청으로 수정
UPDATE tCity
SET popu = 1000, region = '충청'
where name = '서울';

UPDATE DEPT
SET LOC = (SELECT LOC FROM DEPT WHERE DEPTNO = 20)
WHERE DEPTNO = 40;

DELET FROM EMP
WHERE DEPTNO = (SELECT DEPTNO FROM DEPT WHERE DNAME = 'SALES');