where๋ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํํฐ๋งํ๋ ์กฐ๊ฑด์ ์ง์ ํ๋ ๋ฉ์๋์
๋๋ค. ๋ค์ํ ์ฐ์ฐ์์ ์กฐ๊ฑด ์กฐํฉ์ ์ง์ํ๋ฉฐ, ํ์
์์ ํ๊ฒ ํํฐ๋งํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
๋จ์ ๋ฑํธ ์กฐ๊ฑด
๋น๊ต ์ฐ์ฐ์
=- ๊ฐ์ (๊ธฐ๋ณธ๊ฐ)!=- ๊ฐ์ง ์์>- ๋ณด๋ค ํผ>=- ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์<- ๋ณด๋ค ์์<=- ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์like- ํจํด ๋งค์นญnot like- ํจํด ๋ถ์ผ์นilike- ๋์๋ฌธ์ ๋ฌด์ ํจํด ๋งค์นญ (PostgreSQL)not ilike- ๋์๋ฌธ์ ๋ฌด์ ํจํด ๋ถ์ผ์น (PostgreSQL)
๊ฐ์ฒด ํํ ์กฐ๊ฑด
์ฌ๋ฌ AND ์กฐ๊ฑด์ ๊ฐ์ฒด๋ก ์ง์ ํ ์ ์์ต๋๋ค.NULL ์ฒ๋ฆฌ
IS NULL
IS NOT NULL
ํจํด ๋งค์นญ (LIKE)
๋ถ๋ถ ์ผ์น
NOT LIKE
ILIKE (๋์๋ฌธ์ ๋ฌด์, PostgreSQL)
PostgreSQL์์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋ ํจํด ๋งค์นญ์ ์ํํฉ๋๋ค.NOT ILIKE (PostgreSQL)
ilike์ not ilike๋ PostgreSQL์ ๋์๋ฌธ์ ๋ฌด์ ํจํด ๋งค์นญ ์ฐ์ฐ์์
๋๋ค.whereIn / whereNotIn
๊ฐ ๋ชฉ๋ก ์ค ํ๋
๋น ๋ฐฐ์ด ์ฒ๋ฆฌ
๋ณต์กํ ์กฐ๊ฑด ๊ทธ๋ฃน
whereGroup (AND ๊ทธ๋ฃน)
๊ดํธ๋ก ๋ฌถ์ธ ์กฐ๊ฑด๋ค์ ๋ง๋ญ๋๋ค.orWhereGroup (OR ๊ทธ๋ฃน)
์ค์ฒฉ ๊ทธ๋ฃน
Full-Text Search
whereMatch (MySQL)
MySQL์ FULLTEXT ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.whereMatch๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํด๋น ์ปฌ๋ผ์ FULLTEXT ์ธ๋ฑ์ค๊ฐ ์์ด์ผ ํฉ๋๋ค.whereTsSearch (PostgreSQL)
PostgreSQL์ tsvector๋ฅผ ์ฌ์ฉํฉ๋๋ค.whereSearch (PGroonga)
PGroonga ํ์ฅ์ ์ฌ์ฉํ ์ ๋ฌธ ๊ฒ์์ ๋๋ค.PGroonga ๊ฒ์์ ์ฌ์ฉํ ์ธ๋ฑ์ค์ ๋์ผํ ์ปฌ๋ผ ๊ตฌ์ฑ์ผ๋ก ๊ฒ์ํด์ผ ์ธ๋ฑ์ค๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.
whereFuzzy (pg_trgm)
PostgreSQL์pg_trgm ํ์ฅ์ ์ฌ์ฉํ ํผ์ง ๋ฌธ์์ด ๋งค์นญ์
๋๋ค. trigram ๊ธฐ๋ฐ์ผ๋ก ์คํ์ ๊ฐํ๊ณ , generated column๊ณผ GIN ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ๋ฉด ๋ค์ค ์ปฌ๋ผ ๊ฒ์์๋ ํจ๊ณผ์ ์
๋๋ค.
whereFuzzy๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด pg_trgm ํ์ฅ์ด ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค. CREATE EXTENSION IF NOT EXISTS pg_trgm์ผ๋ก ์ค์นํ ์ ์์ต๋๋ค. GIN ์ธ๋ฑ์ค(gin_trgm_ops)๋ฅผ ์์ฑํ๋ฉด ์ฑ๋ฅ์ด ํฌ๊ฒ ํฅ์๋ฉ๋๋ค.Raw SQL ์กฐ๊ฑด
whereRaw
๋ณต์กํ SQL ์กฐ๊ฑด์ ์ง์ ์์ฑํ ์ ์์ต๋๋ค.์ค์ ์์
- ์ฌ์ฉ์ ํํฐ๋ง
- ์ฃผ๋ฌธ ๊ฒ์
- ๋ณต์กํ ์กฐ๊ฑด
- ์ ๋ฌธ ๊ฒ์
- ๋ ์ง ๋ฒ์
์กฐ๊ฑด ์ฒด์ด๋
๋ชจ๋where ๋ฉ์๋๋ ์ฒด์ด๋ ๊ฐ๋ฅํ๋ฉฐ, ๊ธฐ๋ณธ์ ์ผ๋ก AND๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค.
OR ์กฐ๊ฑด
WhereGroup ๋ด์์ orWhere
์ต์์ ๋ ๋ฒจ์๋
orWhere๊ฐ ์์ต๋๋ค. OR ์กฐ๊ฑด์ whereGroup ๋๋ orWhereGroup ๋ด์์
์ฌ์ฉํ์ธ์.ํ์ ์์ ์ฑ
WHERE ์กฐ๊ฑด์ ํ์ ์์ ํ๊ฒ ๊ฒ์ฆ๋ฉ๋๋ค.์ฑ๋ฅ ์ต์ ํ
1. ์ธ๋ฑ์ค ํ์ฉ
2. LIKE/ILIKE ํจํด
PostgreSQL์์
ilike๋ ๋์๋ฌธ์ ๋ฌด์ ๊ฒ์์ ํธ๋ฆฌํ์ง๋ง, ๋์ฉ๋ ๋ฐ์ดํฐ์์๋ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์
์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ citext ํ์
์ด๋ pg_trgm ํ์ฅ์ ์ธ๋ฑ์ค ์ฌ์ฉ์ ๊ณ ๋ คํ์ธ์.3. IN vs ์ฌ๋ฌ OR
์ฃผ์์ฌํญ
1. NULL ์ฒ๋ฆฌ
2. ๋น ๋ฐฐ์ด
3. Raw SQL ์ฃผ์
4. ์กฐ๊ฑด ์์
๋ค์ ๋จ๊ณ
select
์กฐํํ ํ๋ ์ ํํ๊ธฐ
join
ํ
์ด๋ธ ์กฐ์ธํ๊ธฐ
order-by
๊ฒฐ๊ณผ ์ ๋ ฌํ๊ธฐ
limit
๊ฒฐ๊ณผ ๊ฐ์ ์ ํํ๊ธฐ