MySQL

(DB) UPDATE 구문과 조건절 -10

mynote6676 2025. 5. 9. 15:47

학습 목표

-UPDATE 구문을 통해 테이블의 데이터를 수정하는 방법을 이해한다.

- WHERE 절을 활용하여 조건에 맞는 레코드(행)만 정확히 수정하는 방법을 익힌다.

-----------------------------------------------------------------------------------------------------------------

 

1.UPDATE 구문이란?

 

더보기

UPDATE구문은 테이블의 기존 데이터를 수정할 때 사용하는 SQL 명령어입니다.

 

기본 구조:

UPDATE 테이블명

SET 컬럼1 = 값1, 컬럼2 = 값2, ............

WHERE 조건;

 

설명

-SET: 변경하고 싶은 컬럼과 새 값을 지정

-WHERE : 어떤 행을 수정할지 지정( 생략 시 모든 행이 수정 됨 -> 주의)

-실수 방지를 위해 UPDATE 전에 SELECT로 조건을 확인하는 것이 좋음

 

예시 

UPDATE`order` --> order은 지금 MySQL에서 예약어로 설정되어 있기에 그냥 사용 불가  `order` 백키 사용후 가능

SET qyantity = 5

WHERE id = 1; -------> id 가 1인 주문의 수량을 5로 변경 

 

 

 

2. order 테이블 샘플 데이터

 

더보기

CREATE TABLE `order`(

id INT  PRIMARY KEY,

order_name VARCHAR(20) NOT NULL,

product_name VARCHAR(20) NOT  NULL,

quantity INT NOT NULL,

order_date DATE NOT NULL

);

 

INSERT INTO `order` (id, order_name, product_name , quantity ,order_date)values

(1, '홍길동', '피자', 2, '2022-02-26'),

(2, '김영희', '치킨', 3, '2022-02-26'),

(3, '이철수', '햄버거', 1, '2022-02-27'),

(4, '박지민', '스테이크', 2, '2022-02-27'),

(5, '최영희', '짬뽕', 1, '2022-02-27'),

(6, '박서준', '초밥', 3, '2022-02-28'),

(7, '김민지', '파스타', 2, '2022-02-28'),

(8, '정재은', '토스트', 1, '2022-02-28'),

(9, '신은주', '감바스', 2, '2022-03-01'),

(10, '유지훈', '돈까스', 1, '2022-03-01');

3. UPDATE 실습 예제

더보기

 

◆ 단일 조건 수정

-- ID 가 2인 주문의 수량을 4로 수정

UPDATE 'order'

SET quantity = 4

WHERE id = 2;

 

-- ID 가 4인 주문의 상품명을 '파스타'로 변경

UPDATE `order` 

SET product_name = '파스타'

WHERE id = 4;

 

-- ID가 6인 주문의 날짜를 2022-03-01로 변경

UPDATE `order`

SET order_date = '2022-03-01

WHERE id = 6;

 

◆  복합 조건 수정

 

-- 수량이 2 이상이고, 상품명이 ' 피자'인 경우 주문자를 '김철수'로 변경

UPDATE `order` 

SET order_name = '김철수'

WHERE quantity AND product_name  = '피자';

 

-- 주문일이 2022-02-28이고 상품이 '초밥' 인 경우 수량을 6으로 변경

UPDATE `order` 

SET quantity = 6

WHERE order_date = '2022-02-28'  AND product_name  = '초밥';

 

◆ 테이블 구조 변경 + UPDATE

--address 컬럼 추가

alter table `order` add address varchar(20);

 --  수량이 1 이하이고, 상품이 '감바스'안 경우 주소를 '서울시 강남구'로 설정

UPDATE `order` 

SET address = '서울시 강남구'

WHERE quantity <= 1 AND product_name  = '초밥';

도전 과제

더보기

-- 도전 과제
 -- (id, order_name, product_name, quantity, order_date)
 -- 1. id 가 3부터 7인 주문들의 수량을 3 으로 수정
 
select *
from `order`
where id between 3 and 7;

update`order`
set quantity = 3
where id between 3 and 7;
 
 -- 2. -- 주문일이 2022-02-26인 주문의 상품명을 '샐러드'로 변경 
 
 select *
from `order`
where order_date = '2022-02-26';

update`order`
set product_name = '샐러드'
where order_date = '2022-02-26';
 
 -- 3. 주문자가 '김민지'이고 수량이 3인 경우, 주소를 '경기도 수원시 ' 로 수정
 
 select *
from `order`
where order_name ='김민지' and quantity = 3;

update`order`
set address = '경기도 수원시'
where order_name ='김민지' and quantity = 3;
 
 -- 4. 문제 스스로 하나 만들어서 풀어보기
 -- 성이 김씨인 사람의 주소를 '경기도 수원시'로 바꿔주세요 그리고 그 사람들의 주문 상품명을 '삼다수'로 변경해주세요
 select *
from `order`
where order_name like '김%'; 

update`order`
set address = '경기도 수원시',product_name = '삼다수'
where order_name like '김%';

-- 4.*) 주소값이 null이면 주소를 서울시 송파구로 변경하시오
 select *
from `order`
where address is not null;

update`order`
set address = '서울시 송파구'
where address is null;

-- 수량이 3보다 낮거나 같고,  성이 '김'으로 시작하는 주문자들의 주소를 '경상남도 김해시'로 수정
 select *
from `order`
where quantity <= 3 and order_name like '김%';

update`order`
set address = '경상남도 김해시'
where quantity <= 3 and order_name like '김%';

-- 성이 김씨가 아니며 수량이 2이하이고 주소가 없는 사람의 주소를 '부산광역시 사상구'로 변경하시오
 select *
from `order`
where quantity <= 2 and order_name not like '김%';

update`order`
set address = '부산광역시 사상구'
where quantity <= 2 and order_name not like '김%';

-- 수량이 2이하이고 주문일이 2022년 02월 이면 이름을 콜라로 바꿔주세요

 select *
from `order`
where quantity <= 2 and order_date like '2022-02%';

update`order`
set product_name = '콜라'
where quantity <= 2 and order_date like '2022-02%';

-- id 1번과 5번의 주소를 각각 경상도 양산시, 부산시 연제구로 수정한 뒤, 도시 단위가 'OO시 OO구'인 사람을 전체 출력해주세요.

select *
from `order`
where address like ('%시 %구');

update`order`
set address = '경상도 양산시'
where id = 1 ;

update`order`
set address = '부산시 연제구'
where id = 5 ;

5.주의할 점

- WHERE 절을 생략하면 전체 레코드가 수정됨(큰 실수 주의!!)

- 반드시 SELECT * FROM order, 로 결과 확인