데이터베이스 기초

SQL에서 DELETE FROM 사원을 WHERE 절 없이 실행했을 때의 결과로 올바른 것은?

  1. A사원 표의 모든 행이 삭제되고 빈 표가 남는다
  2. B표 자체가 삭제되어 표의 정의도 없어진다
  3. CWHERE 절이 없으므로 오류가 되어 아무것도 삭제되지 않는다
정답과 해설 보기

정답: A. 사원 표의 모든 행이 삭제되고 빈 표가 남는다

DELETE는 표에서 행을 삭제하는 DML 문입니다. WHERE 절로 조건을 붙이면 그 조건에 맞는 행만 삭제되지만, WHERE 절을 생략하면 모든 행이 삭제 대상이 됩니다. DELETE로 행이 없어져도 표의 정의(열 이름이나 형, 제약)는 남으므로 그 후에도 INSERT로 행을 추가할 수 있습니다. 표 자체를 정의째 삭제하는 것은 DDL인 DROP TABLE 사원입니다. UPDATE도 마찬가지로, WHERE 절을 깜빡 빠뜨리면 모든 행이 바뀌므로 실행하기 전에 조건을 확인하는 것이 중요합니다. 트랜잭션 안이라면 COMMIT하기 전에 ROLLBACK으로 취소할 수 있습니다.

이 분야 연습하기 분야로 돌아가기

데이터베이스 기초의 다른 문제

  1. 시험 표의 점수 열에 80, NULL, 70, 90의 4개 값이 있다(NULL은 미응시를 나타낸다). SELECT AVG(점수) FROM 시험의 결과는?
  2. 성적 표의 점수 열에 50, NULL, 70, NULL, 90, 30의 6개 값이 있다. SELECT COUNT(*), COUNT(점수), AVG(점수) FROM 성적의 결과를 순서대로 나열한 것은?
  3. 사원 표(사원번호, 부서, 급여)에서 부서별 평균 급여가 300 이상인 부서와 그 평균 급여를 구하려고 한다. 올바른 SQL 문은?
  4. 매출 표(매장, 금액)에 (A, 500), (A, 700), (B, 300), (B, 400), (C, 1200), (D, 200), (D, 900)의 7개 행이 있다. SELECT 매장, SUM(금액) FROM 매출 GROUP BY 매장 HAVING SUM(금액) >= 1000의 결과는 몇 행이 되는가?
  5. 사원 표(이름, 부서, 급여)에 8개 행이 있고, 부서별 급여는 영업이 320, 280, 350, 개발이 400, 310, 총무가 260, 300, 기획이 330이다. SELECT 부서, COUNT(*) FROM 사원 WHERE 급여 >= 300 GROUP BY 부서 HAVING COUNT(*) >= 2의 결과는 몇 행이 되는가?