๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋‚˜์˜ ๋ชจ์–‘

[DB] SQL - DB ๋ช…๋ น์–ด ์˜ˆ์‹œ, ๊ธฐ๋ณธ ์ฟผ๋ฆฌ๋ฌธ ์˜ˆ์‹œ, ๋‚ด์žฅํ•จ์ˆ˜ ๋ณธ๋ฌธ

WILT/DB

[DB] SQL - DB ๋ช…๋ น์–ด ์˜ˆ์‹œ, ๊ธฐ๋ณธ ์ฟผ๋ฆฌ๋ฌธ ์˜ˆ์‹œ, ๋‚ด์žฅํ•จ์ˆ˜

kexon 2022. 8. 7. 16:10

๐Ÿ’™ DB ๋ช…๋ น์–ด ์˜ˆ์‹œ

๐Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ

create database test;

๐Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ

use test;

๐Ÿฌ ํ…Œ์ด๋ธ” ์ƒ์„ฑ

  • use๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ ํƒ → ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๊ฐ€๋Šฅ
  • ํ•„๋“œ(ํ‘œ์˜ ์—ด)์™€ ํ•จ๊ป˜ ๋งŒ๋“ค์–ด์•ผ๋จ
create table user (
	id int primary key auto_increment,
	name varchar(255),
	email varchar(255)
);

๐Ÿฌ ํ…Œ์ด๋ธ” ์ •๋ณด ํ™•์ธ

describe user;

๐Ÿ’™ SQL ๊ธฐ๋ณธ ์ฟผ๋ฆฌ๋ฌธ ์˜ˆ์‹œ

select

  • ์ปฌ๋Ÿผ ๋‹จ์œ„ ์ถœ๋ ฅ
-- ํ…Œ์ด๋ธ”๋ช…์—์„œ ์„ ํƒ๋œ ๋ชจ๋“  ์ปฌ๋Ÿผ ๊ฐ€์ ธ์˜ค๊ธฐ
select ์ปฌ๋Ÿผ๋ช… *(๋ชจ๋“  ์ปฌ๋Ÿผ)
from ํ…Œ์ด๋ธ”๋ช…

-- ์ „์ฒด ๋ฐ์ดํ„ฐ ๋ณด๊ธฐ
select * from ํ…Œ์ด๋ธ”๋ช…;

-- ํŠน์ • ์ปฌ๋Ÿผ ๋ณด๊ธฐ
select ํŠน์ •์ปฌ๋Ÿผ from ํ…Œ์ด๋ธ”๋ช…;

from

  • from + ๊ฒฐ๊ณผ๊ฐ’ ๋ฐ›์„ ๋ฐ์ดํ„ฐํ…Œ์ด๋ธ”์„ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ํ…Œ์ด๋ธ” ๊ด€๋ จ ์ž‘์—… ์‹œ ๋ฐ˜๋“œ์‹œ ์ž…๋ ฅ
-- ์ฝ”๋“œ ํŠน์„ฑ์„ ํ…Œ์ด๋ธ”์—์„œ ์‚ฌ์šฉ
select ํŠน์„ฑ1
from ํ…Œ์ด๋ธ”์ด๋ฆ„;

-- ๋ช‡ ๊ฐ€์ง€์˜ ํŠน์„ฑ์„ ํ…Œ์ด๋ธ”์—์„œ ์‚ฌ์šฉ
select ํŠน์„ฑ1, ํŠน์„ฑ2
from ํ…Œ์ด๋ธ”์ด๋ฆ„;

-- ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํŠน์„ฑ ์„ ํƒ
select *      -- * ๋Š” ์™€์ผ๋“œ์นด๋“œ๋กœ, ์ „๋ถ€ ์„ ํƒํ•  ๋•Œ ์‚ฌ์šฉ
from ํ…Œ์ด๋ธ”์ด๋ฆ„;

where

  • ํ•„ํ„ฐ ์—ญํ• ์„ ํ•˜๋Š” ์ฟผ๋ฆฌ๋ฌธ์œผ๋กœ, ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉ
  • ํŠน์ • ๊ฐ’๊ณผ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ์ฐพ๊ธฐ
select ํŠน์„ฑ1, ํŠน์„ฑ2 from ํ…Œ์ด๋ธ”์ด๋ฆ„
where ํŠน์„ฑ1 = "ํŠน์ • ๊ฐ’";
  • ํŠน์ • ๊ฐ’์„ ์ œ์™ธํ•œ ๋ฐ์ดํ„ฐ ์ฐพ๊ธฐ
select ํŠน์„ฑ1, ํŠน์„ฑ2 from ํ…Œ์ด๋ธ”์ด๋ฆ„
where ํŠน์„ฑ2 <> "ํŠน์ • ๊ฐ’";
  • ํŠน์ • ๊ฐ’๊ณผ ๋น„๊ต์—ฐ์‚ฐ์ž
    • ํฌ๊ฑฐ๋‚˜ ์ž‘์€ ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ: <, >
    • ๋น„๊ตํ•˜๋Š” ๊ฐ’์„ ํฌํ•จํ•˜๋Š” ํ•„ํ„ฐ: <=, >=
select ํŠน์„ฑ1, ํŠน์„ฑ2 from ํ…Œ์ด๋ธ”์ด๋ฆ„
where ํŠน์„ฑ1 > "ํŠน์ • ๊ฐ’";

select ํŠน์„ฑ1, ํŠน์„ฑ2 from ํ…Œ์ด๋ธ”์ด๋ฆ„
where ํŠน์„ฑ1 <= "ํŠน์ • ๊ฐ’";
  • ๋ฌธ์ž์—ด์—์„œ ํŠน์ • ๊ฐ’๊ณผ ๋น„์Šทํ•œ ๊ฐ’๋“ค ํ•„ํ„ฐ: like, \\%, \\*
select ํŠน์„ฑ1, ํŠน์„ฑ2 from ํ…Œ์ด๋ธ”์ด๋ฆ„
where ํŠน์„ฑ2 like "%ํŠน์ • ๋ฌธ์ž์—ด%";
  • ๋ฆฌ์ŠคํŠธ ๊ฐ’๋“ค๊ณผ ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ: in
select ํŠน์„ฑ1, ํŠน์„ฑ2 from ํ…Œ์ด๋ธ”์ด๋ฆ„
where ํŠน์„ฑ2 in("ํŠน์ • ๊ฐ’1","ํŠน์ • ๊ฐ’2");
  • ๊ฐ’์ด ์—†์„ ๋•Œ(= null): is
select * from ํ…Œ์ด๋ธ”์ด๋ฆ„
where ํŠน์„ฑ1 is null;
  • ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ ์ œ์™ธ: not
select * from ํ…Œ์ด๋ธ”์ด๋ฆ„
where ํŠน์„ฑ1 is not null;

orderby

  • ๋ฐ์ดํ„ฐ ๊ฒฐ๊ณผ๋ฅผ ์–ด๋–ค ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ์ถœ๋ ฅํ• ์ง€ ๊ฒฐ์ •ํ•˜๋ฉฐ, ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉ
  • ๊ธฐ๋ณธ ์ •๋ ฌ: ์˜ค๋ฆ„์ฐจ์ˆœ
select * from ํ…Œ์ด๋ธ”์ด๋ฆ„
order by ํŠน์„ฑ1;
  • ๋‚ด๋ฆผ์ฐจ์ˆœ
select * from ํ…Œ์ด๋ธ”์ด๋ฆ„
order by ํŠน์„ฑ1 desc;

limit

  • ์ฟผ๋ฆฌ๋ฌธ ์ œ์ผ ๋งˆ์ง€๋ง‰์— ์‚ฌ์šฉํ•˜๋ฉฐ, ์ถœ๋ ฅํ•  ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜ ์ •ํ•จ
  • ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉ
  • ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜(๊ฒฐ๊ณผ) 200๊ฐœ๋งŒ ์ถœ๋ ฅ
select * from ํ…Œ์ด๋ธ”์ด๋ฆ„ limit 200;

distinct

  • ์ค‘๋ณต๊ฐ’ ์ œ๊ฑฐ
  • ํŠน์„ฑ1์„ ๊ธฐ์ค€์œผ๋กœ
select distinct ํŠน์„ฑ1 from ํ…Œ์ด๋ธ”์ด๋ฆ„;
  • ํŠน์„ฑ1, ํŠน์„ฑ2, ํŠน์„ฑ3์˜ ์œ ๋‹ˆํฌํ•œ ‘์กฐํ•ฉ’ ๊ฐ’๋“ค ์„ ํƒ
select distinct ํŠน์„ฑ1, ํŠน์„ฑ2, ํŠน์„ฑ3 from ํ…Œ์ด๋ธ”์ด๋ฆ„;

inner join

  • ์„œ๋กœ ๊ณตํ†ต๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‘˜ ์ด์ƒ์˜ ํ…Œ์ด๋ธ” ์—ฐ๊ฒฐ(join)
select * 
from ํ…Œ์ด๋ธ”1 
join ํ…Œ์ด๋ธ”2 on ํ…Œ์ด๋ธ”1.ํŠน์„ฑA = ํ…Œ์ด๋ธ”2.ํŠน์„ฑB;

outer join

  • left outer join - left inclusive ์‹คํ–‰
select *
from ํ…Œ์ด๋ธ”1
left outer join ํ…Œ์ด๋ธ”2 on ํ…Œ์ด๋ธ”1.ํŠน์„ฑA = ํ…Œ์ด๋ธ”2.ํŠน์„ฑB;
  • right outer join - right inclusive ์‹คํ–‰
select *
from ํ…Œ์ด๋ธ”1
right outer join ํ…Œ์ด๋ธ”2 on ํ…Œ์ด๋ธ”1.ํŠน์„ฑA = ํ…Œ์ด๋ธ”2.ํŠน์„ฑB;

์—ฌ๋Ÿฌ ์ฟผ๋ฆฌ๋ฌธ ํ•œ ๋ฒˆ์— ์จ๋ณด๊ธฐ

  • ์œ ๋Ÿฝ์—์„œ ์˜จ ๊ณ ๊ฐ์„ ๋„์‹œ๋ณ„๋กœ ๋ฌถ์€ ๋’ค, ๊ฐ ๋„์‹œ ์ˆ˜์— ๋”ฐ๋ผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ , CustomerId์— ๋”ฐ๋ผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ 3๊ฐœ์˜ ๊ฒฐ๊ณผ๋งŒ ์š”์ฒญ
select c.CustomerId, c.FirstName, count(c.City) as 'City Count'
from customers as c
join employees as e on c.SuportRepId = e.EmployeeId
where c.Country = 'Europe'
group by c.city
order by 3 desc, c.CustomerId asc
limit 3;

๐Ÿ’™ SQL ๋‚ด์žฅํ•จ์ˆ˜

๐Ÿค ์ง‘ํ•ฉ์—ฐ์‚ฐ: ๋ ˆ์ฝ”๋“œ ์กฐํšŒ → ๋ถ„๋ฅ˜ → ํŠน์ • ์ž‘์—…

group by

  • ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด์„œ ๋ฐ์ดํ„ฐ ์กฐํšŒ
select * from customers
group by state;

having

  • group by๋กœ ๊ทธ๋ฃนํ™”ํ•œ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ํ•„ํ„ฐ๋ง
  • where์™€ ์ฐจ์ด์ ์€ where๋Š” ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•„ํ„ฐ๋ง
select customerId, avg(total) from invoices
group by customerId
having avg(total) > 6;

count()

  • ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ์…€ ๋•Œ ์‚ฌ์šฉ
select state, count(*) from customers
group by states;

sum()

  • ๋ฐ์ดํ„ฐ ํ•ฉ ๊ณ„์‚ฐ
select invoiceId, sum(unitPrice)
from invoice_items
group by invoiceId;

-- invoice_items ํ…Œ์ด๋ธ”์—์„œ invoiceId ํ•„๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ™”ํ•˜๊ณ 
-- unitPrice ํ•„๋“œ ํ•ฉ์„ ๊ตฌํ•จ

avg()

  • ๋ฐ์ดํ„ฐ ํ‰๊ท ๊ฐ’ ๊ณ„์‚ฐ
select trackId, avg(unitPrice)
from invoice_items
group by trackId;

max(), min()

  • ๊ฐ ๋ฐ์ดํ„ฐ์˜ ์ตœ๋Œ€๊ฐ’, ์ตœ์†Œ๊ฐ’ ๊ณ„์‚ฐ
select customerId, min(total)
from invoices
group by customerId;

select ์‹คํ–‰ ์ˆœ์„œ

  • from → where → group by → having → select → order by
select customerid, avg(total)  -- ์กฐํšŒ๋œ ๊ฒฐ๊ณผ์—์„œ customerId ํ•„๋“œ์™€ total ํ•„๋“œ ํ‰๊ท ๊ฐ’ ๊ตฌํ•˜๊ธฐ
from invoices                  -- invoices ํ…Œ์ด๋ธ”์—์„œ
where customerId >= 10         -- customerId ํ•„๋“œ๊ฐ€ 10 ์ด์ƒ์ธ ๋ ˆ์ฝ”๋“œ ์กฐํšŒ
group by customerId            -- customerId ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ™”
having sum(total) >= 30        -- total ํ•„๋“œ์˜ ์ดํ•ฉ์ด 30 ์ด์ƒ์ธ ๊ฒฐ๊ณผ๋“ค๋งŒ ํ•„ํ„ฐ๋ง
order by 2;                    -- ํ•„๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•œ ๊ฒฐ๊ณผ ๋ฆฌํ„ด

'WILT > DB' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[DB] SQL vs NoSQL  (0) 2022.08.07
Comments