์ฐ์ ๋ฐ์ดํฐ๋ Django-seed๋ฅผ ์ด์ฉํด์ ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด ์คฌ์ต๋๋ค
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ mysql์ ์ฌ์ฉ์ค์ ๋๋ค
startswith๋ ์ฌ๋ฌ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋๋ฐ ํ์ํ ๋จ์ด๋ค์ ์ฅ๊ณ ๊ณต์ํ์ด์ง์์ ๐
print(str(๋ณ์.query))
๋ช
๋ น์ด๋ฅผ ์คํํด๋ณด๋ฉด ๋ด๊ฐ ์์ฑํ ์ฝ๋๊ฐ sql์ธ์ด๋ก๋ ์ด๋ป๊ฒ
์์ฑ์ด ๋์ด์๋์ง ํ์ธ ๊ฐ๋ฅ
ํฉ์งํฉ ํ์์ ์ฐ๋ฆฌ๊ฐ ์ฐ๋ or ๊ทธ๋๋ก์์
์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ณด๋ฉด ์ด๋ฆ์ด a์ b๋ก ์์ํ๋ ์ฌ๋ ๋๋ค ๊ตฌํ ์ ์์ด์
์ฟผ๋ฆฌ์
์ ๊ตฌํ๋ ์ฝ๋ ์ฌ์ด์ | ๊ธฐํธ๋ฅผ ๋ถ์ฌ ์ฌ์ฉํ๋ฉด ๋์
or๋ณด๋ค ๊ฐ๋จํ๋ค ์ญ ์ด์ด์ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์์์ ๊ตฌํด์ค์
์ฅ๊ณ ์์ ๋๋ํด
์ด๋ฐ ๋ฐฉ๋ฒ์ด ์๋๋ผ๋ฉด ์์ ๋์จ or์์ ์ฒ๋ผ and์ ์ฐ์ฐ์์ธ &์ ์ฌ์ฉํ๋ฉด ๋์
์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋ ์ฟผ๋ฆฌ์
์ ๊ตฌํด์ค์
๋ง์ด ์ข ์ด๋ ค์ด ๋ฏํ๋ฐ ๋ฐ์ ์ฌ์ง์ ๋ณด๊ฒ๋๋ฉด ๋ฐ๋ก ์๊ฑฐ์์
๋ฐ์ดํฐ๋ค์ ํฉ์งํฉ์ ๋ณผ ์ ์์ด์
or๊ณผ ๋น์ทํ์ง๋ง, ๋ค๋ฅธ ์ ์ด ์์ด์
or๊ณผ ๋ค๋ฅธ์ ์ด๋ผ๋ฉด
union์ ๊ฒฝ์ฐ ๊ฐ์ ์ด๋ฆ์ column์ด ์์ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉ ๊ฐ๋ฅํด์
sql๋ฌธ๊ณผ ์๋นํ ๋น์ทํ๋ค๋ ๊ฑธ ๋ณผ ์ ์์ด์
๋ณด๊ฒ ๋๋ฉด sql๋ฌธ์ ๊ต์ฅํ ์ง๊ด์ ์ด๋ผ ์ด๋ค ๊ฑธ ๋ปํ๋์ง ๋ฐ๋ก ์์ค๊ฑฐ์์
๊ฐ์ ์ํฉ์์ only๋ฅผ ์ธ ๊ฒฝ์ฐ
values์ id๋ฅผ ๊ฐ์ง๊ณ ์ค๋ผ๊ณ ์ฝ๋๋ฅผ ์ถ๊ฐ ํ์ง ์์๋๋ฐ
์ ์ ๋ก id๋ก ๊ฐ์ด ๊ฐ์ง๊ณ ์ค๋ ๊ฑธ ํ์ธ ํ ์ ์์ด์
์ ์ผ ์์ชฝ์ ๋์จ ๊ฒฐ๊ณผ๋ queryset2๋ฅผ
์ ์ผ ๋ฐ์์ชฝ ๊ฒฐ๊ณผ๋ queryset์ ์ถ๋ ฅํ ๊ฒฐ๊ณผ
ํ์ด์ฌ์์ ๋ฆฌ์คํธ๋ฅผ ๊ฐ์ง๊ณ ์ค๋ ๋ฐฉ๋ฒ๊ณผ ๋๊ฐ์์
๊ทธ๋๋ก ์ฐ์๋ฉด ๋์
์ด ๋ถ๋ถ๋ถํฐ๋ ์ฒ์ ๋ณด๋๊ฒ ๋ฑ์ฅํด์ ์กฐ๊ธ ๋นํฉํ์ง๋ง,
๊ตฌ๊ธ์ ๋์์ผ๋ก ์ ๋๋ก ์๊ฒ๋ฌ์ด์
์ด ๋ถ๋ถ๋ถํฐ ๋์ค๋ queryset2๋ ๋ฌด์ํ์๋ฉด ๋์
์ ๊ฐ ํ
์คํธ์ฉ์ผ๋ก ๋น๊ตํด ๋ณผ๋ ค๊ณ ์จ๋์ ๋ถ๋ถ์ด์์
์ฐ์ ์ฝ๋๋ง ๋ณด๊ฒ๋๋ฉด ์ด๊ฒ ๋ญ์ง? ํ์ค๋งํ ๋ถ๋ถ์ด๋ ํ๋ฐ,
๋ณด๋ฉด name_count๋ฅผ ์ ๊ฑธ๋ก ์ง์ ํด์ฃผ๊ณ countํ๊ฑธ ํํฐ๋ฅผ ํด์ค๋ค๋ผ๊ณ ์์คํ
๋ฐ...
๋ง์์ ๊ทธ๊ฑฐ์์
๊ทธ๋๋ annotate๊ฐ ์ ํํ ์ด๋ค์ผ์ ํ๋์ง ์์๋ณด๊ธฐ์ํด
sql๋ฌธ์ ์ถ๋ ฅ ํ์ด์
HAVING์ ์ ์ฐพ์๋ดค์ต๋๋ค
๊ฑฐ๊ธฐ์ ์ง๊ณํจ์๋ ๋ง์ด ๋์ ์ง๊ณํจ์๋ ์ฐพ์๋ดฃ๋ค...
์ง๊ณํจ์...
์ง๊ฒ...
์๋ ์๋๊ตฌ์...
์ง๊ณํจ์
COUNT SUM AVG STDDEV ๋ฑ ์ง๊ณ๋ฅผ ๋ผ๋ ์ฌ์ฉํ๋ ํจ์
์ฐพ์ ๋ณด๋ค ๋ณด๋ having๊ณผ group by์ ๋ค๋ฅธ์ ์ ๋ํ ๊ธ์ด ์์ด ์ดํด๋ดค์ต๋๋ค
GROUP BY
์ง๊ณํจ์์ ๊ฐ์ด ์ฌ์ฉํ ํ์์์ด ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํจ์๋ฅผ ๋ฌถ์
HAVING
WHERE์ ์ฌ์ฉํ ์ ์๋ค
์ง๊ณํจ์๋ฅผ ๊ฐ์ง๊ณ ์กฐ๊ฑด๋น๊ต๋ฅผ ํ ๋ ์ฌ์ฉ๋๋ค.
GROUP BY์ ํจ๊ป ์ฌ์ฉ๋๋ค.
๊ทธ๋ฃน์ ๋ง๋ค๊ณ ๊ทธ์ค์์ HAVING์์ ์ฌ์ฉํ ์ง๊ณํจ์์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ทธ๋ฃน์ GROUP BY๋ก ๋ฌถ์ด์ฃผ๋ ์์ด๋ค.
๊ณ ์ ํ ํ๋๊ฐ์ ์ฐพ์ ๋ ์ฌ์ฉํด์
๋ง์ฝ์ ์ ์ ๋ค์์ด ์ ๋ํฌํ ์ฌ๋์ ์ฐพ๋๋ค ๊ฐ์ ํ๋ค๋ฉด
queryset = models.User.objects.all().filter(username="admin")
์ด๋ฐ์์ผ๋ก ์ฐพ์ ์๋ ์๊ฒ์ง๋ง
ํน์ ๊ฐ์ ์ฐพ๋๊ฒ ์๋ ๊ทธ๋ฅ ์ ๋ํฌํ ๊ฐ๋ง ์ฐพ๊ณ ์ถ๋ค๋ฉด
์์์ ์ฌ์ฉํ annotate๋ฅผ ์ฌ์ฉํด์ ์ฐพ์์ฃผ๋ฉด ๋๋ค .
queryset = User.objects.values(
'username'
).annotate(
name_count=Count('username')
).filter(name_count=1)
์์์ ์ฌ์ฉํ ๋ฐฉ์๊ณผ ๊ฐ์ ๋ฐฉ์์ด๋ฉฐ, count๊ฐ ์ผ์นํ๋ ๊ฑธ ์ฐพ์์ฃผ๋ฉด
์ฟผ๋ฆฌ์
์ ์ฐพ์์ค ์ ์๋ค.
์ฌ๊ธฐ๊น์ง ORM์ ๊ดํ ๋ด์ฉ์ด๊ณ ,
์ค๋๋ถํฐ ์ผ์ฃผ์ผ์ ๋๋ ORM์ ๊ดํ๋ด์ฉ์ ์ญ ์ ๋ฆฌํด๋ณด๊ณ
์ดํดํด๋ณด๋ ค ํฉ๋๋ค.
์ฌ๊ธฐ์ ๊ณต๋ถํ ๋ด์ฉ์ ํ
์คํธํด๋ณด๊ณ ์ ๋ฆฌํ ๋ด์ฉ์
๋๋ค.
ํ๊ธ๋ฒ์ญ์ด ๋์์ด์ ๋ณด๊ธฐ ๋๊ฒ ์ข์์ ๐
์ค๊ฐ์ค๊ฐ ์ค๋ช
์ด ๋ถ์กฑํ ๋ถ๋ถ์ด ์๊ธดํ๋ฐ,
๊ทธ๋ฐ๋ถ๋ถ์ ์กฐ๊ธ๋ง ์ฐพ์ผ๋ฉด ๊ธ๋ฐฉ ๋์ค๋๊น ์ฐพ๊ธฐ ์ฌ์์