오늘은 DML 조작어(Data Manipulation Language) 중 UPDATE, DELETE(수정, 삭제) 빠르게 알아보도록 하겠습니다.
스겜 ㄱㄱ
UPDATE / SET
특정 행의 데이터를 수정하고 싶다면 update 날려줍니다.
UPDATE 테이블
SET 컬럼1 = 값, 컬럼2 = 값
WHERE 조건식
SET 뒤엔 컬럼마다 어떤 값으로 수정할 지 선택합니다.
WHERE 뒤엔 어떤 행을 업데이트 할 것인지 필터링을 넣어줍니다.
이게 맞을까요? 으구 이 순진한 사람아!!!
믿을 것 없는 세상 거짓말 일수도 있잖아요.
한번 직접 보도록 하시죠.
이전에 썼던 product 테이블입니다.
아이폰이 갑자기 자기네도 양심상 너무 비싸다며 갤럭시와 똑같이 130만원으로 낮춘다는 것입니다.
한번 수정해보도록 하죠.
UPDATE product
SET 가격 = 1300000
WHERE 상품명 = '아이폰15'
ㄹㅇ이네욤
UPDATE product
SET 가격 = 가격 + 1300000, 상품명 = '아이폰16'
WHERE 상품명 = '아이폰15'
값을 완전히 대체해버리는 것뿐만아닌 기존 값에서 사칙연산 지지고 볶고 할 수 있습니다.
그래서 SET 뒤에 나오는 = 기호는 프로그래밍 언어 할때 처럼
같다는 뜻이아닌, ‘좋은 말 할때 오른쪽 값을 왼쪽값에 넣어주세요^^’ 입니다.
삭제할땐? DELETE
특정 row(행)를 삭제하고 싶다면 DELETE 입니다.
DELETE FROM 테이블 WHERE 조건식
하면 됩니다. 그러면 조건식에 맞는 모든 행을 삭제해줍니다.
아까 product 테이블 마지막 행을 삭제하려면 어케할까요?
DELETE FROM product
WHERE id = 3
이러면 삭제됩니다.
근데 저희는 지금까지 sql을 좀 배웠기 때문에 어디가서 sql로 방귀좀 낀다하지 않습니까.
DELETE FROM product
ORDER BY id DESC
LIMIT 1;
id를 기준으로 내림차순으로 정렬하면 가장 마지막 값이 맨 위로 오겠죠?? 그리고 제일 위에 행 1개만 출력하는 LIMIT 을 사용해줍니다.
💡 참고
- 삭제 후 나중에 복구하거나 그러고 싶은 경우들이 종종있어서 삭제한 척만 해주거나, 삭제보다 특정 컬럼만 값을 비우는 식으로 하는 경우도 있슴다.(개발하는 사람 마음)
- 다른 테이블에서 FK로 사용중인 데이터는 삭제 불가(FK 사용중인 행부터 찾아서 삭제해야할 수 있음)
- UPDATE/DELETE 할때 WHERE 조건식 생략한다면 모든 행이 수정되는 불상사 일어남(본인이 WHERE 빼먹었다? 디제스터임;; 모른척하고 바로 퇴사하면 됩니다.)
응용 : JOIN & UPDATE
JOIN 한 테이블도 수정명령을 내릴 수 있습니다.
UPDATE A JOIN B
ON 조인조건
SET 수정할내용
WHERE 조건식
MySQL은 UPDATE 뒤에 JOIN 해놓은 테이블을 입력할 수 있습니다.
그러면 이제 SET, WHERE 을 이용해 그 테이블을 수정 할 수 있습니다.
응용 : JOIN & DELETE
마찬가지로 JOIN 한 테이블도 삭제명령 가능
DELETE A
FROM A JOIN B
ON 조인조건
WHERE 조건식
mysql은 DELETE FROM 뒤에 JOIN해놓은 테이블입력 가능합니다.
그럼 JOIN한 테이블에서 WHERE 조건식에 해당하는 row를 찾아서 지워줍니다.
근데 A테이블과 B테이블 중 어떤 테이블을 삭제할지는 DELETE 바로 뒤에 적어줍니다.(DELETE A, B ← 이러면 조건식에 맞는 행이 A,B테이블에서 전부 삭제됩니다.)
직접해보기
1. user_sales에 3번 first_name, last_name을 바꿔보겠습니다.
UPDATE user_sales
SET first_name = 'kuk', last_name = 'sungwoo'
WHERE id = 3;
2. user_sales에 이메일이 ‘google’이 포함된 행을 삭제해보겠습니다.
DELETE FROM user_sales
WHERE email LIKE '%google%';
분명 룰라가 있었는데
룰라가 없어졌습니다…..
3. user_sales 중 email 컬럼에 null값인 경우가 있습니다. 이메일이 공백인 곳에 test@test.com을 일괄적으로 채워주자구요. 아 그리고 first_name이 kuk인 사람은 admin@test.com으로 바꿔야합니다.
UPDATE user_sales
SET IF(fist_name = kuk, 'admin@test.com', 'test@test.com')
WHERE email = '';
4. 테이블에서 sales가 null인 부분을 일괄삭제 하고 싶습니다.
DELETE FROM user_sales
WHERE sales IS NULL;
'DI(Digital Innovation) > DataBase & SQL 뽀개기' 카테고리의 다른 글
저장 프로시저 stored procedure 쓰면 나도 알파메일 (0) | 2024.03.28 |
---|---|
table 대신 view 쓰는 이유!?!? (0) | 2024.03.28 |
데이터 넣거나 복사하려면 INSERT (5) | 2024.03.14 |
LEFT AND RIGHT(feat. jungkook of BTS) JOIN (1) | 2024.03.14 |
JOIN 하는게 쉬워보이면 그 분은 이미 전문가 (1) | 2024.03.07 |