ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 🚩 20250110_수업내용(복습-조건으로 조회하는 방법/join*limit/between)
    DW아카데미 개발자과정/25년 1월 2025. 1. 10. 13:16

    데이터베이스 문제 2회.pdf
    0.05MB
    데이터베이스 문제 3회.pdf
    0.05MB
    데이터베이스 문제 4회.pdf
    0.05MB


    오전 수업 ) 데이터베이스

    지난 수업 복습 - (조건으로 조회하는 방법)

    1. where 절 뒤에 조건식을 넣기

    select * from student where year=3;

     

    두 가지 조건 함께넣기 - 3학년이면서 서울에 사는

    select * from student where year=3 and s_address='서울';

     

    2. 조건이 두 개 이상인 경우 and, or을 사용

    - 2학년이며 주소지가 대전인 사람들 출력

    select * from student where year=2 and s_address ='대전';

     

    3. 제외 조건 NOT

    사는 곳이 서울이 아닌 학생들 출력

    select * from student where not s_address ='서울';

     

     

    4. 두 개 이상 테이블 조건으로 조회

    select * from student , enrollment where student.s_no = enrollment.s_no ;

    ㄴ 테이블명을 붙여줘야함

     

    select * from student , enrollment where student.s_no = enrollment.s_no and year=2;

    ㄴ or을 사용하게 되면 중복적인 여러 결과값이 나온다.

    select * from student , enrollment where student.s_no = enrollment.s_no and

    (year=2 and dept='컴퓨터공학과');

    ㄴ 추가적인 조건식이 필요할 땐 괄호로 구분해준다.

     

    4-1. 또다른 방법 (IN)

    select enrollment.* from student , enrollment

    where student.s_no = enrollment.s_no and (year=2);

    select * from enrollment where s_no

    in(select s_no from student where year=2);

    세 가지 다 같은 결과값을 줌

     

    5. 서브쿼리 또 다른 활용

    select *,

    (select s_name from student

    where s_no=9611035) as name

    from enrollment where merits>80;


    JOIN - 두 개 이상의 테이블을 결합하는 연산자

    1. join의 종류 - inner, outer

     

    inner - 두 테이블의 공통적인 값을 추림 (교집합 출력)

    · inner join : 두 테이블에서 같은 값만 조회

    · left join : 왼쪽 테이블을 기준으로 오른쪽 테이블과 매치 / 왼쪽 테이블의 한 개의 레코드에 여러 개의 오른쪽 테이블 레코드가 일치한 경우, 왼쪽 레코드 여러번 출력

    · right join : 오른쪽 테이블을 기준으로 왼쪽 테이블 매칭

    · full join : 전체 테이블 조회 (거의 존재 안함)

     

    select * from professor p

    inner join lecture l

    on p.p_no = l.p_no ;

     

    select * from professor p

    left join student s

    on p.p_no = s.advisor

    where s.year=2;

    추가적인 조건을 where로 걸어둠

     

     

    3개 테이블을 join 한다면?

    select s.s_name, e.merits, c.c_name

    from student s

    left join enrollment e

    on s.s_no=e.s_no

    left join course c

    on e.c_no =c.c_no

    where s.year=2;

    2학년 학생들의 과목

     

    - 함경수(null값) 를 없애기 위해서는?

    select s.s_name, e.merits, c.c_name

    from student s

    right join enrollment e

    on s.s_no=e.s_no

    left join course c

    on e.c_no =c.c_no

    where s.year=2;

     

    👀문제 풀어보기
    1. 4학년 학생들 중에서 85점 이상인 학생의 이름, 강의이름, 학점 출력
    select s_name, c_name, c.pointfrom student sleft join enrollment e on s.s_no =e.s_no left join course c on c.c_no = e.c_no where e.merits >= 85 and s.year=4;
    2. 4학년 학생들이 수강한 강의 담당 교수의 이름과, 학생 이름, 학과명 출력
    3. 컴퓨터구조 강좌를 수강한 학생의 이름과 담당교수, 학과 사무실 위치를 출력

    select s.s_name, p.p_name, d.location

    from student s

    left join enrollment e

    on s.s_no=e.s_no

    left join course c

    on e.c_no=c.c_no

    left join professor p

    on p.p_no=s.advisor

    left join department d

    on d.dept_name=s.dept

    where c.c_name='컴퓨터구조';


     

    linit - 제한

    레코드의 수를 제한한다

     

    offset - 어디서부터 ?

    3번에 위치한 데이터부터 5개를 불러와라 - 0번부터 시작함

     

    ',' 사용한 표현

     

     

    점수가 동점일 경우, 두 번째 기준으로 정렬시켜라

     

    between - 범위를 표현하고자 할 때

    교수들의 생일 범위를 지정하여 출력

    ㄴ 60년생부터 65년생까지의 교수 출력

     

     - 문자열로 조회할 땐 문자열 순서를 잘 생각해야함

     

     

Designed by Tistory.