* 데이터 캠프의 콘텐츠 일부만을 담았습니다.
* 저작권 문제 시 댓글을 써주시면 바로 조치를 취하겠습니다.
오답노트1: 서브쿼리가 있을 때 테이블 별 조건의 배치 & ALIAS
먼저 파악해야할 것은 이 쿼리의 구조이다.
countries LEFT JOIN economies ON ~ (서브쿼리 FROM languages )라는 큰 흐름을 보인다.
LEFT JOIN과 ON을 써서 countries와 economies의 code를 맞춰주었다.
ON안에 AND를 사용해서 같은 c.code에 대해 languages의 서브쿼리를 사용하였다.
이 서브쿼리는 language의 '조건'에 맞는 c.code를 반환해서 c.code IN에 맞추었다.
*code: 국가코드를 의미합니다.
이후에 countries와 economies의 조건 year = 2015, region = 'Central America'을 붙인다.
즉, 정리를 하면 JOIN을 진행할 때 languages의 특정 조건에서 code만 반환하고 싶으면 서브쿼리를 진행한다.
이후 code와 상관없는 countries, economies테이블의 조건을 넣고 싶으면 JOIN 관련 쿼리를 끝낸 후 WHERE에 넣는다.
추가로 ON ~ AND c.code IN에서 JOIN이 있음에도 ALIAS(c.code)가 있는 이유는
'아직 JOIN이 끝나지 않았기' 때문이다.
오답노트2: GROUP BY와 SELECT에 대해서
이중으로 GROUP BY를 할 경우, 위의 예시에 따르면 아래와 같은 형식을 볼 수 있다.
region1 - continent1, continent2, 3, 4 ...
region2 - continent1, continent2, 3, 4 ...
따라서 이 형식을 출력하고 싶다면 SELECT에 GROUP BY 쓴 필드명을 모두 포함해야 한다.
오답노트3: 결과물에 따라 기본 테이블과 서브쿼리로 쓸 테이블을 결정한다.
10개의 'cities'에 주목해야하고 Europe과 America 같은 조건들이 제시되어있다.
문제에서 cities를 요구했으므로 메인쿼리에 cities가 들어가있고
특정 나라가 조건으로 주어져서 WHERE구문에 서브쿼리로 countries가 들어가있다.
역시나 WHERE name IN의 'name'은 cities의 것이고,
IN 이후에 나오는 countries의 'capital'에서 name을 검색한다.
'SQL' 카테고리의 다른 글
[Bigquery, 고객센터 예제] _TABLE_SUFFIX 날짜 단위로 나뉜 테이블을 모두 불러오기, DATE_SUB으로 지난 날짜 구하기 (0) | 2020.11.20 |
---|---|
[SQL, 데이터 캠프] CASE문과 데이터 캠프 예제쿼리 풀이 -1편 (0) | 2020.07.04 |
[SQL, 데이터캠프] 서브쿼리 오답노트 1편 (0) | 2020.06.27 |
[SQL] 오랫만에 SQL을 봤을 때 보면 좋을 것들 (0) | 2020.06.27 |
[SQL, 데이터 캠프]Left Join, Right Join, Full Join, Cross Join (0) | 2020.03.10 |
댓글