관리 메뉴

클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

서브쿼리 4 - 위치에 따른 분류 및 미션 문제 풀기 본문

알고리즘 및 자료 관리/SQL

서브쿼리 4 - 위치에 따른 분류 및 미션 문제 풀기

huenuri 2024. 10. 13. 22:47

서브쿼리 마지막 시간이다. 미션 문제까지 함께 풀어보려고 한다.

 


 

 

 

 

이론 3 - 위치에 따른 분류

 

 

 

 

 

 

 일반 서브쿼리는 WHERE 절에 연결하는데 스칼라 서브쿼리는 SELECT 절에 연결한다. 그냥 JOIN을 쓰면 되지 왜 스칼라 서브쿼리를 쓸까? 데이터가 많을 때는 좀더 빠르게 결과가 추출되기 때문이다.

 

 

 

다른 이름도 많기에 middle_avg라는 별명으로 찍어준다. 두 개의 테이블을 id를 기준으로 연결해준다. middle_test의 이름이 너무 길기에 m이라는 별칭을 지어주었고, where 절에서 이를 사용했다.


 

 

 

 

 

실습 8 - 스칼라 서브쿼리

 

 

 


 

 

중복을 제거하고 급여 평균을 구하면 다음과 같다.

 

 

우리는 각 직원별 평균 급여를 구하려고 한다. 이럴 때 스칼라 서브쿼리를 사용한다. 먼저 메인 쿼리를 작성하고 그 안에 서브쿼리를 넣는다. 서브쿼리의 where 조건절에 두 개의 테이블을 비교하기 위해 A, B라는 별칭을 지어줄 것이다.

서브쿼리의 saleries를 A로, 메인쿼리의 saleries를 B라고 별칭을 지어준다. 그런 다음 서브쿼리를 괄호로 묶고 괄호 밖에 서브쿼리 전체 별칭을 avg_salary라고 이름을 붙여준다.

 

 

그런 다음 메인 쿼리의 SELECT 절에 있던 avg-salary를 지워준다. 각 직원별로 급여를 비교한 것이므로 A와 B의 조건이 같다고 해야 한다.

 

 

 

이렇게 각 직원별로 평균 급여를 구했다.

 

 

정말 어려운 문제였다. 그래도 이해를 했다는 게 신기했다.


 

 

 

 

퀴즈 3 - 위치에 따른 분류

 

 

 

어려운 문제였는데 잘 풀었다.


 

 

 

미션 - 중간고사 수학왕

 

 


 

 

이 문제는 도저히 이해 조차도 되지 않는 너무 어려운 문제라 헬퍼의 도움을 받아보았다.

 

 

 

풀긴 풀었는데 계속 틀렸다고 나온다. 이 문제는 math_score라고 잘못 써서 발생한 오류였다. 이 문제는 도저히 혼자서 풀 수 없어서 헬퍼에게 물어보면서 풀었다.

이 코드를 해석하면 다음과 같다.

  1. students 테이블과 middle_test 테이블을 조인하여 학생의 정보와 중간고사 점수를 결합한다.
  2. WHERE 절에서 수학 과목의 점수를 필터링하고, 경민이의 수학 점수보다 높은 점수를 가진 학생들을 찾는다.
  3. 서브쿼리를 통해 경민이의 수학 점수를 가져와 비교한다.

이 쿼리를 실행하면 경민이보다 수학 점수가 높은 학생들의 정보를 얻을 수 있다.

 

 

 

 

실행까지는 어찌어찌 했는데 답은 틀렸다. 다시 풀어보기로 하자.


 

 

 

다시 풀어보기

서브쿼리를 이용해서 경민이보다 높은 수학 점수를 기록한 학생이 1~3학년 중에 있는지 조회해야 하는데 이 문제를 빠뜨렸다.

 

 

 

 

이 문제도 10번도 넘게 코드를 수정했으나 도저히 풀리지 않아 그냥 넘어가기로 했다.

 


 

 

 

학습을 마치고

이렇게 해서 SQL 기초 학습을 모두 마쳤다. 5주차에서도 미션 문제를 완수하지 못해 마음이 좀 언짢기도 했지만 스칼라 서브쿼리는 기초 과정이 아닌 고급 수준의 단원이라 지금은 풀지 못하는 게 당연하다.

다음에 실력이 쌓인 후에 다시 도전해볼 생각이다. 그때는 분명 풀 수 있을 것 같다.