서브쿼리 마지막 시간이다. 미션 문제까지 함께 풀어보려고 한다.
이론 3 - 위치에 따른 분류
일반 서브쿼리는 WHERE 절에 연결하는데 스칼라 서브쿼리는 SELECT 절에 연결한다. 그냥 JOIN을 쓰면 되지 왜 스칼라 서브쿼리를 쓸까? 데이터가 많을 때는 좀 더 빠르게 결과가 추출되기 때문이다.
다른 이름도 많기에 middle_avg라는 별명으로 찍어준다. 두 개의 테이블을 id를 기준으로 연결해준다. middle_test의 이름이 너무 길기에 m이라는 별칭을 지어주었고, where 절에서 이를 사용했다.
실습 8 - 스칼라 서브쿼리
1. 급여 평균 구하기
중복을 제거하고 급여 평균을 구하면 다음과 같다.
우리는 각 직원별 평균 급여를 구하려고 한다. 이럴 때 스칼라 서브쿼리를 사용한다. 먼저 메인 쿼리를 작성하고 그 안에 서브쿼리를 넣는다. 서브쿼리의 where 조건절에 두 개의 테이블을 비교하기 위해 A, B라는 별칭을 지어줄 것이다.
서브쿼리의 saleries를 A로, 메인쿼리의 saleries를 B라고 별칭을 지어준다. 그런 다음 서브쿼리를 괄호로 묶고 괄호 밖에 서브쿼리 전체 별칭을 avg_salary라고 이름을 붙여준다.
2. 조건에 따른 코드 추가하기
그런 다음 메인 쿼리의 SELECT 절에 있던 avg-salary를 지워준다. 각 직원별로 급여를 비교한 것이므로 A와 B의 조건이 같다고 해야 한다.
이렇게 각 직원별로 평균 급여를 구했다.
정말 어려운 문제였다. 그래도 이해를 했다는 게 신기했다.
퀴즈 3 - 위치에 따른 분류
어려운 문제였는데 잘 풀었다.
미션 - 중간고사 수학왕
1. 문제 분석하기
이 문제는 도저히 이해 조차도 되지 않는 너무 어려운 문제라 헬퍼의 도움을 받아보았다.
풀긴 풀었는데 계속 틀렸다고 나온다. 이 문제는 math_score라고 잘못 써서 발생한 오류였다. 이 문제는 도저히 혼자서 풀 수 없어서 헬퍼에게 물어보면서 풀었다.
이 코드를 해석하면 다음과 같다.
- students 테이블과 middle_test 테이블을 조인하여 학생의 정보와 중간고사 점수를 결합한다.
- WHERE 절에서 수학 과목의 점수를 필터링하고, 경민이의 수학 점수보다 높은 점수를 가진 학생들을 찾는다.
- 서브쿼리를 통해 경민이의 수학 점수를 가져와 비교한다.
이 쿼리를 실행하면 경민이보다 수학 점수가 높은 학생들의 정보를 얻을 수 있다.
2. 문제 풀기
실행까지는 어찌어찌 했는데 답은 틀렸다. 다시 풀어보기로 하자.
3. 다시 풀어보기
서브쿼리를 이용해서 경민이보다 높은 수학 점수를 기록한 학생이 1~3학년 중에 있는지 조회해야 하는데 이 문제를 빠뜨렸다.
이 문제도 10번도 넘게 코드를 수정했으나 도저히 풀리지 않아 그냥 넘어가기로 했다.
학습을 마치고
이렇게 해서 SQL 기초 학습을 모두 마쳤다. 5주 차에서도 미션 문제를 완수하지 못해 마음이 좀 언짢기도 했지만 스칼라 서브쿼리는 기초 과정이 아닌 고급 수준의 단원이라 지금은 풀지 못하는 게 당연하다.
다음에 실력이 쌓인 후에 다시 도전해볼 생각이다. 그때는 분명 풀 수 있을 것 같다.
'알고리즘 및 자료 관리 > SQL' 카테고리의 다른 글
실전용 SQL 미리 맛보기 4 - 데이터베이스 시작부터 끝까지 2 : 스스로 실습해보기 (0) | 2024.10.20 |
---|---|
SQL로 데이터 다루기 심화 수업 소개 및 MySQL 완전삭제 + 재설치 (0) | 2024.10.20 |
서브쿼리 3 - 반환에 따른 분류 2 : 다중행 서브쿼리 실습해보기 (0) | 2024.10.13 |
서브쿼리 2 - 반환에 따른 분류 1 : 단일 행 서브쿼리와 다중 행 서브쿼리 (0) | 2024.10.13 |
서브쿼리 1 - 서브쿼리에 대하여 (0) | 2024.10.13 |