๐ผ ๊ณต๋ถํ๋ ์ฑ
SQL ์ ๋ฌธ - ๊ฐ์ฑ์ฑ ์ง์ / ์ด์ง์ค ํผ๋ธ๋ฆฌ์ฑ
๐ ๋จ์ถํค
์ฃผ์ : ctrl + k + c
์ฃผ์ ํด์ : ctrl + k + u
๋๋ฌธ์ : ctrl + shift + u
์๋ฌธ์ : ctrl + shift + l
SELECT [์ด] FROM [ํ
์ด๋ธ]
SELECT symbol, company_name, last_crawel_date, close_price FROM nasdaq_company
๋ธ๋ก ์ฒ๋ฆฌ ํ๊ณ Alt+F1 -> ํ
์ด๋ธ ์ด ์ ๋ณด ๊ฒ์
SELECT [์ด] FROM [ํ
์ด๋ธ] WHERE [์ด] = [์กฐ๊ฑด๊ฐ]
SELECT * FROM nasdaq_company WHERE symbol = 'MSFT'
-- MSFT๋ฅผ ์๋ฌธ์๋ก ๋ฐ๊พธ์ด๋ ๊ฒฐ๊ณผ๋ ๋์ผ
-- ์์๋ฐ์ดํ๊ฐ ์๋ ํฐ๋ฐ์ดํ๋ก ๋ฐ๊พธ๋ฉด ์คํX
-- close_price๊ฐ 14 ๋ฏธ๋ง์ธ ํ์ ๊ฒ์
select * from nasdaq_company where close_price < 14
-- last_crawel_date๊ฐ 2021-06-24 ๋ฏธ๋ง์ธ ํ์ ๊ฒ์
select * from nasdaq_company where last_crawel_date <'2021-06-24'
select * from nasdaq_company where ipo_year between 2010 and 2011
select * from nasdaq_company where last_crawel_date between '2021-03-17' and '2021-03-19'
and
select * from nasdaq_company
where sector = 'Finance' AND industry = 'Major Banks
or
select * from nasdaq_company
where symbol = 'msft' or symbol = 'amd' or symbol = 'amzn'
+ IN์ ์ฌ์ฉํด OR๋ฐ๋ณต ์ฌ์ฉ์ ๋์ฒดํ ๋ฐ์ดํฐ ๊ฒ์
select * from nasdaq_company
where symbol IN ('msft', 'amd', 'amzn')
์๊ตฌ์ฌํญ : sector๊ฐ 'Technology' ๋๋ 'Consumer Services' ์ด๋ฉด์ symbol์ด 'MSFT', 'AMD', 'AMZN'์ธ ๋ฐ์ดํฐ ๊ฒ์
select * from nasdaq_company
where sector = 'Technology' or sector = 'Consumer Services' and symbol in ('msft' ,'amd','amzn')
์ฐ์ฐ์์ ์ฐ์ ์์ ๋๋ฌธ์ ์๊ตฌ์ฌํญ๋๋ก ์ถ๋ ฅ๋์ง ์์
+ ์๊ดํธ๋ก ๋จผ์ ์คํ๋์ด์ผ ํ๋ ์ฟผ๋ฆฌ์ ์ฐ์ ์์ ์ง์
select * from nasdaq_company
where (sector = 'Technology' or sector = 'Consumer Services') and symbol in ('msft' ,'amd','amzn')
null ?
์์ ์ ์๋์ง ์์ ๊ฐ, ์ซ์ 0๊ณผ ๊ณต๋ฐฑ๋ฌธ์์๋ ๋ค๋ฆ
--sector ๋ฐ์ดํฐ๊ฐ null์ธ ๋ฐ์ดํฐ ๊ฒ์
select * from nasdaq_company
where sector is null
--sector ๋ฐ์ดํฐ๊ฐ null์ด ์๋ ๋ฐ์ดํฐ ๊ฒ์
select * from nasdaq_company
where sector is not null
SELECT [์ด] FROM [ํ
์ด๋ธ] WHERE [์ด] = [์กฐ๊ฑด๊ฐ] ORDER BY [์ด] [ASC, DESC]
์์ด ์ฐ์ ์์
use DoItSQL;
with cte(col_1) as (
select N'ABC' union all
select N'123' union all
select N'๊ฐ๋๋ค'
)
select * from cte
order by col_1 asc
ํ๊ธ ์ฐ์ ์์
use master;
with cte(col_1) as (
select N'ABC' union all
select N'123' union all
select N'๊ฐ๋๋ค'
)
select * from cte
order by col_1 asc
1๊ฐ ์ด ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ
select * from nasdaq_company order by symbol
2๊ฐ ์ด ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ
select * from nasdaq_company
where sector is not null and sector <> ''
order by sector, industry
+ ์ ๋ ฌ ์์๊ฐ ๋ฐ๋๋ค๋ฉด??
select * from nasdaq_company
where sector is not null and sector <> ''
order by industry, sector
๊ฒฐ๊ณผ๋ ๋ค๋ฅด๊ฒ ํ์๋จ
--- asc๊ฐ ๊ธฐ๋ณธ๊ฐ์ด๋ฏ๋ก ์๋ต ๊ฐ๋ฅ !
select * from nasdaq_company
order by symbol desc
+ ์ค๋ฆ์ฐจ์๊ณผ ๋ด๋ฆผ์ฐจ์ ์กฐํฉํด ์ ๋ ฌ
select * from nasdaq_company
where sector is not null and sector <> ''
order by sector asc, symbol desc
ipo_year์์๋ ๋ด๋ฆผ์ฐจ์, symbol์์๋ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ ํ ์์ 10๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฌํ๋ ์ฟผ๋ฆฌ
select top 10 * from nasdaq_company
order by ipo_year desc, symbol asc
symbol์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ ๋ค์ 1000๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฑด๋๋ฐ๊ณ 1001๋ฒ์งธ ๋ฐ์ดํฐ๋ถํฐ ์ถ๋ ฅํ๋ ์ฟผ๋ฆฌ
select * from nasdaq_company
order by symbol
offset 1000 rows --1000๊ฐ ๊ฑด๋๋ฐ๊ณ ์ถ๋ ฅ
FETCH NEXT๋ ๋ฐ๋์ OFFSET๊ณผ ํจ๊ป ์ฌ์ฉํด์ผ ํ๋ฉฐ ์ถ๋ ฅํ ํ์ ๊ฐ์ ์ง์ ๊ฐ๋ฅ 1001๋ฒ์งธ ๋ฐ์ดํฐ๋ถํฐ 10๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ ์ฟผ๋ฆฌ
select * from nasdaq_company
order by symbol
offset 1000 rows
fetch next 10 rows only
Like์ ๊ธฐ๋ณธ ํ์
select [์ด] from [ํ
์ด๋ธ] where [์ด] like [์กฐ๊ฑด๊ฐ]
symbol ์ด์์ A๋ก ์์ํ๋ ๋ฌธ์์ด ๊ฒ์
select * from nasdaq_company
where symbol like 'A%'
symbol ์ด์์ A๋ก ๋๋๋ ๋ฌธ์์ด ๊ฒ์
select * from nasdaq_company
where symbol like '%A'
ํน์ ๋ฌธ์์ด์ ์ ์ธํ ๋ฐ์ดํฐ ๊ฒ์
select * from nasdaq_company
where symbol not like '%A'
ํน์ ๋ฌธ์๋ฅผ ํฌํจํ ๋ฌธ์์ด ๊ฒ์
-> %๋ฅผ ํฌํจํ ์์ ํ
์ด๋ธ์์ A%BC๋ง ๊ฒ์
with cte(col_1) as (
select 'A%BC' union all
select 'A_BC' union all
select 'ABC'
)
select * from cte
where col_1 like '%#%%' escape '#'
A๋ก ์์ํ๊ณ C๋ก ๋๋๋ฉด์ ๋ฌธ์์ด์ด ๋ค๊ฐ์ธ symbol ๊ฒ์
select * from nasdaq_company
where symbol like 'A__C'
_์ % ํฌํจํด ๋ฌธ์์ด ๊ฒ์
select * from nasdaq_company
where symbol like 'A_C%'
๐ผ % ์ _ ์ ์ฐจ์ด
%์ _์ ๋ค๋ฅด๊ฒ ๋ฌธ์ ๊ฐ์๋ฅผ ์ง์ ํ์ง ์์
ex) A%B -> ACB, ADDB, AWEWEWB, AdfB ๋ฑ A๊ฐ ๋งจ ์์ด๊ณ B๊ฐ ๋งจ ๋์ด๊ธฐ๋ง ํ๋ฉด ๋จ
A_B -> ACB, AEB ๋ฑ A๊ฐ ๋งจ ์์ด๊ณ B๊ฐ ๋งจ ๋์ด์ง๋ง ๊ฐ์ด๋ฐ๋ ํ๊ธ์์ฌ์ผ ํจ
[]์ ์ฌ์ฉ ๋ฐฉ๋ฒ
- [A, B, C]% ๋๋ [A-C]% : ์ฒซ ๊ธ์๊ฐ A๋๋ B๋๋ C๋ก ์์ํ๋ ๋ชจ๋ ๋ฌธ์์ด ๊ฒ์
- %[A, B, C] ๋๋ %[A-C]: ๋ง์ง๋ง ๊ธ์๊ฐ A ๋๋ B๋๋ C๋ก ๋๋๋ ๋ชจ๋ ๋ฌธ์์ด ๊ฒ์
์ฒซ ๊ธ์๊ฐ A์ด๊ณ ๋๋ฒ์งธ ๋ฌธ์๊ฐ A๋๋ B๋๋ C์ธ symbol๊ฒ์ : -์ฌ์ฉ
select * from nasdaq_company
where symbol like 'A[A-C]' --A[A,B,C]์ ๊ฐ์
๋ฌธ์๋ ๋ฌธ์ ๋ฒ์๋ฅผ ์ ์ธํ ๋ฌธ์์ด ๊ฒ์
์ฒซ ๊ธ์๊ฐ A์ด๊ณ ๋๋ฒ์งธ ๋ฌธ์๊ฐ A,B,C๊ฐ ์๋ symbol๊ฒ์
select * from nasdaq_company
where symbol like 'A[^A, ^B, ^C]'
A๋ก ์์ํ๋ฉด์ ๋๋ฒ์งธ ๋ฌธ์๋ C,P๋ฅผ ํฌํจํ๊ณ ์ธ๋ฒ์งธ ๋ฌธ์๋ T๋ฅผ ํฌํจํ์ง ์์ผ๋ฉด์ ๋ง์ง๋ง ๋ฌธ์๋ W๋ก ๋๋๋ ๋ฌธ์์ด ๊ฒ์
select * from nasdaq_company
where symbol like 'A[C, P][^T]%W'
์ฒซ๋ฒ์งธ ๋ฌธ์๋ A, ๋๋ฒ์งธ ๋ฌธ์๋ A-C, ์ธ๋ฒ์งธ ๋ฌธ์๋ ์๋ฌด๊ฑฐ๋, ๋ค๋ฒ์งธ ๋ฌธ์๋ 0์ธ ๋ฌธ์์ด ๊ฒ์
GROUP BY ๋ฌธ๊ณผ HAVING ๋ฌธ์ ๊ธฐ๋ณธ ํ์
select [์ด] from [ํ
์ด๋ธ] where [์ด] = [์กฐ๊ฑด๊ฐ] group by [์ด] having [์ด] = [์กฐ๊ฑด๊ฐ]
SELECT sector from nasdaq_company
group by sector
select sector, industry from nasdaq_company
group by sector, industry
select sector, count(*) as cnt from nasdaq_company
group by sector
-> sector ์ด์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํ ํ ๋ค์ countํจ์๋ก ๊ทธ๋ฃนํํ ๊ฐ ํ์ด ๋ช๊ฐ์ธ์ง ๊ฒ์ํ๋ ์ฟผ๋ฆฌ
-> countํจ์์ as cnt๋ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ ๋ ์ด ์ด๋ฆ์ ์ง์ ํด ์ค ๊ฒ
groupby์ ์๋ ์ด์ select์ ๊ทธ๋ฅ ์จ๋ ๋์ง๋ง ์๋ ์ด์ ์ง๊ณํจ์๋ก ์ฒ๋ฆฌํด์ค์ผ ๊ฐ๋ฅ
select sector, industry, sum(close_price) as sum from nasdaq_company
group by sector, industry
WHERE : ํ ์ด๋ธ์ ์๋ ์ด์ ์ ์ฉ
HAVING : SELECT๋ฌธ์ด๋ GROUP BY ๋ฌธ์ ์ฌ์ฉํ ์ด์๋ง ์ ์ฉ
select sector, industry, sum(close_price) as total from nasdaq_company
group by sector, industry
having sum(low_price) > 10
order by sector desc, industry
GROUP BY ๋ฌธ์ ์ฌ์ฉํ์ง ์๊ณ ์ค๋ณต ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๊ณ ์ถ์ ๋ ์ฌ์ฉ
select distinct [์ด ์ด๋ฆ] from [ํ
์ด๋ธ ์ด๋ฆ]
select distinct sector, industry from nasdaq_company
GROUP BY ๋ฌธ์ผ๋ก ํน์ ์ด์ ์ค๋ณต ๋ฐ์ดํฐ ์ ๊ฑฐ
select sector, industry from nasdaq_company
GROUP BY sector, industry
๊ธฐ๋ณธ ํ์
CREATE DATABASE [๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ]
TestDB ์์ฑ
CREATE DATABASE TestDB
use TestDB
TestDB ์ญ์
use master
drop database TestDB
ํ ์ด๋ธ์ ์์ฑํ๋ CREATE๋ฌธ์ ๊ธฐ๋ณธ ํ์
create table ํ
์ด๋ธ ์ด๋ฆ (
์ด1 ์๋ฃํ,
์ด2 ์๋ฃํ,
(...์๋ต...)
)
ํ ์ด๋ธ ์์ฑ
create table doit_create_table(
col_1 int,
col_2 nvarchar(50),
col_3 datetime
)
ํ
์ด๋ธ ์ ๊ฑฐ
drop table doit_create_table