TOP
class="layout-aside-left paging-number">
본문 바로가기
자격증/SQLD

SQLD 2과목 관리구문 - DML

by 기록자_Recordian 2024. 1. 31.
728x90
반응형

 

<목차>

※ 자료출처: 데이터 산업 진흥원(K-DATA)

 

SQL 문장의 종류

 

명령어의 종류 명령어 설명
데이터 조작어(DML:
Data Manipulation Language)
SELECT 데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어
(RETRIEVE)
INSERT
UPDATE
DELETE
- 데이터베이스의 테이블에 들어 있는 데이터에 변형을 가하는 종류의 명령어
- 데이터를 테이블에 새로운 행에 집어넣거나, 원하지 않는 데이터를 삭제하거나 수정하는 것들의 명령어
데이터 정의어(DDL:
Data Definition Language)
CREATE
ALTER
DROP
RENAME
- 테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어
- 구조를 생성하거나 변경하거나 삭제하거나 이름을 바꾸는 데이터 구조와 관련된 명령어
데이터 제어어(DCL:
Data Control Language)
GRANT
REVOKE
데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어
트랜잭션 제어어(TCL:
Transactuon Control Language)
COMMIT
ROLLBACK
논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어

 

 

 

1. DML (Data Manipulation Language)

A.DML의 정의 

 

만들어진 테이블에 관리하기를 원하는 자료들을 입력, 수정, 삭제, 조회하는 명령어

 


B. INSERT
  • 테이블에 데이터를 입력하는 방법은 두 가지 유형이 있으며 한 번에 한 건만 입력
◆  INSERT INTO 테이블명 (COLUMN_LIST) 
VALUES (COLUMN_LIST 에 넣을 VALUE_LIST);

▶ 테이블의 칼럼 정의. 칼럼의 순서는 테이블의 칼럼 순서와 매치할 필요 없음.
정의하지 않은 칼럼은 Default 로 Null 값 입력.(PK나 Not Null로 지정된 칼럼은 Null 비허용)

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

▶ 모든 칼럼에 데이터를 입력.
굳이 Column_List를 언급하지 않아도 되지만, 칼럼의 순서대로 빠짐없이 데이터가 입력되어야 함.

 

  • 해당 칼럼명과 입력되어야 하는 값을 서로 1:1로 매핑해서 입력
  • 해당 칼럼의 데이터 유형이 CHAR, VARCHAR2 등 문자 유형일 경우 ' 로 입력할 값 입력 (예. 'SQLD')
  • 숫자일 경우 ' 붙이면 안됨. 

[예제]

선수 테이블에 박지성 선수의 데이터를 일부 칼럼만 입력

▶ 테이블명: PLAYER

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

1개의 행이 생성되었다.

 

출처: 한국 데이터 산업 진흥원(K-DATA)

 

[예제]

해당 테이블에 이청용 선수의 데이터 입력

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

1개의 행이 생성되었다.

  • 데이터를 입력하는 경우 정의되지 않은 미지의 값인 E_PLAYER_NAME은 두 개의 ' 을 붙여서 (' ') 표현하거나, NATION 이나 BIRTH_DATE 의 경우처럼 NULL 이라고 명시적으로 표현 가능.

C. UPDATE

 

  • 입력한 정보 중에 잘못 입력되거나 변경이 발생하여 정보를 수정해야 하는 경우가 발생 시, 데이터를 수정하는 명령어
UPDATE 테이블명

SET 수정되어야 할 칼럼명 = 수정되기를 원하는 새로운 값;

 

[예제]

선수 테이블의 백넘버를 일괄적으로 99로 수정

UPDATE PLAYER

SET BACK_NO = 99;

480개의 행이 수정되었다.

 

[예제]

선수 테이블의 포지션을 일괄적으로 'MF'로 수정

UPDATE PLAYER

SET POSITION ='MF';

480개의 행이 수정되었다.

 


D. DELETE

 

  • 테이블의 정보가 필요 없어질 경우 데이터 삭제를 하는 명령어
  • DELETE FROM 다음에 삭제를 원하는 자료가 저장되어 있는 테이블명을 입력하고 실행
  • FROM 문구는 생략이 가능한 키워드이며, WHERE 절을 사용하지 않을 시 테이블의 전체 테이터가 삭제 됨.
DELETE [FROM] 삭제를 원하는 정보가 들어있는 테이블명;

 

[예제]

선수 테이블의 데이터를 전제 삭제

DELETE FROM PLAYER;

480개의 행이 삭제되었다.

 


E. DDL과의 차이

 

  • DDL 명령어인 경우, 직접 데이터베이스의 테이블에 영향을 미치기 때문에 DDL 명령어를 입력하는 순간 명령어에 해당하는 작업이 즉시(AUTO COMMIT) 완료
  • DML 명령어의 경우, 조작하려는 테이블을 메모리 버퍼에 올려놓고 작업하기 때문에 실시간으로 테이블에 영향을 미치는 것은 아님.
  • 버퍼에서 처리한 DML 명령어가 실제 테이블에 반영되기 위해서는 COMMIT 명령어를 입력하여 TRANSACTION을 종료해야 함. (SQL Server의 경우, DML도 AUTO COMMIT으로 처리되기 때문에 COMMIT 명령어 입력 불필요.)
  • 테이블의 전체 데이터를 삭제하는 경우, 시스템 활용 측면에서는 삭제된 데이터를 로그로 저장하는 DELETE TABLE 보다는 시스템 부하가 적은 TRUNCATE TABLE 권고.
  • TRUNCATE TABLE의 경우 삭제된 데이터의 로그가 없으므로, ROLLBACK 불가 (SQL Server의 경우 다시 복구를 원할 경우 ROLLBACK 문을 이용하여 테이블 데이터를 원 상태로 되돌릴 수 있음.

F. SELECT

 

  • 사용자가 입력한 데이터를 조회하는 명령어
SELECT [ALL/DISTINCT] 보고 싶은 칼럼명, 보고 싶은 칼럼명, ....

FROM 해당 칼럼들이 들어있는 테이블명;

▶ ALL: Default 옵션으로 생략 가능. 중복된 데이터가 있어도 모두 출력.

▶ DISTINCT: 중복된 데이터가 있는 경우 1건으로 처리해서 출력.

 

[예제]

PLYAER 테이블에 입력한 선수들의 데이터를 조회

SELECT PLAYER_ID, PLAYER_NAME, TEAM_ID, POSITION, HEIGHT, WEIGHT, BACK_NO

FROM PLAYER;

 

 

■  DISTINCT 옵션

[예제]

선수 테이블의 포지션 정보를 DISTINCT 옵션으로 확인

SELECT DISTINCT POSITION

FROM PLAYER;

 

 

■  * 애스터리스크 (테이블 내 모든 데이터 조회)

 

[예제]

입력한 선수들의 정보를 모두 조회

SELECT *
FROM PLAYER;

 

 

■  ALIAS (AS) 부여하기

 

  • 조회된 결과에 별칭(ALIAS)을 부여하여 칼럼 레이블 변경 가능
  • 칼럼명 바로 뒤에 서술
  • 칼럼명과 ALIAS 사이에 AS, as 키워드를 사용 가능
  • 이중 인용부호는 ALIAS가 공백, 특수문자를 포함할 경우와 대소문자 구분이 필요할 경우 사용

[예제]

입력한 선수들의 정보를 칼럼 별명을 이용하여 출력

SELECT PLAYER_NAME AS 선수명, POSITION AS 위치, HEIGHT AS 키, WEIGHT AS 몸무게
FROM PLAYER;

 

 

[예제]

칼럼 별명을 적용할 때 별명 중간에 공백이 들어가는 경우 " " 사용.

SQL Server의 경우 " " / ' ' / [ ] 3가지의 방식으로 부여 가능

 

SELECT PLAYER_NAME AS "선수 이름", POSITION AS "그라운드 포지션", HEIGHT AS "키", WEIGHT AS "몸무게"
FROM PLAYER;


G. 산술 연산자와 합성 연산자

 

■  산술 연산자

  • NUMBER와 DATE 자료형에 대해 적용되며 일반적으로 수학에서의 4칙연산과 동일.
  • 우선 순위를 위한 괄호 적용 가능
  • 일반적으로 산술 연산을 사용하거나 특정 함수를 적용하게 되면 칼럼의 LABEL 이 길어지게 되고, 기존 칼럼에 대해 새로운 의미를 부여한 것이므로 적절한 ALIAS를 새롭게 부여하는 것이 좋음
  • 산술 연산자는 수학에서와 같이 (), *, /, +, - 의 우선순위 가짐.
산술 연산자 설명
() 연산자 우선순위를 변경하기 위한 괄호
(괄호 안의 연산이 우선)
* 곱하기
/ 나누기
+ 더하기
- 빼기

 

[예제]

선수들의 키에서 몸무게를 뺀 값 계산

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

FROM PLAYER;

 

 

[예제]

선수들의 키와 몸무게를 이용하여 BMI(BODY MASS INDEX) 계산

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

FROM PLAYER;

 


■   합성 연산자

  • 문자와 문자를 연결하는 합성 연산자
  • 별도의 프로그램 도움 없이 SQL 문장만으로도 유용한 리포트 출력
  • 문자와 문자를 연결하는 경우 2개의 수직 바(||)에 의해 이루어짐 (Oracle)
  • 문자와 문자를 연결하는 경우 + 표시에 의해 이루어짐(SQL Server)
  • 두 벤더 모두 공통적으로 CONCAT (string1, string2) 함수 사용 가능
  • 칼럼과 문자 또는 다른 칼럼과 연결
  • 문자 표현식의 결과에 의해 새로운 칼럼 생성

[예제]

다음과 같은 선수들의 출력 형태 생성

출력 형태) 선수명 선수, 키 cm, 몸무게 kg

예) 박지성 선수, 176 cm, 70 kg
[Oracle]
SELECT PLAYER_NAME || '선수,' || HEIGHT || 'cm,' || WEIGHT || 'kg' 체격정보

FROM PLAYER
[SQL Server]
SELECT PLAYER_NAME + '선수,' + HEIGHT + 'cm,' + WEIGHT + 'kg' 체격정보

FROM PLAYER

 

 

이전글

SQLD 2과목 SQL 활용 - 정규 표현식

 

 

다음글

TCL

728x90
반응형