Back End/DataBase

데이터 조작어 (DML : DATE MANIPULATION LANGUAGE)에 대하여

KoesJin 2024. 12. 24. 16:06

⭐️ 데이터 조작어 ( 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)
)

 

 

우선 테이블을 하나 만들어주자.

 

EMP_01 테이블 생성

 

현재 컬럼명만 작성해주고 아직 값을 넣지 않았다. 

앞서 첫번째 , 두번째 방식과 다르게 서브쿼리로도 값을 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 후 EMP_01 테이블

 

 

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의 큰차이는 의미에 있는것 같다.
데이터를 제어하느냐 데이터를 조작하느냐 차이이다 ‼️
이는 구조를 변경할 수 있다와 값을 변경 할 수 있다의 차이이다 ‼️