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
'1-1. 국가기술자격 모음 > [정보기술]정보처리기사' 카테고리의 다른 글
[정보처리기사] 보안 (0) | 2024.10.11 |
---|---|
[정보처리기사] 데이터베이스 (0) | 2024.10.11 |
[정보처리기사] 프로그래밍언어 - Python (0) | 2024.10.11 |
[정보처리기사] 프로그래밍언어 - Java (3) | 2024.10.11 |
[정보처리기사] 프로그래밍언어 - C언어 (1) | 2024.10.11 |