SQL(데이터베이스) - 실기 문제 기출

이보아·2024년 10월 18일
0

정보처리기사

목록 보기
16/16
post-thumbnail

정보처리기사 SQL 기출 문제 모음

목차

📋20년 기출

20년 1회

학생 테이블에 전기과 학생이 50명, 전산과 학생이 100명, 전자과 학생이 50명있다고 할 때,
다음 SQL문 1, 2, 3의 실행 결과로 표시되는 튜플의 수를 쓰시오. (단, DEPT 필드는 학과를 의미한다)

1) SELECT DEPT FROM STUDENT;
2) SELECT DISTINCT DEPT FROM STUDENT;
3) SELECT COUNT(DISTINCT DEPT) FROM STUDENT WHERE DEPT ='전산과';

✅ 정답 1) 200 2) 3 3) 1

✏️ 문제 풀이
1. SELECT DEPT FROM STUDENT;

  • 모든 학생의 학과(DEPT) 정보를 조회.
  • 결과: 200 (전기과 50명 + 전산과 100명 + 전자과 50명 = 200명)
  1. SELECT DISTINCT DEPT FROM STUDENT;
  • 중복되지 않는(DISTINCT) 학과 정보를 조회.
  • 결과: 3 (전기과, 전산과, 전자과 -> 총 3개 학과)
  1. SELECT COUNT(DISTINCT DEPT) FROM STUDENT WHERE DEPT ='전산과';
  • 전산과 학과에 대한 중복 없는 개수를 세 count하지만 주어진 조건에 맞는 경우는 1
  • 결과: 1 ('전산과'가 존재하므로 중복을 제거할 필요 없이 1)

20년 2회

다음 <학생> 테이블을 참고하여 <처리조건>에서 요구하는 SQL문을 작성하시오.

<학생>

학번이름학년수강과목점수연락처
1233세무행정4.5010-1234-5678
1242토목개론3010-1235-4796
1254실용법학3.5010-1237-7411
1261데이터론2010-1238-4972

<처리조건>

3, 4학년의 학번, 이름을 조회한다.
IN 예약어를 사용해야 한다.
속성명 아래의 괄호는 속성의 자료형을 의미한다.

✅ 정답 SELECT 학번, 이름 FROM 학생 WHERE 학번 IN (3,4);

✏️ 문제 풀이

  • SELECT 문을 사용하여 조회할 속성(학번, 이름)을 명시.
  • FROM 학생 구문을 통해 학생 테이블에서 데이터를 가져옴.
  • WHERE 조건을 사용해 학년이 3 또는 4인 경우만(IN) 선택.

20년 2회

테이블을 참고하여 'name' 속성으로 'idx_name'이라는 인덱스를 생성하는 SQL문을 작성하시오.

stidnamescoredeptid
2001brown85PE01
2002white45EF03
2003black67UW11

✅ 정답 CREATE INDEX idx_name ON student(name)

✏️ 문제 풀이

  • CREATE INDEX: 인덱스를 생성하는 SQL 명령어
  • idx_name: 생성될 인덱스의 이름.
  • ON student(name): 어떤 테이블(student)에서 어떤 칼럼(name)에 인덱스를 생성할지를 나타냄.

20년 3회

<학생> 테이블에서 '이름'이 "민수"인 튜플을 삭제하고자 한다. 다음 <처리 조건>을 참고하여 SQL문을 작성하시오.

<처리 조건>

명령문 마지막의 세미콜론은 생략이 가능하다
인용 부호가 필요한 경우 작은 따옴표를 사용한다

✅ 정답 DELETE FROM 학생 WHERE 이름 = '민수';

✏️ 문제 풀이

  • DELETE FROM: 데이터를 삭제할 테이블을 지정하는 명령어.
  • 학생: 데이터가 삭제될 테이블의 이름.
  • WHERE: 조건을 지정하는 키워드.
  • 이름 = '민수': 삭제할 조건을 설정.

20년 3회

다음 <성적> 테이블에서 과목별 점수의 평균이 90점 이상인 '과목이름', '최소점수', '최대점수'를 검색하고자 한다. <처리 조건>을 참고하여 적합한 SQL문을 작성하시오.

<성적>

학번과목번호과목이름학점점수
123101컴퓨터구조695
124101컴퓨터구조684
125302데이터베이스589
126201인공지능592
127302데이터베이스5100
128302데이터베이스588
129201인공지능593

<결과>

과목이름최소점수최대점수
데이터베이스88100
인공지능9293

<처리 조건>
WHERE문을 사용하지않는다.
GROUP BY와 HAVING을 이용한다.
집계함수를 사용하여 명령문을 구성한다.
최소점수, 최대점수는 별칭을 위한 AS문을 이용한다.
명령문 마지막의 세미콜론은 생략이 가능하다.
인용 부호가 필요한 경우 작은 따옴표를 사용한다.

✅ 정답 SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수 FROM 성적 GROUP BY 과목이름 HAVING AVG(점수) >= 90;

✏️ 문제 풀이

  • SELECT: 원하는 컬럼을 선택.
  • MIN, MAX: 점수의 최소값과 최대값을 계산. ➔ MIN(점수) AS 최소점수, MAX(점수) AS 최대점수로 새로운 컬럼을 만듬
  • GROUP BY: 과목별로 그룹화합니다.
  • HAVING: 집계 함수 즉, 평균 점수가 90점 이상인 경우만을 조건으로 설정.

20년 3회

다음 <속성 정의서>를 참고하여 <학생> 테이블에 대해 20자의 가변 길이를 가진 '주소' 속성을 추가하는 <SQL문>을 완성하시오.

<속성 정의서>

속성명데이터타입제약조건테이블명
학번CHAR(10)UNIQUE학생
이름VARCHAR(8)NOT NULL학생
주민번호CHAR(13)학생
학과VARCHAR(16)FOREIGN KEY학생
학년INT학생

<SQL문>
(1) TABLE 학생 (2) 주소 VARCHAR(20);

✅ 정답 (1) ALTER (2) ADD ALTER TABLE 학생 ADD 주소 VARCHAR(20);

✏️ 문제 풀이

  • ALTER TABLE: 기존 테이블 구조를 변경할 때 사용하는 명령어.
  • ADD: 새 속성을 추가.
  • 속성 정의: '주소' 속성의 데이터타입을 VARCHAR(20)으로 설정.

20년 4회

다음 질의 내용에 대한 SQL문을 작성하시오.

질의: 학생 테이블에서 학과별 튜플의 개수를 검색하시오. (단, 아래의 실행 결과가 되도록 한다.)

<학생 테이블>

학번이름학년학과주소
1232전기서울
1243컴퓨터대구
1251전자부산
1263전자광주
1274컴퓨터울산

<실행 결과>

학과학과별 튜플 수
전기1
전자2
컴퓨터2

<처리조건>

Where 조건절은 사용할 수 없다.
GROUP BY는 반드시 포함한다.
집계함수를 적용한다.
학과별튜플수 컬럼이름 출력에 AS를 활용한다.
문장 끝의 세미콜론은 생략해도 무방하다.
인용부호 사용이 필요한 경우 단일 따옴표를 사용한다.

✅ 정답 SELECT 학과, COUNT(*)AS 학과별튜플수 FROM 학생 GROUP BY 학과

✏️ 문제 풀이

  • SELECT: 특정 컬럼을 선택.
  • 학과: 가져오고 싶은 학과 이름.
  • COUNT(*): 모든 행의 수를 세는 집계 함수.
  • AS: 결과 컬럼에 별칭.
  • FROM: 데이터를 가져올 테이블을 지정.
  • GROUP BY: 데이터를 그룹화.

📋21년 기출

21년 1회

<EMP_TBL> 테이블을 참고하여 <SQL문>의 실행 결과를 쓰시오.

<EMP_TBL>

EMPNOSAL
1001500
2003000
3002000

<처리조건>
SELECT COUNT(*) FROM EMP_TBL WHERE EMPNO > 100 AND SAL >=3000 OR EMPNO =200;

✅ 정답 1

✏️ 문제 풀이

  • EMPNO가 200인 레코드: (200, 3000) - 조건에 맞음.
  • EMPNO가 300인 레코드: (300, 2000) - EMPNO > 100 이지만 SAL은 3000 미만이므로 조건에 맞지 않음.
  • EMPNO가 100인 레코드: (100, 1500) - 조건에 맞지 않음.

21년 1회

다음 테이블에서 카디널리티와 디그리를 구하시오.

ID이름거주지신청강의
abc마포구e1
abd관악구e2
abe서대문구e3
abf광진구e4
abt서대문구e5
✅ 정답 카디널리티: 5 디그리: 4

✏️ 문제 풀이

  • 카디널리티: 테이블의 고유한 행(row) 수. 주어진 테이블에는 5개의 고유한 ID.
  • 디그리: 테이블의 열(column) 수. 주어진 테이블에는 4개의 열.

21년 2회

다음은 <학부생>테이블에서 입학생수가 300이상인 튜플의 학과번호를 999로 갱신하는 SQL문이다 괄호(1, 2)에 알맞은 답을 쓰시오.

학부학과번호입학생수담당관
정경대학110300
공과대학310250
인문대학120400
정경대학120300
인문대학420180

(1) 학부생 (2) 학과번호 =999 WHERE 입학생수>=300;

✅ 정답 (1) UPDATE (2) SET UPDATE 학부생 SET 학과번호 = 999 WHERE 입합생수 >=300;

✏️ 문제 풀이

  • UPDATE: 특정 테이블의 데이터를 수정할 때 사용.
  • SET: 수정할 열과 그 값을 지정.
  • WHERE: 특정 조건을 통해 수정할 행을 지정함. 여기서는 입학생수가 300 이상인 학과의 학과번호를 999로 갱신함.

21년 2회

다음은 <학부생>테이블에서 입학생수가 300이상인 튜플의 학과번호를 999로 갱신하는 SQL문이다 괄호(1, 2)에 알맞은 답을 쓰시오.

<사원>

코드이름부서
1인사
2경영지원
3개발
4

<동아리>

코드동아리명
1테니스
3탁구
4볼링

<결과>

코드이름동아리명
1테니스
2
3탁구
4볼링

<SQL문>
SELECT a.코드, 이름,동아리명 FROM 사원 a LEFT 동아리 b( 1 ) a. 코드=b.( 2 ) ;

✅ 정답 (1) ON (2) 코드 SELECT a.코드,이름,동아리명 FROM 사원 a LEFT 동아리 b ON a.코드 = b.코드

✏️ 문제 풀이
1. SELECT 문

  • a.코드, 즉 사원 테이블에서의 코드.
  • 이름, 즉 사원 테이블에서의 이름.
  • 동아리명, 즉 동아리 테이블에서의 동아리명.
  1. FROM 절
  • 사원 a: 사원 테이블의 별칭을 a로 설정하여, 이후 코드에서 이 포인터를 사용.
  1. LEFT JOIN
  • 동아리 b: 동아리 테이블을 별칭 b로 설정.
  • ON a.코드 = b.코드: 두 테이블을 조인하는 조건으로, 사원의 코드와 동아리의 코드가 일치하는 경우에 조인을 수행.

21년 2회

다음 <회원> 테이블에서 '이름'이 "이"로 시작하는 회원들을 가입일 순으로 내림차순 정렬하는 <SQL문>이다 괄호(1, 2)에 들어갈 알맞은 답을 쓰시오.

<회원> 테이블

회원번호이름성별가입일
1이진성2021-06-23
2조이령2021-06-24
3최민수2021-06-28
4김차희2021-07-03
5이미경2021-07-10

<SQL문>
SELECT*FROM 회원 WHERE 이름 LIKE '( 1 )' ORDER BY 가입일 ( 2 );

✅ 정답 (1) 이% (2) DESC SELECT * FROM WHERE 이름 LIKE '이%' ORDER BY 가입일 DESC

✏️ 문제 풀이

  • 이름 특정 위치 찾기
    • '이' 시작 : '이%'
    • '이' 중간에 포함된 경우 : '%이%'
    • '이' 끝나는 경우: '%이'
  • 내림차순 : DESC, 오름차순: ASC

21년 3회

< A> 테이블과 < B>테이블을 참고하여 <SQL문>의 실행결과를 쓰시오.

image

<SQL문>
SELECT COUNT(*) CNT FROM A CROSS JOIN B WHERE A.NAME LIKE B.RULE;

✅ 정답 4

✏️ 문제 풀이

  • CROSS JOIN : A 테이블의 모든 행과 B 테이블의 모든 행이 조합. 이로 인해 A와 B의 모든 조합이 생성.
  • 이름 특정 위치 찾기
    • 's' 시작 : 's%' ➔ s로 시작하는 NAME 2개
    • 't' 중간에 포함된 경우 : '%t%' ➔ t가 사이에 있는경우 2개
  • 총 4개의 행이 조건 맞음

📋22년 기출

22년 1회

다음은 <성적> 테이블에서 이름(name)과 점수(score)를 조회하되, 점수를 기준으로 내림차순 정렬하여 조회하는 <SQL문>이다. 괄호(1~3)에 알맞은 답을 적어 <SQL문>을 완성하시오.

nameclassscore
A85
C74
C95
A90
B82

<SQL문>
SELECT name, score FROM 성적 ( 1 ) BY ( 2 ) ( 3 )

✅ 정답 (1) ORDER (2) score (3) DESC SELECT name, score FROM 성적 ORDER BY score DESC

✏️ 문제 풀이

  • SELECT: 조회할 컬럼 지정
  • FROM: 테이블 이름 지정
  • ORDER BY: 정렬할 컬럼 및 방향 지정

22년 2회

상품 테이블에서 H제조사 전체 제품의 단가보다 더 큰 단가를 가진 제품을 모두 출력하는 SQL문을 완성하시오.

제조사제품명단가
A과자1000
B초콜릿6000
H사탕2000
C아이스크림5000
H사탕3000

<SQL문>
SELECT 제조사, 제품명, 단가 FROM 제품 WHERE 단가 > ( 1 ) (SELECT 단가 FROM 제품 WHERE 제조사='H')

✅ 정답 ALL

✏️ 문제 풀이

  • H 제조사의 단가를 조회하는데, 이는 서브쿼리를 사용하여 H에 해당하는 제품의 모든 단가를 구하는 것 ➔ ALL:

22년 2회

다음 SQL 결과에 알맞는 답을 작성하시오.

INDEXcol1col2
12NULL
236
355
463
5NULL3

<SQL문>
SELECT count(col2) FROM TABLE WHERE col1 in(2, 3) or col2 in (3,5);

✅ 정답 4

✏️ 문제 풀이

  • col1이 2 (행 1) 또는 3 (행 2)인 행 → 행 1, 2 (2개)
  • col2가 3 (행 4, 5) 또는 5 (행 3)인 행 → 행 3, 4, 5 (3개)
  • 이렇게 선택된 행은 행 1, 2, 3, 4, 5 총 5개인 것 같지만, 여기서 col2가 NULL이 아닌 행을 제외.

22년 2회

다음 테이블에서 𝝿 TTL(employee)에 대한 연산 결과 값을 작성하시오.

INDEXAGETTL
155부장
235대리
342과장
445차장

(1)
(2)
(3)
(4)
(5)

✅ 정답 TTL 부장 대리 과장 차장

✏️ 문제 풀이

  • TTL 컬럼의 값을 조회
  • 테이블에서 정보 추출: 주어진 테이블에서 TTL 컬럼의 각 값을 확인
  • 연산 결과는 직책 목록 생성

22년 3회

image

출처 : [2022년 3회] 정보처리기사 실기 복원 문제 (tistory.com)

✅ 정답 (1) 3 (2) 4

22년 2회

학생 테이블에 컴퓨터과 학생이 50명, 전기과 학생이 100명, 인터넷과 학생이 50명있다고 할 때, 다음 SQL문 1, 2, 3의 실행 결과로 표시되는 튜플의 수를 쓰시오. (단, DEPT 필드는 학과를 의미한다)

1) SELECT DEPT FROM STUDENT;
2) SELECT DISTINCT DEPT FROM STUDENT;
3) SELECT COUNT(DISTINCT DEPT) FROM STUDENT WHERE DEPT ='인터넷과';

✅ 정답 1) 200 2) 3 3) 1

📋23년 기출

23년 1회

<학생> 테이블에서 '이름'이 "민수"인 튜플을 삭제하고자 한다. 다음 <처리 조건>을 참고하여 SQL문을 작성하시오.(20년 3회차 기출과 동일)

✅ 정답 DELETE FROM 학생 WHERE 이름 = '민수';

23년 1회

<성적> 테이블에서 과목별 점수의 평균이 90점 이상인 '과목이름', '최소점수', '최대점수'를 검색하고자 한다. <처리 조건>을 참고하여 적합한 SQL문을 작성하시오. (20년 3회차 기출과 동일)

✅ 정답 SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수 FROM 성적 GROUP BY 과목이름 HAVING AVG(점수) >= 90;

23년 2회

학생 테이블에 아래 데이터를 삽입하는 쿼리문을 작성하시오.

학번 : 9830287
이름 : 한국산
학년 : 3
과목명 : 경영학개론
전화번호 : 050-1234-1234

✅ 정답 INSERT INTO 학생 (학번, 이름, 학년, 과목명, 전화번호) VALUES (9830287, '한국산', 3, '경영학개론', '050-1234-1234');

✏️ 문제 풀이

  • INSERT INTO 학생: 학생 테이블에 데이터를 추가한다는 의미.
  • (학번, 이름, 학년, 과목명, 전화번호): 추가할 데이터의 컬럼을 명시(생략 가능).
  • VALUES (9830287, '한국산', 3, '경영학개론', '050-1234-1234'): 각각의 컬럼에 대한 값을 제공

23년 2회

뷰를 삭제할 때 참조된 뷰를 연쇄적으로 모두 삭제되도록 빈칸을 작성하시오.

DROP VIEW 뷰이름 (가);

✅ 정답 CASECADE

✏️ 문제 풀이

명령어설명
CASCADE참조된 모든 뷰를 함께 삭제합니다.
RESTRICT참조되는 뷰가 있는 경우 삭제를 막습니다. 이 옵션이 기본입니다.
DROP VIEW IF EXISTS뷰가 존재할 경우에만 삭제하여 오류를 방지합니다.
DROP VIEW ... CASCADE참조된 모든 뷰를 삭제하며, 명시적으로 모든 참조가 삭제됩니다.

23년 3회

다음 빈칸에 들어갈 UNION 연산에 대한 출력결과를 쓰시오.

image

✅ 정답 ![image](https://github.com/user-attachments/assets/92ef0d96-a8bc-4a2b-8cb3-7af655ba2199)

✏️ 문제 풀이

  • UNION으로 결합한 결과는 중복된 행을 제거
  • 각각의 테이블에서 받은 값들이 어떤 형식인지 및 값 중복을 제거한 형태로 출력

📋24년 기출

24년 1회

아래 보기의 SQL 문장과 테이블을 참고하여 출력 값을 표로 작성하시오.

SELECT
    B
FROM
    R1
WHERE
    C IN (SELECT C FROM R2 WHERE D="K");

image

✅ 정답

image

✏️ 문제 풀이
1. 내부 서브쿼리

  • SELECT C FROM R2 WHERE D="K" 이 부분은 R2 테이블에서 D가 "K"인 모든 C 값을 선택합니다.
  1. 외부 쿼리
  • 외부 쿼리는 R1 테이블에서 C 값이 서브쿼리의 결과 목록에 있는 항목의 B 값을 선택합니다.

24년 1회

결과값

image

SELECT 
    COUNT(*) 
FROM 
    TABLE 
WHERE 
    EMPNO > 100 
AND 
    SAL >= 3000 OR EMPNO = 200
✅ 정답 1

24년 2회

빈칸에 들어갈 것을 쓰시오

1) 신입 사원을 사원 테이블에 추가
INSERT INTO 사원 (사원번호, 이름, 주소, 부서) ;

2) 위에 추가한 신입사원을 부서 테이블에 추가
INSERT INTO 부서 (사원번호, 이름, 나이, 부서)
[ 나 ] 사원번호, 이름, 나이, 23 FROM 사원 WHERE 이름 = '김길동';

3) 전체 사원 테이블 조회
SELECT * [ 다 ] 사원;

4) 추가한 신입사원을 '퇴사'로 변경
UPDATE 사원 [ 라 ] 부서 = '퇴사' WHERE 사원번호 = 12345;

✅ 정답 (가) VALUES (나) SELECT (다) FROM (라) SET

24년 2회

다음 테이블에서 카디널리티와 디그리를 구하시오.

ID이름거주지신청강의
abc마포구e1
abd관악구e2
abe서대문구e3
abf광진구e4
abt서대문구e5

✅ 정답 카디널리티: 5 디그리: 4
profile
매일매일 틀깨기

0개의 댓글