https://www.sql-practice.com/ 사이트를 통해 실전연습!

[실습 1] INNER JOIN
1) 입원한 적 있는 환자의 정보만 조회를 해주세요.
힌트) patients, admissions 테이블 활용
2) 아래 조건을 만족하는 결과를 조회하세요
● 실제로 입원한 환자만
● 실제로 담당 의사가 배정된 경우만
● 환자 이름과 진단명, 의사 specialty 출력
: JOIN은 “기존 테이블 + 새로운 테이블을 연결”하는 개념
: FROM patients로 기준 테이블로 사용했기 같은 테이블을 또 붙이려는 상황이 되어버림
: ON 조건에서는 이미 등장한 테이블만 사용 가능
: 아직 JOIN 안 한 테이블은 참조 불가
[실습2] LEFT JOIN
1) 모든 환자의 입원 정보를 조회하세요. 입원하지 않은 환자도 포함하여 출력하세요.
- INNER JOIN과 다르게 입력이 없는 정보들은 NULL로 표시되서 출력됨.
2) 모든 의사의 배정된 환자의 입원 정보를 조회하세요. 의사가 환자를 진료한 적이 없어도 포함하세요.
[실습 3] JOIN + WHERE
1) patient 테이블을 기준으로 LEFT JOIN을 사용하여 모든 환자들의 정보 + 지역명을 가져오고 그 중에서 province_id = ‘AB’인 환자만 조회하세요.
‼️ 오류이유
: province_id가 같은 이름으로 patients와 province_names에 저장되어 있기 때문에
이런 경우는 테이블 명을 같이 적어줘야 함.
2) patients와 admissions를 INNER JOIN하여 입원 기록이 있는 환자만 대상이 되도록 하고, 그 중에서 진단명이 ‘Cancer’인 경우만 남기세요.
- 컬럼이 중복되지 않으면 'Cancer'만 적어도 되지만 '테이블명.컬럼명' 같이 적는 것을 습관으로 하자!
[실습 4] GROUP BY + HAVING / LIMIT
1) 환자를 지역(province_id)별로 그룹화하고, 그 지역 코드가 ‘NL’인
그룹만 조회하세요. [WHERE 사용 금지]
2) 의사 중 doctor_id가 offset이 10인 곳부터 10개의 행을 반환하세요.
[WHERE 사용 금지]
- LIMIT 개수;
- LIMIT offset, 개수;
강의를 들을 때 on 뒤에 어떤 테이블을 써야 하는지 어려웠었다.
강의 후 여러가지 방법으로 시도해보면서 FROM 뒤에 쓰이는 테이블이 기준 테이블이 된다는 것을 알았고, 이 개념이 이해되니 JOIN 값들이 왜 저렇게 나오는지 알 수 있었다.
역시... 많이 시도하고 틀려봐야 하나보다. 😭
게시한 실전문제는 강의시간에 강사님과 같이 진행한 문제들이었지만!
강의 시간 동안 잘 이해가 되지 않았어서 스스로에게 준 과제였다~