일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 텍스트마이닝
- 혼공머신
- 정보처리기사필기
- SQL
- pandas
- 정수와유리수
- 머신러닝
- 요구사항확인
- 데이터입출력구현
- 컴퓨터구조
- 언리얼학습
- 딥러닝
- html/css
- 데이터분석
- 중학수학
- 운영체제
- 파이썬라이브러리
- 자바 실습
- numpy/pandas
- C++
- 정보처리기사실기
- 중학1-1
- 데이터시각화
- 데이터베이스
- JSP/Servlet
- 디버깅
- 코딩테스트
- 파이썬
- 자바
- 언리얼프로젝트
- Today
- Total
클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지
서브쿼리 4 - 위치에 따른 분류 및 미션 문제 풀기 본문
서브쿼리 마지막 시간이다. 미션 문제까지 함께 풀어보려고 한다.
이론 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라고 잘못 써서 발생한 오류였다. 이 문제는 도저히 혼자서 풀 수 없어서 헬퍼에게 물어보면서 풀었다.
이 코드를 해석하면 다음과 같다.
- students 테이블과 middle_test 테이블을 조인하여 학생의 정보와 중간고사 점수를 결합한다.
- WHERE 절에서 수학 과목의 점수를 필터링하고, 경민이의 수학 점수보다 높은 점수를 가진 학생들을 찾는다.
- 서브쿼리를 통해 경민이의 수학 점수를 가져와 비교한다.
이 쿼리를 실행하면 경민이보다 수학 점수가 높은 학생들의 정보를 얻을 수 있다.
실행까지는 어찌어찌 했는데 답은 틀렸다. 다시 풀어보기로 하자.
다시 풀어보기
서브쿼리를 이용해서 경민이보다 높은 수학 점수를 기록한 학생이 1~3학년 중에 있는지 조회해야 하는데 이 문제를 빠뜨렸다.
이 문제도 10번도 넘게 코드를 수정했으나 도저히 풀리지 않아 그냥 넘어가기로 했다.
학습을 마치고
이렇게 해서 SQL 기초 학습을 모두 마쳤다. 5주차에서도 미션 문제를 완수하지 못해 마음이 좀 언짢기도 했지만 스칼라 서브쿼리는 기초 과정이 아닌 고급 수준의 단원이라 지금은 풀지 못하는 게 당연하다.
다음에 실력이 쌓인 후에 다시 도전해볼 생각이다. 그때는 분명 풀 수 있을 것 같다.
'알고리즘 및 자료 관리 > SQL' 카테고리의 다른 글
SQL로 데이터 다루기 심화 수업 소개 및 MySQL 완전삭제 + 재설치 (0) | 2024.10.20 |
---|---|
SQL로 데이터 다루기 기초 이수증 (0) | 2024.10.19 |
서브쿼리 3 - 반환에 따른 분류 2 : 다중행 서브쿼리 실습해보기 (0) | 2024.10.13 |
서브쿼리 2 - 반환에 따른 분류 1 : 단일 행 서브쿼리와 다중 행 서브쿼리 (0) | 2024.10.13 |
서브쿼리 1 - 서브쿼리에 대하여 (0) | 2024.10.13 |