
INSERT INTO 테이블명 (컬럼명,컬럼명...)
VALUES (값,값...)
EX)
-- 하나의 행 삽입
INSERT INTO DEPT (DEPTNO,DNAME,LOC)
VALUES (1,'A','B');
-- 여러 행 삽입
INSERT INTO DEPT (DEPTNO,DNAME,LOC)
VALUES (1,'A','B'),
(2,'C','D');
-- IF 특정 열에 대해 기본값을 사용하도록 테이블을 정의했다면?
CREATE TABLE DEPT (ID INTEGER DEFAULT 0);
-- DEFAULT라는 키워드만 넣어도 0값이 자동으로 들어가게 됩니다.
INSERT INTO DEPT VALUES (DEFAULT);
CREATE TABLE DEPT (ID INTEGER, FOO VARCHAR(10));
INSERT INTO DEPT (FOO)
VALUES ('테런');
SELECT ID, FOO
FROM DEPT;
ID FOO
-----------
null 테런
CREATE TABLE DEPT (ID INTEGER DEFAULT 0, FOO VARCHAR(10));
INSERT INTO DEPT (FOO)
VALUES ('테런');
SELECT ID, FOO
FROM DEPT;
ID FOO
-----------
0 테런
CREATE TABLE DEPT (ID INTEGER DEFAULT 0, FOO VARCHAR(10));
INSERT INTO DEPT (ID, FOO)
VALUES (NULL, '테런');
SELECT ID, FOO
FROM DEPT;
ID FOO
-----------
null 테런
INSERT INTO 테이블명A (컬럼1,컬럼2)
SELECT 컬럼3, 컬럼4
FROM 테이블명B
주의 : 같은 열 및 데이터 유형으로 넣어야 합니다.
INSERT INTO DEPT_EAST (DEPTNO, DNAME, LOC)
SELECT DEPTNO, DNAME, LOC
FROM DPT
WHERE LOC IN ('NEW YORK','BOSTON');
CREATE TABLE DEPT_2 LIKE DEPT;
CREATE TABLE DEPT_2 AS
SELECT *
FROM DEPT
WHERE 1 = 0
SELECT *
INTO DEPT_2
FROM DEPT
WHERE 1 = 0
INSERT ALL
WHEN 조건 THEN
INTO 테이블명A (컬럼1, 컬럼2...) VALUES (값1, 값2...)
WHEN 조건 THEN
INTO 테이블명B (컬럼11, 컬럼21...) VALUES (값11, 값22...)
...
ELSE
INTO 테이블명F (컬럼61, 컬럼61...) VALUES (값61, 값62...)
SELECT
FROM 테이블명
INSERT ALL
WHEN color = '빨강' THEN
INTO RED_FRUITS (name, color) VALUES (name, color)
WHEN color = '노랑' THEN
INTO YELLOW_FRUITS (name, color) VALUES (name, color)
ELSE
INTO OTHER_FRUITS (name, color) VALUES (name, color)
SELECT name, color
FROM FRUITS;
/*
INSERT INTO (
SELECT *
FROM 테이블명A
UNION ALL
SELECT *
FROM 테이블명B
UNION ALL
SELECT *
FROM 테이블명C
) SELECT *
FROM 테이블명
*/
INSERT INTO (
SELECT *
FROM RED_FRUITS
UNION ALL
SELECT *
FROM YELLOW_FRUITS
UNION ALL
SELECT *
FROM OTHER_FRUITS
) SELECT *
FROM FRUITS
INSERT INTO 테이블명A (컬럼1,컬럼2)
SELECT 컬럼3, 컬럼4
FROM 테이블명B
INSERT INTO DEPT_EAST (LOC) VALUES ("LA");
/*
모든 행에 데이터를 수정하고자 한다면?
IF 모든 부서의 급여를 10%인상하고자 한다면?
*/
UPDATE EMP
SET SAL = SAL * 1.1
/*
IF 보너즈 받은 부서의 직원들의 급여만 10%인상하고자 한다면?
*/
UPDATE EMP
SET SAL = SAL * 1.1
WHERE EMPNO IN (
SELECT EMPNO
FROM EMP_BONUS)
UPDATE EMP AS E
SET (E.SAL, E.COMM) = (SELECT NS.SAL, NS.SAL/2
FROM NEW_SAL AS NS
WHERE NS.DEPTNO = E.DEPTNO)
WHERE EXISTS (SELECT *
FROM NEW_SAL AS NS
WHERE NS.DEPTNO = E.DEPTNO)
UPDATE EMP E, NEW_SAL NS
SET E.SAL = NS.SAL,
E.COMM = NS.SAL/2
WHERE E.DEPTNO = NS.DEPTNO
-- 실행전의 EMP 테이블
| EMPNO | ENAME | SAL | COMM | DEPTNO |
|-------|---------|------|------|--------|
| 101 | Alice | 10 | 2 | 10 |
| 102 | Bob | 12 | 3 | 20 |
| 103 | Charlie | 15 | 4 | 10 |
-- NEW_SAL 테이블
| DEPTNO | SAL |
|--------|-------|
| 10 | 2000 |
| 20 | 2500 |
-- 실행 후의 EMP 테이블
| EMPNO | ENAME | SAL | COMM | DEPTNO |
|-------|---------|-------|-------|--------|
| 101 | Alice | 2000 | 1000 | 10 |
| 102 | Bob | 2500 | 1250 | 20 |
| 103 | Charlie | 2000 | 1000 | 10 |
MERGE INTO EP_COMMISSION EC
USING (SELECT * FROM EMP) AS EMP -- 1단계
ON (EC.EMPNO = EMP.EMPNO) -- 2단계
WHEN MATCHED THEN -- 3단계
UPDATE
SET EC.COMM = 1000 -- 3-1단계
DELETE
WHERE (SAL < 2000) -- 3-2단계
WHEN NOT MATCHED THEN -- 3단계
INSERT (EC.EMPNO, EC.ENAME)
VALUES (EMP.EMPNO,EMP.ENAME) -- 3-1단계
-- 실행전 EP_COMMISION
| EMPNO | ENAME | COMM | SAL |
|-------|---------|-------|-------|
| 101 | Alice | 500 | 2500 |
| 102 | Bob | NULL | 1500 |
-- EMP
| EMPNO | ENAME | SAL |
|-------|---------|-------|
| 101 | Alice | 2500 |
| 102 | Bob | 1800 |
| 103 | Charlie | 3000 |
-- 실행후 EP_COMMISION
| EMPNO | ENAME | COMM | SAL |
|-------|---------|-------|-------|
| 101 | Alice | 1000 | 2500 |
| 103 | Charlie | NULL | NULL |
DELETE
FROM EMP
DELETE
FROM EMP
WHERE DEPTNO = 10
DELETE
FROM EMP
WHERE EMPNO = 10
DELETE
FROM EMP
WHERE NOT EXISTS(
SELECT *
FROM DEPT
WHERE DEPT.DEPTNO = EMP.DEPTNO)
- EMP 테이블에서 각 레코드의 DEPTNO를 확인.
- DEPT 테이블에서 DEPTNO가 일치하는 레코드를 찾음.
- DEPTNO가 일치하지 않는 EMP 테이블의 레코드를 삭제.
/*
테이블에서 name이 중복되었을때,
가장 작은 id를 제외하고는 다 삭제하고자 하자.
*/
DELETE
FROM DUPES
WHERE ID NOT IN (
SELECT MIN(id)
FROM DUPES
GROUP BY NAME
);
-- 쿼리문 실행전
| id | name |
|-----|---------|
| 1 | Alice |
| 2 | Bob |
| 3 | Alice |
| 4 | Charlie |
| 5 | Bob |
| 6 | Alice |
-- 쿼리문 실행후
| id | name |
|-----|---------|
| 1 | Alice |
| 2 | Bob |
| 4 | Charlie |
DELETE
FROM EMP
WHERE DEPTNO IN ( SELECT DEPTNO
FROM DEPT_ACCIDENTS
GROUP BY DEPTNO
HAVING COUNT(*) >= 3)