필터와 조건 연산자

우리는 모든 방언별 필터와 조건 연산자를 기본적으로 지원합니다.

drizzle-orm에서 모든 필터와 조건 연산자를 가져올 수 있습니다:

import { eq, ne, gt, gte, ... } from "drizzle-orm";

eq

PostgreSQL
MySQL
SQLite
SingleStore

값이 n과 동일한 경우

import { eq } from "drizzle-orm";

db.select().from(table).where(eq(table.column, 5));
SELECT * FROM table WHERE table.column = 5;
import { eq } from "drizzle-orm";

db.select().from(table).where(eq(table.column1, table.column2));
SELECT * FROM table WHERE table.column1 = table.column2;

ne (Not Equal)

ne는 값이 특정 값과 같지 않은지 확인하는 조건을 나타냅니다. 아래는 ne를 사용한 예제입니다.

PostgreSQL
MySQL
SQLite
SingleStore

값이 n과 같지 않은 경우

import { ne } from "drizzle-orm";

db.select().from(table).where(ne(table.column, 5));
SELECT * FROM table WHERE table.column <> 5

두 컬럼의 값이 서로 같지 않은 경우

import { ne } from "drizzle-orm";

db.select().from(table).where(ne(table.column1, table.column2));
SELECT * FROM table WHERE table.column1 <> table.column2

이 예제들은 ne를 사용하여 특정 조건을 만족하는 데이터를 선택하는 방법을 보여줍니다.

---

gt (Greater Than)

지원되는 데이터베이스: PostgreSQL, MySQL, SQLite, SingleStore

gt 함수는 특정 값이 주어진 값보다 큰지 확인하는 데 사용됩니다.

값이 n보다 큰 경우

import { gt } from "drizzle-orm";

db.select().from(table).where(gt(table.column, 5));
SELECT * FROM table WHERE table.column > 5;

두 컬럼 값을 비교하는 경우

import { gt } from "drizzle-orm";

db.select().from(table).where(gt(table.column1, table.column2));
SELECT * FROM table WHERE table.column1 > table.column2;

위 예제들은 gt 함수를 사용하여 특정 조건을 만족하는 데이터를 조회하는 방법을 보여줍니다. 첫 번째 예제는 column의 값이 5보다 큰 경우를, 두 번째 예제는 column1의 값이 column2보다 큰 경우를 검색합니다.

gte (Greater Than or Equal)

PostgreSQL
MySQL
SQLite
SingleStore

값이 n보다 크거나 같은 경우를 확인합니다.

import { gte } from "drizzle-orm";

db.select().from(table).where(gte(table.column, 5));
SELECT * FROM table WHERE table.column >= 5
import { gte } from "drizzle-orm";

db.select().from(table).where(gte(table.column1, table.column2));
SELECT * FROM table WHERE table.column1 >= table.column2

lt (Less Than)

lt는 특정 값이 주어진 값보다 작은지 비교하는 데 사용됩니다. 이 기능은 PostgreSQL, MySQL, SQLite, SingleStore 데이터베이스에서 지원됩니다.

값이 n보다 작은 경우

import { lt } from "drizzle-orm";

db.select().from(table).where(lt(table.column, 5));
SELECT * FROM table WHERE table.column < 5;

두 컬럼 값을 비교하는 경우

import { lt } from "drizzle-orm";

db.select().from(table).where(lt(table.column1, table.column2));
SELECT * FROM table WHERE table.column1 < table.column2;

이 예제들은 lt를 사용하여 특정 조건을 만족하는 데이터를 조회하는 방법을 보여줍니다. 첫 번째 예제는 column의 값이 5보다 작은 경우를, 두 번째 예제는 column1의 값이 column2보다 작은 경우를 각각 조회합니다.

lte (Less Than or Equal)

PostgreSQL
MySQL
SQLite
SingleStore

lte는 값이 n보다 작거나 같은지 확인하는 함수입니다.

import { lte } from "drizzle-orm";

db.select().from(table).where(lte(table.column, 5));
SELECT * FROM table WHERE table.column <= 5
import { lte } from "drizzle-orm";

db.select().from(table).where(lte(table.column1, table.column2));
SELECT * FROM table WHERE table.column1 <= table.column2

---

exists

PostgreSQL
MySQL
SQLite
SingleStore

값이 존재하는지 확인

import { exists } from "drizzle-orm";

const query = db.select().from(table2)
db.select().from(table).where(exists(query));
SELECT * FROM table WHERE EXISTS (SELECT * from table2)

notExists

import { notExists } from "drizzle-orm";

const query = db.select().from(table2);
db.select().from(table).where(notExists(query));
SELECT * FROM table WHERE NOT EXISTS (SELECT * FROM table2);

위 코드는 drizzle-orm 라이브러리를 사용하여 SQL의 NOT EXISTS 구문을 구현한 예제입니다. 첫 번째 코드 블록은 TypeScript로 작성된 코드로, table2에서 데이터를 선택한 후, table에서 table2에 존재하지 않는 데이터를 선택합니다. 두 번째 코드 블록은 이에 해당하는 SQL 쿼리를 보여줍니다. 이 쿼리는 table에서 table2에 존재하지 않는 데이터를 선택하는 SQL 문입니다.

isNull

PostgreSQL
MySQL
SQLite
SingleStore

값이 null인 경우를 확인합니다.

import { isNull } from "drizzle-orm";

db.select().from(table).where(isNull(table.column));
SELECT * FROM table WHERE table.column IS NULL

isNotNull

PostgreSQL
MySQL
SQLite
SingleStore

값이 null이 아닌 경우를 확인합니다.

import { isNotNull } from "drizzle-orm";

db.select().from(table).where(isNotNull(table.column));
SELECT * FROM table WHERE table.column IS NOT NULL

---

inArray

PostgreSQL
MySQL
SQLite
SingleStore

값이 배열 안에 있는지 확인합니다.

import { inArray } from "drizzle-orm";

db.select().from(table).where(inArray(table.column, [1, 2, 3, 4]));
SELECT * FROM table WHERE table.column IN (1, 2, 3, 4);
import { inArray } from "drizzle-orm";

const query = db.select({ data: table2.column }).from(table2);
db.select().from(table).where(inArray(table.column, query));
SELECT * FROM table WHERE table.column IN (SELECT table2.column FROM table2);

notInArray

PostgreSQL
MySQL
SQLite
SingleStore

값이 배열에 포함되지 않는 경우를 확인합니다.

import { notInArray } from "drizzle-orm";

db.select().from(table).where(notInArray(table.column, [1, 2, 3, 4]));
SELECT * FROM table WHERE table.column NOT IN (1, 2, 3, 4)
import { notInArray } from "drizzle-orm";

const query = db.select({ data: table2.column }).from(table2);
db.select().from(table).where(notInArray(table.column, query));
SELECT * FROM table WHERE table.column NOT IN (SELECT table2.column FROM table2)

---

between

PostgreSQL
MySQL
SQLite
SingleStore

두 값 사이의 값을 검색합니다.

import { between } from "drizzle-orm";

db.select().from(table).where(between(table.column, 2, 7));
SELECT * FROM table WHERE table.column BETWEEN 2 AND 7

notBetween

PostgreSQL
MySQL
SQLite
SingleStore

값이 두 값 사이에 있지 않은 경우를 확인합니다.

import { notBetween } from "drizzle-orm";

db.select().from(table).where(notBetween(table.column, 2, 7));
SELECT * FROM table WHERE table.column NOT BETWEEN 2 AND 7

---

LIKE 연산자

LIKE 연산자는 특정 패턴과 일치하는 문자열을 검색할 때 사용합니다. 대소문자를 구분하며, %는 임의의 길이의 문자열을, _는 단일 문자를 의미합니다.

import { like } from "drizzle-orm";

db.select()
  .from(table)
  .where(like(table.column, "%llo wor%"));
SELECT * FROM table WHERE table.column LIKE '%llo wor%'

위 예제에서는 table.column에서 “llo wor”이라는 문자열이 포함된 모든 행을 검색합니다. %는 앞뒤에 어떤 문자열이 오더라도 상관없음을 의미합니다.

ilike

ilike는 대소문자를 구분하지 않고 특정 값과 유사한 값을 찾을 때 사용합니다. 아래는 PostgreSQL에서 ilike를 사용하는 예제입니다.

PostgreSQL
MySQL
SQLite
SingleStore

예제 코드

import { ilike } from "drizzle-orm";

db.select()
  .from(table)
  .where(ilike(table.column, "%llo wor%"));

위 코드는 다음과 같은 SQL 쿼리로 변환됩니다.

SELECT * FROM table WHERE table.column ILIKE '%llo wor%'

이 쿼리는 table.column에서 “llo wor”라는 문자열이 포함된 모든 행을 대소문자 구분 없이 찾습니다.

notIlike

PostgreSQL
MySQL
SQLite
SingleStore

값이 다른 값과 일치하지 않는지 확인하는 기능으로, 대소문자를 구분하지 않습니다.

import { notIlike } from "drizzle-orm";

db.select().from(table).where(notIlike(table.column, "%llo wor%"));
SELECT * FROM table WHERE table.column NOT ILIKE '%llo wor%'

---

NOT 연산자

NOT 연산자는 주어진 조건의 반대 결과를 반환합니다. 아래 예제에서는 PostgreSQL, MySQL, SQLite, SingleStore 데이터베이스가 모두 지원됩니다.

import { eq, not } from "drizzle-orm";

db.select().from(table).where(not(eq(table.column, 5)));

위 코드는 다음과 같은 SQL 쿼리로 변환됩니다.

SELECT * FROM table WHERE NOT (table.column = 5)

이 쿼리는 table.column이 5가 아닌 모든 행을 선택합니다. 모든 조건이 false를 반환해야 하는 경우, NOT 연산자를 사용하여 조건을 반전시킬 수 있습니다.

and

PostgreSQL
MySQL
SQLite
SingleStore

모든 조건이 true를 반환해야 합니다.

import { gt, lt, and } from "drizzle-orm";

db.select().from(table).where(and(gt(table.column, 5), lt(table.column, 7)));
SELECT * FROM table WHERE (table.column > 5 AND table.column < 7)

또는

<IsSupportedChipGroup chips={{ 'PostgreSQL': true, 'MySQL': true, 'SQLite': true, 'SingleStore': true }} />

하나 이상의 조건이 true를 반환해야 합니다.

import { gt, lt, or } from "drizzle-orm";

db.select()
  .from(table)
  .where(or(gt(table.column, 5), lt(table.column, 7)));
SELECT * FROM table WHERE (table.column > 5 OR table.column < 7)

---

arrayContains

PostgreSQL
MySQL
SQLite
SingleStore

컬럼이나 표현식이 두 번째 인자로 전달된 리스트의 모든 요소를 포함하는지 테스트합니다.

import { arrayContains } from "drizzle-orm";

// 'Typescript'와 'ORM' 태그를 모두 포함하는 게시물의 ID를 선택
const contains = await db.select({ id: posts.id }).from(posts)
  .where(arrayContains(posts.tags, ['Typescript', 'ORM']));

// 서브쿼리를 사용하여 특정 게시물의 태그를 포함하는 게시물의 ID를 선택
const withSubQuery = await db.select({ id: posts.id }).from(posts)
  .where(arrayContains(
    posts.tags,
    db.select({ tags: posts.tags }).from(posts).where(eq(posts.id, 1)),
  ));
-- 'Typescript'와 'ORM' 태그를 모두 포함하는 게시물의 ID를 선택
select "id" from "posts" where "posts"."tags" @> {Typescript,ORM};

-- 서브쿼리를 사용하여 특정 게시물의 태그를 포함하는 게시물의 ID를 선택
select "id" from "posts" where "posts"."tags" @> (select "tags" from "posts" where "posts"."id" = 1);

arrayContained

PostgreSQL
MySQL
SQLite
SingleStore

두 번째 인자로 전달된 리스트가 컬럼이나 표현식의 모든 요소를 포함하는지 테스트합니다.

import { arrayContained } from "drizzle-orm";

const contained = await db.select({ id: posts.id }).from(posts)
  .where(arrayContained(posts.tags, ['Typescript', 'ORM']));
select "id" from "posts" where "posts"."tags" <@ {Typescript,ORM};

arrayOverlaps

PostgreSQL
MySQL
SQLite
SingleStore

컬럼이나 표현식이 두 번째 인자로 전달된 리스트의 요소 중 하나라도 포함하는지 테스트합니다.

import { arrayOverlaps } from "drizzle-orm";

const overlaps = await db.select({ id: posts.id }).from(posts)
  .where(arrayOverlaps(posts.tags, ['Typescript', 'ORM']));
select "id" from "posts" where "posts"."tags" && {Typescript,ORM}