Filter and conditional operators
All the values provided to filter operators and to the sql function are parameterized automatically.
For example, this query:
await db .select () .from (users) .where ( eq ( users .id , 42 )); will be translated to:
select "id" , "name" , "age" from "users" where "users" . "id" = $ 1 ; -- params: [42]
We natively support all dialect specific filter and conditional operators.
You can import all filter & conditional from drizzle-orm:
import { eq , ne , gt , gte , ... } from "drizzle-orm" ;
eq
Value equal to 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
Value is not equal to 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"
---
gt
Value is greater than 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"
gte
Value is greater than or equal to 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
Value is less than 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"
lte
Value is less than or equal to 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
Value exists
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" )
isNull
Value is null
import { isNull } from "drizzle-orm" ;
db .select () .from (table) .where ( isNull ( table .column)); SELECT * FROM "table" WHERE ( "table" . "column" IS NULL )
isNotNull
Value is not null
import { isNotNull } from "drizzle-orm" ;
db .select () .from (table) .where ( isNotNull ( table .column)); SELECT * FROM "table" WHERE ( "table" . "column" IS NOT NULL )
---
inArray
Value is in array of values
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
Value is not in array of values
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
Value is between two values
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
Value is not between two value
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
Value is like other value, case sensitive
import { like } from "drizzle-orm" ;
db .select () .from (table) .where ( like ( table .column , "%llo wor%" )); SELECT * FROM "table" WHERE "table" . "column" LIKE '%llo wor%'
notLike
Value is not like other value, case sensitive
import { notLike } from "drizzle-orm" ;
db .select () .from (table) .where ( notLike ( table .column , "%llo wor%" )); SELECT * FROM "table" WHERE "table" . "column" NOT LIKE '%llo wor%'
ilike
Value is like some other value, case insensitive
import { ilike } from "drizzle-orm" ;
db .select () .from (table) .where ( ilike ( table .column , "%llo wor%" )); SELECT * FROM "table" WHERE "table" . "column" ILIKE '%llo wor%'
notIlike
Value is not like some other value, case insensitive
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
All conditions must return false.
import { eq , not } from "drizzle-orm" ;
db .select () .from (table) .where ( not ( eq ( table .column , 5 ))); SELECT * FROM "table" WHERE NOT ( "table" . "column" = 5 )
and
All conditions must return 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 )
or
One or more conditions must return 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
Test that a column or expression contains all elements of the list passed as the second argument
import { arrayContains } from "drizzle-orm" ;
const contains = await db .select ({ id : posts .id }) .from (posts)
.where ( arrayContains ( posts .tags , [ 'Typescript' , 'ORM' ]));
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 )) ,
)); select "id" from "posts" where "posts" . "tags" @ > {Typescript,ORM};
select "id" from "posts" where "posts" . "tags" @ > ( select "tags" from "posts" where "posts" . "id" = 1 );
arrayContained
Test that the list passed as the second argument contains all elements of a column or expression
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
Test that a column or expression contains any elements of the list passed as the second argument.
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}