*๋ฐ์ดํฐ ์๋ฃ๋ ํ๋น๋ฏธ๋์ด ์ฌ์ดํธ์ ํผ๊ณต ์๋ฃ์ค์ ์๋ ์๋ฃ
์๋ธ์ฟผ๋ฆฌ
์๋ธ์ฟผ๋ฆฌ๋ ์ฟผ๋ฆฌ ์์ () ์์ ์ฟผ๋ฆฌ๊ฐ ๋ ์๋ ๊ฒ์ด๋ค.
SELECT * FROM member WHERE height > (SELECT height FROM member WHERE mem_name LIKE '์์ดํํฌ');
(limit์ mysql ์ ์ฉ)
SELECT * FROM member WHERE height > (SELECT height FROM member WHERE mem_name LIKE '์์ดํํฌ')
ORDER BY height DESC LIMIT 3;
group by
group by๋ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ฃผ๋ ์ญํ ์ ํ๋ฉฐ, ๋์ผํ ๊ฐ์ ๊ฐ๋ ํ๋ค์ ํ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ ์ ์๋ค.
group by๋ ์ฃผ๋ก ์ง๊ณํจ์์ ์ฌ์ฉ๋๋ค.
sum(): ํฉ๊ณ
avg(): ํ๊ท
min(): ์ต์๊ฐ
max(): ์ต๋๊ฐ
count(): ํ์ ๊ฐ์
count(distinct): ์ค๋ณต๋์ง ์์ ํ์ ๊ฐ์
SELECT mem_id, SUM(amount) AS 'ํฉ๊ณ' FROM buy GROUP BY mem_id ORDER BY mem_id;
grouping๊ณผ ๊ด๋ จ๋ ์กฐ๊ฑด์์ where์ด ์๋ having์ ์ฌ์ฉํ๋ค.
SELECT mem_id, SUM(amount) AS 'ํฉ๊ณ' FROM buy GROUP BY mem_id HAVING SUM(amount) > 5 ORDER BY mem_id;
join (=inner join)
2๊ฐ ์ด์์ ํ
์ด๋ธ์ ๊ฒฐํฉํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
๋ง์ฝ Error Code: 1052. Column 'student_number' in field list is ambiguous ๊ฐ ๋ฌ๋ค๋ฉด, value ์ด๋ฆ์ด ๊ฒน์ณ์ ์ด๋ ํ
์ด๋ธ์ value๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฑด์ง ํ์คํ๊ฒ ํ์ํด ์ฃผ๋ฉด ๋๋ค.
SELECT buy.mem_id, SUM(price*amount) AS total
FROM buy
INNER JOIN member
ON buy.mem_id = member.mem_id
GROUP BY mem_id;
์์ ๋ฌธ์
Q1. ์๋
์๋๋ ๊ฐ์ ์ง์ญ์ ์ฌ๋ ์ฐ์์ธ ์์ด๋์ ์ด๋ฆ, ์ธ์์ ์ถ๋ ฅํ๋ผ.
(๋จ, ๋ฐ๋ท๋ ์ง๊ฐ ์ค๋๋ ์์ผ๋ก ์ ๋ ฌํ๋ผ.)
-- ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ select
-- Q1. ์๋
์๋๋ ๊ฐ์ ์ง์ญ์ ์ฌ๋ ์ฐ์์ธ ์์ด๋์ ์ด๋ฆ, ์ธ์์ ์ถ๋ ฅํ๋ผ.
-- ๋จ, ๋ฐ๋ท๋ ์ง๊ฐ ์ค๋๋ ์์ผ๋ก ์ ๋ ฌํ๋ผ
select mem_id, mem_name, mem_number
from member
where addr = (select addr from member where mem_name='์๋
์๋')
order by debut_date;
Q2. ์ด ๊ตฌ๋งค๋ด์ญ์ด ์ ์ผ ๋์ 5๋ช
์ ์์ด๋์ ๊ตฌ๋งค๋ด์ญ์ ์ถ๋ ฅํ๋ผ.
(๋จ, ๊ตฌ๋งค๋ด์ญ์ 100 ์ด์์ด์ด์ผ ํ๋ค.)
-- grouping์ ์ฌ์ฉํ select
-- Q2. ์ด ๊ตฌ๋งค๋ด์ญ์ด ์ ์ผ ๋์ 5๋ช
์ ์์ด๋์ ๊ตฌ๋งค๋ด์ญ์ ์ถ๋ ฅํ๋ผ.
-- ๋จ, ๊ตฌ๋งค๋ด์ญ์ 100 ์ด์์ด์ด์ผ ํ๋ค.
select mem_id, sum( price * amount ) as total
from buy
group by mem_id
having total > 100
order by total desc
limit 5;
Q3. ์ด๋ฆ์ '์ด'๊ฐ ํฌํจ๋ ๊ทธ๋ฃน์ ์ด๋ฆ๊ณผ ์์ด๋, ๋ฐ๋ท์ผ์๋ฅผ ํค๊ฐ ํฐ ์์ผ๋ก ์ถ๋ ฅํ๋ผ.
-- like๋ฅผ ์ฌ์ฉํ ์กฐ๊ฑด๋ฌธ
-- Q3. ์ด๋ฆ์ '์ด'๊ฐ ํฌํจ๋ ๊ทธ๋ฃน์ ์ด๋ฆ๊ณผ ์์ด๋, ๋ฐ๋ท์ผ์๋ฅผ ํค๊ฐ ํฐ ์์ผ๋ก ์ถ๋ ฅํ๋ผ.
select mem_name, mem_id, debut_date
from member
where mem_name
like '%์ด%'
order by height;
Q4. member ํ ์ด๋ธ์ ์์ด๋ธ์ ๋ํ ์ ๋ณด๋ฅผ ์ถ๊ฐํ๋ผ.
-- insert๋ฌธ
-- Q. member ํ
์ด๋ธ์ ์์ด๋ธ์ ๋ํ ์ ๋ณด๋ฅผ ์ถ๊ฐํ๋ผ.
insert into member values ('IVE', '์์ด๋ธ', 5, '์์ธ', '02', '12345678', 169, '2021.12.01');
-- date๋ 2021.12.01 ํํ๋ณด๋ค 2021-12-01์ ํ์ค์ผ๋ก ์ก๊ณ ์์ด์ warning ํ์๊ฐ ๋ฌ๋ค.
select * from member;
Q5. ์์ด๋ธ์ ๋ํ ์ ๋ณด๊ฐ ์๋ชป๋์๋ค. ๋ฉค๋ฒ ์๋ฅผ 5๋ช ์์ 6๋ช ์ผ๋ก ์์ ํ๋ผ.
-- update๋ฌธ
-- Q. ์์ด๋ธ์ ๋ํ ์ ๋ณด๊ฐ ์๋ชป๋์๋ค. ๋ฉค๋ฒ ์๋ฅผ 5๋ช
์์ 6๋ช
์ผ๋ก ์์ ํ๋ผ.
update member set mem_number = '6'
where mem_id = 'IVE';
select * from member;
Q6. ์ฌ์์น๊ตฌ๋ ํด์ฒดํ์๋ค. (ใ ใ ) member ํ ์ด๋ธ์์ ์ฌ์์น๊ตฌ๋ฅผ ์ญ์ ํ๋ผ.
-- delete๋ฌธ
-- Q. ์ฌ์์น๊ตฌ๋ ํด์ฒดํ์๋ค. (ใ
ใ
) member ํ
์ด๋ธ์์ ์ฌ์์น๊ตฌ๋ฅผ ์ญ์ ํ๋ผ.
delete from buy
where mem_id ='WMN';
-- PK๋ฅผ ์ญ์ ํ ๋๋ ๋ฌถ์ฌ์๋ FK๋ฅผ ๋จผ์ ์ญ์ ํด์ผํ๋ค.
delete from member
where mem_id = 'WMN';
select * from member;
Q7. ํผ๊ณต SQL์ ๊ตฌ๋งคํ ์ฐ์์ธ์ ์ด๋ฆ๊ณผ ์ธ์์ ์ถ๋ ฅํ๋ผ.
-- join์ ์ฌ์ฉํ select๋ฌธ
-- Q1. ํผ๊ณต SQL์ ๊ตฌ๋งคํ ์ฐ์์ธ์ ์ด๋ฆ๊ณผ ์ธ์์ ์ถ๋ ฅํ๋ผ.
select member.mem_name, member.mem_number
from member
join buy
on buy.mem_id = member.mem_id
where prod_name = 'ํผ๊ณตSQL';
Q8. ์ด ๊ตฌ๋งค๋ด์ญ์ด 300 ์ด์์ธ ์ฐ์์ธ์ ์ด๋ฆ, ๋ฐ๋ท์ผ์, ์ด ๊ตฌ๋งค๋ด์ญ์ ์ถ๋ ฅํ๋ผ.
(๋จ, 3๋ช
์ด ๋์ผ๋ฉด 3๋ช
๋ง ์ถ๋ ฅํ๊ณ ๊ตฌ๋งค๋ด์ญ์ด ๋์ ์์ผ๋ก ์ถ๋ ฅํ๋ผ.)
-- Q2. ์ด ๊ตฌ๋งค๋ด์ญ์ด 300 ์ด์์ธ ์ฐ์์ธ์ ์ด๋ฆ, ๋ฐ๋ท์ผ์, ์ด ๊ตฌ๋งค๋ด์ญ์ ์ถ๋ ฅํ๋ผ.
-- ๋จ, 3๋ช
์ด ๋์ผ๋ฉด 3๋ช
๋ง ์ถ๋ ฅํ๊ณ ๊ตฌ๋งค๋ด์ญ์ด ๋์ ์์ผ๋ก ์ถ๋ ฅํ๋ผ.
SELECT buy.mem_id, mem_name, debut_date, SUM(amount * price) AS total
FROM buy
JOIN member
ON member.mem_id = buy.mem_id
GROUP BY mem_id
HAVING total > 300
ORDER BY total DESC
LIMIT 3;
Q9. 1์ธ๋น ํ๊ท ๊ตฌ๋งค๋์ด ์ ์ผ ๋์ 3๋ช ์ ์ด๋ฆ๊ณผ ์์ด๋, ๋ฉค๋ฒ ์, 1์ธ ํ๊ท ๊ตฌ๋งค๋์ ์ถ๋ ฅํ๋ผ.
-- Q3. 1์ธ๋น ํ๊ท ๊ตฌ๋งค๋์ด ์ ์ผ ๋์ 3๋ช
์ ์ด๋ฆ๊ณผ ์์ด๋, ๋ฉค๋ฒ ์, 1์ธ ํ๊ท ๊ตฌ๋งค๋์ ์ถ๋ ฅํ๋ผ.
select member.mem_name, member.mem_id, member.mem_number, sum(price * amount)/member.mem_number as '1์ธ ํ๊ท ๊ตฌ๋งค๋'
from member
join buy
on buy.mem_id = member.mem_id
group by mem_id
order by '1์ธ ํ๊ท ๊ตฌ๋งค๋' desc
limit 3;
'๐ฅ๏ธ > DBMS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Oracle ๋ฌธ๋ฒ] order by ~ limit ๊ตฌํํ๊ธฐ (0) | 2023.06.28 |
---|---|
DB์ค๊ณ) ๋ฐฅ์ง ์ฐพ๋ ํ ์ด๋ธ ์ค๊ณ (0) | 2023.04.10 |
SQL ์ ์ฝ์กฐ๊ฑด (PK, FK, Unique, Check, Default) (0) | 2023.04.10 |
[MySQL] ํ ์ด๋ธ ๋ง๋ค๊ธฐ (0) | 2023.04.10 |
DB์ค๊ณ) ํ์ ํ ์ด๋ธ๊ณผ ์ฑ์ ํ ์ด๋ธ ์ค๊ณํ๊ธฐ (0) | 2023.04.09 |