절차적 언어와 비절차적 언어의 차이
SQL과 DBMS에서 사용하는 언어는 절차적 언어와 비절차적 언어로 나눌 수 있습니다. 이 두 언어는 데이터 처리 방식과 설계 철학에서 차이가 있으며, 각각의 장점과 용도가 다릅니다. 다음은 주요 특징과 예시입니다.
1. 비절차적 언어 (Non-Procedural Language)
정의
- 사용자가 "무엇을 할 것인가?"만 기술하며, "어떻게 처리할지"는 DBMS가 자동으로 결정하는 언어입니다.
- 데이터 검색과 조작에 필요한 결과를 간단히 표현할 수 있어 직관적이고 생산성이 높습니다.
특징
- 사용자는 데이터 처리 절차를 고려하지 않아도 됩니다.
- DBMS가 최적의 실행 계획(Execution Plan)을 자동으로 생성해 데이터를 처리합니다.
- 일반적으로 SQL과 같은 언어가 비절차적 언어에 해당됩니다.
예시
SELECT EMPNO, ENAME, SAL
FROM EMP
WHERE SAL > 3000;
- 해석: "급여(SAL)가 3000 초과인 직원의 사번, 이름, 급여를 가져와라."
- 사용자는 결과만 요청하고, DBMS는 인덱스 사용, 데이터 읽기 순서 등을 자동으로 처리합니다.
DML과의 관계
- SQL의 데이터 조작 언어(DML) 명령어인
SELECT
, INSERT
, UPDATE
, DELETE
는 결과 중심의 요청만 작성하며, 비절차적 언어로 분류됩니다.
2. 절차적 언어 (Procedural Language)
정의
- 사용자가 "무엇을 어떻게 처리할지"를 명시적으로 기술해야 하는 언어입니다.
- 조건문, 반복문, 변수 선언 등 프로그래밍 언어의 절차적 구조를 지원합니다.
특징
- 사용자가 데이터 처리의 세부 절차를 명시해야 합니다.
- 데이터 조작뿐만 아니라 복잡한 비즈니스 로직 구현에 적합합니다.
- 대표적인 예로 PL/SQL (Oracle)과 T-SQL (SQL Server)이 있습니다.
예시 (Oracle의 PL/SQL)
BEGIN
FOR emp_rec IN (SELECT ENAME, SAL FROM EMP WHERE SAL > 3000)
LOOP
DBMS_OUTPUT.PUT_LINE(emp_rec.ENAME || ' earns ' || emp_rec.SAL);
END LOOP;
END;
- 해석: "급여가 3000 초과인 직원의 이름과 급여를 출력한다."
- 데이터 조작뿐만 아니라, 반복 작업과 출력 로직을 명시적으로 작성했습니다.
예시 (SQL Server의 T-SQL)
DECLARE @emp_name NVARCHAR(100);
DECLARE emp_cursor CURSOR FOR SELECT ENAME FROM EMP WHERE SAL > 3000;
OPEN emp_cursor;
FETCH NEXT FROM emp_cursor INTO @emp_name;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @emp_name;
FETCH NEXT FROM emp_cursor INTO @emp_name;
END;
CLOSE emp_cursor;
DEALLOCATE emp_cursor;
- 해석: "급여가 3000 초과인 직원의 이름을 하나씩 가져와 출력한다."
- 커서를 사용하여 데이터를 반복적으로 처리하는 명령을 절차적 방식으로 작성했습니다.
절차적 언어와 비절차적 언어 비교
특징 |
비절차적 언어 (SQL) |
절차적 언어 (PL/SQL, T-SQL) |
초점 |
"무엇을 할 것인가?" |
"무엇을 어떻게 할 것인가?" |
제어 흐름 |
없음 |
조건문, 반복문 등 명시 가능 |
사용 목적 |
간단한 데이터 검색 및 조작 |
복잡한 로직, 배치 작업 |
사용 DBMS |
모든 DBMS (Oracle, SQL Server 등) |
Oracle(PL/SQL), SQL Server(T-SQL) |
명령어 예 |
DML(SELECT , INSERT ) |
배치 처리, 트랜잭션 관리 |
3. SQL과 DBMS의 관계
SQL:
- SQL은 데이터베이스에 대한 표준 언어로, 주로 비절차적 방식으로 데이터를 처리합니다.
- Oracle, SQL Server와 같은 DBMS에서 비절차적 언어(SQL)를 사용해 데이터를 검색하거나 조작합니다.
Oracle과 SQL Server:
- Oracle:
- 비절차적 언어(SQL)와 절차적 언어(PL/SQL)를 함께 지원합니다.
- SQL Server:
- 비절차적 언어(SQL)와 절차적 언어(T-SQL)를 함께 지원합니다.