정보처리기사 실기 기출문제
1. 부서 및 직원 테이블 정의 및 데이터 삽입
문제: 다음과 같이 부서 및 직원 테이블을 정의하고 데이터를 삽입한 후, SQL 문을 실행한 결과를 쓰시오.
코드:
CREATE TABLE 부서 (
부서코드 INT PRIMARY KEY,
부서명 VARCHAR(20)
);
CREATE TABLE 직원 (
직원코드 INT PRIMARY KEY,
부서코드 INT,
직원명 VARCHAR(20),
FOREIGN KEY(부서코드) REFERENCES 부서(부서코드)
ON DELETE CASCADE
);
INSERT INTO 부서 VALUES(10, '영업부');
INSERT INTO 부서 VALUES(20, '기획부');
INSERT INTO 부서 VALUES(30, '개발부');
INSERT INTO 직원 VALUES(1001, 10, '이진수');
INSERT INTO 직원 VALUES(1002, 10, '곽연경');
INSERT INTO 직원 VALUES(1003, 20, '김선길');
INSERT INTO 직원 VALUES(1004, 20, '최민수');
INSERT INTO 직원 VALUES(1005, 20, '이용갑');
INSERT INTO 직원 VALUES(1006, 30, '박종일');
INSERT INTO 직원 VALUES(1007, 30, '박미경');
① SELECT DISTINCT COUNT(부서코드) FROM 직원 WHERE 부서코드 = 20;
② DELETE FROM 부서 WHERE 부서코드 = 20;
SELECT DISTINCT COUNT(부서코드) FROM 직원;
예시:
- ① 문제의 SQL문 실행 결과는?
- ② 문제의 SQL문 실행 후 남은 직원의 수는?
해설:
- ① SQL 문은
부서코드
가 20인 직원의 수를 구하는 쿼리입니다.부서코드
20에 해당하는 직원은 3명이므로 결과는 3입니다. - ②
부서
테이블에서부서코드
20을 삭제한 후, 남은 직원의 수를 구하는 쿼리입니다. 삭제 시CASCADE
옵션에 의해 관련 직원도 함께 삭제되므로, 결과는 4입니다.
- ① SQL 문은
정답:
- ① 3
- ② 4
2. 학생 테이블 질의
문제: 학생(STUDENT) 테이블에 전기과 학생이 50명, 전산과 학생이 100명, 전자과 학생이 50명 있다고 할 때, 다음 SQL 문 ①, ②, ③의 실행 결과로 표시되는 튜플의 수를 쓰시오. (단, DEPT 필드는 학과를 의미한다.)
코드:
① SELECT DEPT FROM STUDENT;
② SELECT DISTINCT DEPT FROM STUDENT;
③ SELECT COUNT(DISTINCT DEPT) FROM STUDENT WHERE DEPT = '전산과';
예시:
- ① 문제의 SQL문 실행 결과는?
- ② 문제의 SQL문 실행 결과는?
- ③ 문제의 SQL문 실행 결과는?
해설:
- ① 전체 학생 수를 조회하므로 결과는 200명입니다.
- ② 학과의 종류를 조회하므로 결과는 3입니다.
- ③ '전산과'의 고유한 학과 수를 조회하므로 결과는 1입니다.
정답:
- ① 200
- ② 3
- ③ 1
3. 제품 정보 조회
- 문제: 다음은
<제품>
(제품명, 단가, 제조사) 테이블을 대상으로
"H" 제조사에서 생산한 제품들의 단가
보다 높은 단가
를 가진 제품의 정보를 조회하는 <SQL문>
입니다. 괄호에 알맞은 답을 적어 <SQL문>
을 완성하시오.
- 코드:
SELECT 제품명, 단가, 제조사
FROM 제품
WHERE 단가 > (SELECT 단가 FROM 제품 WHERE 제조사 = 'H');
예시:
- 해당 SQL 문을 올바르게 완성하려면 괄호 안에 무엇이 와야 하나요?
해설:
- 문제의 SQL문은 "H" 제조사의 제품 단가보다 높은 단가를 가진 제품을 조회하기 위한 것입니다. 여기서는 모든 "H" 제조사의 제품 단가보다 높아야 하므로,
ALL
키워드를 사용해야 합니다.
- 문제의 SQL문은 "H" 제조사의 제품 단가보다 높은 단가를 가진 제품을 조회하기 위한 것입니다. 여기서는 모든 "H" 제조사의 제품 단가보다 높아야 하므로,
정답:
- ALL
4. 특정 조건에 맞는 튜플의 수 계산
문제: 다음
<TABLE>
을 참조하여<SQL문>
을 실행했을 때 출력되는 결과를 쓰시오. (<TABLE>
에 표시된NULL
은 값이 없음을 의미한다.)코드:
INDEX COL1 COL2
1 2 NULL
2 4 6
3 3 5
4 6 3
5 NULL 3
<TABLE>
SELECT COUNT(COL2)
FROM TABLE
WHERE COL1 IN (2, 3)
OR COL2 IN (3, 5);
예시:
- 위
<SQL문>
을 실행했을 때, 어떤 결과가 출력되나요?
- 위
해설:
- 이 SQL문은
COL1
값이 2 또는 3인 행, 또는COL2
값이 3 또는 5인 행의COL2
값을 세는 것입니다.COL2
값이NULL
인 행은 카운트에서 제외됩니다. 따라서, 조건에 맞는COL2
값이 있는 행은 총 3개입니다.
- 이 SQL문은
정답:
- 3
5. EMPLOYEE 릴레이션 관계 대수식 결과
문제: 다음은
<EMPLOYEE>
릴레이션에 대해<관계 대수식>
을 수행했을 때 출력되는<결과>
입니다.<결과>
의 각 괄호(①~⑤)에 들어갈 알맞은 답을 쓰시오.코드:
πTTL(EMPLOYEE)
INDEX AGE TTL
1 48 부장
2 25 대리
3 41 과장
4 36 차장
<EMPLOYEE>
예시:
- 위 관계 대수식의 결과, 괄호(①~⑤)에 들어갈 알맞은 답은 무엇인가요?
해설:
- 이 문제에서는
EMPLOYEE
릴레이션에서TTL
속성만을 추출하여 새로운 릴레이션을 만드는PROJECT
연산을 수행합니다. 따라서,TTL
속성명과 그 아래 모든TTL
속성값들이 결과로 나타납니다.
- 이 문제에서는
정답:
- ① TTL
- ② 부장
- ③ 대리
- ④ 과장
- ⑤ 차장
6. SQL UPDATE문 설명
문제: SQL과 관련한 다음 설명에서 괄호(①, ②)에 들어갈 알맞은 답을 쓰시오.
코드:
UPDATE문은 테이블에 있는 튜플의 내용을 갱신할 때 사용하는 명령문으로, DML에 해당한다. 다른 DML로는 INSERT, DELETE가 있으며, 각각 새로운 튜플을 삽입하거나 삭제할 때 사용한다.
다음은 <학부생> 테이블에서 '입학생수'가 300 이상인 튜플의 '학과번호'를 999로 갱신하는 SQL문이다.
(①) 학부생 (②) 학과번호 = 999 WHERE 입학생수 >= 300;
예시:
- 위 설명에서 괄호(①, ②)에 들어갈 알맞은 답은 무엇인가요?
해설:
- 이 설명은
UPDATE
명령문의 사용법을 설명하는 것입니다. `
- 이 설명은
UPDATE` 명령문은 지정된 조건에 맞는 튜플의 내용을 변경하는 데 사용됩니다. 여기서는 '입학생수'가 300 이상인 튜플의 '학과번호'를 999로 변경하는 명령문입니다.
- 정답:
- ① UPDATE
- ② SET
7. EMP_TBL 테이블에 대한 SQL문 실행 결과
문제:
<EMP_TBL>
테이블을 참고하여<SQL문>
의 실행 결과를 쓰시오.코드:
EMPNO SAL
100 1500
200 3000
300 2000
<EMP_TBL>
SELECT COUNT(*) FROM EMP_TBL WHERE EMPNO > 100 AND SAL >= 3000 OR EMPNO = 200;
예시:
- 위
<SQL문>
을 실행했을 때, 어떤 결과가 출력되나요?
- 위
해설:
- SQL 문은
EMPNO
가 100보다 크고SAL
이 3000 이상이거나,EMPNO
가 200인 튜플의 개수를 계산합니다. SQL에서 AND 연산자는 OR 연산자보다 우선순위가 높기 때문에, 먼저EMPNO > 100 AND SAL >= 3000
의 조건을 만족하는 튜플을 찾고, 그 다음EMPNO = 200
의 조건을 만족하는 튜플을 찾습니다. 결과적으로,EMPNO
가 200인 튜플 하나만이 최종 조건을 만족합니다.
- SQL 문은
정답:
- 1
8. 학생 테이블에서 특정 튜플 삭제
문제:
<학생>
테이블에서 '이름'이 "민수"인 튜플을 삭제하고자 한다. 다음<처리 조건>
을 참고하여 SQL문을 작성하시오.처리 조건:
- 명령문 마지막의 세미콜론(;)은 생략이 가능하다.
- 인용 부호가 필요한 경우 작은따옴표(' ')를 사용한다.
코드:
DELETE FROM 학생 WHERE 이름 = '민수';
예시:
- '이름'이 "민수"인 학생을 삭제하기 위한 SQL 문을 작성하시오.
해설:
- 이 SQL문은
<학생>
테이블에서 '이름' 속성 값이 "민수"인 튜플을 찾아 삭제합니다. 처리 조건에 따라 문자열은 작은따옴표(' ')로 둘러싸여야 합니다.
- 이 SQL문은
정답:
- DELETE FROM 학생 WHERE 이름 = '민수';
9. 학생 테이블에 속성 추가
문제: 다음
<속성 정의서>
를 참고하여<학생>
테이블에 대해 20자의 가변 길이를 가진 '주소' 속성을 추가하는<SQL문>
을 완성하시오. (단, SQL문은 ISO/IEC 9075 표준을 기반으로 작성하시오.)속성 정의서:
- 학번 CHAR(10) UNIQUE 학생
- 이름 VARCHAR(8) NOT NULL 학생
- 주민번호 CHAR(13) 학생
- 학과 VARCHAR(16) FOREIGN KEY 학생
- 학년 INT 학생
코드:
ALTER TABLE 학생 ADD 주소 VARCHAR(20);
예시:
<학생>
테이블에 '주소' 속성을 추가하기 위한 SQL 문을 작성하시오.
해설:
- 이 SQL문은 기존의
<학생>
테이블에 새로운 속성인 '주소'를 추가합니다. '주소' 속성은 최대 20자의 가변 길이 문자열을 저장할 수 있도록 VARCHAR(20)으로 정의됩니다.
- 이 SQL문은 기존의
**정
답**:
- ALTER TABLE 학생 ADD 주소 VARCHAR(20);
10. 학생 테이블 처리 조건에 따른 SQL문 작성
문제: 다음
<학생>
테이블을 참고하여<처리 조건>
에서 요구하는 SQL문을 작성하시오.처리 조건:
- 3, 4학년의 학번, 이름을 조회한다.
- IN 예약어를 사용해야 한다.
- 속성명 아래의 괄호는 속성의 자료형을 의미한다.
코드:
SELECT 학번, 이름 FROM 학생 WHERE 학년 IN (3, 4);
예시:
- 3학년과 4학년 학생의 학번과 이름을 조회하기 위한 SQL 문을 작성하시오.
해설:
- 이 SQL문은
<학생>
테이블에서 '학년' 속성의 값이 3 또는 4인 튜플을 대상으로 '학번'과 '이름' 속성을 조회합니다.IN
연산자를 사용하여 여러 개의 가능한 값 중 하나와 일치하는 튜플을 선택합니다.
- 이 SQL문은
정답:
- SELECT 학번, 이름 FROM 학생 WHERE 학년 IN (3, 4);
11. student 테이블에 인덱스 생성
문제: 다음
<student>
테이블을 참고하여 'name' 속성으로 'idx_name'이라는 인덱스를 생성하는 SQL문을 작성하시오.코드:
stid name score deptid
2001 brown 85 PE01
2002 white 45 EF03
2003 black 67 UW11
<student>
- SQL문:
CREATE INDEX idx_name ON student(name);
해설:
- 이 SQL 문은
<student>
테이블의 'name' 속성에 대한 인덱스 'idx_name'을 생성합니다. 인덱스는 데이터베이스에서 데이터 검색 속도를 향상시키는데 사용됩니다.
- 이 SQL 문은
정답:
- CREATE INDEX idx_name ON student(name);
12. 성적 테이블에서 이름과 점수를 내림차순으로 조회
문제: 다음은
<성적>
테이블에서 이름(name)과 점수(score)를 조회하되, 점수를 기준으로 내림차순 정렬하여 조회하는<SQL문>
입니다. 괄호(①~③)에 알맞은 답을 적어<SQL문>
을 완성하시오.코드:
name class score
정기찬 A 85
이영호 C 74
환정형 C 95
김지수 A 90
최은영 B 82
<성적>
- SQL문:
SELECT name, score
FROM 성적
ORDER BY score DESC;
해설:
- 이 SQL문은
<성적>
테이블에서 'name'과 'score'를 선택하여 'score' 기준으로 내림차순 정렬한 결과를 조회합니다. 'DESC' 키워드는 내림차순 정렬을 의미합니다.
- 이 SQL문은
정답:
- ORDER BY score DESC;
13. 회원 테이블에서 이름이 "이"로 시작하는 회원 조회
문제: 다음은
<회원>
테이블에서 '이름'이 "이"로 시작하는 회원들을 '가입일' 순으로 내림차순 정렬하는<SQL문>
입니다. 괄호(①, ②)에 들어갈 알맞은 답을 쓰시오.코드:
회원번호 이름 성별 가입일
1001 이진성 남 2021-06-23
1002 조이령 여 2021-06-24
1003 최민수 남 2021-06-28
1004 김차희 여 2021-07-03
1005 이미경 여 2021-07-10
<회원>
- SQL문:
SELECT * FROM 회원 WHERE 이름 LIKE '이%' ORDER BY 가입일 DESC;
해설:
- 이 SQL문은
<회원>
테이블에서 '이름'이 "이"로 시작하는 모든 튜플을 선택하고, '가입일'을 기준으로 내림차순으로 정렬하여 결과를 조회합니다. 'LIKE' 연산자와 '%' 와일드카드를 사용하여 "이"로 시작하는 이름을 필터링합니다.
- 이 SQL문은
정답:
- LIKE '이%'
- ORDER BY 가입일 DESC;
14. 학생 테이블에서 학과별 튜플의 개수 조회
- 문제: 다음 질의 내용에 대한 SQL문을 완성하시오. 학생 테이블에서 학과별 튜
플의 개수를 검색하시오. (단, 아래의 실행 결과가 되도록 한다.)
- 코드:
학번 이름 학년 학과 주소
20160011 김영란 2 전기 서울
19210113 이재우 3 컴퓨터 대구
21168007 함소진 1 전자 부산
19168002 우혜정 3 전자 광주
18120073 김진수 4 컴퓨터 울산
<학생>
- SQL문:
SELECT 학과, COUNT(*) AS 학과별튜플수 FROM 학생 GROUP BY 학과;
해설:
- 이 SQL문은
<학생>
테이블에서 '학과'별로 그룹화하고, 각 '학과'의 튜플 수를 계산하여 '학과별튜플수'라는 별칭으로 결과를 표시합니다. 'GROUP BY' 구문을 사용하여 '학과' 속성에 따라 튜플을 그룹화합니다.
- 이 SQL문은
정답:
- SELECT 학과, COUNT(*) AS 학과별튜플수 FROM 학생 GROUP BY 학과;
15. 과목별 점수 평균이 90점 이상인 과목 조회
문제: 다음의
<성적>
테이블에서 과목별 점수의 평균이 90점 이상인 ‘과목이름’, ‘최소점수’, ‘최대점수’를 검색하고자 한다.<처리 조건>
을 참고하여 적합한 SQL문을 작성하시오.처리 조건:
- WHERE문은 사용하지 않는다.
- GROUP BY와 HAVING을 이용한다.
- 집계함수(Aggregation Function)를 사용하여 명령문을 구성한다.
- ‘최소점수’, ‘최대점수’는 별칭(Alias)을 위한 AS문을 이용한다.
- 명령문 마지막의 세미콜론(;)은 생략이 가능하다.
- 인용 부호가 필요한 경우 작은따옴표(‘ ’)를 사용한다.
코드:
학번 과목번호 과목이름 학점 점수
a2001 101 컴퓨터구조 6 95
a2002 101 컴퓨터구조 6 84
a2003 302 데이터베이스 5 89
a2004 201 인공지능 5 92
a2005 302 데이터베이스 5 100
a2006 302 데이터베이스 5 88
a2007 201 인공지능 5 93
<성적>
- SQL문:
SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수
FROM 성적
GROUP BY 과목이름
HAVING AVG(점수) >= 90;
해설:
- 이 SQL문은 각 과목별로 최소 점수와 최대 점수를 계산하고, 과목의 평균 점수가 90점 이상인 경우에 한하여 결과를 표시합니다.
HAVING
절은GROUP BY
로 생성된 그룹에 조건을 적용할 때 사용됩니다.
- 이 SQL문은 각 과목별로 최소 점수와 최대 점수를 계산하고, 과목의 평균 점수가 90점 이상인 경우에 한하여 결과를 표시합니다.
정답:
- SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수 FROM 성적 GROUP BY 과목이름 HAVING AVG(점수) >= 90;
16. A 테이블과 B 테이블의 교차 조인 결과
문제:
<A>
테이블과<B>
테이블을 참고하여<SQL문>
의 실행 결과를 쓰시오.코드:
NAME
Smith
Allen
Scott
<A>
RULE
S%
%T%
<B>
- SQL문:
SELECT COUNT(*) CNT
FROM A
CROSS JOIN B
WHERE A.NAME LIKE B.RULE;
해설:
- 이 SQL문은
<A>
테이블과<B>
테이블을 교차 조인하여 생성된 모든 조합에서,<A>
테이블의NAME
이<B>
테이블의RULE
에 정의된 패턴과 일치하는 행의 수를 계산합니다.LIKE
연산자와 함께 사용되는%
는 0개 이상의 임의의 문자열과 일치함을 의미합니다.
- 이 SQL문은
정답:
- 4
17. 사원 테이블과 동아리 테이블 조인 결과
- 문제: 다음
<사원>
테이블과<동아리>
테이블을 조인한<결과>
를
확인하여 <SQL문>
의 괄호(①, ②)에 들어갈 알맞은 답을 쓰시오.
- 코드:
코드 이름 부서
1601 김명해 인사
1602 이진성 경영지원
1731 박영광 개발
2001 이수진
<사원>
코드 동아리명
1601 테니스
1731 탁구
2001 볼링
<동아리>
- SQL문:
SELECT a.코드, 이름, 동아리명
FROM 사원 a
LEFT JOIN 동아리 b ON a.코드 = b.코드;
해설:
- 이 SQL문은
<사원>
테이블과<동아리>
테이블을 왼쪽 외부 조인(LEFT JOIN
)합니다. 이는 모든<사원>
테이블의 행과,<동아리>
테이블에서 일치하는 행을 결합한 결과를 생성합니다. 조인 조건은 두 테이블의코드
가 같은 경우입니다.
- 이 SQL문은
정답:
- ON a.코드 = b.코드
18. 재고 및 판매 테이블 정의 및 데이터 삽입
문제: 다음과 같이 재고(
STOCK
) 및 판매(SALES
) 테이블을 정의하고 데이터를 삽입한 후, SQL 문을 실행한 결과를 쓰시오.코드:
CREATE TABLE STOCK (
제품코드 INT PRIMARY KEY,
제품명 VARCHAR(50),
재고수량 INT
);
CREATE TABLE SALES (
판매번호 INT PRIMARY KEY,
제품코드 INT,
판매수량 INT,
FOREIGN KEY(제품코드) REFERENCES STOCK(제품코드)
);
INSERT INTO STOCK VALUES(1, '노트북', 100);
INSERT INTO STOCK VALUES(2, '키보드', 200);
INSERT INTO STOCK VALUES(3, '마우스', 300);
INSERT INTO SALES VALUES(101, 1, 10);
INSERT INTO SALES VALUES(102, 2, 20);
INSERT INTO SALES VALUES(103, 3, 30);
① SELECT SUM(재고수량) FROM STOCK;
② SELECT 제품명 FROM STOCK WHERE 제품코드 NOT IN (SELECT 제품코드 FROM SALES);
예시:
- ① 문제의 SQL문 실행 결과는?
- ② 문제의 SQL문 실행 결과는?
해설:
- ① SQL 문은 모든 제품의 재고수량 총합을 조회합니다. 제품의 재고수량이 각각 100, 200, 300으로 총합은 600입니다.
- ② 이 SQL 문은 판매된 적 없는 제품의 이름을 조회합니다. 모든 제품이 한 번씩 판매되었으므로, 결과는 없습니다.
정답:
- ① 600
- ② (결과 없음)
19. 재고 상태 갱신
문제: 판매 정보에 따라 재고 상태를 갱신하는 SQL문을 작성하시오.
처리 조건:
- 판매된 제품의 재고수량을 판매수량만큼 감소시킨다.
- 제품코드 1인 제품이 10개 판매되었다.
코드:
UPDATE STOCK SET 재고수량 = 재고수량 - (SELECT 판매수량 FROM SALES WHERE 제품코드 = 1) WHERE 제품코드 = 1;
해설:
- 이 SQL문은 제품코드가 1인 제품의 재고수량을, 해당 제품의 판매수량만큼 감소시킵니다. 제품코드 1의 제품이 10개 판매되었으므로, 재고수량은 판매수량 10만큼 감소됩니다.
정답:
- UPDATE STOCK SET 재고수량 = 재고수량 - (SELECT 판매수량 FROM SALES WHERE 제품코드 = 1) WHERE 제품코드 = 1;
20. 재고 부족 제품 조회
문제: 재고수량이 특정 값 이하인 제품의 이름과 재고수량을 조회하는 SQL문을 작성하시오. (특정 값은 50이하)
코드:
SELECT 제품명, 재고수량 FROM STOCK WHERE 재고수량 <= 50;
- 해설:
- 이 SQL문은
STOCK
테이블에서 재고수량이 50 이하인 모든 제품
- 이 SQL문은
의 '제품명'과 '재고수량'을 조회합니다. 재고수량이 50 이하인 제품이 없으므로, 추가된 데이터에 따라 결과가 달라질 수 있습니다.
- 정답:
- SELECT 제품명, 재고수량 FROM STOCK WHERE 재고수량 <= 50;