[SQLD] DML(Data Manipulation Language)

Shy·2024년 5월 20일

SQLD

목록 보기
11/23

DML (Data Manipulation Language)

데이터 조작어(DML)는 데이터베이스 내의 데이터를 입력, 수정, 삭제, 조회하는 SQL 명령어이다.

1️⃣ INSERT

INSERT 명령어는 테이블에 데이터를 입력할 때 사용된다. INSERT 명령어에는 두 가지 유형이 있다.

유형 1: 특정 컬럼에 값을 입력

INSERT INTO 테이블명 (COLUMN_LIST) VALUES (COLUMN_LIST에 넣을 VALUE_LIST);

특정 컬럼에만 값을 입력할 때, COLUMN_LIST에 컬럼명을 명시하고 각 컬럼에 대응하는 값을 VALUE_LIST에 입력한다. 컬럼의 순서는 테이블의 컬럼 순서와 일치하지 않아도 되며, 명시하지 않은 컬럼은 기본값으로 NULL이 입력된다. 단, Primary Key나 NOT NULL 제약 조건이 있는 컬럼은 NULL을 허용하지 않는다.

INSERT INTO PLAYER (PLAYER_ID, PLAYER_NAME, TEAM_ID, POSITION, HEIGHT, WEIGHT, BACK_NO)
VALUES ('2002007', '박지성', 'K07', 'MF', 178, 73, 7);

유형 2: 모든 컬럼에 값을 입력

INSERT INTO 테이블명 VALUES (전체 COLUMN에 넣을 VALUE_LIST);

테이블의 모든 컬럼에 값을 입력할 때, COLUMN_LIST를 생략할 수 있다. 그러나 VALUE_LIST에 모든 컬럼의 값을 순서대로 입력해야 한다.

INSERT INTO PLAYER VALUES ('2002010', '이청용', 'K07', '', 'BlueDragon', '2002', 'MF', '17', NULL, NULL, '1', 180, 69);

여기서 E_PLAYER_NAME 컬럼은 빈 문자열(’’)로 입력되었고, NATIONBIRTH_DATENULL로 명시되었다.

2️⃣ UPDATE

UPDATE 명령어는 테이블의 데이터를 수정할 때 사용된다. 기본 형태는 다음과 같다.

UPDATE 테이블명
SET 수정되어야 할 컬럼명 = 수정되기를 원하는 새로운 값
WHERE 조건;

조건을 명시하지 않으면 테이블의 모든 행이 수정된다.

-- 예제 1: 선수 테이블의 모든 백넘버를 99로 수정
UPDATE PLAYER
SET BACK_NO = 99;
-- 예제 2: 선수 테이블의 모든 포지션을 ‘MF’로 수정
UPDATE PLAYER
SET POSITION = 'MF';

이와 같이 UPDATE 문을 사용하여 특정 컬럼의 값을 일괄적으로 수정할 수 있다.

3️⃣ DELETE

DELETE 명령어는 테이블에서 필요 없는 데이터를 삭제할 때 사용한다. 기본적인 형태는 다음과 같다.

DELETE [FROM] 테이블명;

FROM 키워드는 선택 사항으로 생략이 가능하다. WHERE 절을 사용하지 않으면 테이블의 모든 데이터가 삭제된다.

-- 모든 데이터를 삭제하는 명령어.
DELETE FROM PLAYER;

1. DELETE와 DDL, DML 명령어의 차이

  • DDL (Data Definition Language): 데이터베이스 구조를 정의하고 변경하는 명령어이다. 예를 들어, CREATE, ALTER, RENAME, DROP이 있다. DDL 명령어는 즉시(AUTO COMMIT) 데이터베이스에 반영된다.
  • DML (Data Manipulation Language): 데이터베이스 내의 데이터를 조작하는 명령어이다. 예를 들어, INSERT, UPDATE, DELETE, SELECT가 있다. DML 명령어는 메모리 버퍼에서 작업이 이루어지므로, 실제 테이블에 반영하려면 COMMIT 명령어를 사용하여 트랜잭션을 종료해야 한다.

2. COMMIT과 ROLLBACK

  • COMMIT: 트랜잭션을 종료하고 메모리 버퍼에서 작업한 내용을 실제 테이블에 반영한다.
  • ROLLBACK: 트랜잭션을 종료하고 메모리 버퍼에서 작업한 내용을 취소하여 이전 상태로 되돌린다.

SQL Server의 경우, DML 명령어도 AUTO COMMIT으로 처리되어 COMMIT 명령어를 입력할 필요가 없다.

3. DELETE와 TRUNCATE의 차이

데이터를 삭제할 때 DELETE 대신 TRUNCATE를 사용할 수 있다. 두 명령어의 차이점은 다음과 같다.

  • DELETE: 각 행을 개별적으로 삭제하며, 삭제된 데이터는 로그로 저장된다. 따라서 ROLLBACK을 통해 복구할 수 있다.
  • TRUNCATE: 테이블의 모든 데이터를 삭제하지만, 삭제된 데이터는 로그로 저장되지 않는다. 이로 인해 ROLLBACK이 불가능하며 시스템 부하가 적다.

SQL Server에서는 사용자가 트랜잭션을 시작한 후 TRUNCATE TABLE을 사용하여 데이터를 삭제한 경우, ROLLBACK을 통해 복구할 수 있다.

SELECT

SELECT 명령어는 데이터베이스에서 데이터를 조회할 때 사용된다. 사용자가 입력한 데이터를 언제든지 조회할 수 있으며, 다양한 방식으로 데이터를 필터링하고 정렬할 수 있다.

SELECT [DISTINCT] 칼럼명1, 칼럼명2, ... 
FROM 테이블명;
  • ALL (기본 옵션): 중복된 데이터가 있어도 모두 출력한다. 생략 가능.
  • DISTINCT: 중복된 데이터를 제거하고 유일한 데이터만 출력한다.

1️⃣ 예제

-- 특정 컬럼 조회
SELECT PLAYER_ID, PLAYER_NAME, TEAM_ID, POSITION, HEIGHT, WEIGHT, BACK_NO 
FROM PLAYER;
-- 모든 컬럼 조회(와일드카드 사용)
SELECT * 
FROM PLAYER;

2️⃣ DISTINCT 사용

  • 중복된 데이터를 제거하여 유일한 값을 조회할 수 있다.
SELECT DISTINCT POSITION 
FROM PLAYER;

-- 결과
POSITION
--------
GK
DF
FW
MF

이 예제는 POSITION 칼럼의 중복을 제거하고 각 포지션의 종류를 하나씩만 출력한다.

3️⃣ WILDCARD 사용

테이블의 모든 칼럼을 조회하려면 애스터리스크(*)를 사용한다.

SELECT * 
FROM PLAYER;

-- 결과
PLAYER_ID  PLAYER_NAME  TEAM_ID  ... (다른 모든 칼럼들)
---------  -----------  -------  -----------------------
2007155    정경량         K05      ...
2010025    정은익         K05      ...
... (다른 모든 행들)

4️⃣ ALIAS 부여하기

칼럼 이름에 별명(ALIAS)을 부여하여 결과를 더 이해하기 쉽게 할 수 있다.

SELECT 칼럼명 AS 별명, ...
FROM 테이블명;
SELECT PLAYER_NAME AS 선수명, POSITION AS 위치, HEIGHT AS, WEIGHT AS 몸무게 
FROM PLAYER;

혹은 AS 키워드를 생략할 수 있다.

SELECT PLAYER_NAME 선수명, POSITION 위치, HEIGHT 키, WEIGHT 몸무게 
FROM PLAYER;
-- 실행 결과
선수명  위치  키    몸무게
-----  ---  --  -----
정경량  MF   173  65
정은익  MF   176  63
... (다른 모든 행들)

5️⃣ 별명에 공백이나 특수문자가 포함된 경우

칼럼 별명에 공백이나 특수문자가 포함될 경우, 이중 인용부호를 사용한다.

SELECT PLAYER_NAME "선수 이름", POSITION "그라운드 포지션", HEIGHT "키", WEIGHT "몸무게" 
FROM PLAYER;
선수 이름    그라운드 포지션      키    몸무게
-------   --------------   ----  -----
정경량      MF               173   65
정은익      MF               176   63
... (다른 모든 행들)

  • SELECT 명령어는 데이터 조회에 사용되며, 특정 칼럼이나 모든 칼럼을 조회할 수 있다.
  • DISTINCT 키워드를 사용하여 중복을 제거할 수 있다.
  • WILDCARD(*)를 사용하여 테이블의 모든 칼럼을 조회할 수 있다.
  • ALIAS를 사용하여 칼럼 이름에 별명을 부여할 수 있으며, 이중 인용부호를 사용하여 공백이나 특수문자가 포함된 별명을 부여할 수 있다.

산술 연산자와 합성 연산자

1️⃣ 산술 연산자

산술 연산자는 숫자와 날짜 데이터 타입에 대해 적용되며, 수학에서 사용하는 사칙 연산과 동일하다. 또한, 우선순위를 위한 괄호 적용이 가능하다. 산술 연산을 사용하거나 특정 함수를 적용할 때는 칼럼에 새로운 의미를 부여하기 위해 적절한 ALIAS(별명)을 부여하는 것이 좋다. 산술 연산자의 우선순위는 다음과 같다: (), *, /, +, -

연산자설명
+더하기
-빼기
*곱하기
/나누기
()괄호를 사용한 우선순위 지정

예제: 키에서 몸무게를 뺀 값 계산

SELECT PLAYER_NAME 이름, HEIGHT - WEIGHT "키-몸무게"
FROM PLAYER;

-- 실행 결과
이름        키-몸무게
--------  --------
정경량      108.00
정은익      113.00
레오마르    106.00
명재용      110.00
변재섭      107.00
보띠        106.00
비에라      103.00
서동원      106.00
안대현      107.00
양현정      104.00
유원섭      103.00
김수철      103.00
임다한      114.00

예제: BMI(Body Mass Index) 비만지수 계산

SELECT PLAYER_NAME 이름, ROUND(WEIGHT / ((HEIGHT / 100) * (HEIGHT / 100)), 2) "BMI 비만지수"
FROM PLAYER;

-- 결과
이름        BMI 비만지수
--------  -----------
정경량      21.72
정은익      20.34
레오마르    22.99
명재용      21.05
변재섭      21.80
보띠        22.46
비에라      23.57
서동원      23.04
안대현      22.47
양현정      23.24
유원섭      23.77
김수철      23.26
임다한      20.45

2️⃣ 합성 연산자

합성 연산자는 문자와 문자를 연결할 때 사용한다. 이를 통해 SQL 문장만으로도 유용한 리포트를 출력할 수 있다.

  • 주요 합성 연산자
    • Oracle: || (수직 바 2개)
    • SQL Server: +
    • 공통: CONCAT(string1, string2) 함수 사용

예제: 선수의 체격 정보 출력

-- Oracle
SELECT PLAYER_NAME || '선수, ' || HEIGHT || 'cm, ' || WEIGHT || 'kg' AS 체격정보
FROM PLAYER;

-- SQL Server
SELECT PLAYER_NAME + '선수, ' + HEIGHT + 'cm, ' + WEIGHT + 'kg' AS 체격정보
FROM PLAYER;

-- 실행 결과
체격정보
--------------------------------
정경량선수, 173cm, 65kg
정은익선수, 176cm, 63kg
레오마르선수, 183cm, 77kg
명재용선수, 173cm, 63kg
변재섭선수, 170cm, 63kg
보띠선수, 174cm, 68kg
비에라선수, 176cm, 73kg
서동원선수, 184cm, 78kg
안대현선수, 179cm, 72kg
양현정선수, 176cm, 72kg
유원섭선수, 180cm, 77kg
김수철선수, 171cm, 68kg
임다한선수, 181cm, 67kg
profile
신입사원...

0개의 댓글