오늘은 SQL 퀘스트를 마무리했다!
어제 달리기반 Lv.4 2개의 문제를 풀면서 멘탈이 나갔었는데,
의외로 오늘 푼 Lv.5 2개의 문제는 훨씬 쉽게 풀 수 있었다.
Lv.4와 비슷한 형식이지만, Join 해야하는 테이블의 개수가 2개에서 3개로 늘어난 것 뿐이었다.
이때, 3개의 테이블을 Join 하기 위해서는
select *
from [테이블이름1] a left/inner join [테이블이름2] b on a.[컬럼이름]=b.[컬럼이름]
left/inner join [테이블이름3] c on b.[컬럼이름]=c.[컬럼이름];
형식으로 진행할 수 있다.
오늘 튜터님과 질문하는 시간이 있었는데, 새로운 정보를 알게 되었다.
내가 작성할 때는 select → from → where → group by → having → order by 순서로 작성을 한다.
그런데, 이게 실행될 때는 from → where → group by → having → select → order by 순서로 실행이 된다는 것이다.
그래서 만약 서브쿼리를 작성한다고 하면, 그 서브쿼리가 속해있는 곳 내에서 다시 저 순서대로 실행이 되는 것이다.
select *
from C c
having ... = (
select ...
from B b
where b.Country = c.Country
)sq
);
어제 문제를 풀면서 위와 같은 형식의 답을 만났었다.
나는 단순히 서브쿼리가 가장 먼저 실행될 것이라고 생각을 했었다.
그래서 c라는 alias가 어떻게 서브쿼리 안에서 실행될 수 있는 것인지가 궁금했는데,
having 안에 있는 서브쿼리였기 때문에 앞서 from에서 선언된 alias가 작동된 것이다.
이제야 뭔가 SQL을 제대로 이해할 수 있게 된 것 같다.
나중에 필요할 때 바로바로 SQL을 작성해서 사용할 수 있도록 계속 연습해봐야겠다.