ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 🚩 20241231_수업내용()
    DW아카데미 개발자과정/24년 12월 2024. 12. 31. 12:49

    지난 수업 내용 ~*

     

    두 개의 테이블에서 조회하는 방법

    select * from student , department

     

    두 개 테이블에서 조건을 충복하는 데이터 조회

    <.> 접근연산자 - ~에 접근하겠다.

    select * from department, professor

    where department.dept_no= professor.dept_no ;

    두개의 테이블을 사용할 때는 테이블연결을 해줘야한다.

    두개의 테이블을 사용할 때는 각 테이블에서 연결시켜줄만한 컬럼을 찾아야한다

     

     

    order by (정렬하기)

    ordry by 기준이 될 컬럼명

     

    group by (그룹하기)

    - gtoup by 데이터들을 그룹화 목적으로 사용한다 

    그룹화는 데이터들이 그룹명으로 소송되는 이믜

    그룹과 상태ㅔ서는 일반적인 컬럼명으로 조회 불가

    함수를 이용해서 각 그룹별 데이터 조회가능

    그룹화는 count max min과 많이 사용함

    그룹화를 시키면 데이터를 하나씩 뽑아내는게 불가함

    ------ 그룹화가 필요한 이유는 데이터를 요약, 집계, 계산할 목적

    ------ 그룹화하여 데이터를 그룹별로 비교하거나 패턴 파악

     

    테이블 두개 이상 그룹화하려면 그룹에 데이터를 연결해줘야함

    동작(group by)이 되는 과정
    select 학과, avg(점수) from 학생 group by 학과;
    1. from - 학생 테이블에서 전체 데이터를 가져온다
    2. group by 학과
     ㄴ 학과 기준으로 데이터를 그룹화
     ex. 그룹1 컴공 { ( 1001, 1, 85 ) , (1003, 2, 80 ) }
        그룹2 정보과학과 { ( 1002, 1, 90 ) , (1004, 2, 75 ) }

    3. avg 함수 실행
     각 그룹의 평균 점수를 계산
    4. select 학과, avg(점수)로 데이터 출력
    학과-컴공 점수-82.5

    학과-정보과학과 점수-82

     

    👀 문제 풀어보기
    1. 강의테이블에서 요일별 시작시간의 평균을 구하세요.
    select day_week , avg(start_time)from lecturegroup by day_week;
    2. 교수 테이블에서 직급별로 가장 낮은 호봉 출력
    select grade , min(pay_step) from professorgroup by grade ;

    3. 학생 테이블과 등록 테이블에서 학년별 학생들이 수강한 과목수 출력

    select year, count(c_no) from student s , enrollment e where s.s_no=e.s_no group by s.year;

    정렬
    4. 학과별 평균 점수 출력
    select dept, avg(e.merits) as 평균점수from enrollment e , student s where e.s_no=s.s_nogroup by s.dept order by avg(평균점수) desc;
    높은 순서대로 정렬까지
    merits의 별명을 만들어 붙임
    5. 학년별 최고 점수
    6. 강의별 평균 점수

    * 조건 그룹화 문제
    1. 학년별 80점 이상 받은 학생수

    select s.year , count(e.s_no) as 학생수 from student s , enrollment e where s.s_no = e.s_no and e.merits >=80 group by s.year;

    2. 요일별 5명 이상 수강하는 강의수가 몇개?
    select l.day_week , count(distinct l.c_no)from lecture l , enrollment e where l.c_no =e.c_nogroup by l.day_week having count(e.s_no) >= 5;
    3. 강의실별 평균 점수가 78점 이상인 강의 수는?
    select l.room_no , count(distinct l.c_no)from lecture l , enrollment e where l.c_no=e.c_no group by l.room_no having avg(e.merits) >= 78;

     

Designed by Tistory.