๐ก SUBQUERY๋ ๋ค๋ฅธ ์ฟผ๋ฆฌ ๋ด์์ ์คํ๋๋ ์ฟผ๋ฆฌ์ด๋ค.
SUBQUERY์ ๊ฒฐ๊ณผ๋ฅผ ํ์ฉํด์ ๋ณต์กํ MAINQUERY๋ฅผ ์์ฑํด ํ๋ฒ์ ์ฌ๋ฌ ์์ ์ ์ํํ ์ ์๋ค.
โ
์๋ธ์ฟผ๋ฆฌ์ ๋ฉ์ธ ์ฟผ๋ฆฌ๋ฅผ ํ์ฉํ ๋ค์ค์ด ๊ฒฐ๊ณผ ์กฐํ
โก๏ธ ์๋ธ์ฟผ๋ฆฌ
SELECT
category_code
FROM tbl_menu
WHERE menu_name = '๋ฏผํธ๋ฏธ์ญ๊ตญ';
โก๏ธ ๋ฉ์ธ์ฟผ๋ฆฌ
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu;
โก๏ธ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ํ์ฉํ ๋ฉ์ธ ์ฟผ๋ฆฌ
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE category_code = (SELECT category_code
FROM tbl_menu
WHERE menu_name = '๋ฏผํธ๋ฏธ์ญ๊ตญ');
โ
SUBQUERY๋ฅผ ํ์ฉํด ๊ฐ์ฅ ๋ง์ ๋ฉ๋ด๊ฐ ํฌํจ๋ ์นดํ
๊ณ ๋ฆฌ ์กฐํ
โก๏ธ ์๋ธ์ฟผ๋ฆฌ
SELECT
COUNT(*) AS 'count'
FROM tbl_menu
GROUP BY category_code;
โก๏ธ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ํ์ฉํ ๋ฉ์ธ ์ฟผ๋ฆฌ
FROM ์ ์ ์ฐ์ธ ์๋ธ์ฟผ๋ฆฌ(derived table, ํ์ ํ
์ด๋ธ)๋ ๋ฐ๋์ ์์ ์ ๋ณ์นญ์ด ์์ด์ผ ํ๋ค.
(feat. ์ด๋ฌํ ์๋ธ์ฟผ๋ฆฌ๋ฅผ โ์ธ๋ผ์ธ ๋ทฐโ๋ผ๊ณ ํ๋ค.)
SELECT
MAX(count)
FROM (SELECT COUNT(*) AS 'count'
FROM tbl_menu
GROUP BY category_code) AS countmenu;
๋ฉ์ธ ์ฟผ๋ฆฌ๊ฐ ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ์ ์ํฅ์ ์ฃผ๋ ๊ฒฝ์ฐ ์๊ด ์๋ธ์ฟผ๋ฆฌ๋ผ๊ณ ํ๋ค.
โ
SUBQUERY๋ฅผ ํ์ฉํด ์นดํ
๊ณ ๋ฆฌ๋ณ ํ๊ท ๊ฐ๊ฒฉ๋ณด๋ค ๋์ ๊ฐ๊ฒฉ์ ๋ฉ๋ด ์กฐํ
โก๏ธ ์๋ธ์ฟผ๋ฆฌ
SELECT
AVG(menu_price)
FROM tbl_menu
WHERE category_code = 4;
โก๏ธ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ํ์ฉํ ๋ฉ์ธ ์ฟผ๋ฆฌ
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu a
WHERE menu_price > (SELECT AVG(menu_price)
FROM tbl_menu
WHERE category_code = a.category_code);
์กฐํ ๊ฒฐ๊ณผ๊ฐ ์์ ๋ true ์๋๋ฉด false
โ
EXISTS์ SUBQUERY๋ฅผ ํ์ฉํ ๋ฉ๋ด๊ฐ ์๋ ์นดํ
๊ณ ๋ฆฌ ์กฐํ
SELECT
category_name
FROM tbl_category a
WHERE EXISTS(SELECT 1
FROM tbl_menu b
WHERE b.category_code = a.category_code)
ORDER BY 1;
ํ์ ํ ์ด๋ธ๊ณผ ๋น์ทํ ๊ฐ๋ ์ด๋ฉฐ ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ์ํด ํ์ ํ ์ด๋ธ ๋์ ์ฌ์ฉํ๊ฒ ๋๋ค.
FROM์ ์์๋ง ์ฌ์ฉ ๋จ (JOIN์ผ ์ JOIN ๊ตฌ๋ฌธ์์๋ ๊ฐ๋ฅ)
์ธ๋ผ์ธ ๋ทฐ๋ก ์ฐ์ธ ์๋ธ์ฟผ๋ฆฌ(FROM ์ ์ ์ฐ์ธ ์๋ธ์ฟผ๋ฆฌ)๋ฅผ ๋ฏธ๋ฆฌ ์ ์ํ๊ณ๋ฉ์ธ์ฟผ๋ฆฌ๊ฐ ์ฌํํด ์ง ์ ์๋๋ก์ฌ์ฉํ๋ ๋ฌธ๋ฒ
WITH menucate AS (
SELECT menu_name
, category_name
FROM tbl_menu a
JOIN tbl_category b ON a.category_code = b.category_code
)
SELECT
*
FROM menucate
ORDER BY menu_name;
๐ก SET ์ฐ์ฐ์๋ ๋ ๊ฐ ์ด์์ SELECT๋ฌธ์ ๊ฒฐ๊ณผ ์งํฉ์ ๊ฒฐํฉํ๋๋ฐ ์ฌ์ฉํ๋ค.
SET ์ฐ์ฐ์๋ฅผ ํตํด ๊ฒฐํฉํ๋ ๊ฒฐ๊ณผ ์งํฉ์ ์ปฌ๋ผ์ด ๋์ผํด์ผ ํ๋ค.
๋ ๊ฐ ์ด์์ SELECT ๋ฌธ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐํฉํ์ฌ ์ค๋ณต๋ ๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ ํ ๋ฐํํ๋ SQL ์ฐ์ฐ์์ด๋ค.
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE category_code = 10
UNION
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE menu_price < 9000;
๋ ๊ฐ ์ด์์ SELECT ๋ฌธ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐํฉํ๋ฉฐ ์ค๋ณต๋ ๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ์ง ์๊ณ ๋ชจ๋ ๋ฐํํ๋ SQL ์ฐ์ฐ์์ด๋ค.
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE category_code = 10
UNION ALL
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE menu_price < 9000;
๋ SELECT ๋ฌธ์ ๊ฒฐ๊ณผ ์ค
๊ณตํต๋๋ ๋ ์ฝ๋๋ง์ ๋ฐํํ๋ SQL ์ฐ์ฐ์์ด๋ค.
MySQL์ ๋ณธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก INTERSECT๋ฅผ ์ ๊ณตํ์ง ์๋๋ค.
ํ์ง๋งINNER JOIN๋๋IN์ฐ์ฐ์ ํ์ฉํด์ ๊ตฌํํ๋ ๊ฒ์ ๊ฐ๋ฅํ๋ค.
โ
INNER JOIN ํ์ฉ
SELECT
a.menu_code
, a.menu_name
, a.menu_price
, a.category_code
, a.orderable_status
FROM tbl_menu a
INNER JOIN (SELECT menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE menu_price < 9000) b ON (a.menu_code = b.menu_code)
WHERE a.category_code = 10;
โ
IN ์ฐ์ฐ์ ํ์ฉ
SELECT
a.menu_code
, a.menu_name
, a.menu_price
, a.category_code
, a.orderable_status
FROM tbl_menu a
WHERE category_code = 10
AND menu_code IN (SELECT menu_code
FROM tbl_menu
WHERE menu_price < 9000);
์ฒซ ๋ฒ์งธ SELECT ๋ฌธ์ ๊ฒฐ๊ณผ์์ ๋ ๋ฒ์งธ SELECT ๋ฌธ์ ๊ฒฐ๊ณผ๊ฐ ํฌํจํ๋ ๋ ์ฝ๋๋ฅผ ์ ์ธํ ๋ ์ฝ๋๋ฅผ ๋ฐํํ๋ SQL ์ฐ์ฐ์์ด๋ค.
MySQL์ MINUS๋ฅผ ์ ๊ณตํ์ง ์๋๋ค.
ํ์ง๋งLEFT JOIN์ ํ์ฉํด์ ๊ตฌํํ๋ ๊ฒ์ ๊ฐ๋ฅํ๋ค.
SELECT
a.menu_code
, a.menu_name
, a.menu_price
, a.category_code
, a.orderable_status
FROM tbl_menu a
LEFT JOIN (SELECT menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu b
WHERE menu_price < 9000) b ON (a.menu_code = b.menu_code)
WHERE a.category_code = 10
AND b.menu_code IS NULL;
์คํ๊ฒฐ๊ณผ