2014-03-07 2 views
0

일부 인터뷰 연습을하고 있는데이 흥미로운 SQL 문제가 발생했습니다.다른 SQL 플랫폼의 ALL 절

스키마 월드 (이름, 대륙, 지역, 인구, gdp)가있는 테이블이 제공됩니다. 각 대륙에서 가장 큰 국가 (지역별)를 찾고 대륙, 이름 및 지역을 표시하십시오.

가능한 해결책은 다음과 같습니다

SELECT continent, name, area 
FROM world x 
WHERE area >= ALL (
    SELECT area FROM world y 
    WHERE y.continent=x.continent) 

난 정말 ALL 키워드 작품, 그래서이 쿼리가 실제로 문제를 해결하는 방법을 모르는 방법을 이해하지 않습니다. 또한 SQL 플랫폼간에 ALL 사용이 다른가요? 귀하의 질문에 관해서는

+0

https://dev.mysql.com/doc/refman/5.7/en/all-subqueries.html – user2864740

답변

1

는 - 지금까지 내가 이해 한대로, 당신의 SQL은 간단합니다 :

일반적으로 ALL에 관해서는, 그것이 ALL 의미에서해야대로 아주의로 작동
SELECT 
    MAX(area) AS max_area, 
    continent, 
    name 
GROUP BY 
    continent, 
    name 

: 즉 일부를 값은 주어진 조건 (귀하의 경우 "크거나 같음")에 맞습니다. 모두 하위 쿼리의 값입니다.

-1
SELECT x.continent, x.name, x.area 
FROM world x, 
    (SELECT continent, MAX(area) 
     FROM world x 
     GROUP BY continent) max_res 
WHERE x.area=max_res.area 
     AND x.continent=max_res.continent 
+0

'JOIN'(귀하의 경우 암시 적)은 무엇을 의미합니까? –

+0

@ AlmaDo 미안하지만 약간의 쿼리가 수정되었습니다. 서브 쿼리에서 우리는 각 대륙에 대해 가장 큰 영역을 계산합니다. 그 후에 우리는 각 대륙의 모든 국가를이 지역으로 데려옵니다. – StanislavL

+0

의미를 알지만 - 왜? 내 말은, 단순한'GROUP BY'는 질문에 맞을 것입니다. (오, 그 dv는 내 것이 아니 었습니다.) –

1

어쩌면이 질문에 대답하지 않지만 외부 쿼리에 지정된 행이에 의해 반환 된 모든 행 값에 대한 조건을 만족하는 경우 키워드는 데이터를 반환 ALL

ALL 이해 MySQL과 당신을 도울 것입니다 하위 쿼리

여기
mysql> SELECT * FROM t1; 
+------+ 
| i | 
+------+ 
| 1 | 
| 2 | 
| 3 | 
| 4 | 
| 5 | 
+------+ 
5 rows in set (0.00 sec) 

mysql> SELECT * FROM t2; 
+------+ 
| j | 
+------+ 
| 2 | 
| 4 | 
| 6 | 
+------+ 
3 rows in set (0.00 sec) 


mysql> SELECT * FROM t1 WHERE i = ALL (SELECT j FROM t2); 
Empty set (0.00 sec) 

빈 세트가 있기 때문에 반환됩니다 여기

은 예입니다 MySQL은 t1 테이블의 주어진 값과 테이블 t2의 모든 값을 비교합니다. t1의 값이 하위 쿼리에서 반환 된 모든 값과 같으면 출력으로 표시합니다.

mysql> SELECT * FROM t1 WHERE i <> ALL (SELECT j FROM t2); 
+------+ 
| i | 
+------+ 
| 1 | 
| 3 | 
| 5 | 
+------+ 
3 rows in set (0.00 sec) 

여기 전혀 서브 쿼리에 의해 반환 된 값과 동일하지 않은 T1 테이블의 모든 값들을 나타낸다.

또한 <>ALL 여기 IN

mysql> SELECT * FROM t1 WHERE i = ALL (SELECT j FROM t2 WHERE j = 2); 
+------+ 
| i | 
+------+ 
| 2 | 
+------+ 
1 row in set (0.12 sec) 

는 2 리턴 동등한 기능 NOT IN=ANY 동등한 기능을 그대로 출력 2 (테이블 T1)에서 서브 의해 생성 만 출력과 일치하므로 질문.