본문 바로가기
6. 국가기술자격 모음/[정보기술]정보처리기사

[정보처리기사] 데이터베이스 - SQL

by cogito21_cpp 2024. 10. 11.
반응형

1. 분석 및 키워드

학습목표

1) 관계형 데이터베이스에서 SQL을 사용하여 응용시스템의 요구 기능에 적합한 데이터를 정의하고 조작하며 제어할 수 있어야 한다.

 

Keyword

- DDL, DML, DCL, 트랜잭션, 프로시저, 사용자 정의 함수, 트리거, 데이터 분석 함수, 집계함수, 그룹 함수, 윈도 함수

 

빈출용어 및 개념

- 생성, 수정, 삭제, 조회, SELECT ... FROM ... WHERE(조건) GROUP BY ... HAVING ... ORDER BY ..., CREATE TABLE, ALTER TABLE

 

출제정답(2020년 이후)

년도 3회 2회 1회
2024년   3번
(SELECT, FROM, VALUES, SET)

4번
(카디널리티와 디그리 값 구하기)
13번
(출력값 작성)

18번
(SELECT 결과값)
2023년 8번
(UNION 출력결과)
4번
(데이터삽입 쿼리문: insert into, values)

17번
(참조된 뷰 연속 삭제: cascade)
15번
(SQL작성: DELETE, WHERE)

16번
(SQL작성: SELECT, MIN, MAX, FROM, GROUP BY, HAVING, AVG)
2022년 7번
(SQL결과: CREATE TABLE, PRIMARY KEY, FOREIGN KEY, REFERENCES, INSERT INTO, VALUE)

12번
(SQL결과: SELECT, DISTINCT, FROM, COUNT, WHERE)
3번
(SQL작성: SELECT, FROM, WHERE, ALL)

4번
(SQL결과: SELECT, COUNT, FROM, WHERE, IN, OR)

12번
(π TTL 연산 결과값)
4번
(SQL작성: SELECT, FROM, ORDER BY, DESC)
2021년 10번
(SQL결과: SELECT, COUNT, FROM, CROSS JOIN, WHERE, LIKE)
5번
(SQL작성: UPDATE, SET, WHERE)

6번
(SQL작성: SELECT, FROM, LEFT, ON)

10번
(SQL작성: SELECT, FROM, WHERE, LIKE, ORDER BY, DESC)

6번
(SQL결과)

14번
(카디널리티, 디그리 값 구하기)
2020년 3번
(SQL작성: DELETE FROM, WHERE)

9번
(SQL작성: SELECT, MIN, MAX, FROM, GROUP BY, HAVING, AVG)

20번
(SQL작성: ALTER TABLE, ADD, VARCHAR(2))

--- 4회 ---

9번
(SQL작성: SELECT, COUNT, FROM, GROUP BY)
6번
(SQL작성: SELECT, FROM, WHERE)

12번
(SQL인덱스생성: CREATE INDEX, ON)
17번
(SQL결과: SELECT, DISTINCT, FROM, COUNT, WHERE)

 

 

2. 이론 

1) DDL 명령어

 

 

2) DML 명령어

 

3) DCL 명령어

- GRANT(권한부여)

GRANT 권한 ON 테이블 TO 사용자;

- REVOKE(권한회수)

REVOKE 권한 ON 테이블 FROM 사용자;

 

4) 다중행 연산자

- 다중 행 연산자는 서브 쿼리의 결과가 여러 개의 튜플을 반환하는 다중 행 서브쿼리에서 사용되는 연산자.

- 다중 행 비교 연산자는 단일 행 비교 연산자와 결합하여 사용

- IN, ANY ALL, EXISTS

 

5) 집계함수

COUNT 복수 행의 줄 수 를 반환하는 함수
SUM 복수 행의 해당 컬럼 간의 합계를 계싼하는 함수
AVG 복수 행의 해당 컬럼 감의 평균을 계산하는 함수
MAX 복수 행의 해당 컬럼 중 최댓값을 계산하는 함수
MIN 복수 행의 해당 컬럼 중 최솟값을 계산하는 함수
STDDEV 복수 행의 해당 컬럼 간의 표준편차를 계산하는 함수
VARIANCE 복수 행의 해당 컬럼 간의 분산을 계산하는 함수

 

6) SQL 최적화

- 절차형 SQL(Procedural SQL): 절차 지향적인 프로그램이 가능하도록 하는 트랜잭션 언어

- 절차형 SQL 종류: 프로시저(쿼리의 집합)/사용자정의 함수(결과를 단일 값으로 반환)/트리거(이벤트 발생시 작업 자동 수행)

- 튜닝: 데이터베이스에서 프로시저에 있는 SQL 실행 계획을 분석, 수정을 통해 최소으 ㅣ시간으로 원하는 결과를 얻도록 프로시저를 수정하는 작업

- 옵티마이저: SQL을 가장 빠르고 효율적으로 수행할 최적의 처리경로를 생성해주는 DBMS 내부의 핵심엔진

- 옵디마이저 유형: RBO(규칙기반 옵티마이저) /CBO(비용기반 옵티마이저)

 

3. 최신기출

2024년 2회

[2024년 2회] 3번

- 빈칸에 적절한 답을 작성하시오.

1) 신입 사원을 사원 테이블에 추가

INSERT INTO 사원 (사원번호, 이름, 주소, 부서)   [      가     ] (12345, '김길동', '서울', '영업');


2) 위에 추가한 신입사원을 부서 테이블에 추가

INSERT INTO 부서 (사원번호, 이름, 나이, 부서)

[    나    ] 사원번호, 이름, 나이, 23 FROM 사원 WHERE 이름 = '김길동';


3) 전체 사원 테이블 조회: 

SELECT  *   [    다   ]   사원;

4) 추가한 신입사원을 '퇴사'로 변경

UPDATE 사원   [      라    ]   부서  =  '퇴사'  WHERE 사원번호  = 12345;

 

답: (가) VALUES (나) SELECT (다) FROM (라) SET

 

[2024년 2회] 4번

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

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

 

답: 카디널리티(5) 디그리(4)


2024년 1회

 

[2024년 1회] 13번

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

<R1 테이블>

A B C
1 a x
2 b x
1 c w
3 d w

<R2 테이블>

C D E
x k 3
y k 3
z s 2

<SQL문>

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

 

답:

B
a
b

 

[2024년 1회] 18번

- SQL문과 테이블을 참고하여 출력값을 작성하시오.

EMPNO SAL
100 1000
200 3000
300 1500

<SQL문>

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

 

답: 1


2023년 3회

[2023년 3회] 8번

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

<t1 테이블>

A
3
1
4

<t2 테이블>

A
2
4
3

<SQL문>

SELECT A FROM t1 UNION SELECT A FROM t2 ORDER BY A DESC;

 

답:

A
4
3
2
1

2023년 2회

[2023년 2회] 4번

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

학번: 0012345
이름: 김철수
학년: 4
과목명: 외교학개론
전화번호: 010-1234-5678

 

답: INSERT INTO 학생 VALUES (0012345, '김철수', 4, '외교학개론', '010-1234-5678');

 

[2023년 2회] 17번

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

DROP VIEW 뷰이름 (가);

 

답: (가) CASCADE


2023년 1회

[2023년 1회] 15번

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

 

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

 

[2023년 1회] 16번

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

 

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


2022년 3회

[2022년 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);

<SQL문>

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

 

답: (1) 3 (2) 4

 

[2022년 3회] 12번

- 학생 테이블에 컴퓨터학과 학생이 50명, 전기과 학생이 100명, 인터넷과 학생이 50명이 있다고 할 때, 다음 SQL문의 실행 결과로 표시되는 튜플의 수를 쓰시오.(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


2022년 2회

[2022년 2회] 3번

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

<상품 테이블>

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

<SQL문>

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

 

답: ALL

 

[2022년 2회] 4번

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

INDEX col1 col2
1 2 NULL
2 3 6
3 5 5
4 6 3
5 NULL 3

<SQL문>

SELECT COUNT(col2) FROM TABLE WHERE col1 IN (2, 3) OR col2 IN (3, 5);

 

답: 4

 

[2022년 2회] 12번

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

<employee 테이블>

INDEX AGE TTL
1 55 부장
2 35 대리
3 42 과장
4 45 차장

<결과>

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

 

답: (1) TTL (2) 부장 (3) 대리 (4) 과장 (5) 차장


2022년 1회

[2022년 1회] 4번

- 다음은 성적 테이블에서 이름(name)과 점수(score)를 조회하고 점수를 기준으로 내림차순 정렬하여 조회하는 SQL문이다. 괄호에 알맞은 답을 쓰시오.

<성적 테이블>

name class score
A 85
C 74
C 95
A 90
B 82

<SQL문>

SELECT name, score FROM 성적 (1) BY (2) (3)

 

답: (1) ORDER (2) score (3) DESC


2021년 3회

[2021년 3회] 10번

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

<A 테이블>

NAME
smith
allen
scott

<B 테이블>

RULE
s%
%t%

 

<SQL문>

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

 

답: 4

 


2021년 2회

[2021년 2회] 5번

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

<학부생 테이블>

학부 학과번호 입학생수 담당관
정경대학 110 300
공과대한 310 250
인문대학 120 400
정경대학 120 300
인문대학 420 180

<SQL문>

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

 

답: (가) UPDATE (나) SET

 

[2021년 2회] 6번

- 다음 사원 테이블과 동아리 테이블을 조인한 결과를 확인하여 SQL문의 괄호에 알맞은 답을 쓰시오.

<사원 테이블>

코드 이름 부서
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) 코드

 

[2021년 2회] 10번

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

<회원 테이블>

회원번호 이름 성별 가입일
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


2021년 1회

[2021년 1회] 6번

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

<EMP_TBL>

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

 

답: 1

 

[2021년 1회] 14번

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

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

 

답: 카디널리티(5) 디그리(4)


2020년 4회

[2020년 4회] 9번

- 학생 테이블에서 학과별 튜플의 개수를 구하는 SQL문을 작성하시오.

<학생 테이블>

학번 이름 학년 학과 주소
123 2 전기 서울
124 3 컴퓨터 대구
125 1 전자 부산
126 3 전자 광주
127 4 컴퓨터 울산

<결과>

학과 학과별 튜플수
전기 1
전자 2
컴퓨터 2
<처리조건>
WHERE 조건절은 사용할 수 없다.
GROUP BY는 반드시 포함한다.
집계함수를 적용한다.
학과별 튜플수 컬럼이름 출력에 AS를 활용한다.
문장 끝의 세미콜론은 생략해도 된다.
인용부호 사용이 필요한 경우 단일 따옴표를 사용한다.

 

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


2020년 3회

[2020년 3회] 3번

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

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

 

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

 

[2020년 3회] 9번

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

<성적 테이블>

학번 과목번호 과목이름 학점 점수
123 101 컴퓨터구조 6 95
124 101 컴퓨터구조 6 84
125 302 데이터베이스 5 89
126 201 인공지능 5 92
127 302 데이터베이스 5 100
128 302 데이터베이스 5 88
129 201 인공지능 5 93

<결과>

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

 

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

 

[2020년 3회] 20번

- 학생 테이블에 대해 20자의 가변 길이를 가진 '주소' 속성을 추가하는 SQL문을 완성하시오.

<SQL문>

(가) TABLE 학생 (나) 주소 VARCHAR(20);

 

답: (가) ALTER (나) ADD


2020년 2회

[2020년 2회] 6번

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

<학생 테이블>

학번 이름 학년 수강과목 점수 연락처
123 3 세무행정 4.5 010-3324-5678
124 2 토목개론 3 010-1326-4796
125 4 실용법학 3.5 010-1252-2435
126 1 데이터론 2 010-1693-1296
<처리조건>
3, 4학년의 학번, 이름을 조회한다.
IN 예약어를 사용해야 한다.
속성명 아래의 괄호는 속성의 자료형을 의미한다.

 

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

 

[2020년 2회] 12번

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

<학생 테이블>

student_id name score depth_id
2001 brown 85 PE01
2002 white 45 EF03
2003 black 67 UW11

 

답: CREATE INDEX idx_name ON student(name);


2020년 1회

[2020년 1회] 17번

- 학생 테이블에 전기과 학생이 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 (1) 1


 

반응형