2025년 1회 주제 · 연습 2
SQL·데이터베이스① 점수는 0~100 정수 ② 기본키에는 NULL과 중복 불허 ③ 외래키가 참조하는 행이 존재해야 함에 해당하는 무결성을 쓰시오.
정답·해설 보기
정답
① 도메인 무결성 ② 개체 무결성 ③ 참조 무결성
해설
각각 허용 값의 범위·형식, 튜플의 식별, 관계 사이 참조를 보장한다.
학습용 재구성 · 주제 참고: Life-Journey · 2025년 1회 비공식 복원 (새 창)
정보처리기사 · 실기
답안을 직접 작성하고 정답과 비교해 보세요. 서술형 답안은 표현이 다를 수 있어 직접 확인합니다.
① 점수는 0~100 정수 ② 기본키에는 NULL과 중복 불허 ③ 외래키가 참조하는 행이 존재해야 함에 해당하는 무결성을 쓰시오.
① 도메인 무결성 ② 개체 무결성 ③ 참조 무결성
각각 허용 값의 범위·형식, 튜플의 식별, 관계 사이 참조를 보장한다.
학습용 재구성 · 주제 참고: Life-Journey · 2025년 1회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 63 | NULL |
| 2 | Bora | B | 58 | 1 |
| 3 | Cian | A | 63 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 48 | 2 |
| code | bonus |
|---|---|
| A | 7 |
| B | 12 |
| C | 2 |
SELECT s.name, t.bonus + s.score
FROM Scores s JOIN Teams t ON s.team = t.code
WHERE s.score >= 58 ORDER BY s.id;Ari 70 Bora 70 Cian 70
팀 코드로 보너스를 연결한 뒤 점수 조건을 만족한 사람의 점수와 보너스를 더한다.
학습용 재구성 · 주제 참고: Life-Journey · 2025년 1회 비공식 복원 (새 창)
관계형 데이터베이스의 ① 열 수 ② 행 수 ③ 다른 테이블의 키를 참조하는 속성 ④ 한 속성이 가질 수 있는 값의 집합을 쓰시오.
① 차수 ② 카디널리티 ③ 외래키 ④ 도메인
차수와 카디널리티는 스키마의 열 개수와 현재 튜플 개수를 각각 나타낸다.
학습용 재구성 · 주제 참고: Life-Journey · 2025년 1회 비공식 복원 (새 창)
레코드의 키와 저장 위치를 별도 색인에 유지하여 레코드 접근을 빠르게 하는 파일 구성 방식을 쓰시오.
인덱스 파일(색인 파일)
색인 탐색 후 레코드 위치로 접근한다. 추가 저장 공간과 색인 갱신 비용이 필요할 수 있다.
학습용 재구성 · 주제 참고: Life-Journey · 2025년 2회 비공식 복원 (새 창)
관계형 테이블에서 이름과 도메인을 가지며 개체의 한 가지 특성을 나타내는 열을 무엇이라 하는지 쓰시오.
속성(Attribute)
행은 튜플, 열은 속성이다. 속성 값 하나와 속성의 정의 자체를 구별한다.
학습용 재구성 · 주제 참고: Life-Journey · 2025년 2회 비공식 복원 (새 창)
관계대수에서 사원 관계의 이름과 부서 속성만 선택하는 연산의 이름과 기호를 쓰시오.
프로젝션(Projection), π
관계대수의 프로젝션은 속성, 즉 열을 선택하며 중복 튜플을 제거한다. SQL SELECT는 DISTINCT가 없으면 중복을 유지할 수 있다.
학습용 재구성 · 주제 참고: Life-Journey · 2025년 2회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 66 | NULL |
| 2 | Bora | B | 61 | 1 |
| 3 | Cian | A | 66 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 51 | 2 |
| code | bonus |
|---|---|
| A | 5 |
| B | 10 |
| C | 2 |
SELECT COUNT(*) FROM Scores s CROSS JOIN Teams t
WHERE s.score >= 61 AND t.bonus >= 5;6
CROSS JOIN은 모든 행 조합을 만든다. 두 조건이 서로 다른 테이블에 독립적으로 적용되므로 각각 조건에 맞는 행 수를 곱한다.
학습용 재구성 · 주제 참고: Life-Journey · 2025년 3회 비공식 복원 (새 창)
수강(학생, 과목) 관계에서 필수과목 관계에 들어 있는 모든 과목을 수강한 학생을 구한다. 이때 대응하는 관계대수 연산과 기호를 쓰시오.
디비전(Division), ÷
제수 관계에 있는 모든 값과 연결되는 피제수의 나머지 속성 값을 찾는다. 일부 과목만 수강한 학생을 고르는 연산이 아니다.
학습용 재구성 · 주제 참고: Life-Journey · 2025년 3회 비공식 복원 (새 창)
학생(학번, 이름, 전공, 학년) 관계에 현재 7개의 행이 있다. 관계의 차수와 카디널리티를 순서대로 쓰시오.
차수 4, 카디널리티 7
차수(Degree)는 속성 수, 카디널리티(Cardinality)는 튜플 수이다. 특정 속성의 서로 다른 값 개수와 혼동하지 않는다.
학습용 재구성 · 주제 참고: Life-Journey · 2025년 3회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 64 | NULL |
| 2 | Bora | B | 59 | 1 |
| 3 | Cian | A | 64 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 49 | 2 |
SELECT COUNT(*), COUNT(score), COUNT(DISTINCT score)
FROM Scores WHERE id <= 4;4 3 2
COUNT(*)는 행 수, COUNT(score)는 NULL이 아닌 점수 수, COUNT(DISTINCT score)는 NULL을 제외한 서로 다른 점수의 수를 센다.
학습용 재구성 · 주제 참고: Life-Journey · 2025년 3회 비공식 복원 (새 창)
R(학생, 과목, 교사)에 (학생, 과목)→교사, 교사→과목이 성립한다. 후보키는 (학생, 과목)과 (학생, 교사)이다. 모든 속성이 원자값일 때 3NF와 BCNF 충족 여부를 쓰시오.
3NF는 충족하지만 BCNF는 충족하지 않는다.
교사→과목의 결정자인 교사는 슈퍼키가 아니다. 종속 속성 과목은 후보키의 일부인 주요 속성이므로 3NF는 허용하지만 BCNF는 허용하지 않는다.
학습용 재구성 · 주제 참고: Life-Journey · 2024년 1회 비공식 복원 (새 창)
① 일반 비교 조건으로 연결 ② 등호 조건으로 연결 ③ 이름이 같은 모든 공통 속성을 등호로 비교하고 중복 공통 열을 하나로 표시하는 조인을 쓰시오.
① 세타 조인 ② 동등(등가) 조인 ③ 자연 조인
동등 조인은 세타 조인의 한 종류이다. 자연 조인의 공통 열은 이름을 기준으로 자동 결정되므로 주의한다.
학습용 재구성 · 주제 참고: Life-Journey · 2024년 1회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 66 | NULL |
| 2 | Bora | B | 61 | 1 |
| 3 | Cian | A | 66 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 51 | 2 |
SELECT child.name, parent.name
FROM Scores child JOIN Scores parent ON child.mentor = parent.id
WHERE child.team = 'A' ORDER BY child.id;Cian Ari Evan Bora
같은 테이블을 별칭 둘로 참조한다. child의 mentor와 parent의 id가 같은 행을 연결하고 자녀 행의 팀 조건을 적용한다.
학습용 재구성 · 주제 참고: Life-Journey · 2024년 1회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 61 | NULL |
| 2 | Bora | B | 56 | 1 |
| 3 | Cian | A | 61 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 46 | 2 |
SELECT COUNT(*), COUNT(score), COUNT(DISTINCT score)
FROM Scores WHERE id <= 5;5 4 3
COUNT(*)는 행 수, COUNT(score)는 NULL이 아닌 점수 수, COUNT(DISTINCT score)는 NULL을 제외한 서로 다른 점수의 수를 센다.
학습용 재구성 · 주제 참고: Life-Journey · 2024년 1회 비공식 복원 (새 창)
조인이 잦아 응답이 느린 조회 기능에서, 정규화된 두 테이블의 일부 값을 의도적으로 중복 저장했다. 이 설계 기법과 주의점 한 가지를 쓰시오.
반정규화(비정규화). 중복 데이터의 일관성을 유지해야 한다.
읽기 성능을 위해 중복·통합·분할 등을 도입할 수 있지만 갱신 비용과 불일치 위험을 함께 검토해야 한다.
학습용 재구성 · 주제 참고: Life-Journey · 2024년 2회 비공식 복원 (새 창)
테이블 행의 조회, 추가, 수정, 삭제에 사용하는 SQL 키워드를 차례로 쓰시오.
SELECT, INSERT, UPDATE, DELETE
일부 분류에서는 SELECT를 DQL로 따로 부른다. 이 문제는 분류 명칭보다 각 작업의 SQL 키워드를 묻는다.
학습용 재구성 · 주제 참고: Life-Journey · 2024년 2회 비공식 복원 (새 창)
학생(학번, 이름, 전공, 학년) 관계에 현재 7개의 행이 있다. 관계의 차수와 카디널리티를 순서대로 쓰시오.
차수 4, 카디널리티 7
차수(Degree)는 속성 수, 카디널리티(Cardinality)는 튜플 수이다. 특정 속성의 서로 다른 값 개수와 혼동하지 않는다.
학습용 재구성 · 주제 참고: Life-Journey · 2024년 2회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 66 | NULL |
| 2 | Bora | B | 61 | 1 |
| 3 | Cian | A | 66 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 51 | 2 |
SELECT s.name FROM Scores s
WHERE EXISTS (SELECT 1 FROM Scores m WHERE m.id = s.mentor AND m.team = 'A')
ORDER BY s.id;Bora Cian
현재 행의 mentor가 A팀인 행을 가리키는지 상관 하위 질의로 검사한다. EXISTS는 일치하는 행이 하나라도 있으면 참이다.
학습용 재구성 · 주제 참고: Life-Journey · 2024년 3회 비공식 복원 (새 창)
관계의 기본키는 NULL을 가질 수 없으며 각 튜플을 유일하게 식별해야 한다. 이 무결성의 이름을 쓰시오.
개체 무결성
기본키의 고유성과 NOT NULL 성질에 관련된다. 외래키가 참조하는 행의 존재를 다루는 참조 무결성과 다르다.
학습용 재구성 · 주제 참고: Life-Journey · 2024년 3회 비공식 복원 (새 창)
① 다른 관계의 키를 참조 ② 유일성과 최소성 충족 ③ 후보키 중 기본키로 선택되지 않음 ④ 유일성만 요구하는 키를 차례로 쓰시오.
① 외래키 ② 후보키 ③ 대체키 ④ 슈퍼키
후보키는 최소성을 만족하는 슈퍼키이다. 외래키 자체가 항상 해당 테이블의 유일한 식별자는 아니다.
학습용 재구성 · 주제 참고: Life-Journey · 2024년 3회 비공식 복원 (새 창)
학생(학번, 이름, 전공, 학년) 관계에 현재 7개의 행이 있다. 관계의 차수와 카디널리티를 순서대로 쓰시오.
차수 4, 카디널리티 7
차수(Degree)는 속성 수, 카디널리티(Cardinality)는 튜플 수이다. 특정 속성의 서로 다른 값 개수와 혼동하지 않는다.
학습용 재구성 · 주제 참고: Life-Journey · 2023년 1회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 67 | NULL |
| 2 | Bora | B | 62 | 1 |
| 3 | Cian | A | 67 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 52 | 2 |
DELETE FROM Scores WHERE score < 57;
SELECT id FROM Scores ORDER BY id;1 2 3 4
조건이 참인 행만 삭제한다. NULL과 숫자의 비교 결과는 UNKNOWN이므로 NULL 점수 행은 이 조건으로 삭제되지 않는다.
학습용 재구성 · 주제 참고: Life-Journey · 2023년 1회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 64 | NULL |
| 2 | Bora | B | 59 | 1 |
| 3 | Cian | A | 64 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 49 | 2 |
SELECT team, MIN(score), MAX(score), COUNT(*)
FROM Scores GROUP BY team HAVING COUNT(*) >= 3
ORDER BY team;A 49 64 3
team별로 묶은 뒤 행 수가 3 이상인 그룹을 남긴다. MIN·MAX는 NULL 점수를 집계에서 제외한다.
학습용 재구성 · 주제 참고: Life-Journey · 2023년 1회 비공식 복원 (새 창)
3단계 데이터베이스 구조에서 사용자별 뷰, 전체 논리 구조, 실제 저장 구조를 나타내는 스키마를 차례로 쓰시오.
외부 스키마, 개념 스키마, 내부 스키마
외부–개념 사상과 개념–내부 사상을 통해 데이터 독립성을 지원한다.
학습용 재구성 · 주제 참고: Life-Journey · 2023년 1회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 67 | NULL |
| 2 | Bora | B | 62 | 1 |
| 3 | Cian | A | 67 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 52 | 2 |
INSERT INTO Scores(id,name,team,score,mentor) VALUES (6,'Fina','B',69,1);
SELECT team, COUNT(*) FROM Scores GROUP BY team ORDER BY team;A 3 B 3
B팀 행이 하나 추가된다. 그 뒤 팀별 전체 행 수를 집계한다.
학습용 재구성 · 주제 참고: Life-Journey · 2023년 2회 비공식 복원 (새 창)
데이터베이스 설계의 세 단계를 순서대로 쓰시오. 보기: 논리적 설계, 물리적 설계, 개념적 설계.
개념적 설계 → 논리적 설계 → 물리적 설계
요구를 개체·관계로 표현한 뒤 데이터 모델의 스키마로 변환하고, 저장 구조와 인덱스 등 구현 세부를 결정한다.
학습용 재구성 · 주제 참고: Life-Journey · 2023년 2회 비공식 복원 (새 창)
외래키 검사가 켜진 DB이다. Parent의 id는 1, 2이며 Child(id, parent_id)는 (11,1), (12,1), (13,2)이다. Child.parent_id는 Parent.id를 ON DELETE CASCADE로 참조한다. 다음 실행 후 SELECT 결과를 쓰시오.
DELETE FROM Parent WHERE id=1;
SELECT id, parent_id FROM Child ORDER BY id;13 2
부모 1번을 삭제하면 이를 참조하는 Child 11번과 12번도 연쇄 삭제된다. 부모 2번을 참조하는 행은 남는다.
학습용 재구성 · 주제 참고: Life-Journey · 2023년 2회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 64 | NULL |
| 2 | Bora | B | 59 | 1 |
| 3 | Cian | A | 64 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 49 | 2 |
| code | bonus |
|---|---|
| A | 5 |
| B | 10 |
| C | 2 |
SELECT team AS label FROM Scores WHERE id <= 3
UNION
SELECT code AS label FROM Teams
ORDER BY label;A B C
UNION은 두 질의의 결과를 합치고 중복 행을 제거한다. 중복을 유지하는 UNION ALL과 다르다.
학습용 재구성 · 주제 참고: Life-Journey · 2023년 3회 비공식 복원 (새 창)
관계대수 기호 ∪, −, ×, π, ⋈의 연산 이름을 순서대로 쓰시오.
합집합, 차집합, 카티션 프로덕트(곱집합), 프로젝션, 조인
합집합과 차집합에는 합병 가능성이 필요하다. 곱집합은 모든 튜플 조합을 만들며 조인은 관련 튜플을 연결한다.
학습용 재구성 · 주제 참고: Life-Journey · 2023년 3회 비공식 복원 (새 창)
주문 테이블의 고객번호가 고객 테이블의 기본키를 참조한다. NULL이 아닌 고객번호가 반드시 실제 고객 행에 존재해야 한다는 제약을 쓰시오.
참조 무결성
외래키 값은 참조 대상 키 값과 일치해야 한다. NULL 허용 여부는 해당 열과 제약 설정에 따른다.
학습용 재구성 · 주제 참고: Life-Journey · 2023년 3회 비공식 복원 (새 창)
즉시 갱신 방식의 로그 기반 복구를 가정한다. ① 커밋되었으나 디스크에 반영되지 않은 변경을 다시 적용하는 작업 ② 미커밋 변경을 되돌리는 작업을 쓰시오.
① REDO ② UNDO
구체적인 작업 필요성은 버퍼 정책에 따라 달라진다. 문제는 커밋 변경의 재적용과 미커밋 변경의 취소라는 개념을 묻는다.
학습용 재구성 · 주제 참고: Life-Journey · 2022년 1회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 61 | NULL |
| 2 | Bora | B | 56 | 1 |
| 3 | Cian | A | 61 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 46 | 2 |
SELECT name, score FROM Scores
WHERE score IS NOT NULL ORDER BY score DESC, id ASC;Ari 61 Cian 61 Bora 56 Evan 46
NULL 점수를 제외하고 높은 점수부터 출력한다. 같은 점수인 경우 id가 작은 행이 먼저 나온다.
학습용 재구성 · 주제 참고: Life-Journey · 2022년 1회 비공식 복원 (새 창)
한 직원의 마지막 교육 신청 행을 삭제했더니 같은 행에만 저장되어 있던 교육 과정의 담당자 정보도 없어졌다. 어떤 이상인지 쓰시오.
삭제 이상
삭제하려던 사실과 별개로 보존해야 할 다른 사실까지 함께 없어지는 현상이다.
학습용 재구성 · 주제 참고: Life-Journey · 2022년 1회 비공식 복원 (새 창)
관계에서 각 튜플을 유일하게 구별하고, 구성 속성 중 하나라도 빼면 그 성질을 잃는 키를 쓰고 두 성질의 이름을 쓰시오.
후보키. 유일성과 최소성
슈퍼키는 유일성을 만족하지만 불필요한 속성을 포함할 수 있다. 후보키 중 기본키로 선택되지 않은 것은 대체키이다.
학습용 재구성 · 주제 참고: Life-Journey · 2022년 1회 비공식 복원 (새 창)
관계형 질의에서 결과가 만족할 조건을 논리식으로 표현하고 구체적인 처리 절차를 직접 지정하지 않는 형식 체계를 쓰시오.
관계 해석(Relational Calculus)
관계대수는 연산 조합으로 질의를 표현한다. 관계 해석은 원하는 결과의 조건에 초점을 둔다.
학습용 재구성 · 주제 참고: Life-Journey · 2022년 2회 비공식 복원 (새 창)
SQL에서 x > ( ) (하위 질의) 형태로, 하위 질의가 반환한 모든 값보다 x가 커야 한다는 비교를 표현한다. 괄호에 들어갈 키워드를 쓰시오.
ALL
ANY 또는 SOME은 비교를 만족하는 값이 하나 이상인 경우이다. NULL이 포함되면 SQL의 3값 논리를 고려해야 한다.
학습용 재구성 · 주제 참고: Life-Journey · 2022년 2회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 60 | NULL |
| 2 | Bora | B | 55 | 1 |
| 3 | Cian | A | 60 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 45 | 2 |
SELECT COUNT(*), COUNT(score), COUNT(DISTINCT score)
FROM Scores WHERE id <= 4;4 3 2
COUNT(*)는 행 수, COUNT(score)는 NULL이 아닌 점수 수, COUNT(DISTINCT score)는 NULL을 제외한 서로 다른 점수의 수를 센다.
학습용 재구성 · 주제 참고: Life-Journey · 2022년 2회 비공식 복원 (새 창)
관계대수에서 사원 관계의 이름과 부서 속성만 선택하는 연산의 이름과 기호를 쓰시오.
프로젝션(Projection), π
관계대수의 프로젝션은 속성, 즉 열을 선택하며 중복 튜플을 제거한다. SQL SELECT는 DISTINCT가 없으면 중복을 유지할 수 있다.
학습용 재구성 · 주제 참고: Life-Journey · 2022년 2회 비공식 복원 (새 창)
함수 종속에서 ① 복합키 일부만으로 비키 속성이 결정됨 ② 키 전체가 있어야 결정됨 ③ A→B와 B→C를 거쳐 A→C가 성립함을 각각 쓰시오.
① 부분 함수 종속 ② 완전 함수 종속 ③ 이행적 함수 종속
정규화에서는 후보키와 주요 속성 여부도 함께 고려한다. 단순히 화살표가 두 개 있다고 항상 정규형 위반은 아니다.
학습용 재구성 · 주제 참고: Life-Journey · 2022년 2회 비공식 복원 (새 창)
관계대수 기호 ∪, −, ×, π, ⋈의 연산 이름을 순서대로 쓰시오.
합집합, 차집합, 카티션 프로덕트(곱집합), 프로젝션, 조인
합집합과 차집합에는 합병 가능성이 필요하다. 곱집합은 모든 튜플 조합을 만들며 조인은 관련 튜플을 연결한다.
학습용 재구성 · 주제 참고: Life-Journey · 2022년 3회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 64 | NULL |
| 2 | Bora | B | 59 | 1 |
| 3 | Cian | A | 64 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 49 | 2 |
SELECT COUNT(*), COUNT(score)
FROM Scores WHERE score IS NULL OR team = 'A';4 3
NULL인 행과 A팀 행을 먼저 고른다. COUNT(*)에는 NULL 점수 행도 포함되지만 COUNT(score)에는 포함되지 않는다.
학습용 재구성 · 주제 참고: Life-Journey · 2022년 3회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 67 | NULL |
| 2 | Bora | B | 62 | 1 |
| 3 | Cian | A | 67 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 52 | 2 |
SELECT DISTINCT team, score FROM Scores
WHERE score IS NOT NULL ORDER BY team, score;A 52 A 67 B 62
DISTINCT는 선택한 열 전체 조합을 기준으로 중복을 제거한다. 같은 팀과 같은 점수인 행은 한 번만 출력한다.
학습용 재구성 · 주제 참고: Life-Journey · 2022년 3회 비공식 복원 (새 창)
Chen 표기법 ER 다이어그램에서 개체, 관계, 속성을 나타내는 기본 도형을 차례로 쓰시오.
사각형, 마름모, 타원
ERD 표기법은 여러 종류이므로 이 문제는 Chen 표기법으로 한정한다.
학습용 재구성 · 주제 참고: Life-Journey · 2022년 3회 비공식 복원 (새 창)
데이터베이스 설계의 세 단계를 순서대로 쓰시오. 보기: 논리적 설계, 물리적 설계, 개념적 설계.
개념적 설계 → 논리적 설계 → 물리적 설계
요구를 개체·관계로 표현한 뒤 데이터 모델의 스키마로 변환하고, 저장 구조와 인덱스 등 구현 세부를 결정한다.
학습용 재구성 · 주제 참고: Life-Journey · 2021년 1회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 60 | NULL |
| 2 | Bora | B | 55 | 1 |
| 3 | Cian | A | 60 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 45 | 2 |
SELECT id FROM Scores
WHERE team = 'B' OR team = 'A' AND score >= 60
ORDER BY id;1 2 3 4
AND가 OR보다 우선하므로 B팀 전체 또는 조건을 만족하는 A팀을 선택한다. B팀의 NULL 점수 행도 B팀이라는 조건으로 포함된다.
학습용 재구성 · 주제 참고: Life-Journey · 2021년 1회 비공식 복원 (새 창)
조인이 잦아 응답이 느린 조회 기능에서, 정규화된 두 테이블의 일부 값을 의도적으로 중복 저장했다. 이 설계 기법과 주의점 한 가지를 쓰시오.
반정규화(비정규화). 중복 데이터의 일관성을 유지해야 한다.
읽기 성능을 위해 중복·통합·분할 등을 도입할 수 있지만 갱신 비용과 불일치 위험을 함께 검토해야 한다.
학습용 재구성 · 주제 참고: Life-Journey · 2021년 1회 비공식 복원 (새 창)
학생(학번, 이름, 전공, 학년) 관계에 현재 7개의 행이 있다. 관계의 차수와 카디널리티를 순서대로 쓰시오.
차수 4, 카디널리티 7
차수(Degree)는 속성 수, 카디널리티(Cardinality)는 튜플 수이다. 특정 속성의 서로 다른 값 개수와 혼동하지 않는다.
학습용 재구성 · 주제 참고: Life-Journey · 2021년 1회 비공식 복원 (새 창)
데이터 모델의 구성 요소 중 데이터의 형태, 데이터에 수행할 처리, 허용되는 데이터 상태의 조건을 각각 무엇이라 하는지 쓰시오.
구조, 연산, 제약 조건
구조는 데이터와 관계를, 연산은 처리 방법을, 제약 조건은 무결성 규칙 등을 정의한다.
학습용 재구성 · 주제 참고: Life-Journey · 2021년 1회 비공식 복원 (새 창)
계좌 A의 차감은 성공했지만 B의 입금은 실패했다. 두 변경을 모두 취소해 중간 상태를 남기지 않는 트랜잭션 성질을 쓰시오.
원자성(Atomicity)
하나의 논리적 작업을 구성하는 변경이 전부 반영되거나 전부 취소되어야 한다.
학습용 재구성 · 주제 참고: Life-Journey · 2021년 2회 비공식 복원 (새 창)
수강(학생번호, 과목번호, 학생이름, 성적)의 키가 (학생번호, 과목번호)이고 학생번호 → 학생이름이 성립한다. 이 부분 함수 종속을 제거해 만족시키려는 정규형을 쓰시오.
제2정규형(2NF)
1NF를 만족하면서 비주요 속성이 후보키 전체에 완전 함수 종속해야 한다. 학생이름을 학생 관계로 분리하는 방식 등을 고려할 수 있다.
학습용 재구성 · 주제 참고: Life-Journey · 2021년 2회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 60 | NULL |
| 2 | Bora | B | 55 | 1 |
| 3 | Cian | A | 60 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 45 | 2 |
UPDATE Scores SET score = score + 2 WHERE team = 'A';
SELECT id, score FROM Scores WHERE team = 'A' ORDER BY id;1 62 3 62 5 47
WHERE에 해당하는 A팀 행의 점수만 변경한 뒤 SELECT로 변경된 값을 읽는다.
학습용 재구성 · 주제 참고: Life-Journey · 2021년 2회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 67 | NULL |
| 2 | Bora | B | 62 | 1 |
| 3 | Cian | A | 67 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 52 | 2 |
| code | bonus |
|---|---|
| A | 7 |
| B | 12 |
| C | 2 |
SELECT s.name, t.bonus + s.score
FROM Scores s JOIN Teams t ON s.team = t.code
WHERE s.score >= 62 ORDER BY s.id;Ari 74 Bora 74 Cian 74
팀 코드로 보너스를 연결한 뒤 점수 조건을 만족한 사람의 점수와 보너스를 더한다.
학습용 재구성 · 주제 참고: Life-Journey · 2021년 2회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 63 | NULL |
| 2 | Bora | B | 58 | 1 |
| 3 | Cian | A | 63 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 48 | 2 |
SELECT name, score FROM Scores
WHERE LOWER(name) LIKE '%a%' AND score IS NOT NULL
ORDER BY score DESC, name ASC;Ari 63 Cian 63 Bora 58 Evan 48
이름을 소문자로 변환한 뒤 a를 포함하는 이름을 선택한다. 점수 내림차순, 동점이면 이름 오름차순이다.
학습용 재구성 · 주제 참고: Life-Journey · 2021년 2회 비공식 복원 (새 창)
동시에 실행되는 트랜잭션의 충돌을 막기 위해 데이터 접근 전에 잠금을 획득하는 기법의 이름과, 잠금 단위를 크게 할 때 병행성이 어떻게 변하는지 쓰시오.
로킹(Locking). 일반적으로 병행성이 낮아진다.
잠금 범위가 넓으면 한 잠금이 막는 작업이 많아진다. 반면 관리할 잠금 수와 관리 비용은 줄어들 수 있다.
학습용 재구성 · 주제 참고: Life-Journey · 2021년 2회 비공식 복원 (새 창)
데이터베이스 관리자에게서 analyst 사용자에게 Report 테이블의 SELECT 권한을 부여할 때 사용하는 SQL 명령과 권한 회수 명령을 쓰시오.
부여: GRANT, 회수: REVOKE
객체와 권한, 대상 사용자를 명시한다. 테이블 행을 추가하는 INSERT와 사용자 권한 관리는 별개이다.
학습용 재구성 · 주제 참고: Life-Journey · 2021년 3회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 67 | NULL |
| 2 | Bora | B | 62 | 1 |
| 3 | Cian | A | 67 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 52 | 2 |
| code | bonus |
|---|---|
| A | 7 |
| B | 12 |
| C | 2 |
SELECT COUNT(*) FROM Scores s CROSS JOIN Teams t
WHERE s.score >= 62 AND t.bonus >= 5;6
CROSS JOIN은 모든 행 조합을 만든다. 두 조건이 서로 다른 테이블에 독립적으로 적용되므로 각각 조건에 맞는 행 수를 곱한다.
학습용 재구성 · 주제 참고: Life-Journey · 2021년 3회 비공식 복원 (새 창)
레코드의 키와 저장 위치를 별도 색인에 유지하여 레코드 접근을 빠르게 하는 파일 구성 방식을 쓰시오.
인덱스 파일(색인 파일)
색인 탐색 후 레코드 위치로 접근한다. 추가 저장 공간과 색인 갱신 비용이 필요할 수 있다.
학습용 재구성 · 주제 참고: Life-Journey · 2021년 3회 비공식 복원 (새 창)
쇼핑몰이 대량의 구매 이력에서 함께 구매되는 상품의 규칙과 숨은 패턴을 찾아 추천에 활용한다. 이러한 분석 기법의 이름을 쓰시오.
데이터 마이닝(Data Mining)
데이터에서 유용한 패턴·상관관계·규칙을 발견하는 과정이다. 단순 검색이나 데이터 저장과 구별한다.
학습용 재구성 · 주제 참고: Life-Journey · 2020년 1회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 61 | NULL |
| 2 | Bora | B | 56 | 1 |
| 3 | Cian | A | 61 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 46 | 2 |
SELECT COUNT(*), COUNT(score), COUNT(DISTINCT score)
FROM Scores WHERE id <= 5;5 4 3
COUNT(*)는 행 수, COUNT(score)는 NULL이 아닌 점수 수, COUNT(DISTINCT score)는 NULL을 제외한 서로 다른 점수의 수를 센다.
학습용 재구성 · 주제 참고: Life-Journey · 2020년 1회 비공식 복원 (새 창)
트랜잭션 성질 중 ① 일부 단계가 실패하면 전체 작업을 취소하는 성질 ② 동시에 실행되는 작업이 서로의 미완료 중간 결과에 부당하게 간섭하지 않도록 하는 성질을 쓰시오.
① 원자성(Atomicity) ② 격리성(Isolation)
원자성은 전부 수행 또는 전부 취소를 뜻한다. 격리성의 구체적인 보장 수준은 데이터베이스의 격리 수준에 따라 달라진다.
학습용 재구성 · 주제 참고: Life-Journey · 2020년 1회 비공식 복원 (새 창)
조인이 잦아 응답이 느린 조회 기능에서, 정규화된 두 테이블의 일부 값을 의도적으로 중복 저장했다. 이 설계 기법과 주의점 한 가지를 쓰시오.
반정규화(비정규화). 중복 데이터의 일관성을 유지해야 한다.
읽기 성능을 위해 중복·통합·분할 등을 도입할 수 있지만 갱신 비용과 불일치 위험을 함께 검토해야 한다.
학습용 재구성 · 주제 참고: Life-Journey · 2020년 1회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 60 | NULL |
| 2 | Bora | B | 55 | 1 |
| 3 | Cian | A | 60 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 45 | 2 |
SELECT id, name FROM Scores
WHERE id IN (1, 3, 4) ORDER BY id;1 Ari 3 Cian 4 Dani
IN 목록의 값과 같은 id를 선택하며 ORDER BY로 id 오름차순을 지정했다.
학습용 재구성 · 주제 참고: Life-Journey · 2020년 2회 비공식 복원 (새 창)
한 트랜잭션이 주문 행을 추가한 뒤 오류를 만났다. 아직 커밋하지 않은 변경을 취소하는 SQL 명령을 쓰시오.
ROLLBACK
일반적인 ROLLBACK은 현재 트랜잭션의 미커밋 변경을 취소한다. SAVEPOINT를 지정하면 해당 저장점까지 되돌릴 수 있다.
학습용 재구성 · 주제 참고: Life-Journey · 2020년 2회 비공식 복원 (새 창)
Scores 테이블의 team과 score 열을 이 순서로 묶은 일반 인덱스 idx_team_score를 생성하는 SQL을 작성하시오.
CREATE INDEX idx_team_score ON Scores (team, score);
CREATE INDEX 뒤에 인덱스 이름, ON 뒤에 테이블과 열 목록을 쓴다. UNIQUE 인덱스를 요구하지 않았으므로 중복을 금지하지 않는다.
학습용 재구성 · 주제 참고: Life-Journey · 2020년 2회 비공식 복원 (새 창)
공공 데이터를 누구나 이용할 수 있도록 공개하고, URI와 RDF 등을 이용해 다른 데이터와 연결한다. 이 개념의 이름을 쓰시오.
연계 개방 데이터(Linked Open Data, LOD)
Linked Data의 연결 원칙에 공개 이용 조건을 결합한 개념이다. 단순히 파일을 다운로드할 수 있게 하는 것만으로 충분하지 않다.
학습용 재구성 · 주제 참고: Life-Journey · 2020년 2회 비공식 복원 (새 창)
데이터베이스 설계의 세 단계를 순서대로 쓰시오. 보기: 논리적 설계, 물리적 설계, 개념적 설계.
개념적 설계 → 논리적 설계 → 물리적 설계
요구를 개체·관계로 표현한 뒤 데이터 모델의 스키마로 변환하고, 저장 구조와 인덱스 등 구현 세부를 결정한다.
학습용 재구성 · 주제 참고: Life-Journey · 2020년 2회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 65 | NULL |
| 2 | Bora | B | 60 | 1 |
| 3 | Cian | A | 65 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 50 | 2 |
SELECT team, MIN(score), MAX(score), COUNT(*)
FROM Scores GROUP BY team HAVING COUNT(*) >= 3
ORDER BY team;A 50 65 3
team별로 묶은 뒤 행 수가 3 이상인 그룹을 남긴다. MIN·MAX는 NULL 점수를 집계에서 제외한다.
학습용 재구성 · 주제 참고: Life-Journey · 2020년 3회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 64 | NULL |
| 2 | Bora | B | 59 | 1 |
| 3 | Cian | A | 64 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 49 | 2 |
DELETE FROM Scores WHERE score < 54;
SELECT id FROM Scores ORDER BY id;1 2 3 4
조건이 참인 행만 삭제한다. NULL과 숫자의 비교 결과는 UNKNOWN이므로 NULL 점수 행은 이 조건으로 삭제되지 않는다.
학습용 재구성 · 주제 참고: Life-Journey · 2020년 3회 비공식 복원 (새 창)
수강(학생, 과목) 관계에서 필수과목 관계에 들어 있는 모든 과목을 수강한 학생을 구한다. 이때 대응하는 관계대수 연산과 기호를 쓰시오.
디비전(Division), ÷
제수 관계에 있는 모든 값과 연결되는 피제수의 나머지 속성 값을 찾는다. 일부 과목만 수강한 학생을 고르는 연산이 아니다.
학습용 재구성 · 주제 참고: Life-Journey · 2020년 3회 비공식 복원 (새 창)
데이터베이스의 테이블 구조, 속성, 관계와 제약 조건을 정의한 논리적 틀을 무엇이라 하는지 쓰시오.
스키마(Schema)
스키마는 구조의 정의이고, 특정 시점에 저장된 실제 데이터 값의 집합인 인스턴스와 구별한다.
학습용 재구성 · 주제 참고: Life-Journey · 2020년 3회 비공식 복원 (새 창)
Scores 테이블에 정수형 attempt 열을 추가하고 기본값을 1로 지정하는 SQL을 작성하시오.
ALTER TABLE Scores ADD COLUMN attempt INTEGER DEFAULT 1;
기존 테이블 구조 변경에는 ALTER TABLE을 사용한다. 여기서는 표준적인 ADD COLUMN 문법을 사용하는 DBMS를 가정한다.
학습용 재구성 · 주제 참고: Life-Journey · 2020년 3회 비공식 복원 (새 창)
즉시 갱신 방식의 로그 기반 복구를 가정한다. ① 커밋되었으나 디스크에 반영되지 않은 변경을 다시 적용하는 작업 ② 미커밋 변경을 되돌리는 작업을 쓰시오.
① REDO ② UNDO
구체적인 작업 필요성은 버퍼 정책에 따라 달라진다. 문제는 커밋 변경의 재적용과 미커밋 변경의 취소라는 개념을 묻는다.
학습용 재구성 · 주제 참고: Life-Journey · 2020년 4회 비공식 복원 (새 창)
여러 서버에 대규모 데이터를 나누어 저장하는 HDFS와 분산 처리를 위한 MapReduce로 널리 알려진 Apache 프레임워크를 쓰시오.
Hadoop(하둡)
분산 저장과 처리를 지원하는 생태계이다. 관계형 데이터베이스의 단일 테이블 저장 방식과 동일한 개념은 아니다.
학습용 재구성 · 주제 참고: Life-Journey · 2020년 4회 비공식 복원 (새 창)
중복이 많은 테이블에서 ① 다른 정보가 없어서 새 사실을 기록하지 못함 ② 마지막 행 삭제로 보존할 정보도 사라짐 ③ 같은 사실을 여러 행에서 서로 다르게 바꿈에 대응하는 이상을 쓰시오.
① 삽입 이상 ② 삭제 이상 ③ 갱신 이상
정규화는 함수 종속을 고려해 관계를 분해하여 이런 이상을 줄이는 데 쓰인다.
학습용 재구성 · 주제 참고: Life-Journey · 2020년 4회 비공식 복원 (새 창)
아래 테이블에 다음 SQL을 실행했을 때 마지막 SELECT의 결과를 쓰시오. NULL은 결측값이며, 결과는 열을 공백으로 구분하고 행마다 줄을 바꾸어 적으시오.
| id | name | team | score | mentor |
|---|---|---|---|---|
| 1 | Ari | A | 64 | NULL |
| 2 | Bora | B | 59 | 1 |
| 3 | Cian | A | 64 | 1 |
| 4 | Dani | B | NULL | 2 |
| 5 | Evan | A | 49 | 2 |
SELECT team, MIN(score), MAX(score), COUNT(*)
FROM Scores GROUP BY team HAVING COUNT(*) >= 3
ORDER BY team;A 49 64 3
team별로 묶은 뒤 행 수가 3 이상인 그룹을 남긴다. MIN·MAX는 NULL 점수를 집계에서 제외한다.
학습용 재구성 · 주제 참고: Life-Journey · 2020년 4회 비공식 복원 (새 창)
답안과 확인 상태는 현재 브라우저에만 저장됩니다. ‘맞았어요’ 표시는 본인이 확인한 학습 기록이며 실제 시험 점수가 아닙니다.