CS/데이터베이스

SQL (3) DML

hyomee2 2024. 7. 17. 17:29

1. DML(Data Manipulation Language)

: 데이터 조작 언어. 테이블에 값을 삽입/수정/삭제

(1) INSERT

: 새로운 행 추가

# menu_code의 default값이 auto_increment이므로, NULL을 입력해도 값이 들어간다.
# 특정 값을 입력해주면 그 값에 문제가 없는 한 INSERT가 되고, 
# auto_increment는 (특정값+1)부터 다시 계속된다.
INSERT
  INTO tbl_menu
VALUES
(
  NULL
, '바나나해장국'
, 8500
, 4
, 'Y'
);

 

- NULL 허용 가능컬럼 또는 auto_increment 컬럼을 제외하고 컬럼을 명시적으로 지정해서 INSERT할 수 있다.

INSERT
  INTO tbl_menu
(
  menu_name
, menu_price
, category_code
, orderable_status
)
VALUES
(
  '초콜릿죽'
, 6500
, 7
, 'Y' 
);

 

- 컬럼을 명시적으로 작성했을 경우 데이터의 순서를 바꿀 수도 있다.

INSERT
  INTO tbl_menu
(
  orderable_status
, menu_price
, menu_name
, category_code
)
VALUES
(
  'Y' 
, 5500
, '파인애플탕'
, 4
);

 

- 여러 행을 한 번에 INSERT도 가능하다.

# MULTI INSERT
INSERT
  INTO tbl_menu
VALUES
(NULL, '참치맛아이스크림', 1700, 12, 'Y'),
(NULL, '멸치맛아이스크림', 1500, 12, 'Y'),
(NULL, '소세지맛커피', 2500, 8, 'Y');

 

(2) UPDATE

: 테이블에 기록된 컬럼의 값을 수정

- 0~n개의 행이 업데이트되며, 테이블 전체 행의 수는 변화가 없다.

UPDATE tbl_menu
  SET category_code = 7
    , menu_name = "딸기맛붕어빵"
 WHERE menu_code = 24;

 

- SUBQUERY를 UPDATE절에 활용할 수 있다.

UPDATE tbl_menu
  SET category_code = 6
 WHERE menu_code = (SELECT menu_code
                      FROM tbl_menu
                     WHERE menu_name = '파인애플탕');

 

(3) DELETE

: 테이블의 행을 삭제

1) WHERE절을 이용한 삭제

DELETE
  FROM tbl_menu
 WHERE menu_code = 24;

 

2) LIMIT을 이용한 삭제(offset 지정 불가)

# menu_price로 정렬한 뒤 위에서 2행까지 삭제
DELETE
  FROM tbl_menu
 ORDER BY menu_price
 LIMIT 2;   # LIMIT를 이용해서 삭제할 땐 offset 지정은 불가

 

- 그런데 위의 코드를 실행하면 경고문이 뜨는데,

  DELETE 시에 WHERE을 이용해 조건문을 작성해주라는 경고문이다.

  이 경고를 보고 싶지 않다면, 아래와 같이 당연한 조건을 추가해서 코드를 작성해주면 된다.

DELETE
  FROM tbl_menu
 WHERE 1=1;

 

(4) REPLACE

: REPLACE를 통해 중복된 데이터를 덮어쓸 수 있다.

- PRIMARY KEY가 중복되면 에러가 뜬다.

INSERT
  INTO tbl_menu
VALUES 
(
  17  
, '참기름소주'
, 5000
, 10
, 'Y'
);
# 이미 17번이 있기에 에러가 뜬다. 이럴 때는 replace를 이용해 중복된 데이터를 덮어쓸 수 있다.

 

- 따라서 아래와 같이 REPLACE를 이용할 수 있다.

REPLACE 
  INTO tbl_menu   # into 생략도 가능하다.
VALUES 
(
  17 
, '참기름소주'
, 5000
, 10
, 'Y'
);

 

- REPLACE와 SET을 함께 쓰면 WHERE절 없이 업데이트가 가능하다.

REPLACE tbl_menu
    SET menu_code = 2
      , menu_name = '우럭쥬스'
      , menu_price = 2000
      , category_code = 9
      , orderable_status = 'N';

 

 

 

'CS > 데이터베이스' 카테고리의 다른 글

SQL(5) DDL (CREATE, ALTER, DROP, TRUNCATE)  (1) 2024.07.20
SQL (4) TRANSACTION  (0) 2024.07.17
SQL 실습 (2)  (0) 2024.07.17
SQL 실습(1)  (1) 2024.07.17
SQL(2) JOIN, GROUPING, ROLL UP, SUBQUERIES, SET OPERATORS  (0) 2024.07.16