[SQL] 2017-2019 프로그래밍 문제 모음

목차

https://ss-o.tistory.com/149

* 위 게시글을 바탕으로 코드 정리를 하였습니다.


SQL문

1. 데이터베이스와 관련된 다음 <처리 조건>에 부합하는 SQL문을 작성하시오. (2017년 1회)

<처리 조건>

1. 테이블명은 학생으로 정의한다.

2. 학생 테이블의 구조는 다음과 같다.

속성명 데이터타입 비고
학번 INT PRIMART KEY
성명 VARCHAR(20)  
학년 INT  
과목 VARCHAR(20)  
연락처 VARCHAR(20)  

3. 학생 테이블에 학번이 98170823, 성명이 '한국산', 학년이 3, 과목이 '경영학개론, 연락처가 '?-1234-1234'인 학생의 정보를 입력하시오.

4. 문자형은 싱글(작은)따옴표로 입력하고 문장의 끝에는 세미클론(;)를 반드시 표기하시오. 


답안

더보기

INSERT INTO 학생 VALUES (98170823, '한국산', 3, '경영학개론',  '?-1234-1234');

 

2. 데이터베이스와 관련한 다음 <처리 조건>에 부합하는 SQL문을 작성하시오. (2017년 2회)

<처리조건>

1. 학생 테이블에서 이름이 Scott인 튜블을 삭제하시오.

2. 문자형은 싱글(작은)따옴표로 입력하고 문장의 끝에는 세미콜론(;)을 받드시 표기하시오.


답안

더보기

DELETE FROM 학생 WHERE 이름 ='Scott';

 

3. 데이터베이스와 관련한 다음 <처리조건>에 부합하도록 괄호 (①)~(④)를 채워 SQL문을 완성하시오. (2017년 3회)

<처리 조건>

1. 이름, 학번, 전공, 성별, 생년월일로 구성된 <학생> 테이블을 정의하는 SQL 문을 작성하시오. 단, 제약 조건은 다음과 같다. 

  • 이름은 NULL이 올 수 없고, 학번은 기본키다.
  • 전공은 <학과> 테이블의 학과코드를 참조하는 외래키로 사용된다.
  • <학과> 테이블에서 삭제가 일어나면 관련된 튜플들의 전공 값을 NULL로 만든다.
  • <학과> 테이블에서 학과코드가 변경되면 전공 값도 같은 값으로 변경한다. 
  • 생년월일은 1980-01-01 이후의 데이터만 저장할 수 있다.
  • 제약 조건의 이름은 '생년월일제약'으로 한다.
  • 각 속성의 데이터형은 적당하게 지정한다. 단 성별은 도메인 'SEX'를 사용한다. 

2. SQL문의 문법은 ISO/IEC 9075 표준을 따른다. 

CREATE TABLE 학생
    이름 VARCHAR(15) ( ① ),
    학번 CHAR(8),
    전공 CHAR(5),
    성별 SEX, 
    생년월일 DATE,
    ( ② ) KEY(학번),
    ( ③ ) KEY(전공) ( ④ ) 학과(학과코드)
    	ON DELETE SET NULL
        ON UPDATE CASCADE,
    CONSTRAINT 생년월일제약
    	CHECK(생년월일 >= '1980-01-01'));

답안

더보기

① NOT NULL ② PRIMARY ③ FOREIGN ④ REFERENCES

해설

더보기
  • 테이블 정의 및 속성
    • 이름 VARCHAR(15) NOT NULL: 이름은 NULL을 허용하지 않는다.
    • 학번 CHAR(8): 학번은 길이가 8인 문자형이다.
    • 전공 CHAR(5): 전공은 길이가 5인 문자형이다.
    • 성별 SEX: 성별은 도메인 'SEX'를 사용한다. 'M' (남성) 또는 'F' (여성)만 허용한다.
    • 생년월일 DATE: 생년월일은 날짜형이다.
  • 기본 키
    • PRIMARY KEY (학번): 학번을 기본키로 설정한다.
  • 외래 키
    • FOREIGN KEY (전공) REFERENCES 학과(학과코드): 전공은 학과 테이블의 학과코드를 참조한다.
    • ON DELETE SET NULL: 학과 테이블에서 삭제가 발생하면 전공 값을 NULL로 설정한다.
    • ON UPDATE CASCADE: 학과 테이블의 학과코드가 변경되면 전공 값도 같은 값으로 변경한다.
  • 제약 조건
    • CONSTRAINT 생년월일제약 CHECK (생년월일 >= '1980-01-01'): 생년월일은 1980-01-01 이후의 데이터만 저장한다.

 

4. 다음 <처리 조건>에 유의하여 <학생> 테이블에 대한 알맞은 SQL문을 작성하시오. (2018년 1회)

<학생>

학생 이름 학년 수강과목 점수 연락처
180101 김기사 1 데이터베이스 90 123-4567
180102 박산업 2 전자계산기 80 234-5678
180103 최사무 3 정보통신 98 345-6789
180104 조합격 4 시스템분석 85 456-7890

<처리 조건>

1. 학생 테이블에서 3학년4학년 학생의 학번이름을 검색하는 SQL문을 작성하시오.

2. 원소 함수 IN 을 사용하시오. (원소 함수 IN(value1, value2, ...)

3. SQL문의 끝에는 세미콜론(;)으로 표시하시오.


답안

더보기

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

 

5. <학생> 테이블에 최대 3문자로 구성되는 학년 속성을 추가하는 SQL문의 괄호 (), ()를 채워 SQL문을 완성하시오. (2018년 2회)

<SQL문>

( ) TABLE 학생 ( ) 학생 VARCHAR(3);

답안

더보기

 ① ALTER ② ADD 

 

6. <학생> 테이블을 참고하여 다음의 각 질문에서 요구하는 답을 쓰시오. (2018년 3회)

<학생>

학번 이름  학년
16212060 이해준 1
15212066 조은별 3
15212022 박지영 2
13212031 양세옥 4
14212054 이범용 2
12212001 곽광진 1
13212052 김태균 3

(1) 다음 SQL문의 실행 결과로 표시되는 레코드의 개수를 쓰시오.

SELECT COUNT(*) FROM 학생 WHERE 학년 = 4;

(2) <학생> 테이블에서 이름이 '이'로 시작하는 학생들의 학번을 검색하되, 학년을 기준으로 내림차순으로 출력하는 SQL문을 쓰시오. 


답안

더보기

(1) 1 (2) SELECT 학번 FROM 학생 WHERE 이름 LIKE '이%' ORDER BY 학년 DESC; 

 

7. 다음 <SCORE> 테이블에 대해 <SQL>을 수행한 결과를 적으시오. (2019년 2회)

<SCORE>

DEPT DB TERM ALGO
001 100 NULL 100
002 NULL NULL 0
003 100 100 200
SELECT SUM(DB) FROM SCORE;
SELECT SUM(TERM) FROM SCORE;
SELECT SUM(ALGO) FROM SCORE;

답안

더보기

200, 100, 300

*SQL문은 3개인데, 답란은 1개이다. 답안 작성에 대한 별도의 조건이 제시되지 않았으므로 각 SQL문의 결과를 구분할 수 있도록 작성하면 된다. 

 

8. 데이터베이스와 관련한 다음 <처리 조건>에 부합하는 SQL문을 작성하시오. (2019년 2회)

*1번 문제와 유사한 문제 (2017년 1회)

<처리조건>

1. 테이블명은 학생으로 정의한다.

2. 학생 테이블의 구조는 다음과 같다.

속성명 데이터타입 비고
학번 INT PRIMARY KEY
성명 VARCHAR(20)  
학년  INT  
과목 VARCHAR(20)  
연락처 VARCHAR(20)  

3. 학생 테이블에 학번이 193739, 성명이 '홍길동', 학년이 3, 과목이 '경영학개론', 연락처가 '010-1234-5678'인 학생의 정보를 입력하시오. 

4. 문자형은 싱글따옴표를 입력하고 문장의 끝에는 세미콜론(;)을 반드시 표기하시오.


답안

더보기

INSERT INTO 학생 VALUES(193739, '홍길동', 3, '경영학개론', '010-1234-5678');