union()์ ๋ํด์ ์ ๋ฆฌ
โ ๊ฐ์
`union()`์ ์งํฉ(set) ์๋ฃํ์ ๋น๋กฏํ์ฌ ์ฟผ๋ฆฌ์ (QuerySet) ๋ฑ ๋ค์ํ ๊ณณ์์ ์ฌ์ฉ๋๋ ์ฐ์ฐ์ผ๋ก, ๋ ์งํฉ(๋๋ ์ํ์ค)์ ํฉ์งํฉ์ ๋ฐํํ๋ ๊ธฐ๋ฅ์ ํ๋ค. ์ค๋ณต๋ ์์๋ ์ ๊ฑฐ๋๋ฉฐ, ์์์ ์์๋ ๋ณด์ฅ๋์ง ์๊ฑฐ๋ ๊ตฌํ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
Python ๊ธฐ๋ณธ ์๋ฃํ์์๋`set`์ ๋ฉ์๋๋ก, Django์์๋ QuerySet ์ฐ์ฐ์๋ ์ฌ์ฉ๋๋ค.
๐งฎ Python์์์ set.union()
โ ๋ฌธ๋ฒ
set1.union(set2, set3, ...)
๋๋ ์ฐ์ฐ์ ๋ฒ์ :
set1 | set2 | set3
โ ํน์ง
- ์ค๋ณต ์ ๊ฑฐ: ๋์ผํ ์์๋ ํ ๋ฒ๋ง ํฌํจ๋จ.
- ์๋ณธ ๋ณ๊ฒฝ X: ๊ธฐ์กด set ๊ฐ์ฒด๋ ๋ณ๊ฒฝ๋์ง ์๊ณ , ์ set์ด ๋ฐํ๋จ.
- ๋ค์์ set๊ณผ๋ ์ฐ์ฐ ๊ฐ๋ฅ
โ ์์
a = {1, 2, 3} b = {3, 4, 5} c = a.union(b) # {1, 2, 3, 4, 5}
๐งฐ Django์์์ `QuerySet.union()`
โ ๋ฌธ๋ฒ
queryset1.union(queryset2, all=False)
โ ํ๋ผ๋ฏธํฐ
- `queryset2`, ...: ๊ฐ์ ๋ชจ๋ธ์ QuerySet ๋๋ SQL ๊ตฌ์กฐ๊ฐ ๋์ผํ QuerySet
- `all` (๊ธฐ๋ณธ๊ฐ `False`): ์ค๋ณต ์ ๊ฑฐ ์ฌ๋ถ
- `False`: ์ค๋ณต ์ ๊ฑฐ (SQL์ `UNION`)
- `True`: ์ค๋ณต ํ์ฉ (SQL์ `UNION ALL`)
โ ์กฐ๊ฑด
- ๊ฐ์ ํ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ์ฟผ๋ฆฌ์ ๋ง ๊ฐ๋ฅ
- ์ ๋ ฌ(`.order_by()`)์ด ๋ถ์ ์ฟผ๋ฆฌ์ ์ `.union()` ์ ์ ์ ๋ ฌ ํด์ ํ์
โ ์์
qs1 = Author.objects.filter(country='Korea')
qs2 = Author.objects.filter(country='Japan')
combined_qs = qs1.union(qs2)
๐ `set.union()` vs `QuerySet.union()`
๊ตฌ๋ถ | set.union() | QuerySet.union() |
์ฌ์ฉ ๋์ | Python set | Django QuerySet |
์ค๋ณต ์ ๊ฑฐ | ๊ธฐ๋ณธ | ๊ธฐ๋ณธ (all=False) |
์ฐ์ฐ์ | ` | ` ์ฌ์ฉ ๊ฐ๋ฅ |
์์ | ๋ณด์ฅ ์ ๋จ | ์ ๋ ฌ ์ ๋จ |
๋ฐํ | ์๋ก์ด set | ์๋ก์ด QuerySet |
๐ง ์ฐธ๊ณ ์ฌํญ
- Python์ `frozenset`์๋ `union()`์ด ์์ (๋ถ๋ณ set)
- Pandas์ `Series`๋ `Index`๋ `.union()` ์ง์
- SQL์์๋ `UNION`, `UNION ALL`๊ณผ ๊ฐ์ ์ฉ์ด ์ฌ์ฉ — Django์ `QuerySet.union()`์ ์ด ๊ฐ๋ ๊ธฐ๋ฐ
'Back End ๐ฒ > Python ๐ป' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[250425] Python ๋ด์ฅ ํจ์ all()์ ์ดํด์ ์ฌ์ฉ๋ฒ (0) | 2025.04.25 |
---|---|
[250401] logging in Python (0) | 2025.04.01 |
[250218] f-string (Formatted String Literal)์ด๋? (0) | 2025.02.18 |
[250206] ๋งค์ง๋ฉ์๋๋~? (1) | 2025.02.06 |
[250127] bin() ํจ์๋?? (0) | 2025.01.27 |