Backend/Database

SQL - DML

땅지원 2020. 9. 21. 15:50

학생

 

학과

수강

교수

교과목 

강좌


----// 기본SFW, LIKE, ORDER BY, 기본 조인

-- [질의 1] : 교수들의 이름과 재직년수를 검색하라.
  -- 힌트) select절의 산술식
SELECT 이름, (2020-임용년도) AS "재직년수"
FROM 교수;

-- [질의 2] : 학생 '박광수'의 소속 학과명을 검색하라.(조인이용)
SELECT 학과.학과명
FROM 학생, 학과
WHERE 학생.학과번호 = 학과.학과번호 AND 학생.이름 = '박광수';


-- [질의 3] : 김모학생의 이름을 오름차순으로 출력하라.
SELECT 이름
FROM 학생
WHERE 이름 LIKE '김%'
ORDER BY 이름 ASC;

 
----// 집계함수, 부질의, 그룹, 집합연산


-- [질의 4] : 학번이 '01302-001'인 학생이 수강한 과목의 총 학점수를 출력라라.
SELECT SUM(교과목.학점수) AS "총 학점수"
FROM 교과목
WHERE 교과목.교과목번호 IN (SELECT 수강.교과목번호
                          FROM 수강, 학생
                          WHERE 학생.학번 = 수강.학번 AND 학생.학번 = '01302-001');


-- [질의 5] : 2019년 2학기에 개설된 강좌에 사용되는 강의실의 수를 검색하라.
  -- 힌트) distinct
SELECT COUNT(DISTINCT 강의실) AS "강의실의 수"
FROM 강좌
WHERE 연도 = 2019 AND 학기 = 2;


-- [질의 6] : 학생의 총 인원수를 출력하라.
SELECT COUNT(학번) AS "총 인원수"
FROM 학생;



-- [질의 7] 2019년 2학기에 각 학생별로 수강한 총학점수를 구하라.   
SELECT 학생.이름, 학생.학번, SUM(교과목.학점수) AS "총 학점수"
FROM 수강, 학생, 교과목
WHERE 교과목.교과목번호 = 수강.교과목번호 AND 수강.학번 = 학생.학번 AND 연도 = 2019 AND 학기 = 2
GROUP BY 학생.이름, 학생.학번;


-- [질의 8] 지금까지 두번 이상 강좌가 개설된 교과목의 번호와 지금까지의 수강인원의 합을 구하라.
SELECT 교과목번호,SUM(수강인원) AS "수강인원의 합"
FROM 강좌
GROUP BY 교과목번호 HAVING COUNT(교과목번호)>=2;


-- [질의 9] 학생 '박광수'의 소속 학과명을 검색하라.(부질의 이용)
SELECT 학과명
FROM 학과
WHERE 학과번호 = (SELECT 학과번호
                FROM 학생
                WHERE 이름 = '박광수');


-- [질의 10] 제일 어린 학생의 이름은?
SELECT 이름
FROM 학생
WHERE 나이 = (SELECT  MIN(나이)  FROM  학생);



-- [질의 11] 교수의 이름과 주소, 학생의 이름과 주소를 하나의 테이블로 출력하라.
  -- 힌트) 합집합
SELECT 이름, 주소 FROM 교수
UNION
SELECT 이름, 주소 FROM 학생;


-- [질의 12] 화일처리를 수강하지 않은 전산과 2학년 학생을 찾아라
  -- 힌트) 차집합

SELECT 학생.이름 
FROM 학생,학과
WHERE 학생.학과번호 = 학과.학과번호 AND 학생.학년 = '2' AND 학과.학과명 = '전산과'
MINUS 
SELECT 이름
FROM 수강, 학생
WHERE 수강.학번 = 학생.학번 AND 학생.학번 =( SELECT 학번
                                          FROM 교과목, 수강
                                          WHERE  교과목.교과목번호 = 수강.교과목번호 AND 교과목.교과목명 = '화일처리');