SQL

[SQL] DML (INSERT, UPDATE, DELETE)

Bay Im 2024. 3. 22. 17:31
  • 데이터 조작어(Data Manipulation Language, DML)
    • 데이터 추가(INSERT), 변경(UPDATE), 삭제(DELETE)할 때 사용
  • INSERT
    • 테이블에 새로운 행 삽입
    • INSERT INTO 테이블명 VALUES(값1, 값2, …);
      • 컬럼명 생략 가능하나, 삽입할 값이 테이블의 컬럼 수와 순서도 동일해야 한다.
    • INSERT INTO 테이블명(컬럼1, 컬럼2, …) VALUES (값1, 값2, …);
  • UPDATE
    • 기존 행에 있는 데이터 값 변경
    • UPDATE 문에 WHERE 절이 없으면 모든 행의 값이 변경되므로 주의!
    • UPDATE 테이블명 SET 컬럼1=값1, 컬럼2=값2 [WHERE 조건];
  • JOIN을 사용한 UPDATE
    • 하위 쿼리에서 메인 쿼리의 대상 테이블을 참조하면 오류 발생하므로 서브쿼리 대신 조인을 사용해야 한다!
    • UPDATE 테이블명 뒤에 JOIN 사용
    • JOIN 예시
      • UPDATE 고객 AS c
        JOIN (SELECT ROUND(AVG(마일리지)) AS 평균마일리지
        		FROM 고객
        		WHERE 담당자직위='대표 이사'
        		GROUP BY 담당자직위) AS 평균 
        SET c.마일리지= 평균.평균마일리지
        WHERE c.고객번호='ZZZAA';
        SELECT * FROM 고객;
  • DELETE
    • 기존에 있는 행을 삭제
    • DELETE 문에 WHERE 절이 없으면 모든 행이 삭제되므로 주의!
    • DELETE FROM 테이블명 [WHERE 조건];
  • JOIN 사용한 DELETE
    • 하위 쿼리에서 메인 쿼리의 대상 테이블을 참조하면 오류 발생하므로 서브쿼리 대신 조인을 사용해야 한다!
    • 두 테이블에서 조건 충족하는 행 삭제 (INNER JOIN)
      • DELETE 테이블명1, 테이블명2
        FROM 테이블명1
        INNER JOIN 테이블명2
        ON 테이블명1.컬럼명 = 테이블명2.컬럼명
        WHERE 테이블명1.컬럼명 = 값;
    • 한 테이블에서 조건 충족하는 행 삭제 (LEFT JOIN)
      • DELETE 부서
        FROM 부서
        LEFT JOIN 사원 ON 부서.부서번호 = 사원.부서번호
        WHERE 사원.사원번호 IS NULL;
  • INSERT ON DUPLICATE KEY UPDATE
    • 레코드가 없다면 새롭게 추가하고, 이미 있다면 데이터 변경
    • 형식
      • INSERT INTO 테이블명(컬럼1, 컬럼2, ...)
        VALUES(값1, 값2, ...)
        ON DUPLICATE KEY UPDATE
        컬럼1 = 값1, 컬럼2 = 값2, ...;​
      • ON DUPLICATE KEY UPDATE 사용하려면 INSERT INTO 절에서 지정한 컬럼 중에 기본키 컬럼이 존재해야 한다. 

'SQL' 카테고리의 다른 글

[SQL] 제약 조건  (0) 2024.03.23
[SQL] DDL (CREATE, ALTER, DROP)  (0) 2024.03.23
[SQL] 데이터 타입  (0) 2024.03.22
[SQL] 서브 쿼리  (0) 2024.03.22
[SQL] JOIN (CROSS, INNER, OUTER, SELF)  (0) 2024.03.22