데이터 조작 언어
1. 개요
데이터 조작 언어(DML)는 데이터베이스에 저장된 데이터를 검색, 삽입, 수정 및 삭제하는 데 사용되는 언어의 한 종류이다. SQL은 DML의 대표적인 예시로, SELECT, INSERT, UPDATE, DELETE 등의 명령어를 통해 데이터베이스를 조작한다. DML은 선언적 언어와 절차적 언어로 나뉘며, SQL은 선언적 언어에 속한다. 대부분의 SQL 데이터베이스는 SQL 기능을 확장하기 위해 절차적 언어를 제공하며, 데이터베이스 벤더에 따라 다양한 종류와 기능을 가진다.
-
데이터 모델링 -
빌딩 정보 모델링
빌딩 정보 모델링(BIM)은 건축물의 전 생애주기 동안 발생하는 정보를 디지털 모델로 통합 관리하는 프로세스이다. -
데이터 모델링 -
저장 프로시저
저장 프로시저는 데이터베이스 관리 시스템에서 SQL 문들을 미리 컴파일하여 저장하고, 모듈화, 보안성, 성능 향상, 유지보수 용이성과 같은 특징을 가지며, 데이터베이스 시스템마다 구현 방식과 지원하는 언어가 다를 수 있는 코드 묶음이다. -
SQL -
사용자 정의 함수
사용자 정의 함수는 프로그래밍 언어와 데이터베이스 시스템에서 사용자가 직접 정의하여 재사용할 수 있는 코드 블록이다. -
SQL -
임베디드 SQL
임베디드 SQL은 호스트 프로그래밍 언어 내에 SQL 문을 삽입하여 데이터베이스와 상호 작용하는 기술로, 데이터베이스 액세스를 표준화하지만 보안 취약점과 이식성 저하의 단점도 가진다. -
데이터베이스 관리 시스템 -
트랜잭션 처리
트랜잭션 처리는 데이터베이스 시스템에서 데이터의 일관성과 무결성을 보장하기 위한 기술이며, ACID 속성을 통해 데이터 정확성을 유지하고 롤백, 데드락 처리 등의 기술을 활용한다. -
데이터베이스 관리 시스템 -
저장 프로시저
저장 프로시저는 데이터베이스 관리 시스템에서 SQL 문들을 미리 컴파일하여 저장하고, 모듈화, 보안성, 성능 향상, 유지보수 용이성과 같은 특징을 가지며, 데이터베이스 시스템마다 구현 방식과 지원하는 언어가 다를 수 있는 코드 묶음이다.
2. 종류
데이터 조작 언어(DML)는 문장의 첫 단어로 기능을 표시하며, 이 단어는 대부분 동사이다. 데이터 조작 언어는 데이터베이스 공급업체(벤더) 간에 언어 및 기능에서 많은 차이를 보인다. ANSI/ISO에서 제정한 SQL 표준이 있지만, 데이터베이스 벤더들은 표준 범위를 넘어 고유의 확장 기능을 제공한다. 데이터 조작 언어에는 기본적으로 선언적 데이터 조작 언어와 절차적 데이터 조작 언어 두 가지 종류가 있다.
데이터 조작 언어는 초기에는 컴퓨터 프로그램 내에서만 사용되었지만, SQL의 출현과 함께 데이터베이스 관리자가 대화식으로 사용하게 되었다.
2.1. 선언적 데이터 조작 언어
사용자가 원하는 데이터와 그 조건을 명시하면, 시스템이 자동으로 최적의 처리 방법을 결정하여 데이터를 조작한다. SQL이 대표적인 선언적 언어이다.
SQL의 경우 문장의 첫 단어(동사)는 다음과 같다.
2.2. 절차적 데이터 조작 언어
절차적 데이터 조작 언어는 사용자가 데이터 처리 순서와 방법을 명시하여 데이터를 조작하는 방식이다. 대부분의 SQL 데이터베이스 구현은 명령형 언어를 제공하여 SQL 기능을 확장한다. 오라클의 PL/SQL과 IBM Db2의 SQL_PL이 대표적인 예시이다.
3. SQL
SQL은 데이터 조작 언어(DML)의 한 종류로, 데이터베이스에 저장된 데이터를 검색, 삽입, 수정, 삭제하는 기능을 제공한다. SQL은 ANSI/ISO 표준이 있지만, 각 데이터베이스 벤더들은 표준을 넘어선 고유의 확장 기능을 제공하기도 한다.
SQL에서 데이터 조작은 SQL-데이터 변경 명령문을 통해 이루어지며, 이는 스키마나 다른 데이터베이스 객체를 변경하지 않는다. 영구적인 데이터베이스 객체(예: 테이블, 저장 프로시저)를 조작하는 것은 DML이 아닌 데이터 정의 언어(DDL)의 영역이다.
SQL-데이터 변경 명령문은 SQL-데이터 명령문의 하위 집합이며, 엄밀히 DML이 아닌 DQL의 일부인 SELECT 쿼리 문도 포함한다. 하지만 일반적으로 SELECT는 DML의 일부로 간주된다. SELECT ... INTO ... 형식은 데이터를 수정하므로 DML로 분류된다.
3.1. SQL DML 명령어
SQL에서 데이터 조작 언어(DML)는 저장된 데이터를 수정하지만 스키마나 데이터베이스 객체는 수정하지 않는 SQL-데이터 변경 명령문으로 구성된다. SQL의 데이터 조작 언어는 문장의 첫 단어(대부분 동사)로 기능을 나타내며, 다음과 같은 명령어들이 있다.
* SELECT - 검색 (질의)
* INSERT - 삽입 (등록)
* UPDATE - 업데이트 (수정)
* DELETE - 삭제
데이터 조작 언어는 데이터베이스 공급업체(벤더) 간에 언어 및 기능에서 많은 차이를 가지는 경향이 있다. SQL은 ANSI / ISO에서 제정된 표준이 있지만, 데이터베이스 벤더들은 표준의 범위를 넘어 고유의 확장 기능을 제공하고 있다.
SQL-데이터 변경 명령문은 SQL-데이터 명령문의 하위 집합이다. 여기에는 엄밀히 말하면 DML이 아닌 DQL의 일부인 SELECT 쿼리 문도 포함된다. 그러나 일반적으로 이러한 구분을 두지 않고 SELECT는 DML의 일부로 널리 간주되므로 DML은 모든 SQL-데이터 명령문으로 구성되며 SQL-데이터 변경 명령문만으로 구성되는 것은 아니다. SELECT ... INTO ... 형식은 선택과 조작을 모두 결합하므로 데이터를 조작(즉, 수정)하기 때문에 엄밀히 DML로 간주된다.
SQL에서 사용되는 대표적인 DML 명령어는 다음과 같다.
* SELECT ... FROM ... WHERE ... (엄밀히 말하면 DQL)
** SELECT ... INTO ...
* INSERT INTO ... VALUES ...
* UPDATE ... SET ... WHERE ...
* DELETE FROM ... WHERE ...
예를 들어, `employees` 테이블에 새로운 행을 삽입하는 명령어는 다음과 같다.
```sql
INSERT INTO employees (first_name, last_name, fname) VALUES ('John', 'Capita', 'xcapit00');
3.2. 예시
데이터 조작 언어는 문장의 첫 단어로 표시하는 기능을 가진다. 데이터 조작 언어에서 문장의 첫 단어는 대부분의 경우 동사이다. SQL의 경우 이러한 동사는 다음과 같다.
* SELECT - 검색 (질의)
* INSERT - 삽입 (등록)
* UPDATE - 업데이트 (수정)
* DELETE - 삭제
데이터 조작 언어는 데이터베이스 공급업체(벤더) 간에 언어 및 기능에서 많은 차이를 가지는 경향이 있다. SQL은 ANSI / ISO에서 제정된 표준이 있다. 그러나 데이터베이스 벤더들은 표준의 범위를 넘어 고유의 확장 기능을 제공하고 있다. 데이터 조작 언어에는 기본적으로 두 가지 종류가 있다.
SQL에서 데이터 조작 언어는 저장된 데이터를 수정하지만 스키마 또는 데이터베이스 객체는 수정하지 않는 SQL-데이터 변경 명령문으로 구성된다.
SQL-데이터 변경 명령문은 SQL-데이터 명령문의 하위 집합이다. 여기에는 엄밀히 말하면 DML이 아닌 DQL의 일부인 SELECT 쿼리 문도 포함된다. 그러나 일반적으로 이러한 구분을 두지 않고 SELECT는 DML의 일부로 널리 간주되므로 DML은 모든 SQL-데이터 명령문으로 구성되며 SQL-데이터 변경 명령문만으로 구성되는 것은 아니다. SELECT ... INTO ... 형식은 선택과 조작을 모두 결합하므로 데이터를 조작(즉, 수정)하기 때문에 엄밀히 DML로 간주된다.
데이터 조작 언어는 문장의 초기 단어, 거의 항상 동사에 의해 기능적 기능이 구성된다. SQL의 경우 이러한 동사는 다음과 같다.
* `SELECT ... FROM ... WHERE ...` (엄밀히 말하면 DQL)
* `SELECT ... INTO ...`
* `INSERT INTO ... VALUES ...`
* `UPDATE ... SET ... WHERE ...`
* `DELETE FROM ... WHERE ...`
예를 들어 테이블 employees에 행을 삽입하는 명령은 다음과 같다.
```sql
INSERT INTO employees (first_name, last_name, fname) VALUES ('John', 'Capita', 'xcapit00');