NLP Learner in Switzerland

Advanced SQL query 구현 예제 본문

Database SQL/Exercise

Advanced SQL query 구현 예제

초코빵 2021. 4. 26. 10:00
728x90
반응형

 

Mondial_database.pdf
0.07MB

 

 

 

 

[답]

1. 3번째로 긴 강을 구하다보니 nested query가 3층으로 들어갔다. 물론 이것도 답은 맞지만,

select name
from river
where length =(
select max(length)
from river
where length < 
(select max(length)
from river
where length <
(select max(length)
from river)));

솔루션에서는 이렇게 더 짧게 구현했다.

select r.name
from river r
where (select count(length)
       from river
       where length > r.length) = 2;

2. distinct가 없으면 결과값이 더 크게 나온다.

-- exists로 구현
select distinct c.name
from city c
where exists (select name
			 from province p
			 where c.name=p.name);

-- in으로 구현
select distinct c.name
from city c
where c.name in (select name
				from province p
				where c.name=p.name);

-- join으로 구현
select distinct c.name
from city c join province p on c.name=p.name;

3. datascientistchocobread.tistory.com/44에서 이미 한번 left outer join에 대해서 나왔었다.

여기서도 동일하게, 전체 국가명은 다 필요하고 다만 강의 수와 호수의 수만 세면 되기 때문에 left outer join을 써서 전체 국가명 리스트는 그대로 유지해준다.

select distinct c.name, count(gl.lake), count(gr.river)
from country c left outer join geolake gl on c.code=gl.country
	       left outer join georiver gr on c.code=gr.country
group by c.name;

 

Comments