๐ ๋ณธ ํฌ์คํ ์์ ์ฌ์ฉ๋๋ ํ ์ด๋ธ์ ์๋ฃ์ ์ถ์ฒ๋ SQL Zoo์์ ๋ฐํ๋๋ค. ๋ ๋ค์ํ SQL ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์๋ ค๋ฉด SQL Zoo ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํด๋ณด์ธ์!
์ด๋ฒ ํฌ์คํ ์์๋ MySQL์์ ์ฌ์ฉ๋๋ ๋ฌธ๋ฒ ์ค ํ๋์ธ 'ALL'์ ์ฌ์ฉํ์ฌ SQL ๋ฌธ์ ๋ฅผ ํธ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๋ ค๊ณ ํ๋ค. 3๊ฐ์ง ๋ฌธ์ ๋ฅผ ํ์ด๋ณผ ํ ๋ฐ, ์ฒซ ๋ฒ์งธ ๋ฌธ์ ์์ ALL์ ๋ํ ๋ฐฉ๋ฒ์ ์ตํ๋ฉด 2, 3๋ฒ์งธ ๋ฌธ์ ๋ ๊ฐ์ ์ก๊ณ ์์ฝ๊ฒ ํ ์ ์๋ค.
์ฐ์ ํด๋น ๋ฌธ์ ์ ๋ฌธ์ ํ ๋ ์ด์ฉํ ๋ฐ์ดํฐ ํ ์ด๋ธ์ ๋ํด ์ดํด๋ณด์.
์ฒซ ๋ฒ์งธ ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ ๋ฌธ์ ๊ฐ ์๊ตฌํ๋ ์ ๋ต์ ํ ์ด๋ธ ํํ๋ ํจ๊ป ์ดํด๋ณด์.
List each continent and the name of the country that comes first alphabetically.
(๊ฐ ๋๋ฅ์ ์ํ๋ ๋๋ผ๋ค ์ค ์ํ๋ฒณ ์์๋ก ์ ๋ ฌ ์ ์ฒซ ๋ฒ์งธ๋ก ์ค๋ ๋๋ผ์ ์ด๋ฆ์ ์กฐํํ์ฌ ๋๋ฅ, ๋๋ผ์ด๋ฆ ์์๋ก ์ถ๋ ฅํด๋ผ.)
์ฐ์ ๊ณ ๋ คํด์ผ ํ ์ ์ ์ํ๋ฒณ ์์๋ก ๊ฐ์ฅ ์ฒ์ ๋ฑ์ฅํ๋ ์กฐ๊ฑด์ SQL ์์์ผ๋ก ๋ํ๋ธ๋ค๋ฉด
a๊ฐ ์ฒซ๊ธ์์ธ ๋๋ผ < b๊ฐ ์ฒซ๊ธ์์ธ ๋๋ผ < c๊ฐ ์ฒซ๊ธ์์ธ ๋๋ผ < .... < z๊ฐ ์ฒซ๊ธ์์ธ ๋๋ผ
์ด๋ฐ ์์ผ๋ก ๋ํ๋ผ ์ ์๋ค. ๊ฒฐ๊ตญ ์ํ๋ฒณ ์์๋ก ๊ฐ์ฅ ์ฒ์ ๋ฑ์ฅํ๋ค๋ ๊ฒ์ ALL๋ฌธ๋ฒ์ ์ฌ์ฉํด ๋ํ๋ธ๋ค๋ฉด ์ด๋ฐ ์์ผ๋ก ๋ํ๋ผ ์ ์๋ค.
๋๋ผ์ด๋ฆ <= ALL(๋๋ผ์ด๋ฆ)
๋ ํ ๊ฐ์ง ๊ณ ๋ คํด์ผ ํ ์ ์ ์ด๋ ๊ฒ ์ํ๋ฒณ ์์๋ก ๊ฐ์ฅ ์ฒ์์ค๋ ๋๋ผ๋ฅผ '๊ฐ ๋๋ฅ๋ณ'๋ก ๊ตฌํด์ผ ํ๋ค. ์ด ๋๋ ์๋ธ์ฟผ๋ฆฌ์ WHERE์ ์ ์ฌ์ฉํ๋ค. ์ฐ์ ์ ๋ต์ธ MySQL ๊ตฌ๋ฌธ์ ์ดํด๋ณด์.
SELECT x.continent, x.name
FROM world AS x
WHERE x.name <= ALL(SELECT y.name
FROM world AS y
WHERE x.continent = y.continent)
ํ์๊ฐ ์ฒ์ ๊ฐ์ฅ ํท๊ฐ๋ ธ๋ ๋ถ๋ถ์ ์๋ธ์ฟผ๋ฆฌ์ WHERE ์ ๊ตฌ๋ฌธ์ด๋ค. ์๋ธ์ฟผ๋ฆฌ ์ ์ ์ง๊ด์ ์ผ๋ก ์ดํดํ๊ธฐ ์ํด ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ๋ ํ๋จ์ INNER JOIN ๋ฌธ์ผ๋ก ๋ฐ๊พธ์ด ๋ณด์๋ค.
SELECT DISTINCT x.continent, x.name
FROM world AS x
INNER JOIN world AS y ON x.continent = y.continent
์ค๋ณต์ ์ ๊ฑฐ(Distinct) ํ์ง ์์ผ๋ฉด ๋งค์ฐ ๊ธด ๊ฒฐ๊ณผ๋ฌผ์ด ์ถ๋ ฅ๋๊ธฐ ๋๋ฌธ์ DISTINCT๋ฅผ ์ํํ ๊ฒ์ด๊ณ ๊ฒฐ๊ณผ๋ฌผ์ ๋ค์๊ณผ ๊ฐ๋ค.
์ด๋ ๊ฒ ์ ๋ต SQL ๊ตฌ๋ฌธ์ ์๋ธ์ฟผ๋ฆฌ ์ ์ด ์์ ๊ฐ์ INNER JOIN ๊ตฌ๋ฌธ์ ๋์ ์ํํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
๊ทธ๋ฌ๋ฉด ๋ค์ ๋ ๋ฒ์งธ ๋ฌธ์ ๋ ํด๊ฒฐํด๋ณด์.
Find the continents where all countries have a population <= 25000000. Then find the names of the countries associated with these continents. Show name, continent and population.
((๋ชจ๋ ๋๋ผ๋ค์ด ์ธ๊ตฌ 2์ฒ 5๋ฐฑ๋ง๋ช ์ดํ์ธ ๋๋ฅ๋ค์ ์ฐพ์๋ผ. ๊ทธ๋ฆฌ๊ณ ์ด ๋๋ฅ๋ค์ ์ํ๋ ๋๋ผ๋ค์ ์ด๋ฆ, ๋๋ฅ, ์ธ๊ตฌ๋ฅผ ์ถ๋ ฅํด๋ผ)
์ ๋ต SQL ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ๋ค.
SELECT x.name, x.continent, x.population
FROM world AS x
WHERE 25000000 >= ALL(SELECT y.population
FROM world AS y
WHERE x.continent = y.continent)
๋ง์ง๋ง ์ธ ๋ฒ์งธ ๋ฌธ์ ์ด๋ค.
Some countries have populations more than three times that of any of their neighbours (in the same continent). Give the countries and continents.
(์ด๋ค ๋๋ผ๋ค์ ๊ฐ์ ๋๋ฅ์ ์ํ๋ ๋๋ผ๋ค์ ์ธ๊ตฌ๋ณด๋ค 3๋ฐฐ ๋ง์ ์ธ๊ตฌ๊ฐ ๊ฑฐ์ฃผํ๋ค. ์ด ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋๋ผ๋ค๊ณผ ๋๋ฅ์ ์ถ๋ ฅํด๋ผ.)
์ ๋ต SQL ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ๋ค.
SELECT x.name, x.continent
FROM world AS x
WHERE x.population > ALL(SELECT 3 * y.population
FROM world AS y
WHERE x.continent = y.continent
AND x.name != y.name)
์ ๋ฌธ์ ์์ ์ฃผ์ํ ๋ถ๋ถ์ '๋น๊ตํ๋ ๋๋ผ ์๊ธฐ ์์ ' ์ ์ ์ธํด์ฃผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋ฌธ์ ์ ๋ฌ๋ฆฌ
x.name != y.name
์กฐ๊ฑด์ด ์ถ๊ฐ๋์๋ค.
'SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SQL] MySQL - Window Function์ผ๋ก ๋ฌธ์ ํ๊ธฐ(Leetcode - 180, 184, 185๋ฒ) (0) | 2021.01.30 |
---|---|
[SQL] MySQL - ๋๋ง์ Function ๋ง๋ค๊ธฐ(Leetcode - 177๋ฒ) (0) | 2021.01.29 |
[SQL] - Delete, Update๋ฌธ ์ฌ์ฉํ๊ธฐ(Leetcode - 196, 627๋ฒ) (0) | 2021.01.27 |
[SQL] MySQL - SET ๊ณผ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉํ๊ธฐ (4) | 2021.01.26 |
[SQL] MySQL - ORDER BY ์ IN ํจ๊ป ์ฌ์ฉํ๊ธฐ (0) | 2021.01.26 |