새로운 행을 테이블에 추가하는 구문
사용 구문
INSERT INTO 테이블명 VALUES (입력데이터1, 입력데이터2, ... );
INSERT INTO 테이블명 (컬럼명1,컬럼명2,...) VALUES (입력데이터1, 입력데이터2, ... );
INSERT INTO PRACTICE VALUES (1,'user11','1234','동대문','남');
INSERT INTO PRACTICE(USER_NO, USER_ID, USER_PW, USER_NICKNAME, USER_GENDER) VALUES (2,'user22','1234','남대문','여');
INSERT INTO PRACTICE(
SELECT USER_NO, USER_ID, USER_PASSWORD, USER_NICKNAME, GENDER
FROM MEMBER
);
특정 대상이 되는 테이블의 데이터를 서브쿼리로 조회하여 두개 이상의 테이블에 데이터를 삽입할 수 있는 방식
EX)
-- 사번, 사원명, 매니저ID 저장하는 테이블
CREATE TABLE EMP_MANAGER AS
SELECT EMP_ID, EMP_NAME, MANAGER_ID
FROM EMPLOYEE
WHERE 1=0; -- 거짓으로 만들어서 테이블 구조만 가져오기
-- 사번, 이름, 부서코드, 부서명을 저장하는 테이블
CREATE TABLE EMP_DEPT_D2 AS
SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE
FROM EMPLOYEE
LEFT JOIN DEPARTMENT ON (DEPT_CODE=DEPT_ID)
WHERE 1=0; -- 거짓으로 만들어서 테이블 구조만 가져오기
-- 부서코드가 D2 사원의 정보 추출하여 각 테이블에 정보 삽입
INSERT ALL
INTO EMP_MANAGER VALUES(EMP_ID, EMP_NAME, MANAGER_ID)
INTO EMP__DEPT_D2 VALUES(EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE)
(SELECT EMP_ID, EMP_NAME, MANAGER_ID, DEPT_CODE, DEPT_TITLE
FROM EMPLOYEE
LEFT JOIN DEPARTMENT ON (DEPT_CODE=DEPT_ID)
WHERE DEPT_CODE='D2');
SELECT * FROM EMP_MANAGER;
SELECT *FROM EMP_DEPT_D2;
UPDATE PRACTICE SET USER_ID='user77' WHERE USER_NO =3;
UPDATE 시에도 서브쿼리를 사용할 수 있다.
EX)
UPDATE EMP_COPY SET
SALARY = (SELECT SALARY FROM EMPLOYEE WHERE EMP_ID=200),
BONUS = (SELECT BONUS FROM EMPLOYEE WHERE EMP_ID=200)
WHERE EMP_NAME ='유재식';
구조가 같은 두 개의 테이블을 하나의 테이블로 합치는 기능
기준이될 테이블을 정하여 다른 테이블을 합치는 기능
두 테이블에서 지정하는 조건의 값이 존재하면 UPDATE가 되고, 조건의 값이 없으면 INSERT가 된다.
EX)
-- ID 와 NAME을 가지고 있는 TABLE_A, TABLE_A 병합
MERGE INTO TABLE_A USING TABLE_B ON(TABLE_A.ID=TABLE_B.ID)
WHEN MATCHED THEN -- ID가 같으면
UPDATE SET TABLE_A.NAME = TABLE_B.NAME -- NAME을 UPDATE(수정)
WHEN NOT MATCHED THEN -- 그렇지 않으면
INSERT VALUES(TABLE_B.ID, TABLE_B.NAME); -- TABLE_B의 ID, NAME을 INSERT(추가)
테이블의 행을 삭제하는 구문(테이블의 행 개수 감소)
DELETE 시에 조건문을 사용하지 않게 되면 Table의 모든 데이터가 삭제된다.
외래키 제약 조건이 설정 되어 있는 경우 참조되고 있는 값은 삭제 할 수 없다.
사용 구문
EX)
DELETE FROM PRACTICE WHERE USER_NO=1;
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE,STATUS FROM USER_CONSTRAINTS
WHERE TABLE_NAME='테이블명';
ALTER TABLE 테이블명 DISABLE CONSTRAINT [CONSTRAINT_NAME];
ALTER TABLE 테이블명 ENABLE CONSTRAINT [CONSTRAINT_NAME];
구분 | 정리 |
---|---|
DELETE | Table의 데이터 삭제 Rollback을 통해서 Commit 전 시전까지 되돌릴 수 있다. |
TRUNCATE | Table의 데이터 삭제(데이터 자체를 초기화) Rollback을 하더라도 되돌릴 수 없다. |
DROP | Table 자체를 삭제 객체 삭제는 기본적으로 Rollback이 안된다. (Rollback은 데이터에 대한 복구만 가능) |
구분 | 적용 시점 |
---|---|
CREATE | 즉시 적용 |
DROP | 즉시 적용 |
INSERT | 즉시 적용 안됨 (COMMIT : 적용, ROLLBACK: 되돌리기) |
UPDATE | 즉시 적용 안됨 (COMMIT : 적용, ROLLBACK: 되돌리기) |
DELETE | 즉시 적용 안됨 (COMMIT : 적용, ROLLBACK: 되돌리기) |