17) 학생이 300번인 학생이 등록한 과목의 개수는?

    SELECT count(*)

    FROM enrol

    where sno='300'


    18) 과목 'C413'의 중간 평균은?

    SELECT avg(*)

    FROM enrol

    where cno='C413'


    19) 과목별 중간고사 평균

    SELECT cno, avg(*)

    FROM enrol

    GROUP BY cno; 


    여기서 새로운 내용, GROUP BY가 등장한다.

    GROUP BY 컬럼명 을 명시해주면 컬럼의 같은 내용끼리 묶어준다.

    주의점 : 집계함수와 다른 컬럼들을 같이 사용하고 싶다면 반드시 SELECT의 다른 컬럼들을 GROUP BY에 추가해주어야한다.


    WHERE -> 개별조건

    HAVING -> 그룹에 대한 조건(전체가 T거나 전체가 F이여야 한다.), 집계함수의 사용이 가능하다.


    20) 2명이상 등록한 과목의 중간 평균

    SELECT cno,avg(midterm)

    FROM enrol

    GROUP BY cno

    HAVING count(*) >= 2;


    21) 2명이상 등록한 과목의 과목번호, 과목명, 중간 평균?

    SELECT c.cno,cname,midterm

    FROM enrol e JOIN course c ON e.cno=c.cno

    GROUP BY c.cno, cname

    HAVAING count(*) >= 2


    22) 전체 과목의 기말고사의 평균이 80점 이상이면 그 기말 평균을 출력

    SELECT avg(final)

    FROM enrol

    HAVING avg(*) >= 80


    23) 학과가 컴퓨터이거나 전기 중, 학생수가 2명 이상인 학과의 학과명 학생 수를 학생수 높은 순으로 출력

    SELECT sdept, count(sno)

    FROM student

    WHERE sdept in ('컴퓨터', '전기')

    GROUP BY sdept

    HAVING count(*) >= 2

    ORDER BY 2 DESC;


    정리

    SELECT 컬럼명

    FROM 테이블 명

    WHERE 개별조건

    GROUP BY SELECT에 포함된 집계함수 외의 모든 컬럼

    HAVING 그룹조건, LIKE 사용가능(모두 T거나 모두 F가 될 수 있기 때문)

    ORDER BY 컬럼명 정렬방식


    SubQuery(부속 질의어)


    다른 질의어에 중첩되어 사용되는 검색문


    쓰는 방식

    1. ()안에 써야하고 제일 먼저 실행됨

    2. Order by를 사용하지 않는다.

    3. 외부 쿼리와 비교할 대상을 적절히 사용하여야 한다.


    24) 중간고사가 80점 이상인 자료중, 중간고사 평균이 90점 이상인 과목의 과목번호, 과목명, 평균중간고사를 높은순으로 출력

    SELECT cname,c.cno, avg(midterm)

    FROM enrol e JOIN course c ON e.cno=c.cno

    WHERE midterm >= 80

    GROUP BY cname, c.cno

    HAVING avg(midterm) >= 90

    ORDER BY 3 DESC


    [부속질의어로 어떻게 만들까?]


    25) 과목번호 'C413'을 동록한 학생의 이름

    SELECT sname

    FROM students JOIN enrol e ON s.sno=e.sno

    WHERE cno='C413'


    SELECT sname

    FROM student

    WHERE cno NOT IN (

    SELECT cno

    FROM course

    WHERE cno='C413'

    )


    26) '나수영'과 같은 학년인 학생의 이름과 그 학년을 출력

    SELECT sname, syeaer

    FROM student

    WHERE syear IN (

    SELECT syear

    FROM student

    where sname='나수영'

    )


    여기서 = 가 아닌 IN을 사용한 이유는 =는 NULL 값을 찾지 못하지만 IN은 모든 내용을 찾을 수 있기 때문!

    왠만하면 IN을 사용하도록 하자


    ' > 데이터베이스' 카테고리의 다른 글

    4. 데이터 베이스  (0) 2017.05.27
    3. 데이터 베이스  (0) 2017.05.21
    1. 데이터베이스  (0) 2017.05.14
    5. 데이터베이스  (0) 2017.04.19
    4. 데이터베이스  (0) 2017.04.09
    Posted by Config