- ๊ฐ์ ๊ฐ์ ๊ฐ์ง ํ๋ผ๋ฆฌ ํ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ญ์ณ์ค
- ๋ณดํต ์ง๊ณํจ์์ ๊ฐ์ด ์ฌ์ฉ
- COUNT() : ํ์ ๊ฐ์
- AVG() : ํ ์์ ์๋ ๊ฐ์ ํ
- MIN() : ํ ์์ ์๋ ๊ฐ์ ์ต์
- MAX() : ํ ์์ ์๋ ๊ฐ์ ์ต๋๊ฐ
- SUM() : ํ ์์ ์๋ ๊ฐ์ ํฉ
SELECT
i.REST_ID,
i.REST_NAME,
i.FOOD_TYPE,
i.FAVORITES,
i.ADDRESS,
round(avg(r.REVIEW_SCORE), 2) as SCORE
from REST_INFO i
join REST_REVIEW r on i.REST_ID = r.REST_ID
where i.ADDRESS like '์์ธ%'
group by 1
order by 6 desc, 4 desc;- ์ฃผ์์
- SELECT ์ ์ avg(r.REVIEW_SCORE)๋ผ๋ ์ง๊ณ ํจ์ ์กด์ฌ
- ๊ทธ๋ฃนํ๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด, ๋ชจ๋ ํ์ด ํ๋์ ๊ทธ๋ฃน์ผ๋ก ์ทจ๊ธ
- ๋ฐ๋ผ์ ํ๋์ ํ๋ง ๋ฐํํ๊ณ ์ถ์ ๊ฒ์ด ์๋๋ฉด
group by์ถ๊ฐํ ๊ฒ
where์ ์ง๊ณํจ์์ ํจ๊ป ์ฌ์ฉํ ์ ์์ผ๋ฏ๋กhaving์ ์ฌ์ฉ
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;having์ด ๊ผญgroup by์ ํจ๊ป ์จ์ผํ๋ ๊ฒ์ ์๋- ๊ฐ๋ณ ๊ทธ๋ฃน์ ๋ํ ์ง๊ณ๊ฐ ํ์ํ ๊ฒฝ์ฐ์
group by-having์ ํ์ group by์์ดhaving๋ง ์ฌ์ฉํ๋ฉด ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ํ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ด
SELECT
u.USER_ID,
u.NICKNAME,
concat(u.CITY, ' ', u.STREET_ADDRESS1, ' ', u.STREET_ADDRESS2) as ์ ์ฒด์ฃผ์,
concat(left(TLNO, 3), '-', mid(TLNO, 4, 4), '-', right(TLNO, 4)) as ์ ํ๋ฒํธ
from USED_GOODS_BOARD b
join USED_GOODS_USER u on b.WRITER_ID = u.USER_ID
group by u.USER_ID, u.NICKNAME, u.CITY, u.STREET_ADDRESS1, u.STREET_ADDRESS2, u.TLNO
having count(b.WRITER_ID) >= 3
order by 1 desc- MySQL์์
+๋ ์ซ์ ๋ง์ ์ ์ฌ์ฉ - ๋ฌธ์์ด์
+์ฐ๊ฒฐํ๋ ค๊ณ ํ๋ฉด MySQL์ ๋ฌธ์์ด์ ์ซ์๋ก ๋ณํํ๋ ค๊ณ ์๋ํ๊ณ , ๋ณํํ ์ ์๋ ๊ฒฝ์ฐ 0์ผ๋ก ์ฒ๋ฆฌ - ๋ฌธ์์ด ์ฐ๊ฒฐ์ ์ํด์๋ ๋ฐ๋์
CONCATํจ์ ์ฌ์ฉleft(TLNO, 3) + '-' + mid(TLNO, 4, 4) + '-' + right(TLNO, 4) # X CONCAT(left(TLNO, 3), '-', mid(TLNO, 4, 4), '-', right(TLNO, 4)) # O
๋ ์ง ์กฐ๊ฑด์ HAVING ๋์ WHERE์ ์ ์ฌ์ฉ
HAVING์ ๊ทธ๋ฃนํ ํ์ ์กฐ๊ฑด์ ์ฌ์ฉ
WHERE๋ ๊ทธ๋ฃนํ ์ ์ ๊ธฐ๋ณธ ํํฐ๋ง์ ์ฌ์ฉ
SELECT
MCDP_CD as ์ง๋ฃ๊ณผ์ฝ๋,
count(*) as 5์์์ฝ๊ฑด์
from APPOINTMENT
where month(APNT_YMD) = 5
group by MCDP_CD
order by 2, 1-
๊ฒฐ๊ณผ๊ฐ์ ์ง์ ํ ์๋ฆฟ์๊น์ง ๋ฐ์ฌ๋ฆผํด์ค
-
ํ๊ท ์ ์์์ ๋๋ฒ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผ
- round(avg(), 1)
SELECT CAR_ID, round(avg(datediff(END_DATE, START_DATE) + 1), 1) as AVERAGE_DURATION from CAR_RENTAL_COMPANY_RENTAL_HISTORY group by CAR_ID having AVERAGE_DURATION >= 7 order by AVERAGE_DURATION desc, CAR_ID desc
- ์๋ฆฌ์ ๋ฒ๋ฆฌ๋ ํจ์
SELECT truncate(PRICE, -4) as PRICE_GROUP, count(*) as PRODUCTS
from PRODUCT
group by 1
order by 1SELECT DATE_FORMAT('2019-09-16 20:23:12', '%Y-%m-%d')- ๋ ๋ ์ง ๊ฐ์ ์ฐจ์ด๋ฅผ ๊ตฌํจ
- ๋ ๋ ์ง๊ฐ์ ์ฐจ์ด + 1 ์ ํด์ผ ์ด ๋์ฌ๊ธฐ๊ฐ
- ์์์ผ์ด 5์ 7์ผ, ์ข ๋ฃ์ผ์ด 5์ 10์ผ์ด๋ผ๋ฉด, ๋์ฌ๊ธฐ๊ฐ์ 4์ผ
datediff(END_DATE, START_DATE) + 1
- ๋ ์๊ฐ ๊ฐ์ ์ฐจ์ด
-
in- in์ ๋ชฉ๋ก ๊ฐ์ธ ๊ฒ์ ๋ฐํ
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE from ANIMAL_INS where NAME in ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty') order by ANIMAL_ID
-
not in- in์ ๋ชฉ๋ก ๊ฐ์ด ์๋ ๊ฒ์ ๋ฐํ
SELECT * FROM Customers WHERE Country NOT IN ('Germany', 'France', 'UK');
๋ ์ผ, ํ๋์ค, ์๊ตญ ์ถ์ ์ด ์๋ ๋ชจ๋ ๊ณ ๊ฐ์ ๋ฐํ
-
์นผ๋ผ์ ์กฐ๊ฑด๋ถ์ฌ
- ์กฐ๊ฑด์ด true์ด๋ฉด ๊ฒฐ๊ณผ ๋ฐํ
- else ์กฐ๊ฑด์ด ์ถฉ์กฑ๋์ง ์์ผ๋ฉด
Null๋ฐํ - case ๊ตฌ๋ฌธ ํ์
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 WHEN conditionN THEN resultN ELSE result END; -
๊ฑฐ๋์ํ๊ฐ SALE ์ด๋ฉด ํ๋งค์ค, RESERVED์ด๋ฉด ์์ฝ์ค, DONE์ด๋ฉด ๊ฑฐ๋์๋ฃ ๋ถ๋ฅํ์ฌ ์ถ๋ ฅ
SELECT BOARD_ID, WRITER_ID, TITLE, PRICE,
case STATUS
when 'SALE' then 'ํ๋งค์ค'
when 'RESERVED' then '์์ฝ์ค'
else '๊ฑฐ๋์๋ฃ' end as STATUS
from USED_GOODS_BOARD
where CREATED_DATE='2022-10-05'
order by BOARD_ID desc- LEFT(๋ฌธ์์ด, 2)
- ๋ฌธ์์ด์ ์ผ์ชฝ์์ 2๊ฐ์ ๋ฌธ์๋ฅผ ์ถ์ถ
SELECT left(PRODUCT_CODE, 2) as CATEGORY, count(PRODUCT_ID) as PRODUCTS
from PRODUCT
group by CATEGORY # ์ํ ์นดํ
๊ณ ๋ฆฌ ์ฝ๋๋ณ ์ํ ๊ฐ์ ๊ตฌํ๊ธฐ
order by CATEGORY- ์ฒ์ n๊ฐ ๋ฐํ
- ๊ฐ์ฅ ํฐ ๋ฌผ๊ณ ๊ธฐ 10๋ง๋ฆฌ์ ID์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ SQL ๋ฌธ
select ID, LENGTH
from FISH_INFO
where LENGTH is not null
order by LENGTH desc, ID
limit 10- ํ ์ด๋ธ ์ด์์ ๊ณ ์ ํ ๊ฐ๋ง ๋ฐํ
SELECT DISTINCT Country FROM Customers;- ์ด๋ฆ์ด NULL์ธ ๊ฒฝ์ฐ๋ ์ง๊ณํ์ง ์์ผ๋ฉฐ ์ค๋ณต๋๋ ์ด๋ฆ์ ํ๋๋ก ์นจ
DISTINCT์์ฒด๊ฐnull์ ๋ฌด์ํ๋ฏ๋กWHERE NAME IS NOT NULL์กฐ๊ฑด ํ์์์
SELECT count(distinct NAME) as count
from ANIMAL_INS- COUNT()
- ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ์ธ๋ ํจ์
COUNT(DISTINCT [COL๋ช ])DISTINCT๋ก ์ค๋ณต์ ์ ๊ฑฐํด ํด๋น COL์ ๋ฐ์ดํฐ ์ข ๋ฅ ๊ฐ์ ํ์- join์ ํ๋ ๊ฒฝ์ฐ ์ค๋ณต๋ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ ์ ์๊ธฐ์
DISTINCT์ฌ์ฉ
SELECT
year(o.SALES_DATE) as YEAR,
month(o.SALES_DATE) as MONTH,
u.GENDER,
count(distinct u.USER_ID) as USERS
from USER_INFO u
join ONLINE_SALE o on u.USER_ID = o.USER_ID
where u.GENDER is not null
group by year(o.SALES_DATE), month(o.SALES_DATE), u.GENDER
# ๋
, ์, ์ฑ๋ณ ๋ณ๋ก ์ง๊ณ
order by YEAR, MONTH, GENDER
# order by 1, 2, 3 ์ผ๋ก ํด๋ ๋ฌด๋ฐฉ- (INNER) JOIN
- ๋ ํ ์ด๋ธ ๋ชจ๋์์ ์ผ์นํ๋ ๊ฐ์ด ์๋ ๋ ์ฝ๋๋ฅผ ๋ฐํ
- LEFT (OUTER) JOIN
- ์ผ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ, ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ์ผ์นํ๋ ๋ ์ฝ๋๋ฅผ ๋ฐํ
- RIGHT (OUTER) JOIN
- ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ๋ฐํํ๊ณ , ์ผ์ชฝ ํ ์ด๋ธ์ ์ผ์นํ๋ ๋ ์ฝ๋๋ฅผ ๋ฐํ
- FULL (OUTER) JOIN
- ์ผ์ชฝ ๋๋ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ ์ค ํ๋์ ์ผ์นํ๋ ํญ๋ชฉ์ด ์๋ ๊ฒฝ์ฐ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ๋ฐํ
2022๋ 10์์ ์์ฑ๋ ๊ฒ์๊ธ์ ๋ชฉ, ๊ฒ์๊ธ ID, ๋๊ธ ID, ๋๊ธ ์์ฑ์ ID, ๋๊ธ ๋ด์ฉ, ๋๊ธ ์์ฑ์ผ์ ์กฐํํ๋ SQL๋ฌธ- ๊ฒฐ๊ณผ๋ ๋๊ธ ์์ฑ์ผ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
- ๋๊ธ ์์ฑ์ผ์ด ๊ฐ๋ค๋ฉด ๊ฒ์๊ธ ์ ๋ชฉ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
2022๋ 10์์ ์์ฑ๋ ๊ฒ์๊ธ์ด๋ฏ๋ก board b๋ฅผ ๊ธฐ์ค์ผ๋ก where์ ์์ฑ
SELECT b.TITLE, b.BOARD_ID, r.REPLY_ID, r.WRITER_ID, r.CONTENTS, date_format(r.CREATED_DATE, '%Y-%m-%d') as CREATED_DATE
from USED_GOODS_BOARD b
join USED_GOODS_REPLY r on b.BOARD_ID = r.BOARD_ID
where b.CREATED_DATE like "2022-10%"
order by r.CREATED_DATE, b.TITLE- ๋ ๊ฐ ์ด์์ select๋ฌธ ๊ฒฐ๊ณผ๋ฅผ ํ๋๋ก ๊ฒฐํฉํ ๋ ์ฌ์ฉ
- ๊ตฌ์กฐ๊ฐ ์ ์ฌํ ์ฌ๋ฌ ํ ์ด๋ธ์ ๋ฐ์ดํฐ ๊ฒฐํฉ
union์ ์ค๋ณต์ ์ ๊ฑฐunion all์ ์ค๋ณต ์ ๊ฑฐ ์์ด ๋ชจ๋ ๊ฒฐ๊ณผ ํฌํจ
SELECT
date_format(SALES_DATE, '%Y-%m-%d') as SALES_DATE,
PRODUCT_ID,
USER_ID,
SALES_AMOUNT
from (
select
SALES_DATE,
PRODUCT_ID,
USER_ID,
SALES_AMOUNT
from ONLINE_SALE
where year(SALES_DATE) = 2022 and month(SALES_DATE) = 3
union all
select
SALES_DATE,
PRODUCT_ID,
NULL as USER_ID,
SALES_AMOUNT
from OFFLINE_SALE
where year(SALES_DATE) = 2022 and month(SALES_DATE) = 3
) as combined
order by 1, 2, 3- ONLINE_SALE๊ณผ OFFLINE_SALE ํ ์ด๋ธ์์ 2022๋ 3์ ๋ฐ์ดํฐ๋ง ์ ํ
- OFFLINE_SALE์ USER_ID๋ NULL๋ก ์ค์
- ๋ ๊ฒฐ๊ณผ๋ฅผ UNION ALL๋ก ๊ฒฐํฉ
- ๋ ์ง, ์ํ ID, ์ฌ์ฉ์ ID ์์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
SELECT IF(500<1000, "YES", "NO");if๋ฌธ์ ์กฐ๊ฑด์ด True๋ฉด ๋๋ฒ์งธ๊ฐ, False๋ฉด ์ธ๋ฒ์งธ๊ฐ
select
count(*) as FISH_COUNT,
max(LENGTH) as MAX_LENGTH,
FISH_TYPE
from FISH_INFO
group by 3
having avg(if(ifnull(LENGTH, 0) < 10, 10, LENGTH)) >= 33
order by 3- if()์์ ifnull ํ์ฉ
- ์กฐ๊ฑด: 10cm ์ดํ์ ๋ฌผ๊ณ ๊ธฐ๋ค์ 10cm๋ก ์ทจ๊ธํ์ฌ ํ๊ท ๊ธธ์ด ๊ตฌํ๊ธฐ
- 10cm ์ดํ์ธ ๊ฒฝ์ฐ
- length๊ฐ null์ผ ๋
- length๊ฐ null์ด๋ฉด 0์ผ๋ก ๋ณด๊ณ 10cm ์ดํ์ด๋ฏ๋ก 10cm๋ก ์ทจ๊ธํ๊ณ ํ๊ท ๊ตฌํ๊ธฐ
- ํน์ ์ปฌ๋ผ์ ๊ฐ์ด
null์ธ์ง ํ์ธํ๊ณ null์ธ ๊ฒฝ์ฐ ๋์ฒด ๊ฐ์ ๋ฐํ
- ๋๋์์ค ์ฌ๋ถ๊ฐ
null์ธ ๊ฒฝ์ฐ, N์ผ๋ก ์ถ๋ ฅ
SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, ifnull(FREEZER_YN, 'N')
from FOOD_WAREHOUSE
where ADDRESS like '๊ฒฝ๊ธฐ๋%'
order by WAREHOUSE_ID- ๋ฌธ์์ด์ ์ ๋ ฅํ ์์๋๋ก ํฉ์น๋ ํจ์
- FISH_INFO ํ ์ด๋ธ์์ ์ก์ ๋ฌผ๊ณ ๊ธฐ ์ค ๊ฐ์ฅ ํฐ ๋ฌผ๊ณ ๊ธฐ์ ๊ธธ์ด๋ฅผ 'cm' ๋ฅผ ๋ถ์ฌ ์ถ๋ ฅํ๋ SQL ๋ฌธ
select distinct CONCAT(LENGTH, 'cm') as MAX_LENGTH
from FISH_INFO
where LENGTH = (select max(LENGTH) from FISH_INFO)- SQL ์ฟผ๋ฆฌ ์์ ์๋ ๋ ๋ค๋ฅธ ์ฟผ๋ฆฌ
- ์ฃผ๋ก () ๊ดํธ๋ก ๋ฌถ์ด์ ํํ
- ์์์ข ๋ฅ๋ณ๋ก ์ฆ๊ฒจ์ฐพ๊ธฐ์๊ฐ ๊ฐ์ฅ ๋ง์ ์๋น์ ์์ ์ข ๋ฅ, ID, ์๋น ์ด๋ฆ, ์ฆ๊ฒจ์ฐพ๊ธฐ์๋ฅผ ์กฐํํ๋ SQL๋ฌธ
- ์์ ์ข ๋ฅ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
SELECT
FOOD_TYPE,
REST_ID,
REST_NAME,
FAVORITES
from REST_INFO r1
where FAVORITES = (
select max(FAVORITES)
from REST_INFO r2
where r2.FOOD_TYPE = r1.FOOD_TYPE
)
order by FOOD_TYPE desc-
์๋ธ์ฟผ๋ฆฌ:
(SELECT MAX(FAVORITES) FROM REST_INFO r2 WHERE r2.FOOD_TYPE = r1.FOOD_TYPE)- ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์์ ์ข ๋ฅ๋ณ๋ก ์ต๋ ์ฆ๊ฒจ์ฐพ๊ธฐ ์ ์ฐพ๊ธฐ
-
๋ฉ์ธ ์ฟผ๋ฆฌ
- ์๋ธ์ฟผ๋ฆฌ์์ ์ฐพ์ ์ต๋๊ฐ๊ณผ ์ผ์นํ๋ ๋ ์ฝ๋ ์ ํ
SELECT ID, NAME, HOST_ID
from PLACES
where HOST_ID in (
select HOST_ID
from PLACES
group by HOST_ID
having count(*) >= 2
)
order by ID- ์๋ธ์ฟผ๋ฆฌ์์ ๊ณต๊ฐ์ 2๊ฐ ๋ฑ๋กํ ์ ์
HOST_ID์ฐพ๊ธฐgroup by HOST_IDํธ์คํธID๋ก ๊ทธ๋ฃนํhaving count(*) >= 2๋ฑ๋กํ ๊ณต๊ฐ์ด 2๊ฐ ์ด์์ธ ๊ฒฝ์ฐ
- ๋ฉ์ธ ์ฟผ๋ฆฌ
WHERE HOST_ID IN (...)์๋ธ์ฟผ๋ฆฌ์์ ์ฐพ์ ํค๋น ์ ์ ๋ชฉ๋ก์ ์๋ ๋ ์ฝ๋ ๋ฐํ
SELECT CATEGORY, PRICE as MAX_PRICE, PRODUCT_NAME
from FOOD_PRODUCT
where PRICE in
(
select max(PRICE) from FOOD_PRODUCT group by CATEGORY)
and
CATEGORY in ('๊ณผ์', '๊ตญ', '๊น์น', '์์ฉ์ ')
order by 2 desc- ์๋ธ์ฟผ๋ฆฌ
- '๊ณผ์', '๊ตญ', '๊น์น', '์์ฉ์ ' ์นดํ ๊ณ ๋ฆฌ ๋ณ๋ก ๊ฐ์ฅ ๋น์ผ ๊ฐ๊ฒฉ
- ๋ฉ์ธ์ฟผ๋ฆฌ
- ์๋ธ์ฟผ๋ฆฌ์์ ์ฐพ์ ์นดํ ๊ณ ๋ฆฌ, ์ต๋ ๊ฐ๊ฒฉ, ์ํ ์ด๋ฆ ๋ฐํ
-
with ๊ตฌ๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์์ ๊ฐ์์ ํ ์ด๋ธ์ ์ ์ฅํ ๋ ์ฌ์ฉ
-
recursive์ ์ฌ๋ถ์ ๋ฐ๋ผ ์ฌ๊ท, ๋น์ฌ๊ท 2๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
WITH CTE AS ( SELECT 0 AS NUM UNION ALL SELECT 0 FROM SOME_TABLE # SOME_TABLE์ ํ ์๋งํผ ๋ฐ๋ณต๋๋ค. )
WITH RECURSIVE CTE AS ( SELECT 0 AS NUM UNION ALL SELECT NUM+1 FROM CTE WEHRE NUM < 10 # ๋ฐ๋ณต์ ๋ฉ์ถ๋ ์กฐ๊ฑด )
with recursive hours as (
select 0 as h
union all
select h+1 from hours
where h < 23
)
SELECT a.h as HOUR, count(b.ANIMAL_ID) as COUNT
from hours as a
left join ANIMAL_OUTS as b on a.h = hour(b.DATETIME)
group by 1
order by 1- recursive ์ด์ฉํด์ ๊ฐ์ ํ
์ด๋ธ ํ์ฑํ๊ธฐ
- ์ฌ๊ท๋ฅผ ์ด์ฉํด์ 0 ~ 23 ๊น์ง +1 ์ฉ ํด์ ํ๋์ ์ปฌ๋ผ์ ํ์ฑ
- ๊ฐ์ ํ
์ด๋ธ hours
- animal_outs ํ ์ด๋ธ๊ณผ left join
- ์ด๋ ๊ฒ ํด์ผ 0 ~ 23 ๊น์ง ์๊ฐ์ด ๋ชจ๋ ๋ฐํ
- count(*) ๊ฐ ์๋
count(animal_outs.animal_id)์ธ ์ด์- ์ค์ ๋ฐ์ดํฐ์ธ animal_outs์ ์๋ฅผ ์ง๊ณํ๊ธฐ ์ํด์ ์ ์ฒด ์ง๊ณ๋ฅผ ํ๊ฒ ๋๋ฉด ์์ ํ ์ด๋ธ ์ปฌ๋ผ๋ ์ง๊ณ๊ฐ ๋๊ธฐ๋๋ฌธ์ 0์ด ์๋ 1์ด ๋์ค๊ฒ ๋จ.
๊ธฐ์กด ํ ์ด๋ธ์ด๋ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ํ ์ด๋ธ์ ์์ฑํ ๋ ์ฌ์ฉํ๋ ๊ตฌ๋ฌธ
CREATE TABLE ์_ํ
์ด๋ธ๋ช
AS
SELECT ...
FROM ๊ธฐ์กด_ํ
์ด๋ธ
WHERE ์กฐ๊ฑด;
59413) โ ์ปฌ๋ผ ๊ตฌ์กฐ SELECT์ ์ง์ ๋ ์ปฌ๋ผ ๊ตฌ์กฐ๋ก ์ ํ ์ด๋ธ ์์ฑ
โ ๋ฐ์ดํฐ SELECT ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๊ฐ ์ ํ ์ด๋ธ์ ์ฝ์ ๋จ
โ ์ ์ฝ์กฐ๊ฑด PK, FK, NOT NULL ๋ฑ์ ์ ์ฝ์กฐ๊ฑด์ ๋ณต์ฌ๋์ง ์์
โ ์ฑ๋ฅ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์์ ๋ถ์ํ๊ฑฐ๋ ๋ฐฑ์ ํ ๋ ํจ์จ์