자격증 요약/정보처리기사

[정보처리기사 실기] SQL문 기출

문성 2026. 4. 6. 19:56

 


[20년 1회]

6. STUDENT 테이블에서 컴퓨터과 학생 50명, 인터넷과 학생 100명, 사무자동화과 학생 50명의 정보가 저장되어 있을 때, 다음 SQL문의 실행 결과에 따른 튜플의 수는? (단, DEPT 칼럼은 학과명이다.)

( 1 ) SELECT DERP 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 DERP FROM STUDENT : STUDENT 테이블에서 학과명(DEPT)을 전부 다 가져와라
→ 50 + 100 +50 = 200

( 2 ) SELECT DISTINCT DEPT FROM STUDENT : 학과명(DEPT)을 가져오되, 중복된 이름은 딱 하나씩만 남겨라
→ 컴퓨터과, 인터넷과, 사무자동화과 총 3개

( 3 ) SELECT COUNT(DISTINCT DEPT) FROM STUDENT WHERE DEPT = '컴퓨터과' : 학과가 '컴퓨터과'인 학생들 중에서, 중복을 제거한 학과명의 개수를 세어라
 WHERE DEPT = '컴퓨터과' : 일단 '컴퓨터과' 학생 50명만 골라냄
 DISTINCT DEPT : 그 50명의 학과명은 모두 '컴퓨터과'로 똑같으니, 중복을 제거하면 '컴퓨터과' 딱 1개만 남음
 COUNT : 그 남은 개수를 세면 1

 

 

[26년 1회]
9. 아래 조건을 참고하여 각 SQL 구문을 실행했을 때 반환되는 행(Row)의 수를 쓰시오.
(단, DEPT 칼럼은 학과명이다.)

[테이블 조건]
STUDENT 테이블에는 다음 세 학과의 학생 정보가 저장되어 있다.
컴퓨터과  50명  · 인터넷과  100명  · 사무자동화과  50
[SQL 구문]
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

 

 

[20년 2회]

6. 학생 테이블은 학번, 이름, 학년, 수강과목, 점수, 연락처를 속성으로 가진다. 아래 조건을 만족하는 SQL문을 작성하시오.

[조건]
- 학생 테이블에서 3,4학년인 학번, 이름을 조회한다.
- IN 연산자 사용해야 한다.
답: SELECT 학번, 이름 FROM 학생 WHERE 학년 IN (3,4);
                               

- 학생 테이블에서 3,4학년인 학번, 이름을 조회한다.
- IN 연산자 사용해야 한다.

조회한다 : SELECT

학번, 이름을 조회한다. : SELECT 학번, 이름

테이블에서 : FROM
학생 테이블에서 : FROM 학생

3,4학년인(IN연산자 사용) : WHERE 학년 IN (3,4)

 

 

[20년 2회]

12. 학생 테이블의 name속성에 IDX_NAME 이름으로 인덱스 생성하는 SQL문을 작성하시오.

답: CREATE INDEX IDX_NAME ON 학생(NAME);
                               

학생 테이블의 name속성에 IDX_NAME 이름으로 인덱스 생성

생성 : CREATE
인덱스 생성 : CREATE INDEX
IDX_NAME 이름으로 인덱스 생성 : CREATE INDEX IDX_NAME
테이블 : ON
학생 테이블 : ON 학생
학생 테이블 의 name속성 : ON 학생(NAME)

 

 

[20년 3회]

8. 다음 조건을 만족하면서, 과목별 점수의 평균이 90이상인 과목이름, 최소점수, 최대점수를 구하는 SQL문을 작성하시오. 

[조건]
- 대소문자를 구분하지 않는다.
- WHERE 구분을 사용하지 않는다.
- GROUP BY, HAVING구문을 반드시 사용한다.
- 세미콜론(;)은 생략 가능하다.
- 별칭(AS)을 사용해야 한다.
답:
SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수
FROM 성적
GROUP BY 과목이름 HAVING AVG(점수) >= 90;
                               

과목별 점수의 평균이 90이상인 과목이름, 최소점수, 최대점수를 구하는 SQL


[결과]에서 나온 것을 토대로 SELECT문을 작성한다.
과목이름, 최소점수, 최대점수 : SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수
 - MIN(점수) 에서 점수는 [성적] 테이블에서 가져올 항목이다.

불러올 테이블을 작성한다.
FROM 성적

조건에서 GROUP BY절을 쓰라고 했으므로, 조건식은 GROUP BY절을 사용한다.
과목별 : GROUP BY 과목이름
점수의 평균이 90이상 : HAVING AVG(점수) >= 90

 

 

[20년 3회]

9. 학생 테이블에서 이름이 민수인 튜플을 삭제하는 SQL문을 작성하시오

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

학생 테이블에서 이름이 민수인 튜플을 삭제
삭제 : DELECT

학생 테이블 : FROM 학생
이름이 민수 : WHERE 이름 = '민수'

 


[20년 3회]

20. 학생 테이블에 주소 속성을 추가하는 SQL문을 작성하시오.

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

 

 

[20년 4회]

16. 다음 조건을 만족하면서 학과별로 튜플 수가 얼마인지 구하는 SQL문을 작성하시오.

[조건]
- 대소문자를 구분하지 않는다.
- WHERE 구문을 사용하지 않는다.
- GROUP BY 를 사용한다.
- 세미콜론(;)은 생략 가능하다.
- 별칭(AS)을 사용해야 한다. (별칭 사용 시 별칭은 작은 따옴표를 써야 함)
- 집계 함수를 사용해야 한다.
답: SELECT 학과, COUNT(학과) AS 학과별튜플수 FROM 학생 GROUP BY 학과;
                               

학과별로 튜플 수가 얼마인지 구하는 SQL문


시작은 SELECT 문으로 학과를 기준으로 결과가 나와있으므로
→ SELECT 학과
학과별튜플수 별칭이 되어있고, 결과값을 보면 집계함수(개수, COUNT)를 써서 출력됐으므로
→ SELECT 학과 COUNT(학과) AS 학과별튜플수

어떤 테이블에서 가져올지를 정해야한다.
→ FROM 학생

'학과별로' 라고 조건을 지정했고, [조건]에서 GROUP BY를 사용하라고 했으므로
→ GROUP BY 학과

 

 

[21년 1회]

6. 다음 SQL 실행 결과를 숫자만 쓰시오.

[SQL] SELECT COUNT(*) FROM 급여 WHERE EMPNO > 100 AND SAL >= 3000 OR EMPNO = 200;
답: 1
                               

SELECT COUNT(*) FROM 급여 WHERE EMPNO > 100 AND SAL >= 3000 OR EMPNO = 200;
SELECT COUNT(*) : 모든 값들을 세린다. 카운팅

FROM 급여 : 급여 테이블에서

WHERE EMPNO > 100 AND SAL >= 3000 OR EMPNO = 200;
EMPNO > 100 이고(AND)

SAL >= 3000 이거나(OR) EMPNO = 200;


결과적으로


즉, 한 개가 선택되므로, COUNT(*) 하면 1이 된다.

 

 

[21년 2회]

5. 다음은 테이블을 수정할때의 상황입니다. SQL 보기에서 괄호안에 알맞는 문장을 작성하시오.

(    1   ) 테이블명  (     2    )  컬럼 = 값 WHERE 점수 >= 90;
답: (1) UPDATE  (2) SET

 

 

[21년 2회]

6. 다음 SQL 보기에서 JOIN할 경우 괄호안에 알맞는 문장을 작성하시오.

SELECT .... FROM 학생정보 a JOIN 학과정보 b (   1   ) a.학과 = b.(   2   )
답: (1) ON  (2) 학과

 

 

[21년 2회]

10. SQL문에서 괄호안에 알맞은 답안을 작성하시오.

SELECT .... FROM ... WHERE '이름' LIKE (   1   )  ORDER BY  '컬럼명'  (    2    )
답: (1) 이%  (2) DESC  
                               

% : 0개 이상의 모든 문자
_ : 딱 한 글자만 대신

ASC : 오름차순(생략가능)
DESC : 내림차순

 

 

[21년 3회]

13. 다음은, 테이블에서 조건값을 실행한 화면이다. 이에 대한 알맞는 결과값을 작성하시오. 

답: 4
                               

SELECT COUNT(*) CNT FROM T1 A CROSS JOIN T2 B WHERE A.NAME LIKE B.RULE
SELECT COUNT(*) CNT : 개수를 세려라.
 → CNT는 별칭으로 출력하면 CNT가 이름이 된다. (AS가 없어도 별칭을 쓸 수 있다.)
FROM T1 A CROSS JOIN T2 B : T1 과 T2의 테이블을 크로스 조인해라.
 → 크로스 조인(곱셈)은 모든 조합의 경우의 수를 말한다.
 → T1 A, T2 B 에서 A와 B는 별칭이다.


= 4개

 

 

[22년 1회]

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

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

ORDER BY (  ): 순서를 정렬해라. ( ) 기준으로
ASC : 오름차순 (생략가능)
DESC : 내림차순

성적테이블의 score 가 내림차순 되어있다.
내림차순 : 큰 수 → 작은 수 (점점 작아짐)
오름차순 : 작은 수 → 큰 수 (점점 커짐)

 

 

[22년 2회]

3. H회사의 전체 제품 단가 보다 큰 제품 출력을 하고자 한다. 괄호안에 들어갈 알맞는 용어를 작성하시오.

SELECT 제조사, 제품명, 단가
FROM 제품
WHERE 단가 > (     ) (SELECT 단가 FROM 제품 WHERE 제조사='H')
답: ALL
                               

ALL : 모든 조건 만족
 - 나머지 전부보다 커야함, 최대값(MAX)보다 큰지 확인

ANY : 하나라도 만족
 - 그중 누구라도 하나보다만 크면 됨, 최소값(MIN)보다 큰지 확인

IN : 목록에 포함
 - 이 리스트 안에 있는 값이랑 똑같아야함, OR연산의 반복

EXISTS : 서브쿼리의 결과가 존재하는지만 확인
DISTINCT : 중복 제거

그룹 함수
 - COUNT( ) : 개수
 - SUM( ) : 합계
 - AVG( ) : 평균
 - MAX( ) / MIN( ) : 최대/최소

 

 

[22년 2회]

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

SELECT count(col2)
FROM TABLE
WHERE col1 in(2,3) or col2 in(3,5);
답: 4
                               

COUNT : NULL 값을 제외하고 개수를 세림
                               

col1 in(2,3)


col2 in(3,5)


WHERE col1 in(2,3) or col2 in(3,5)

                               

SELECT count(col2)
= 4개

 

 

[22년 3회]

7. 아래 데이터 명령어를 적용할 경우 알맞는 출력값을 작성하시오.​

CREATE TABLE 부서 (
    부서코드 int,
    부서명 varchar(50),
    PRIMARY KEY (부서코드),
    FOREIGN KEY (부서코드)
        REFERENCES 직원(부서코드)
        ON DELETE CASCADE
);
CREATE TABLE 직원 (
    직원코드 int,
    부서코드 int,
    PRIMARY KEY (직원코드),
    FOREIGN KEY (부서코드)
        REFERENCES 부서(부서코드)
);
INSERT INTO 부서 (부서코드, 부서명) VALUES (10, '영업부');
INSERT INTO 부서 (부서코드, 부서명) VALUES (20, '기획부');
INSERT INTO 부서 (부서코드, 부서명) VALUES (30, '개발부');
INSERT INTO 직원 (직원코드, 부서코드) VALUES (1000, 10);
INSERT INTO 직원 (직원코드, 부서코드) VALUES (2000, 10);
INSERT INTO 직원 (직원코드, 부서코드) VALUES (3000, 20);
INSERT INTO 직원 (직원코드, 부서코드) VALUES (4000, 20);
INSERT INTO 직원 (직원코드, 부서코드) VALUES (5000, 20);
INSERT INTO 직원 (직원코드, 부서코드) VALUES (6000, 30);
INSERT INTO 직원 (직원코드, 부서코드) VALUES (7000, 30);
( 1 )
SELECT DISTINCT COUNT(직원코드)
FROM 직원
WHERE 부서코드 = '20';

( 2 )
DELETE FROM 부서
WHERE 부서코드 = '20';
SELECT DISTINCT COUNT(직원코드)
FROM 직원;
답:
(1) : 3
(2) : 4
                               

                               
(1)
SELECT DISTINCT COUNT(직원코드)
FROM 직원
WHERE 부서코드 = '20';

→ 부서코드 20에 있는 직원코드 중 중복이 없으므로 세리면(COUNT) = 3


( 2 )
DELETE FROM 부서
WHERE 부서코드 = '20';
SELECT DISTINCT COUNT(직원코드)
FROM 직원;

→ 빨간색 글자는 삭제, ON DELETE CASCADE 이므로 직원 테이블에서도 삭제
→ 직원 코드에 남은 것은 중복을 제외하고 = 4

 

 

[22년 3회]

12. STUDENT 테이블에서 컴퓨터과 학생 50명, 전기과 학생 100명, 인터넷과 학생 50명의 정보가 저장되어 있을 때, 다음 SQL문의 실행 결과에 따른 튜플의 수는? (단, DEPT 칼럼은 학과명이다.)

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

 

 

[23년 1회]

13. [학생] 테이블에서 학생 이름이 '민수'인 튜플을 삭제하는 쿼리를 작성하시오.

[조건]
- 컬럼의 값이 문자열일 경우 작은 따옴표 ('  ')를 표시하시오.
- SQL 마지막에 세미콜론(;)은 표기하지 않아도 관계 없습니다.
답: DELETE FROM 학생 WHERE 이름 = '민수';

[학생] 테이블에서 학생 이름이 '민수'인 튜플을 삭제
튜플을 삭제 : DELETE

[학생] 테이블에서 : FROM 학생
학생 이름이 '민수'인 : WHERE 이름 = '민수'

 

 

[23년 1회]

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

[조건]
- where사용하지 말하야 한다.
- SELECT절에 별칭을 사용하여 작성해야 한다.
- SQL 구문 마지막에 세미콜론 생락 가능하다.
- 반드시 GROUP BY와 having을 사용해야 한다.
- 집계함수를 사용해야 한다.
답:
SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수
FROM 성적
GROUP BY 과목이름
HAVING AVG(점수) >= 90
                               

성적 테이블에서 과목별 점수의 평균이 90점 이상인 '과목이름', '최소점수', '최대점수' 를 검색

검색 : SELECT 
'과목이름', '최소점수', '최대점수' 를 검색 : SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수
 - 결과에 이름 값이 별칭(AS)으로 되어있기 때문에 그에 맞춘다.

성적 테이블에서 : FROM 성적

과목별 점수의 평균이 90점 이상 (조건절)
 - GROUP BY 절을 사용하라고 했으므로 조건절을 그에 맞춘다.
 : GROUP BY 과목이름
 : HAVING AVG(점수) >= 90

 

 

[23년 2회]

4. 다음은 테이블에 데이터를 삽입하기 위한 과정이다. 보기의 조건식에 맞게 데이터 삽입을 위한 SQL문을 작성하시오.

CREATE TABLE 학생 (
  학번 int,
  이름 varchar(20),
  학년 int,
  전공 varchar(30),
  전화번호varchar(20)
);
[결과값]
학번 이름 학년 전공 전화번호
9830287 뉴진스 3 경영학개론 010-1234-1234
답: INSTER INTO 학생(학번,이름,학년,전공,전화번호) VALUES(9830287,'뉴진스',3,'경영학개론','010-1234-1234');
                               

INSERT INTO 테이블명 (컬럼1, 컬럼2, ...) VALUES (값1, 값2, ...);

 

 

[24년 1회]

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

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

답:

                               

SELECT B
FROM R1
→ B를 선택
→ R1 테이블에서


WHERE C IN (SELECT C FROM R2 WHERE D="k");
SELECT C FROM R2 : R2 테이블에서 C선택
WHERE D="k" : D에서 "k" 인것만 선택
WHERE C IN : C에서 두번째 SELECT에서 선택된 것만 선택

최종적으로 B셀 선택

※ 파란색 → 녹색 → 주황색 → 노란색으로 읽을 수 있다.

 

 

[24년 1회]

18. 아래의 SQL 코드와 테이블을 참고하여 결과 값을 작성하시오.

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


→ 1개만 선택된다. COUNT(*) 이므로, 출력값은 1
→ ※ or 먼저한 뒤에 and를 한다.

 

 

[24년 3회]

3. 아래의 employee테이블과 project테이블을 참고하여 보기의 SQL명령어에 알맞는 출력값을 작성하시오.

[보기]
SELECT COUNT(*)
FROM employee AS e
JOIN project AS p
   ON e.project_id = p.project_id
WHERE p.name IN( 
   SELECT name
   FROM project
   WHERE project_id IN(
      SELECT project_id
      FROM employee
      GROUP BY project_id
      HAVING COUNT(*) < 2
답: 1
                               

 

 

[25년 1회]

7. 다음은 SQL 문제이다. 아래 두 테이블을 참고하여 보기에 쿼리 실행 결과를 작성하시오.

[보기] SELECT name, incentive FROM emp, sal WHERE emp.id=sal.id And incentives>=500
답:

                               



'파란색 → 주황색 → 초록색' 순으로 생각하면 쉽다.

 

 

[25년 3회]

10. 다음은 테이블에서 조건값을 실행한 화면이다. 이에 대한 알맞는 결과값을 작성하시오.

답: 4
                               

SELECT COUNT(*) CNT
→ 아래의 조건에 일치하는 행의 개수를 세어서 CNT라는 이름으로 출력
※행의 개수 = COUNT(*)


FROM T1 A CROSS JOIN T2 B
※ CROSS JOIN : 모든 가능한 조합을 만드는 조인
※ T1 A : T1 테이블을 A라고 표현하겠다.

→ T1의 행의 수 : 3개
→ T2의 행의 수 : 2개
→ 즉, 총 6개(2x3)의 데이터 쌍이 만들어짐


WHERE A.NAME LIKE B.RULE
→ 조건. A 테이블의 NAME 과 B 테이블의 RULE 가 일치(LIKE) 하는 것


즉, 4개가 일치한다.
                               

※ LIKE 연산자의 특수 문자
s%: 's'로 시작하는 모든 것 (예: smith, scott, sun)
%s: 's'로 끝나는 모든 것 (예: bus, lens)
%s%: 's'가 어디든 포함된 것 (예: asset, bus, smith)
s_: 's'로 시작하는 딱 2글자 (예: so, si)

※JOIN의 종류
INNER JOIN : 조건에 맞는 교집합만 추출
LEFT OUTER JOIN: 왼쪽 테이블 전체 + 오른쪽 일치 항목
CROSS JOIN : 모든 경우의 수 (카테시안 곱)
 

[25년 3회]

20. 다음은SQL에 관한 문제이다.아래A테이블을 참고하여 쿼리의 결과를 작성하시오.

[SQL] 
SELECT count(col2) FROM A WHERE col1 IN (2, 3) OR col2 IN (3, 5)
답: 4
                               

SQL의 역순으로 본다.

[조건]
WHERE col1 IN (2, 3) OR col2 IN (3, 5)
col1 IN (2, 3)


col2 IN (3, 5)


col1 IN (2, 3) OR col2 IN (3, 5)

→ OR(또는) 이므로 모두 포함된다.

[테이블]
FROM A

[출력]
SELECT count(col2)
※ COUNT(*): 조건에 맞는 모든 행의 개수를 셉니다 (NULL 포함).
※ COUNT(컬럼명): 해당 컬럼의 값이 NULL이 아닌 행의 개수만 셉니다.

→ NULL이 아닌 값을 세므로, 4개가 나온다.

 

 

[26년 1회]

10. 아래는 선수(PLAYER) 정보를 관리하는 테이블을 정의하는 SQL 문이다. 팀(TEAM) 테이블의 특정 칼럼을 참조하는 외래키 제약 조건을 추가하려 할 때, 괄호 ①~⑤에 들어갈 적절한 예약어(keyword) 또는 칼럼명을 아래 조건을 참고하여 쓰시오.

[조건]
외래키 제약 조건의 이름은 TEAM_TF 로 지정한다.
PLAYER 테이블의 TEAM_ID 칼럼이 외래키 역할을 한다.
TEAM 테이블의 TEAM_ID2 칼럼을 참조 대상으로 한다.
[SQL 문]
CREATE TABLE PLAYER (
  PLAYER_ID  CHAR(7)     NOT NULL,
  PLAYER_NAME VARCHAR2(20) NOT NULL,
  TEAM_ID   CHAR(3)     NOT NULL,
  PRIMARY KEY (PLAYER_ID),
  ( 1 ) TEAM_TF
  ( 2 ) KEY ( 3 )
  ( 4 ) TEAM ( 5 )
);
답: 
1. CONSTRAINT
2. FOREIGN
3. TEAM_ID
4. REFERENCES
5. TEAM_ID2

 

 

[26년 1회]
18. 다음은 SQL에 대한 문제이다. 아래 코드를 확인하여 알맞는 출력값을 작성하시오.

SELECT COUNT(*)
FROM employee e
JOIN dept d ON e.dep_id = d.dept_id
WHERE d.budget > (
    SELECT AVG(budget) FROM dept
);
답: 2