컴퓨터과학 챕터 3 약 11분

Ch3. 컴퓨터활용능력 1급 — 데이터베이스(Access) 완전 정복

O
OIYO 편집부 기여자
3/5

이번 강의 학습 목표

컴퓨터활용능력 1급의 두 번째 실기 과목인 **데이터베이스(MS Access)**는 스프레드시트와 별도로 45분이 주어지는 독립 시험입니다. 테이블 설계부터 쿼리, 폼, 보고서까지 전 범위를 체계적으로 정복합니다.


Access 개요와 시험 출제 비중

MS Access란

MS Access는 마이크로소프트 오피스에 포함된 **관계형 데이터베이스 관리 시스템(RDBMS)**입니다. 파일 기반으로 동작하므로 서버 없이 단독 사용이 가능하며, GUI 기반의 폼·보고서 디자인 기능이 강점입니다. 컴활 1급 실기에서는 Access 2016/2019 버전을 기준으로 출제됩니다.

컴활 1급 데이터베이스 실기 출제 비중

영역출제 비중주요 작업
테이블약 20%필드 속성, 기본 키, 인덱스, 유효성 검사
쿼리약 40%선택·크로스탭·매개변수·실행 쿼리, SQL
약 20%컨트롤 배치, 속성, 이벤트 프로시저 기초
보고서약 20%그룹화·정렬, 집계 함수, 레이아웃

쿼리가 전체의 40%를 차지하므로 쿼리를 집중적으로 숙달하는 것이 합격의 핵심입니다.


테이블 설계

필드 속성(Field Properties)

Access 테이블 디자인 보기에서 각 필드에 설정할 수 있는 주요 속성입니다.

필드 크기(Field Size)
- 텍스트: 1~255 문자(기본 255)
- 정수(Integer): -32,768 ~ 32,767
- 긴 정수(Long Integer): -2,147,483,648 ~ 2,147,483,647

형식(Format)
- 날짜/시간: yyyy-mm-dd, yyyy년 mm월 dd일 등
- 숫자: #,##0 (천 단위 쉼표), 0.00 (소수 2자리)
- 예/아니요: True/False, 예/아니요

입력 마스크(Input Mask)
- 000-0000-0000 : 전화번호 형식 강제 입력
- >LLLL : 4글자 영문 대문자만 허용

캡션(Caption): 폼·보고서에서 표시되는 레이블 이름
기본값(Default Value): 새 레코드 추가 시 자동으로 채워지는 값
유효성 검사 규칙: >=0 (0 이상만 허용), Like "K*" (K로 시작하는 텍스트만)
유효성 검사 텍스트: 규칙 위반 시 표시할 오류 메시지
필수(Required): 빈 값 허용 여부 (예/아니요)
빈 문자열 허용(Allow Zero Length): "" 입력 허용 여부

기본 키(Primary Key)

기본 키는 테이블의 각 레코드를 고유하게 식별하는 필드입니다.

  • 중복 값 불가 (Unique)
  • NULL 값 불가 (NOT NULL)
  • 기본 키가 설정된 필드에는 자동으로 인덱스(중복 불가) 생성

복합 기본 키: 두 개 이상의 필드를 합쳐 기본 키로 설정 → 두 필드를 동시 선택(Shift+클릭) 후 기본 키 설정

인덱스(Index)

인덱스는 검색 및 정렬 속도를 향상시키는 색인입니다.

인덱스 종류설명
중복 불가기본 키 필드에 자동 적용, 같은 값 두 번 입력 불가
중복 가능자주 검색하는 필드에 설정, 같은 값 허용
없음인덱스 미설정

인덱스 설정 방법: 디자인 보기 → 필드 선택 → 하단 [인덱싱] 속성에서 선택


관계 설정 (Relationships)

관계의 종류

데이터베이스에서 테이블 간의 연결을 **관계(Relationship)**라고 합니다.

관계 유형설명예시
1:1 (일대일)한 레코드가 상대 테이블의 딱 한 레코드에만 대응직원 — 직원상세정보
1:N (일대다)한 레코드가 상대 테이블의 여러 레코드에 대응고객 — 주문
N:M (다대다)양쪽 모두 여러 레코드에 대응 (중간 테이블 필요)학생 — 강좌

N:M 관계 구현: Access에서는 N:M을 직접 표현할 수 없으므로 중간 **연결 테이블(Junction Table)**을 생성합니다.

예: 학생-강좌 N:M 관계
→ [학생] 1:N [수강신청] N:1 [강좌]
학생테이블(학생ID) — 수강신청(학생ID, 강좌ID) — 강좌테이블(강좌ID)

참조 무결성(Referential Integrity)

관계를 설정할 때 참조 무결성을 적용하면 데이터 일관성이 보장됩니다.

  • 관련 필드 모두 업데이트: 기본 키 값 변경 시 관련 레코드 자동 업데이트
  • 관련 레코드 모두 삭제: 기본 키 레코드 삭제 시 관련 레코드 자동 삭제
  • 참조 무결성 없이 삭제 시 → 고아 레코드(Orphan Record) 발생

관계 설정 방법: [데이터베이스 도구] → [관계] → 필드 드래그로 연결 → 참조 무결성 옵션 체크


쿼리(Query) 종류와 활용

선택 쿼리 (Select Query)

가장 기본적인 쿼리로, 조건에 맞는 레코드를 조회합니다.

쿼리 디자인 보기 구성 요소:
- 필드(Field): 표시할 열 선택
- 테이블(Table): 필드가 속한 테이블
- 정렬(Sort): 오름차순/내림차순
- 표시(Show): 결과에 표시 여부(체크박스)
- 조건(Criteria): 필터 조건 입력

조건 입력 예시:
- 같음: "서울" 또는 ="서울"
- 비교: >=100, <50
- 범위: Between 10 And 50
- 포함: Like "*서울*"
- 비어 있음: Is Null
- 비어있지 않음: Is Not Null
- AND: 같은 행에 여러 조건
- OR: 다른 행에 조건 입력

계산 필드 추가: 필드 행에 직접 수식 입력

총점: [국어]+[영어]+[수학]
평균: ([국어]+[영어]+[수학])/3
등급: IIf([점수]>=90,"A",IIf([점수]>=80,"B","C"))

크로스탭 쿼리 (Crosstab Query)

데이터를 행과 열 기준으로 교차 집계하는 쿼리입니다. 피벗테이블과 유사한 결과를 만듭니다.

쿼리 마법사 사용:
[만들기] → [쿼리 마법사] → [크로스탭 쿼리 마법사]

구성:
- 행 머리글: 세로 기준 필드 (예: 지역)
- 열 머리글: 가로 기준 필드 (예: 분기)
- 값: 집계 필드와 함수 선택 (예: 판매액의 합계)
- 행 합계: 행별 집계 추가 가능

매개변수 쿼리 (Parameter Query)

쿼리 실행 시 사용자에게 입력값을 요청하는 쿼리입니다. 유연한 조회가 필요할 때 활용합니다.

조건 입력 방법:
조건 행에 대괄호로 메시지 입력
예: [검색할 지역을 입력하세요]
    [시작일을 입력하세요] 형식으로 작성

숫자 범위 매개변수:
>= [최소값] And <= [최대값]

날짜 매개변수:
Between [시작일] And [종료일]

실행 쿼리 (Action Query)

데이터를 수정·삭제·추가·생성하는 쿼리입니다. 실행 전 반드시 백업 권장.

종류기능주의사항
업데이트 쿼리기존 레코드의 필드 값 수정되돌릴 수 없음
삭제 쿼리조건에 맞는 레코드 삭제복구 불가
추가 쿼리다른 테이블에 레코드 추가필드 형식 일치 필요
테이블 만들기 쿼리쿼리 결과를 새 테이블로 저장기존 테이블 덮어씀

업데이트 쿼리 작성 예시:

[만들기] → [쿼리 디자인] → 테이블 추가
[쿼리 형식] → [업데이트]
업데이트 대상 필드 선택
'업데이트' 행: 새로운 값 입력
  예: [단가]*1.1  ← 단가를 10% 인상
조건 행: 조건 입력 (예: [지역]="서울")

SQL 기초

SELECT 문

Access 쿼리 디자인 보기는 내부적으로 SQL로 변환됩니다. SQL 보기에서 직접 작성도 가능합니다.

-- 기본 SELECT
SELECT 필드1, 필드2 FROM 테이블명;

-- 조건 검색 (WHERE)
SELECT 이름, 점수 FROM 학생
WHERE 점수 >= 80;

-- 정렬 (ORDER BY)
SELECT 이름, 점수 FROM 학생
ORDER BY 점수 DESC;  -- 내림차순

-- 두 조건 AND
SELECT * FROM 주문
WHERE 지역="서울" AND 금액>=100000;

-- OR 조건
SELECT * FROM 학생
WHERE 학과="컴공" OR 학과="전자";

-- 범위 (BETWEEN)
SELECT * FROM 상품
WHERE 가격 BETWEEN 10000 AND 50000;

-- 패턴 검색 (LIKE)
SELECT * FROM 고객
WHERE 이름 LIKE "김*";  -- 김으로 시작하는 이름

GROUP BY와 집계 함수

-- 그룹별 집계
SELECT 지역, COUNT(*) AS 인원수, AVG(점수) AS 평균점수
FROM 학생
GROUP BY 지역;

-- HAVING: 그룹 집계 후 조건 (WHERE는 집계 전)
SELECT 지역, SUM(판매금액) AS 총매출
FROM 판매
GROUP BY 지역
HAVING SUM(판매금액) >= 1000000;

-- 주요 집계 함수
COUNT(*): 레코드 수
COUNT(필드): NULL 제외 개수
SUM(필드): 합계
AVG(필드): 평균
MAX(필드): 최대값
MIN(필드): 최소값

조인(JOIN)

-- INNER JOIN: 양쪽 테이블에 모두 존재하는 데이터만
SELECT 고객.이름, 주문.금액
FROM 고객 INNER JOIN 주문
ON 고객.고객ID = 주문.고객ID;

-- LEFT JOIN: 왼쪽 테이블 전체 + 오른쪽에 있으면 포함
SELECT 고객.이름, 주문.금액
FROM 고객 LEFT JOIN 주문
ON 고객.고객ID = 주문.고객ID;

폼(Form) 컨트롤 종류

폼이란

**폼(Form)**은 테이블이나 쿼리의 데이터를 입력·조회·수정하기 위한 사용자 인터페이스입니다. 디자인 보기에서 다양한 컨트롤을 배치합니다.

주요 컨트롤 종류

컨트롤용도특징
레이블텍스트 표시(입력 불가)컨트롤 이름 표시, 클릭 무반응
텍스트 상자데이터 입력·표시필드와 연결(바운드) 또는 수식 입력(언바운드)
콤보 상자드롭다운 목록 선택직접 입력도 허용
목록 상자목록에서 선택드롭다운 없이 항상 펼쳐진 상태
체크 박스예/아니요 값 입력예/아니요, True/False 필드 연결
옵션 단추(라디오)상호 배타적 선택옵션 그룹 안에서 하나만 선택
옵션 그룹라디오 버튼 묶음 컨테이너선택된 값이 숫자로 저장
명령 단추클릭 시 작업 실행매크로 또는 VBA 이벤트 연결
이미지그림 삽입OLE 개체 또는 파일 경로
탭 컨트롤탭 페이지 형태로 구성공간 절약, 그룹화
하위 폼폼 안에 다른 폼 삽입1:N 관계 데이터 표시에 유용

컨트롤 주요 속성

이름(Name): 코드에서 참조할 컨트롤 식별자
컨트롤 원본(Control Source): 연결된 필드 이름 또는 수식 (=[단가]*[수량])
형식(Format): 숫자/날짜 표시 형식
기본값(Default Value): 새 레코드 시 자동 채움
잠금(Locked): True이면 읽기 전용
사용 가능(Enabled): False이면 비활성화(회색)
탭 정지(Tab Stop): False이면 Tab 키로 이동 건너뜀

보고서(Report) 그룹화와 집계

보고서 구성 영역

영역표시 위치용도
보고서 머리글전체 보고서 맨 위제목, 로고
페이지 머리글매 페이지 상단열 제목
그룹 머리글각 그룹 시작그룹 기준값 표시
본문(세부 레코드)레코드마다 반복실제 데이터
그룹 바닥글각 그룹 끝그룹 소계
페이지 바닥글매 페이지 하단페이지 번호
보고서 바닥글전체 보고서 맨 아래총계

그룹화 설정

[보고서 디자인] → [그룹화 및 정렬] 창
→ 그룹화할 필드 선택
→ 정렬 방향 설정
→ 그룹 머리글/바닥글 표시 여부

그룹 바닥글에 집계 함수 추가:
=Sum([판매금액])   ← 그룹별 소계
=Count(*)          ← 그룹별 건수
=Avg([점수])       ← 그룹별 평균

보고서 집계 함수

보고서 바닥글의 총계:
=Sum([금액])        ← 전체 합계
=Count([주문번호])  ← 전체 건수

페이지 번호:
=[Page] & " / " & [Pages]  ← "3 / 10" 형태

현재 날짜:
=Date() 또는 =Now()

조건부 표시:
=IIf([점수]>=90, "우수", "보통")

핵심 개념 카드

쿼리 조건: AND vs OR ★★★★★ : 같은 행에 입력한 조건은 AND 관계, 다른 행에 입력한 조건은 OR 관계. 선택 쿼리 설계 시 가장 자주 실수하는 부분. 암기 포인트: “같은 줄 = AND, 다른 줄 = OR” — 고급 필터 조건 범위와 동일한 원칙

업데이트 쿼리 실행 순서 ★★★★★ : ① 선택 쿼리로 먼저 작성 → ② 결과 확인 → ③ [쿼리 형식] → [업데이트]로 변환 → ④ 업데이트 행 입력 → ⑤ 실행. 되돌리기 불가이므로 선택 쿼리 확인 필수. 암기 포인트: 실행 전 항상 “데이터 시트 보기”로 대상 레코드 먼저 확인

기본 키의 3가지 조건 ★★★★☆ : ① 고유(Unique) — 중복 불가 / ② NOT NULL — 빈 값 불가 / ③ 불변 — 자주 변경되지 않아야 함. Access에서는 일련번호(AutoNumber) 필드가 기본 키로 자주 사용됨. 암기 포인트: 기본 키 = “유일무이하고 비어있지 않은 식별자”

참조 무결성 ★★★★☆ : 외래 키 값은 반드시 참조 테이블의 기본 키에 존재해야 함. 위반 시 입력 오류 발생. “관련 필드 모두 업데이트/삭제” 옵션으로 연쇄 업데이트·삭제 설정 가능. 암기 포인트: 자식 테이블에 없는 부모 기본 키를 참조하면 무결성 위반

GROUP BY vs HAVING ★★★☆☆ : WHERE는 레코드 집계 전 필터, HAVING은 GROUP BY 집계 후 필터. 집계 함수 조건은 반드시 HAVING 사용. 암기 포인트: “집계 전 = WHERE, 집계 후 = HAVING”


실전 퀴즈

Q1. [주문] 테이블에서 “서울” 지역의 주문 중 금액이 50,000원 이상인 레코드를 조회하는 선택 쿼리를 작성하라. 결과는 금액 기준 내림차순으로 정렬한다.

쿼리 디자인 보기에서 [주문] 테이블을 추가한다. [지역] 필드의 조건 행에 “서울”, [금액] 필드의 조건 행에 >=50000을 같은 행에 입력한다(AND 조건). [금액] 필드의 정렬 행을 “내림차순”으로 설정한다. SQL로는 다음과 같다:

SELECT * FROM 주문
WHERE 지역="서울" AND 금액>=50000
ORDER BY 금액 DESC;

Q2. 크로스탭 쿼리를 사용하여 [판매] 테이블에서 지역별·분기별 판매금액 합계를 구하려 한다. 행 머리글, 열 머리글, 값 필드를 각각 무엇으로 설정해야 하는가?

행 머리글: [지역] 필드 (세로 방향 그룹 기준). 열 머리글: [분기] 필드 (가로 방향 그룹 기준). 값: [판매금액] 필드에 집계 함수 합계(Sum) 적용. 크로스탭 쿼리 마법사에서 위 순서대로 설정하거나, 디자인 보기에서 각 필드의 크로스탭 행을 “행 머리글”, “열 머리글”, “값”으로 지정하고 값 필드의 합계 행을 “합계(Sum)“로 설정한다.

Q3. 업데이트 쿼리 실행 후 데이터가 잘못 변경되었다. 되돌리는 방법은?

Access의 업데이트 쿼리는 실행 즉시 데이터베이스에 반영되며 Ctrl+Z(실행 취소)가 작동하지 않는다. 되돌리기 위해서는 ① 수동으로 역방향 업데이트 쿼리를 작성하거나 ② 사전에 백업한 .accdb 파일을 복원해야 한다. 시험 환경에서는 업데이트 쿼리 실행 전 반드시 선택 쿼리로 대상 레코드를 확인하는 습관이 중요하다.

Q4. [고객] 테이블과 [주문] 테이블을 조인할 때, 주문이 한 건도 없는 고객도 포함하여 조회하려면 어떤 조인을 사용해야 하는가?

LEFT JOIN(왼쪽 외부 조인)을 사용한다. [고객] 테이블이 왼쪽에 위치하고, 주문이 없는 고객도 결과에 포함되며 [주문] 측 필드는 NULL로 표시된다. Access 쿼리 디자인 보기에서는 두 테이블 조인선을 더블클릭한 후 조인 속성에서 “왼쪽 테이블의 모든 레코드 포함”을 선택한다.

Q5. 보고서에서 각 그룹의 소계와 전체 총계를 함께 표시하려면 어떻게 해야 하는가?

그룹 소계는 그룹 바닥글 영역에 텍스트 상자를 추가하고 =Sum([금액]) 수식을 입력한다. 전체 총계는 보고서 바닥글 영역에 같은 방법으로 텍스트 상자를 추가한다. 그룹 바닥글의 Sum은 해당 그룹 레코드만 합산하고, 보고서 바닥글의 Sum은 전체 레코드를 합산하므로 자연스럽게 소계와 총계가 구분된다. [그룹화 및 정렬] 창에서 그룹 바닥글을 “있음”으로 설정해야 해당 영역이 표시된다.

O

OIYO 편집부

Content Editor

지식 인큐베이터이자 전문 콘텐츠 크리에이터. 경영, 경제, 법률 및 실생활에 유용한 실무/자격증 중심의 깊이 있는 정보를 연구하고 공유합니다.