SQL (23.05.24)

·2023년 5월 24일
0

Coding Test

목록 보기
25/39
post-thumbnail

✏️ 문제 1

학생 이름과 주소지를 표시하시오. 단, 출력 헤더는 "학생 이름", "주소지"로 하고,
정렬은 이름으로 오름차순 표시하도록 한다.

  • 풀이
SELECT STUDENT_NAME "학생 이름", STUDENT_ADDRESS "주소지"
FROM TB_STUDENT
ORDER BY STUDENT_NAME;

✏️ 문제 2

휴학 중인 학생들의 이름과 주민번호를 나이가 적은 순서로 화면에 출력하시오.

  • 풀이
SELECT STUDENT_NAME, STUDENT_SSN
FROM TB_STUDENT
WHERE ABSENCE_YN = 'Y'
ORDER BY SYSDATE - TO_DATE(SUBSTR(STUDENT_SSN, 1, 6), 'RRMMDD');

✏️ 문제 3

주소지가 강원도나 경기도인 학생들 중 1900년대 학번을 가진 학생들의 이름과 학번, 주소를
이름의 오름차순으로 화면에 출력하시오. 단, 출력 헤더에는 "학생 이름", "학번", "거주지 주소"가
출력되도록 한다.

  • 풀이
SELECT STUDENT_NAME "학생 이름", STUDENT_NO "학번", STUDENT_ADDRESS "거주지 주소"
FROM TB_STUDENT
WHERE (STUDENT_ADDRESS LIKE '강원%'
OR STUDENT_ADDRESS LIKE '경기%')
AND STUDENT_NO LIKE '9%'
ORDER BY 1;

✏️ 문제 4

현재 법학과 교수 중 가장 나이가 많은 사람부터 이름을 확인할 수 있는 SQL 문장을 작성하시오.
(법학과의 '학과 코드'는 학과 테이블(TB_DEPARTMENT)을 조회해서 찾아내도록 하자.)

  • 풀이
SELECT PROFESSOR_NAME, PROFESSOR_SSN
FROM TB_PROFESSOR
JOIN TB_DEPARTMENT USING(DEPARTMENT_NO)
WHERE DEPARTMENT_NO = '005'
ORDER BY SYSDATE - TO_DATE(SUBSTR(PROFESSOR_SSN, 1, 6), 'YYMMDD') DESC;

✏️ 문제 5

2004년 2학기에 'C3118100' 과목을 수강한 학생들의 학점을 조회하려고 한다. 학점이
높은 학생부터 표시하고, 학점이 같으면 학번이 낮은 학생부터 표시하는 구문을 작성해 보시오.

  • 풀이
SELECT STUDENT_NO, TO_CHAR(POINT, 9.99) POINT
FROM TB_GRADE
WHERE TERM_NO = '200402'
AND CLASS_NO = 'C3118100'
ORDER BY 2 DESC;

✏️ 문제 6

학생 번호, 학생 이름, 학과 이름을 학생 이름으로 오름차순 정렬하여 출력하는
SQL문을 작성하시오.

  • 풀이
SELECT STUDENT_NO, STUDENT_NAME, DEPARTMENT_NAME
FROM TB_STUDENT
JOIN TB_DEPARTMENT USING(DEPARTMENT_NO)
ORDER BY 2;

✏️ 문제 7

춘 기술대학교의 과목 이름과 과목의 학과 이름을 출력하는 SQL 문장을 작성하시오.

  • 풀이
SELECT CLASS_NAME, DEPARTMENT_NAME
FROM TB_CLASS
JOIN TB_DEPARTMENT USING(DEPARTMENT_NO);

✏️ 문제 8

과목별 교수 이름을 찾으려고 한다. 과목 이름과 교수 이름을 출력하는 SQL문을 작성하시오.

  • 풀이(ANSI)
-- TB_CLASS와 TB_PROFESSOR 테이블이 공통으로
-- DEPARTMENT_NO 컬럼을 가지고 있다 해서 이를 이용해서 JOIN을 하면 안 됨
/*
TB_CLASS와 TB_PROFESSOR 테이블을 조회해 보면
같은 컬럼 값을 가지는 DEPARTMENT_NO가 많이 존재함
--> 이럴 경우
    TB_CLASS의 DEPARTMENT_NO와
    TB_PROFESSOR의 DEPARTMENT_NO 컬럼 값들이
    서로 연결되기 위한 모든 경우의 수를 만들어 냄 (곱집합이 되어 버림)
*/

SELECT CLASS_NAME, PROFESSOR_NAME
FROM TB_CLASS_PROFESSOR
JOIN TB_CLASS USING(CLASS_NO)
JOIN TB_PROFESSOR USING(PROFESSOR_NO);
  • 풀이(ORACLE)
SELECT CLASS_NAME, PROFESSOR_NAME
FROM TB_CLASS C , TB_CLASS_PROFESSOR CP, TB_PROFESSOR P
WHERE C.CLASS_NO = CP.CLASS_NO
AND CP.PROFESSOR_NO = P.PROFESSOR_NO;

✏️ 문제 9

8번의 결과 중 '인문사회' 계열에 속한 과목의 교수 이름을 찾으려고 한다.
이에 해당하는 과목 이름과 교수 이름을 출력하는 SQL문을 작성하시오.

  • 풀이(ANSI)
SELECT CLASS_NAME, PROFESSOR_NAME
FROM TB_CLASS_PROFESSOR
JOIN TB_CLASS C USING(CLASS_NO)
JOIN TB_PROFESSOR USING(PROFESSOR_NO)
JOIN TB_DEPARTMENT D ON(C.DEPARTMENT_NO = D.DEPARTMENT_NO)
WHERE CATEGORY = '인문사회';
  • 풀이(ORACLE)
SELECT CLASS_NAME, PROFESSOR_NAME
FROM TB_CLASS_PROFESSOR CP, TB_CLASS C, TB_PROFESSOR P, TB_DEPARTMENT D
WHERE CP.CLASS_NO = C.CLASS_NO
AND CP.PROFESSOR_NO = P.PROFESSOR_NO
AND C.DEPARTMENT_NO = D.DEPARTMENT_NO
AND CATEGORY = '인문사회';

✏️ 문제 10

'음악학과' 학생들의 평점을 구하려고 한다. 음악학과 학생들의 '학번', '학생 이름',
'전체 평점'을 출력하는 SQL 문장을 작성하시오. (단, 평점은 소수점 1 자리까지만 반올림하여 표시한다.)

  • 풀이
SELECT STUDENT_NO 학번, STUDENT_NAME "학생 이름", ROUND(AVG(POINT), 1) "전체 평점"
FROM TB_STUDENT
JOIN TB_GRADE USING(STUDENT_NO)
JOIN TB_DEPARTMENT USING(DEPARTMENT_NO)
WHERE DEPARTMENT_NAME = '음악학과'
GROUP BY STUDENT_NO, STUDENT_NAME
ORDER BY 1;
profile
풀스택 개발자 기록집 📁

0개의 댓글