Skip to main content
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 ๊ทธ๋ฃน)

์ค‘์ฒฉ ๊ทธ๋ฃน

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 ์กฐ๊ฑด์„ ์ง์ ‘ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
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

๊ฒฐ๊ณผ ๊ฐœ์ˆ˜ ์ œํ•œํ•˜๊ธฐ