SQL - DELETE 쿼리: 초보자를 위한 친절한 가이드

안녕하세요, SQL 열정가 여러분! 오늘 우리는 SQL DELETE 쿼리의 세계로 뛰어들어 보겠습니다. 프로그래밍에 처음이라면 걱정 마세요 - 저는 여러 해 동안 수많은 학생들을 가르치면서 단계별로 안내해 왔습니다. 커피(또는 차, 당신이 좋아하는 것이라면)를 한 잔 마시고, 시작해 보세요!

SQL - Delete Query

SQL DELETE 문

dig ital 사진 앨범을 정리하는 상상해 보세요. 가끔 특정 사진을 지우고 싶을 때가 있죠? SQL에서 DELETE 문은 exact ly 이와 같은 작업을 수행합니다 - 우리는 데이터베이스 테이블에서 원치 않는 데이터를 제거합니다.

DELETE 문의 기본 문법은 다음과 같습니다:

DELETE FROM table_name
WHERE condition;

이를 해부해 보면:

  • DELETE FROM: SQL에 특정 테이블에서 무언가를 지우고 싶다고 알립니다.
  • table_name: 당신의 테이블 이름으로 변경하세요.
  • WHERE: 선택 사항이지만 중요합니다. 지울 행을 지정합니다.
  • condition: 지우기 위한 기준을 설정합니다.

예제 1: 단일 행 지우기

students 테이블이 있고, John Doe라는 학생을 지우고 싶다고 가정해 봅시다:

DELETE FROM students
WHERE name = 'John Doe';

이 쿼리는 name이 정확히 'John Doe'인 행을 지웁니다. 하지만 조심하세요! 여러 명의 John Doe가 있다면, 그들 모두가 지워질 수 있습니다.

예제 2: 수치 조건에 따른 지우기

이제 25세 이상인 모든 학생을 지우겠습니다:

DELETE FROM students
WHERE age > 25;

이 쿼리는 age가 25 이상인 모든 행을 지웁니다. 데이터베이스에게 "이제 차를 대여할 수 있는 나이가 된 사람들 모두를 지워줘!"라고 말하는 것과 같습니다.

여러 행 지우기

특정 조건을 만족하는 여러 행을 지우고 싶을 때도 있습니다. 몇 가지 예제를 살펴보겠습니다.

예제 3: 여러 조건을 포함한 행 지우기

30세 이상이고 GPA가 2.5 이하인 모든 학생을 지우고 싶다고 가정해 봅시다:

DELETE FROM students
WHERE age > 30 AND gpa < 2.5;

이 쿼리는 두 조건을 AND로 결합하여 만족하는 행을 지웁니다. "30세 이상이고 학업적으로 어려움을 겪고 있는 학생들을 모두 지워줘!"라고 말하는 것과 같습니다.

예제 4: 값 목록에 따른 행 지우기

특정 도시에서 온 학생들을 지우고 싶다면, IN 연산자를 사용할 수 있습니다:

DELETE FROM students
WHERE city IN ('New York', 'Los Angeles', 'Chicago');

이 쿼리는 New York, Los Angeles, 또는 Chicago에서 온 모든 학생을 지웁니다. VIP 명단을 만드는 것과 같지만, 지우기 위해서입니다!

테이블에서 모든 레코드 지우기

가끔 테이블 전체를 비우고 싶을 때가 있습니다. 옷장을 비우고 새로 시작하려는 것과 같습니다. 다음과 같이 합니다:

DELETE FROM table_name;

예를 들어, students 테이블의 모든 레코드를 지우는 경우:

DELETE FROM students;

⚠️ 경고: 이 명령어는 매우 조심스럽게 사용하세요! 방화촬로 방을 청소하는 것과 같이 효과적이지만, 잘못 사용하면 재앙이 될 수 있습니다.

여러 테이블에서 레코드 지우기

이제 한 단계 더 업그레이드해 보겠습니다. 때로는 여러 관련 테이블에서 레코드를 동시에 지워야 합니다. 이 부분은 조금 더 복잡하지만, 걱정 마세요 - 저와 함께 단계별로 진행해 보겠습니다.

예제 5: JOIN을 사용한 여러 테이블에서 지우기

studentsenrollments 두 개의 테이블이 있다고 가정해 봅시다. 등록비를 지불하지 않은 학생들의 등록 기록과 학생 기록을 모두 지우고 싶습니다:

DELETE students, enrollments
FROM students
JOIN enrollments ON students.id = enrollments.student_id
WHERE students.fees_paid = 0;

이 쿼리는 다음과 같은 작업을 수행합니다:

  1. studentsenrollments 테이블을 결합합니다.
  2. 등록비를 지불하지 않은 학생을 찾습니다.
  3. 해당 레코드를 두 테이블에서 모두 지웁니다.

등록된 연락처를 지우고 동시에 해당 연락처가 포함된 모든 그룹 채팅에서도 지우는 것과 같습니다!

예제 6: 서브쿼리를 사용한 지우기

다른 테이블의 데이터를 기준으로 지우지만, 실제로 결합하지 않을 때도 있습니다. 다음은 그 예제입니다:

DELETE FROM enrollments
WHERE student_id IN (
SELECT id
FROM students
WHERE graduation_year < 2020
);

이 쿼리는 2020년 이전에 졸업한 학생들의 등록 기록을 지웁니다. "이사 간 사람들에게 보낸 모든 이벤트 초대를 지워줘!"라고 말하는 것과 같습니다.

DELETE 방법 요약

여기까지 다룬 DELETE 방법의 빠른 참고표를 제공합니다:

방법 설명 예제
기본 DELETE 조건에 따라 행 지우기 DELETE FROM students WHERE name = 'John Doe';
여러 조건을 포함한 DELETE 여러 기준을 만족하는 행 지우기 DELETE FROM students WHERE age > 30 AND gpa < 2.5;
IN 절을 사용한 DELETE 값 목록에 따라 행 지우기 DELETE FROM students WHERE city IN ('New York', 'Los Angeles', 'Chicago');
모든 레코드 지우기 테이블의 모든 행 지우기 DELETE FROM students;
JOIN을 사용한 DELETE 여러 테이블에서 관련 레코드 지우기 DELETE students, enrollments FROM students JOIN enrollments ON students.id = enrollments.student_id WHERE students.fees_paid = 0;
서브쿼리를 사용한 DELETE 다른 쿼리의 결과를 기준으로 지우기 DELETE FROM enrollments WHERE student_id IN (SELECT id FROM students WHERE graduation_year < 2020);

그리고 이제! SQL DELETE 쿼리의 내용을 배웠습니다. 강력한 권한은 큰 책임을 동반합니다. WHERE 절을 실행하기 전에 항상 두 배로 확인하고, 가능하다면 SELECT로 미리 확인해 보세요. 실제 세상에서 데이터를 영구히 지우는 것보다는 데이터를 보관하는 것이 더 나은 경우가 많습니다. 즐거운 쿼리 작성을 기원하며, 데이터베이스가 항상 깨끗하고 정리된 상태로 유지되길 바랍니다!

Credits: Image by storyset