데이터 조작어 (DML : DATE MANIPULATION LANGUAGE)에 대하여
⭐️ 데이터 조작어 ( DML )
데이터 조작어란 데이터베이스에서 데이터를 조회 , 삽입 , 수정 , 삭제하는 데 사용되는 SQL 명령어를 의미한다.
DML의 표현식이 헷갈리기도 하고 , INSERT에 여러 표현식도 존재하고 무엇보다 DDL(데이터 정의어) 와의
차이를 이해하기 위해 작성해 보았다. (DDL에도 삭제인 DROP이 존재하고 DML에는 DELETE라는 삭제가 존재)
DML에는 총 4가지가 있다.
1. INSERT ( 삽입 )
2. UPDATE ( 수정 )
3. DELETE( 삭제 )
4. SELECTE ( 조회 )
이중에서 SELECT는 다른글에 이미 정리 해놨기 때문에 INSERT , UPDATE , DELETE 에 대하여 알아보겠다.
⭐️ INSERT
INSERT란 테이블에 새로운 행을 추가하는 구문이다.
[ 표현식 1 ]
1) INSERT INTO 테이블명 VALUES(값,값,값....);
테이블의 모든 컬럼에 대한 값을 직접 제시해서 한 행을 INSERT하고자 할 때
컬럼의 순번을 지켜서 VALUES에 값을 나열해야한다.
부족하게 값을 제시할 경우 , 값을 더 많이 제시한 경우 -> 에러발생
[코드]
INSERT INTO EMPLOYEE e
VALUES(900,'이소근','889014-1456789','SG8809@NAVER.COM','01078945656','D7','J5',4000000,0.2,200,SYSDATE,NULL,'N');
INSERT의 첫번째 표현식은 INSERT INTO 테이블명 ( 값, 값, 값 ....) 넣어주면 된다
두번째 방식은 가장 자주 사용하는 방식이라 중요하다 ‼️
[표현식 2]
2) INSERT INTO 테이블명(컬럼,컬럼,컬럼...) VALUES (값,값,값.....);
테이블에 내가 선택한 컬럼에 대한 값만 INSERT할 수 있다.
그래도 한 행 단위로 추가되기 때문에 선택안된 컬럼은 기본적으로 NULL이 들어감
=> NOT NULL제약조건이 걸려있는 컬럼은 반드시 직접 값을 넣어줘야한다.
단, 기본값이 지정되어 있으면 NULL이 아닌 기본값이 들어간다.
[코드]
INSERT
INTO EMPLOYEE e(
EMP_ID,
EMP_NAME,
EMP_NO,
JOB_CODE,
HIRE_DATE
)
VALUES(
902,
'김개똥',
'87105-224510',
'J7',
SYSDATE
);
위와같이 INSERT INTO 테이블명(컬럼,컬럼,컬럼....) VALUES(값,값,값....) 이렇게 해야 기본적으로 NULL이 들어간다.
또한 위의 코드와 같이 배치시켜주는게 관례이다 ⭐️
세번째 방식은 INSERT INTO 테이블명 (서브쿼리) 이다.
[표현식 3]
3) INSERT INTO 테이블명 (서브쿼리)
VALUES에 직접 값을 명시하는 것 대신 서브쿼리로 조회된 값을 통째로 INSERT가능
[코드]
CREATE TABLE EMP_01(
EMP_ID NUMBER,
ENP_NAME VARCHAR2(20),
DEPT_TITLE VARCHAR2(20)
)
우선 테이블을 하나 만들어주자.
현재 컬럼명만 작성해주고 아직 값을 넣지 않았다.
앞서 첫번째 , 두번째 방식과 다르게 서브쿼리로도 값을 INSERT 할 수 있다 ‼️
[코드]
INSERT INTO EMP_01 (SELECT EMP_ID , EMP_NAME , DEPT_TITLE
FROM EMPLOYEE e
LEFT JOIN DEPARTMENT d ON (DEPT_CODE = DEPT_ID));
INSERT의 방식은 여러가지지만 2번 방식이 가장 많이 사용된다 ‼️
⭐️ UPDATE
UPDATE란 테이블에 기록되어 있는 기존의 데이터를 수정하는 구문이다.
[표현식]
[표현식]
UPDATE 테이블명
SET 컬럼 = '값',
컬럼 = '값',
....
[WHERE 조건] -> 생략시 전체 모든행에 데이터가 변경
** UPDATE시에도 제약조건을 잘 확인해야 한다.
UPDATE는 값을 수정할때 사용한다. 🧐 ALTER 또한 변경할 수 있는 구문인데 무슨 차이일까?
ALTER와 UPDATE는 둘 다 테이블에 대한 변화를 준다. 하지만 목적과 차이가 다르다.
ALTER는 테이블의 구조를 변경하는데 사용된다 ‼️ 말 그대로 구조에 영향을 주기 때문에 컬럼을 추가 ,
삭제 , 수정하거나 제약 조건을 변경할 수 있다. 즉 컬럼값을 수정하지 않는다.
그럼 UPDATE는 컬럼값을 수정하는가 ( 특정 행의 컬럼 데이터를 수정하는가 ) ? -> 🅾️
아래의 코드를 보자.
[코드]
D9 부서의 부서코드를 '전략기획팀으로 변경'
UPDATE DEPT_TABLE
SET DEPT_TITLE = '전략기획팀'
WHERE DEPT_ID = 'D9';
코드를 보면 컬럼을 'D9' 부서에서 '전략기획팀' 으로 변경할 수 있는걸 볼 수 있다.
그리고 UPDATE 또한 서브쿼리를 이용할 수 있다.
UPDATE에서 서브쿼리 사용
UPDATE 테이블명
SET 컬럼명 = (서브쿼리)
[WHERE 조건]
변경시에 특정 조건을 서브쿼리로 주어서 특정 조건을 찾을 수 있게 되었다.
아래 예시를 보자
[코드]
-- ASIA지역에서 근무하는 사원들의 보너스값을 0.3으로 변경
SELECT * FROM EMP_SALARY
UPDATE EMP_SALARY
SET BONUS = 0.3
WHERE EMP_ID IN (SELECT EMP_ID
FROM EMPLOYEE e
JOIN DEPARTMENT d ON (DEPT_CODE = DEPT_ID)
JOIN LOCATION l ON (LOCATION_ID = LOCAL_CODE)
WHERE LOCAL_NAME LIKE ('%ASIA%')
);
COMMIT;
위 코드처럼 WHERE 절에 서브쿼리를 이용하여 ASIA지역에서 근문하는 사원들을 조회 할 수 있고 ,
SET으로 BONUS = 0.3 인 사원들의 급여를 UPDATE를 통해 변경할 수 있다.
WHERE절 말고도 SET 컬럼명 = ( 서브쿼리 ) 이렇게도 사용 가능하다 ‼️
UPDATE와 ALTER의 수정은 각기 다름을 이해 하자 ‼️
테이블의 구조 변경(ALTER)과 테이블의 데이터 값 수정(UPDATE)의 차이가
가장 크다.
⭐️ DELETE
DELETE란 테이블에 기록된 데이터를 삭제하는 구문. 단 한 행 단위로 삭제되니 조심 ‼️
[표현식]
[표현식]
DELETE FROM 테이블명
[WHERE 조건] -> WHERE 제시안하면 전부다 삭제됨
[코드]
DELETE FROM EMPLOYEE e
WHERE EMP_NAME = '이소근';
이런식으로 WHERE절에 조건이 있어야만 EMPLOYEE 테이블 컬럼들이 전부 사라지는걸 방지할 수 있다 ‼️
🧐 그러면 ALTER에 있는 DROP(삭제)과 무슨 차이가 있을까 ?
DROP은 구조를 변경할 수 있기때문에 DROP은 행(컬럼) 또는 테이블 자체를 삭제 시킬 수 있다.
반면 DELETE는 테이블의 데이터를 삭제하는 명령어기때문에 특정 조건에 맞는 행(row)를 삭제할 수 있는 차이가
있다 ‼️
DML과 DDL의 큰차이는 의미에 있는것 같다.
데이터를 제어하느냐 데이터를 조작하느냐 차이이다 ‼️
이는 구조를 변경할 수 있다와 값을 변경 할 수 있다의 차이이다 ‼️