MySQL | DML
포스트
취소

MySQL | DML

기본

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 ['삭제 조건']
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
바로가기