기본
INSERT
1
2
INSERT INTO `테이블`
VALUES (`값1`, `값2`);
1
2
INSERT INTO `테이블`(`필드1`, `필드2`)
VALUES (`값1`, `값2`);
- 테이블에 새로운 행을 삽입한다
- 삽입할 필드명을 생략한 경우 테이블의 필드 순서, 수를 일치시켜야 한다
UPDATE
1
2
3
4
UPDATE `테이블`
SET `필드1` = `값1`
,`필드2` = `값2`
WHERE `[조건]`
- 기존 레코드를 데이터를 변경할 때 사용한다.
- WHERE 조건이 없다면 모든 행의 값이 변경됨에 주의할 것
DELETE
1
2
DELETE FROM `테이블`
WHERE `[조건]`
- 기존 레코드를 삭제할 때 사용한다.
- WHERE 조건이 없다면 모든 행의 값이 삭제되므로 주의할 것
INSERT ON DUPLICATE KEY UPDATE
1
2
3
4
5
INSERT INTO `테이블명`(`필드1`, `필드2`)
VALUES (`값1`, `값2`)
ON DUPLICATE KEY UPDATE
`필드1` = `값1`, `필드2` = `값2`, ...
;
- 기존 레코드가 없다면 추가하고, 이미 존재한다면 변경하는 경우 사용한다.
- 변경할 필드 중 PRIMARY KEY인 필드가 존재해야 한다.
응용 및 심화
INSERT INTO SELECT
1
2
3
4
INSERT INTO `테이블`
SELECT `필드1`, `필드2`
FROM `테이블`
WHERE `[조건]`
1
2
3
4
INSERT INTO `테이블`(`필드1`, `필드2`)
SELECT `필드1`, `필드2`
FROM `테이블`
WHERE `[조건]`
SELECT
문의 결과를 다른 테이블에 넣는다VALUES
대신SELECT
가 들어간다SELECT
문의 필드 수와INSERT
문의 필드 수는 동일해야 하며 순서도 일치해야 한다
UPDATE SELECT
1
2
UPDATE `테이블`
SET `필드` = `서브쿼리`
1
2
3
4
UPDATE `테이블`
, `서브쿼리`
SET `필드1` = `값1`
WHERE `필드2` IN (`서브쿼리.필드`)
1
2
3
4
5
6
7
8
9
UPDATE `테이블`
SET `필드` = (
SELECT *
FROM (
SELECT `컬럼1`
FROM `...`
) AS `별명`
WHERE 조건
)
- UPDATE 문에서 서브쿼리를 사용한 형태
- 서브쿼리의 SELECT문에는 반드시 별명을 이용해야 한다
- 서브쿼리 결과는 단일 값이어야 한다
예시
한 번이라도 주문한 적이 있는 고객의 마일리지를 10% 인상하기
1
2
3
4
5
6
7
UPDATE 고객
,(
SELECT DISTINCT 고객번호
FROM 주문
) AS 주문고객
SET 마일리지 = 마일리지 * 1.1
WHERE 고객.고객번호 IN (주문고객.고객번호)
DELETE SELECT
1
2
3
4
5
DELETE FROM 테이블1
WHERE 필드 IN (
SELECT 필드
FROM 테이블2
)
DELETE
문에 서브쿼리를 사용한 형태
DELETE JOIN
1
2
3
4
5
6
DELETE 테이블1
, 테이블2
FROM 테이블1
JOIN 테이블2
ON ['JOIN 조건']
WHERE ['삭제 조건']