정보처리기사/part02.소프트웨어 개발
1. 데이터 입출력 구현
kyunge_ev
2024. 6. 7. 10:04
✅ 자료구조
1. 자료구조
(1) 자료구조의 정의
- 자료를 효율적으로 사용하기 위해 컴퓨터로 자료의 특성에 따라 분류하여 구성하고, 저장 및 처리하는 모든 작업
- 문제 해결을 위해 데이터 값들을 연산자들이 효율적으로 접근하여 처리할 수 있도록 체계적으로 조직하여 표현하는 것
- 컴퓨터에서 자료를 정리하고 효율적으로 사용할 수 있도록 다양한 구조를 갖는 것이 자료구조
(2) 자료구조의 구성
1. 선형구조
- 데이터의 전후 항목 사이 관계가 1:1이며, 선후 관계가 명확하게 한 개의 선의 형태를 갖는 리스트 구조
- 종류 : 배열 / 연결 리스트 / 스택 / 큐 / 데크
2. 비선형구조
- 데이터 항목 사이의 관계가 1:n(혹은 n:m)인 그래프적 특성을 갖는 형태
- 종류 : 트리 / 그래프
(3) 자료구조 선택 시 고려사항
- 데이터 양, 데이터 특성, 데이터 활용빈도, 사용 시스템의 기억용량, 처리시간(최선, 최악, 평균), 프로그램 난이도, 데이터 저장방식 등이 있다.
2. 선형구조
(1) 배열(Array)
- 동일한 성질을 갖는 자료의 집합으로서 색인(Index)와 값(Value)의 쌍으로 구성된 순차적인 자료구조를 말한다.
- 일반적으로 프로그래밍 언어에서는 변수의 확장에 해당하는 것으로 유사한 성격, 즉 동일한 자료형으로 이루어진 많은 자료를 처리할 때 사용한다.
(2) 연결 리스트(Linked List)
- 노드를 크게 데이터 필드와 링크 필드로 나누어 다음 노드가 기억된 공간의 주소를 이전 노드의 링크 필드에 기억시키는 방식으로 모든 노드들을 하나로 연결하는 리스트를 말한다.
- 첫 번째 노드를 가리키는 포인터가 필요한데 이를 헤드(Head)라고 한다.
- 링크 필드에는 다음 노드가 기억된 주소(포인트)가 수록되며, 가리키는 노드가 없는 노드의 포인터를 Null(또는 Nil)이라고 한다.
- 각 노드는 포인터를 통해 연결되므로 기억장소에서 서로 이웃하지 않아도 된다.
장점 | - 노드의 삽입/삭제 작업이 용이(포인터의 연결만으로 가능)하고, 기억공간이 연속되지 않아도 저장할 수 있음 - 희소행렬을 연결 리스트로 표현 시 기억장소가 절약됨 |
단점 | - 포인터 저장을 위한 기억장소가 추가로 요구되므로 기록밀도가 낮고, 임의의 문자를 접근하기 위해서는 처음부터 순차 탐색을 해야함 |
1. 단순 연결 리스트
- 하나의 링크 필드를 이용하여 연결하며, 마지막 노드의 링크 값은 Null을 가지는 리스트를 말한다.
2. 원형 연결 리스트
- (단순)연결 리스트의 마지막 노드의 링크 필드에 널(Null)이 아닌 첫 노드의 주소를 넣은 리스트를 원형 연결 리스트라고 한다.
3. 이중 연결 리스트
- 노드가 3개의 필드(link, data, rlink)로 구성되어, 노드의 왼쪽과 오른쪽에 링크 필드가 있으므로, 정방향과 역방향 탐색이 모두 가능한다.
(3) 스택(Stack)
- 제한된 구조로 원소의 삽입과 삭제가 한 쪽(top)에서만 이루어지는 유한 순서 리스트
- LIFO(Last In First Out)구조로, 마지막에 삽입한 원소를 제일 먼저 삭제하는 후입선출 구조이다.
- 배열로 구현하는 방법은 간단하지만, 크기가 고정된다.
- 연결 리스트로 구현하면 상대적으로 복잡하지만, 크기를 가변적으로 할 수 있다.
- 더 이상 삭제할 데이터가 없는 상태에서 데이터를 삭제하면 언더플로우(Underflow)가 발생한다.
- 스택의 응용 : 수식 계산, 복귀 주소 관리, 순환식, 퀵 정렬, 깊이 우선 탐색, 이진 트리 운행
📌 수식의 표기법
구분 내용 예
구분 | 내용 | 예 |
중위 표기법(Infix Notation) | 연산자가 피연산자 가운데 위치한다 | A+B |
전위 표기법(Prefix Notation) | 연산자가 피연산자 앞(왼쪽)에 위치한다 | +AB |
후위 표기법(Postfix Notation) | 연산자가 피연산자 뒤(오른쪽)에 위치한다 | AB+ |
(4) 큐(Queue)
- FIFO(First In First Out) 구조로, 제일 먼저 삽입된 원소가 제일 먼저 삭제되는 선입선출 구조이다.
- 한쪽 끝(rear)에서는 원소의 삽입만, 다른 쪽 끝(front)에서는 원소의 삭제만 허용하는 자료구조이다.
- 양 끝을 제외한 나머지 모든 위치에서의 삽입과 삭제를 허용하지 않는다.
- 구현은 배열이나 연결 리스트로 가능하다.
- 큐의 응용 : 작업 스케줄링, 너비 우선 탐색, 트리의 레벨 순회
- 원형 큐(Circular Queue)
- 순차 표현의 문제점 해결을 위해 배열 Q[n]을 원형으로 운영한다.
(5) 데크(Deque: Double-ended Queue)
- 스택과 큐의 장점을 종합한 순서 리스트이다.
- 삽입과 삭제가 리스트의 양끝에서 임의로 수행될 수 있는 구조이다.
- 스크롤(Scroll)
- 입력이 한쪽에서만 가능하게 제한한 방식
- 셀프(Shelf)
- 출력이 한쪽에서만 가능하게 제한한 방식
3. 비선형구조
(1) 트리(Tree)
- 계층형 자료구조(Hierarchical Data Structure) 노드와 노드를 간선으로 연결한다.
- 실제 나무를 뒤집어 놓은 것과 같은 형태이며, 여러 개의 노드가 계층적으로 구성된다.
- 가장 위쪽의 노드가 루트(근)노드이며, 가장 아래쪽에 자식이 없는 노드를 리프(단말) 노드라고 한다.
- 그래프(Graph)의 한 종류로 데이터들의 상호 관계를 가지(Branch)로 연결하여 계층적 관계로 구성한다.
- 사이클이 존재하지 않는다.
📌 트리의 용어
노드(Node) 데이터와 링크를 통합적으로 표현한다. → 실제 데이터가 들어가는 노드
노드(Node) | 데이터와 링크를 통합적으로 표현한다. → 실제 데이터가 들어가는 노드 |
루트(근) 노드 | 최상위 노드를 말한다. |
단말(리프) 노드 | 자식 노드를 가지지 않는 노드이다. |
비단말 노드 | 자식 노드를 갖는 노드이다. |
노드의 차수 (Degree) |
한 노드가 가지고 있는 서브 트리의 수이다. → 한 노드의 자식의 수 |
형제 (Siblings) |
한 노드의 자식들이다. |
트리의 차수 (Degree) |
그 트리에 있는 노드의 최대 차수이다. |
노드의 레벨 (Level) |
한 노드가 레벨 I에 속하면, 그 자식들은 레벨 I+1에 속한다. → 루트 노드의 레벨이 중요(루트 노드 0 이면 0,1,2,3 / 루트 노드가 1이면 1,2,3,4) |
트리의 높이(Height) 또는 깊이(Depth) |
그 트리의 최대 레벨이다. |
노드의 레벨 순서 (Level Order) |
트리의 노드들이 레벨별로 위에서 아래로, 같은 레벨 안에서는 왼편에서 오른편으로 차례로 순서를 매긴 것이다. |
(2) 이진 트리의 표현
- 일차원 배열을 이용한 순차적인 표현을 할 수 있다.
- 이진 트리의 순차 표현 시에 인덱스 0은 사용하지 않으며(0은 버린다), 인덱스 1이 항상 루트 노드이다.
- 이진 트리는 모든 노드의 차수가 2를 넘지 않는 트리이다.
- 이진 트리가 가질 수 인쓴 최대 노드 수는 깊이가 2k승 - 1개이다.
- 레벨 k에서의 최대 노드 수는 2 k-1승개이다.
- 이진 트리의 종류
- 편향 이진 트리
- 왼편 or 오른편, 즉 한 쪽으로 치우쳐진 이진 트리를 말한다.
- 구조가 좋지 않으므로 검색할 때 성능이 떨어진다.
- 포화 이진 트리(Full Binary Tree)
- 루트 노드부터 구성된 높이까지의 노드가 꽉 찬 형태의 트리이다.
- 한쪽으로 치우친 트리가 아닌 전체적인 균형이 맞는 트리이다.
- 높이가 h이고 노드 수가 2의 h승 - 1인 이진 트리이다.
- 포화 이진 트리는 완전 이진 트리에 속한다.
- 완전 이진 트리(Complete Binary Tree)
- 트리를 배열로 저장한다면 완전 이진 트리는 노드의 인덱스가 중간에 빠지는 것 없이 순서대로 진행되는 트리를 말한다.
- 포화 이진 트리는 항상 완저 ㄴ이진 트리라 할 수 있지만, 그 역의 관계는 항상 성립되지 않는다.
- 힙 트리(Heap Tree)
- 여러 개의 값들 중 가장 큰 값이나 가장 작은 값을 빠르게 찾을 수 있도록 만들어진 자료구조를 힙 트리라고 한다.
- 힙에서는 키 값이 같은 노드가 있는 경우가 있을 수 있다.
구분 내용 최대 힙(Max Heap) - 각 노드의 키 값이 그 자식의 키 값보다 작지 않은 완전 이진 트리이다.
- 루트는 가장 큰 값을 가진다.최소 힙(Min Heap) - 각 노드의 키 값이 그 자식의 키 값보다 크지 않은 완전 이진 트리이다.
- 루트는 가장 작은 값을 가진다.
- 이진 탐색 트리(Binary Search Tree)
- 루트 노드 왼쪽 값은 루트 노드보다 작고 오른쪽 값은 루트 노드 보다 크다.
- 탐색 효율이 좋고 탐색 시간이 적게 소요된다.
- 검색할 데이터가 정렬되어 있어야 한다.
- 비교 횟수를 거듭할 때마다 검색 대상이 되는 데이터의 수가 절반으로 줄어든다.
- 편향 이진 트리
(3) 그래프(Graph)
- 그래프 이론은 1736년 오일러(Euler)가 Koenigsberg의 다리 문제를 풀기 위해 적용하면서 정립되었다.
- 연결되어 있는 객체 간의 관계를 표현할 수 있는 자료구조로 현재 전기 회로의 분석, 최단거리 검색, 컴퓨터 네트워크, 인공지능 등 광범위하게 이용되고 있다.
- G=(V,E)
- 그래프(G)는 정점(Vertex)과 간선(Edge)으로 구성된 한정된 자료구조이다.
- V: 공백이 아닌 노드 또는 정점의 유한 집합
- E: 상이한 두 정점을 잇는 간선의 유한 집합
- 그래프(G)는 정점(Vertex)과 간선(Edge)으로 구성된 한정된 자료구조이다.
- 그래프 순회(검색) 방법의 종류
- 깊이 우선 탐색(DFS: Depth First Search)
- 너비 우선 탐색(BFS: Breadth First Search)
- 무방향 그래프(Undirected Graph)
- 간선을 표현하는 두 정점의 쌍에 순서가 없는 그래프이다.
- 화살표가 아닌 선으로 각 정점이 연결된다.
- () 로 표현
- 방향 그래프(Directed Graph)
- 유방향 그래프 또는 다이그래프(Digraph)라 하며, 간선을 표현하는 두 정점의 쌍에 순서가 있는 그래프이다.
- 정점의 연결은 화살표로 된다.
- <> 로 표현
- 그래프를 인접 행렬(Adjacency Matrix)로 표현
- 무방향 그래프는 주대각선을 기준으로 양옆이 대칭이다. (유방향 그래프는 우연으로 그럴 수 있지만 일반적으로 대칭이 아니다.)
- 그래프를 인접 리스트(Adjacency List)로 표현
- 완전 그래프(Complete Graph)
- 최대 수의 간선을 가진 그래프로 정점이 n개일 때 무방향 그래프는 n(n-1)/2개, 방향 그래프는 n(n-1)개의 간선의 수를 갖는다.
- 신장 트리(Spanning Tree)
- 그래프 G에서 E(G)에 있는 간선과 V(G)에 있는 모든 정점들로 구성된 트리이다.
- 주어진 그래프 G에 대한 신장 트리는 유일하지 않다.
- 사이클이 존재하지 않는다.
- 모든 정점을 한번 이상 연결 → 여러 길로 만들 수 있다(최단거리, 최저비용 등을 계산)
4. 알고리즘
(1) 알고리즘의 정의
- 주어진 문제를 컴퓨터로 풀기 위한 단계적인 방법과 절차를 말한다.
- 특정한 작업을 수행하는 명령어들의 유한 집합이다.
- 프로그램은 자료구조 + 알고리즘이다.
(2) 알고리즘의 조건
입력 | 외부에서 제공되는 데이터가 0개 이상 있다. |
출력 | 적어도 하나 이상의 출력 결과를 생성한다. |
명확성 | 알고리즘을 구성하는 각 명령어들은 그 의미가 명백하고 모호하지 않아야한다. |
유한성 | 알고리즘의 명령대로 순차적인 실행을 하면 언젠가는 반드시 실행이 종료되어야 한다. |
유효성 | 원칙적으로 모든 명령들은 종이와 연필만으로 수행될 수 있게 기본적이어야 하며, 반드시 실행 가능해야한다. → 원칙적으로 모든 명령들은 오류가 없이 실행 가능해야한다. |
📌 알고리즘 설계 기법
- 분할 정복(Divide and Conquer)
- 탐색욕적(Greedy)
- 백트래킹(Back tracking)
5. 복잡도
(1) 프로그램의 공간 복잡도(Space Complexity)
- 프로그램을 실행시켜 완료하는 데 필요한 총 저장 공간을 말한다.
- 공간 복잡도 = 고정 공간 + 가변 공간
- 고정 공간 : 프로그램의 크기가 입출력의 횟수와 관계없이 고정적으로 필요한 저장 공간을 의미
- 가변 공간 : 실행 과정에서 데이터 구조와 변수들이 필요로 하는 저장 공간
(2) 프로그램의 시간 복잡도(Time Complexity)
- 프로그램을 실행시켜 완료하는 데 걸리는 시간을 의미한다.
- 시간 복잡도 = 컴파일 시간 + 실행 시간
- 컴파일 시간 : 소스 프로그램을 컴파일하는 데 걸리는 시간으로, 프로그램의 실행 특성에 의존하지 않기 때문에 고정적이다.
- 실행 시간 : 프로그램의 실행 시간을 추정하기 위해서는 하나의 단위 명령문을 실행하는 데 걸리는 시간과 실행 빈도수가 있어야한다.
- 연산 시간 그룹
- 상수 시간 : O(1)
- 로그 시간 : O(Log₂n)
- 선형 시간 : O(n)
- n로그 시간 : O(nLog₂n)
- 평방 시간 : O(n²)
- 입방 시간 : O(n³)
- 지수 시간 : O(2ⁿ)
- 계승 시간 : O(n!)
- 연산 시간의 크기 순서
O(1) < O(Log₂n) < O(n) < O(nLog₂n) < O(2ⁿ) < O(n!) < O(n²)
(3) 점근적 표기법
- 빅오(Big-oh) 표기법의 수학적 정의
- 알고리즘의 효율성을 표기하는 방법으로 데이터의 개수(n)에 따라 기본 연산 횟수를 나타낸다.
- 데이터 양에 상관없이 항상 일정
- 오메가(Omega) 표기법의 수학적 정의
- 세타(Theta) 표기법의 수학적 정의
6. 정렬
(1) 정렬(sort)의 개요
- 정렬은 키 값의 순서에 따라 파일 내의 레코드들을 순서대로 정하는 것
- 정렬은 오름차순과 내림차순으로 구분할 수 있다.
- 오름차순은 수치가 점점 커지는 것
- 내림차순은 수치가 점점 작아지는 것
- 종류 : 선택 정렬, 버블 정렬, 삽입 정렬, 퀵 정렬, 힙 정렬, 합병(병합) 정렬 등
(2) 선택 정렬(Selection Sort)
- 제자리 정렬 알고리즘의 하나로 수행 시간의 차수는 O(n²) 이다.
- 오름차순으로 정렬할 경우에 최소값을 찾아 가장 앞의 테이프와 교환해가며 정렬하는 방법
💡 제자리 정렬
- 정렬할 데이터가 입력된 공간 이외의 다른 공간을 사용하지 않는 정렬 방법
(3) 버블 정렬(Bubble Sort)
- 두 인접한 요소끼리 비교하여 정렬하는 방법으로 수행시간의 차수는 O(n²)이다.
- 만약 오름차순으로 정렬할 경우 이웃하는 두 개의 값을 비교하여 앞쪽의 값이 더 크면 두 요소의 값을 교환하는 방식으로 정렬
(4) 삽입 정렬(Insertion Sort)
- 주어진 데이터 중 맨 앞의 원소를 정렬된 구간으로 설정하고, 나머지를 그렇지 않은 구간으로 정한다.
- 삽입 데이터 정하기 : 정렬되지 않은 구간의 맨 앞 데이터를 삽입 데이터(키 값)으로 정한다.
- 삽입 위치 파악 : 정렬 구간을 역순으로 탐색하며 키 값이 삽입될 위치를 파악한다.
- 모든 데이터가 정렬 될 때까지 위 과정을 반복한다.
(5) 퀵 정렬(Quick Sort)
- n개의 데이터를 정렬할 때,
- 최악의 경우 O(n²)번의 비교를 수행
- 평균적으로 O(nLog₂n)번의 비교를 수행
- 퀵 정렬을 분할 정복 방법을 통해 배열 요소를 정렬
- 데이터가 0이나 1될 때 까지 분할을 반복
(6) 힙 정렬(Heap Sort)
- 수행 시간의 차수는 O(nLog₂n)이다.
- 힙 정렬은 힙 트리를 이용하여 정렬이 이루어지며, 최대 힙이나 최소 힙을 이용할 수 있다.
(7) 합병 정렬(Merge Sort)
- 수행 시간의 차수는 O(nLog₂n)이다.
- 전체 배열을 요소의 수가 1인 부분 배열로 가정하여 두 개씩 작을 지어 정렬한다.
- 정렬된 각각의 배열들을 다시 짝을 지어 정렬한다.
- 최종적으로 하나의 배열로 병합될 때까지 반복한다.
- 제자리 정렬이 아니다 → 기억공간을 많이 차지함
7. 탐색
(1) 탐색의 개요
- 어떤 특정한 원소를 찾아내기 위하여 자료구조나 파일을 조사하는 과정을 탐색이라 한다.
- 일반적으로 탐색을 빠르게 하지 위하여 선작업으로 정렬하는 경우가 있다.
- 탐색 기법의 종류 : 순차 탐색, 이진 탐색, 해싱 등
(2) 순차 탐색
- 레코드를 순서대로 하나씩 비교하여 찾는 방법
- 전반적으로 탐색 시간이 길어지지만, 정렬되어 있지 않은 파일도 탐색이 가능하다.
- 수행 시간의 차수는 O(n)이다.
(3) 이진 탐색
- 파일이 정렬되어 있어야 하며, 파일의 데이터가 중앙에 위치한 키 값과 비교하여 다음 탐색 위치를 결정하므로 탐색 대상이 반으로 감소된다.
- 탐색 시간이 적게 걸리지만, 삽입과 삭제가 많을 때는 적합하지 않고(정렬된 위치를 찾아서 삽입, 삭제를 해야하니까) 고정된 데이터 탐색에 적합하다.
- 수행 시간의 차수는 O(Log₂n)이다.
- 이진 탐색에서 중간값 찾는 법 = 양 끝 인덱스를 합하고 2로 나눈다
(4) 해싱(Hashing)
- 파일을 구성하거나 검색할 때 키를 비교하는 것이 아니라 계산에 의해서 주소를 기억공간에 보관하거나 검색한다.
- 해싱은 다른 레코드의 키 값과 비교할 필요가 없는 탐색 방법이다.
- 탐색 시간의 복잡도는 O(1)이지만, 충돌이 발생하며 O(n)이 된다.
- 해싱 함수 : 제곱법, 제산법, 폴딩법, 자리수 분석법
📌 해싱 기본 용어
해시표 | 레코드를 1개 이상 저장할 수 있는 버킷(Bucket)들로 구성된 기억공간이다. |
해싱 함수 | 해시표 내의 버킷 주소를 계산하여 일정한 규칙을 말한다. |
홈 주소 | 해싱 함수에 의해 계산된 주소 |
버킷(Bucket) | 홈 주소를 갖는 기억공간, 즉 어떤 키가 저장될 기억공간을 말한다. |
충돌 (Collision or Clash) |
해싱 함수에 의해 같은 홈 주소를 갖게되는 현상 |
동거자(=동의어) (Synonym) |
충돌 현상이 발생되는 레코드들의 집합으로 같은 홈 주소를 갖는 레코드들의 집합을 말한다. |
- 해싱함수
- 입력된 키 값을 해시 테이블의 주소로 변환시켜 주는 함수
- 해시 함수의 선택에 따라 레코드가 특정 버킷에 편중되지 않고 주소 공간에 균등하게 사상될 수 있도록 한다.
- 해싱 함수의 종류 : 중간 제곱법, 제산법, 폴딩법, 자리수 분석법
중간 제곱법
(Mid-Square)- 키 값을 제곱한 후 중간에 정해진 자리 수만큼을 취해서 해시 테이블의 버킷 주소로 만드는 방법
- 키 값을 제곱한 결과값의 중간의 수들은 키 값의 모든 자리들로부터 영향을 받으므로 버킷 주소가 고르게 분산될 가능성이 높다.제산법
(Division-Remainder)- 키 값을 테이블 크기로 나누어서 그 나머지를 버킷 주소로 변환하는 방법 폴딩법
(Folding)- 키 값을 버킷 주소 크기만큼의 부분으로 분할한 후, 분할한 것을 더하거나 연산하여 그 결과 주소의 크기를 벗어나는 수는 버리고, 벗어나지 않는 수를 택하여 버킷의 주소를 만드는 방법 자리수 분석법
(Digit-analysis)모든 키를 분석해서 불필요한 부분이나 중복되는 부분을 제거하여 홈 주소를 결정하는 방법
- 해싱의 문제점
- 충돌이 발생할 수 있다. → 충돌이 빈번하면 발생 시간이 길어지는 등 성능이 저하되므로 해시 함수의 수정이나 해시 테이블의 크기가 적절히 조절되어야한다.
8. 탐색 구조
(1) AVL 트리
- Adelson-Velakii와 Landis에 의해 제안되었다.
- 각 노드의 왼쪽 서브 트리의 높이와 오른쪽 서브 트리의 높이 차이가 1 이하인 이진 탐색 트리이다. → 공백 서브 트리의 높이는 -1로 정의
- 모든 노드들이 AVL 성질을 만족하는 이진 탐색 트리
(2) 2-3 트리
- 차수가 2 또는 3인 탐색 트리 구조
- 삽입과 삭제 연산이 AVL 트리 보다 간단하다.
(3) 레드-블랙 트리
- 노드 색깔이 레드나 블랙으로 된 이진 탐색 틀이이며, 2-3-4 트리를 이진 트리로 표현한 것
✅ 데이터 조작 프로시저 작성
1. 프로시저
(1) SQL(Structured Query Language, 구조적 질의어)
- SQL : IBM에서 개발된 데이터베이스에서 사용되는 언어
- SQL의 특징
- 관계대수와 관계해석을 기초로한 질의 언어
- 이해하기 쉬운 상태
- 대회식 언어뿐 아니라 응용 프로그램에 삽입되어 사용
- 용도에 따라 데이터 정의어, 데이터 조작어, 데이터 제어어로 구분
- COBOL, C, PASCAL 등의 언어에 삽입
- 레코드 집합 단위로 처리
- 비절차적 언어
- SQL의 종류
종류 관련 명령어
종류 | 관련 명령어 |
데이터 정의어 (DDL : Data Definition Language) |
CREATE / DROP / RENAME / ALTER / TRUNCATE 등 |
데이터 조작어 (DML : Data Manifulation Language) |
INSERT / UPDATE / DELETE / SELECT 등 |
데이터 제어어 (DCL : Data Control Language) |
GRANT / REVOKE 등 |
트랜잭션 제어어 (TCL : Transaction Control Language) |
COMMIT / ROLLBACK / SAVEPOINT 등 |
(2) PL(Procedural Language) / SQL
- 서버에서 절차적인 처리를 위해 표준 SQL을 확장한 절차적 언어
- 블록 구조로 여러 SQL 문을 한 번에 실행할 수 있으며, 모듈화 및 캡슐화, 비교, 반복, 예외 처리가 가능하다.
- 서버에 저장되어 빠른 실행이 가능하지만, 문법에 대한 표준이 거의 없고 각 DBMS에 종속적인 것이 단점이다.
- PL/SQL 구조는 선언부, 실행부, 예외 처리부로 되어있다.
(3) 저장된 함수(Stored Function)
- 특정 작업을 수행할 수 있는 이름이 있는 PL/SQL 블록으로, 구성이 프로시저와 유사하지만 IN 파라미터만 사용할 수 있다.
(4) 저장된 프로시저(Stored Procedure)
- 특정 작업을 수행할 수 있는 이름이 있는 PL/SQL 블록으로, 매개 변수를 받을 수 있고, 반복적으로 사용할 수 있는 객체(Object)이다.
(5) 저장된 패키지(Stored Package)
(6) 트리거(Trigger)
- INSERT, UPDATE, DELETE문이 수행 될 때 묵시적으로 수행되는 PROCEDURE로 테이블(Table)과는 별도로 데이터베이스에 저장된다.