[MYsql]_데이터 조작어

Kingyj·2024년 12월 5일

데이터 조작어_(DML)

데이터 조작어 (Data Manipulation Language)는 데이터 삽입,조회, 수정, 삭제를 담당한다.

조작은 쉬워야지.

기본 조작어

  • INSERT (추가)

공책에 새로 이름을 적어 본다.
예: "손주 이름 추가하자!"

INSERT INTO 가족명단 (이름, 나이) VALUES ('영희', 25);

👉 영희, 25살이 가족 명단에 추가된다.

  • SELECT (읽기)

공책에서 이름을 찾아 본다.
예: "우리 가족 중에 누구 있지?"

SELECT * FROM 가족명단;

👉 가족명단에 있는 모든 내용을 보여준다.

  • UPDATE (수정)

공책에 잘못 적은 내용을 고치는 코드.
예: "철수가 30살인데 20살이라고 잘못 적었네!"

UPDATE 가족명단 SET 나이 = 30 WHERE 이름 = '철수';

👉 철수의 나이를 30살로 바꿔준다.

  • DELETE (삭제)

공책에서 이름을 지우는 거예요.
예: "이제 이 사람은 적을 필요 없네!"

DELETE FROM 가족명단 WHERE 이름 = '영희';

👉 영희를 명단에서 삭제한다.

요약

INSERT : 새로 적는다.
SELECT : 적힌 걸 읽는다.
UPDATE : 잘못된 걸 고친다.
DELETE : 필요 없는 걸 지운다.


조작어 확장 활용

  • 조건을 붙인 SELECT (필터링)

공책에서 특정 사람만 찾고 싶을 때
예: “30살 넘은 가족들만 보고 싶어!”

SELECT * FROM 가족명단 WHERE 나이 > 30;

👉 나이가 30살 넘는 사람들만 보여줘!

  • 정렬 (ORDER BY)

가족 명단을 나이 순서대로 정리하고 싶을 때
예: "나이 많은 사람부터 순서대로 보자!"

SELECT * FROM 가족명단 ORDER BY 나이 DESC;

👉 나이를 내림차순으로 정렬해!

  • 중복 제거 (DISTINCT)

중복된 데이터를 없애고 보고 싶을 때
예: “같은 나이가 여러 번 나오는 건 보기 싫어!”

SELECT DISTINCT 나이 FROM 가족명단;

👉 중복된 나이를 한 번만 보여줘!

  • LIMIT (개수 제한)

가족 명단 중 일부만 보고 싶을 때
예: “앞에서부터 딱 3명만 보여줘!”

SELECT * FROM 가족명단 LIMIT 3;

👉 가장 앞의 3명만 보여줘!

  • INSERT 여러 개 한 번에 추가

새로운 손주들 이름을 한꺼번에 추가할 때
예: "영수, 철수, 미희 추가!"

INSERT INTO 가족명단 (이름, 나이) 
VALUES ('영수', 15), ('철수', 20), ('미희', 25);

👉 한 번에 세 명 추가!

  • DELETE 조건 없이 싹 다 삭제

공책을 몽땅 비우고 싶을 때
예: "가족 명단 리셋하자!"

DELETE FROM 가족명단;

👉 명단에 있는 모든 사람 삭제!

  • 데이터 복사 (INSERT SELECT)

공책의 내용을 다른 공책에 복사하고 싶을 때
예: "어른들만 다른 명단에 적어야겠다!"

INSERT INTO 어른명단 (이름, 나이)
SELECT 이름, 나이 FROM 가족명단 WHERE 나이 > 18;

👉 가족명단에서 어른들만 어른명단에 추가!


  • TRANSACTION (트랜잭션 관리)

트랜잭션은 여러 작업을 한 묶음으로 처리하는 거다.
예: "명단을 고쳤다가 실수하면 다시 돌릴 수 있을까?"
BEGIN과 COMMIT 또는 ROLLBACK으로 처리해!

BEGIN; -- 트랜잭션 시작
UPDATE 가족명단 SET 나이 = 30 WHERE 이름 = '철수';
DELETE FROM 가족명단 WHERE 이름 = '영희';
COMMIT; -- 모든 작업 저장

👉 작업을 저장(Commit)하거나, 필요하면 취소(Rollback) 가능!

  • MERGE 데이터 (UPSERT)

업데이트하거나, 없으면 추가하는 기능이다.
예: "철수가 명단에 없으면 추가하고, 있으면 나이를 고쳐!"
MySQL에서는 INSERT ... ON DUPLICATE KEY UPDATE를 써:

INSERT INTO 가족명단 (이름, 나이) 
VALUES ('철수', 30) 
ON DUPLICATE KEY UPDATE 나이 = 30;

👉 철수가 없으면 추가, 있으면 나이 업데이트!

  • JOIN으로 데이터 연결

다른 공책에 있는 정보를 가져와서 연결할 수 있다.
예: "가족명단과 주소를 같이 보고 싶어!"

SELECT 가족명단.이름, 가족명단.나이, 주소.주소 
FROM 가족명단 
JOIN 주소 ON 가족명단.이름 = 주소.이름;

👉 가족명단과 주소를 연결해서 보여줘!

  • COUNT로 데이터 세기

몇 명이 있는지 세고 싶을 때
예: "우리 가족 몇 명이야?"

SELECT COUNT(*) FROM 가족명단;

👉 명단에 있는 사람 수를 세어줘!

  • GROUP BY로 데이터 묶기

데이터를 그룹으로 묶어서 통계 낼 수 있다.
예: "같은 나이인 사람 몇 명인지 알려줘!"

SELECT 나이, COUNT(*) 
FROM 가족명단 
GROUP BY 나이;

👉 나이별로 몇 명인지 보여줘!

  • HAVING으로 조건 추가

GROUP BY로 묶은 결과에 조건을 걸고 싶을 때
예: "5명 이상인 나이만 보여줘!"

SELECT 나이, COUNT(*) 
FROM 가족명단 
GROUP BY 나이 
HAVING COUNT(*) >= 5;

👉 나이별로 그룹화한 뒤 5명 이상인 나이만 보여줘!

  • 데이터 백업 및 복원 (INSERT SELECT 활용)

명단 복사: "명단을 다른 테이블로 백업하자!"

INSERT INTO 백업명단 SELECT * FROM 가족명단;

👉 가족명단의 데이터를 백업명단으로 복사!

  • DELETE 대신 TRUNCATE

공책 내용을 다 지울 때 TRUNCATE는 DELETE보다 빠르다.
예: "가족명단 싹 비우기!"

TRUNCATE TABLE 가족명단;

👉 명단을 한 번에 싹 비우는 명령어!

0개의 댓글