Operators
A variety of operators in SurrealQL allow for complex manipulation of data, and advanced logic.
Operator | Description |
---|---|
&& or AND | Checks whether both of two values are truthy |
|| or OR | Checks whether either of two values is truthy |
! | Reverses the truthiness of a boolean value |
?? | Check whether either of two values are truthy and not NULL |
?: | Check whether either of two values are truthy |
= or IS | Check whether two values are equal |
!= or IS NOT | Check whether two values are not equal |
== | Check whether two values are exactly equal |
?= | Check whether any value in a set is equal to a value |
*= | Check whether all values in a set are equal to a value |
~ | Compare two values for equality using fuzzy matching |
!~ | Compare two values for inequality using fuzzy matching |
?~ | Check whether any value in a set is equal to a value using fuzzy matching |
*~ | Check whether all values in a set are equal to a value using fuzzy matching |
< | Check whether a value is less than another value |
<= | Check whether a value is less than or equal to another value |
> | Check whether a value is greater than another value |
>= | Check whether a value is greater than or equal to another value |
+ | Add two values together |
- | Subtract a value from another value |
* or × | Multiply two values together |
/ or ÷ | Divide a value by another value |
** | Raises a base value by another value |
IN | Checks whether a value is contained within another value |
NOT IN | Checks whether a value is not contained within another value |
CONTAINS or ∋ | Checks whether a value contains another value |
CONTAINSNOT or ∌ | Checks whether a value does not contain another value |
CONTAINSALL or ⊇ | Checks whether a value contains all other values |
CONTAINSANY or ⊃ | Checks whether a value contains any other value |
CONTAINSNONE or ⊅ | Checks whether a value contains none of the following values |
INSIDE or ∈ | Checks whether a value is contained within another value |
NOTINSIDE or NOT IN or ∉ | Checks whether a value is not contained within another value |
ALLINSIDE or ⊆ | Checks whether all values are contained within other values |
ANYINSIDE or ⊂ | Checks whether any value is contained within other values |
NONEINSIDE or ⊄ | Checks whether no value is contained within other values |
OUTSIDE | Checks whether a geometry type is outside of another geometry type |
INTERSECTS | Checks whether a geometry type intersects another geometry type |
@@ or @[ref]@ | Checks whether the terms are found in a full-text indexed field |
<|4|> or <|3,HAMMING| > | Performs a K-Nearest Neighbors (KNN) search to find a specified number of records closest to a given data point, optionally using a defined distance metric. Supports customizing the number of results and choice of distance calculation method. |
&&
or AND
Checks whether both of two values are truthy.
SELECT * FROM 10 AND 20 AND 30;
30
||
or OR
Checks whether either of two values are truthy.
SELECT * FROM 0 OR false OR 10;
10
!
Reverses the truthiness of a boolean value.
SELECT * FROM !(TRUE OR FALSE)
FALSE
??
Check whether either of two values are truthy and not NULL
.
SELECT * FROM NULL ?? 0 ?? false ?? 10;
0
?:
Check whether either of two values are truthy.
SELECT * FROM NULL ?: 0 ?: false ?: 10;
10
=
or IS
Check whether two values are equal.
SELECT * FROM true = "true";
false
SELECT * FROM 10 = "10";
false
SELECT * FROM 10 = 10.00;
true
SELECT * FROM 10 = "10.3";
false
SELECT * FROM [1, 2, 3] = [1, 2, 3];
true
SELECT * FROM [1, 2, 3] = [1, 2, 3, 4];
false
SELECT * FROM { this: "object" } = { this: "object" };
true
SELECT * FROM { this: "object" } = { another: "object" };
false
!=
or IS NOT
Check whether two values are equal.
SELECT * FROM 10 != "15";
true
SELECT * FROM 10 != "test";
true
SELECT * FROM [1, 2, 3] != [3, 4, 5];
true
==
Check whether two values are exact. This operator also checks that each value has the same type.
SELECT * FROM 10 == 10;
true
SELECT * FROM 10 == "10";
false
SELECT * FROM true == "true";
false
?=
Check whether any value in an array equals another value.
SELECT * FROM [10, 15, 20] ?= 10;
true
*=
Check whether all values in an array equals another value.
SELECT * FROM [10, 10, 10] *= 10;
true
~
Compare two values for equality using fuzzy matching.
SELECT * FROM "test text" ~ "Test";
true
SELECT * FROM "true" ~ true;
false
SELECT * FROM ["test", "thing"] ~ "test";
false
!~
Compare two values for inequality using fuzzy matching.
SELECT * FROM "other text" !~ "test";
true
SELECT * FROM "test text" !~ "Test";
false
?~
Check whether any value in a set is equal to a value using fuzzy matching.
SELECT * FROM ["true", "test", "text"] ?~ true;
false
SELECT * FROM [1, 2, 3] ?~ "2";
false
*~
Check whether all values in a set are equal to a value using fuzzy matching.
SELECT * FROM ["TRUE", true, "true", "TrUe"] *~ true;
false
SELECT * FROM ["TEST", "test", "text"] *~ "test";
false
<
Check whether a value is less than another value.
SELECT * FROM 10 < 15;
true
<=
Check whether a value is less than or equal to another value.
SELECT * FROM 10 <= 15;
true
>
Check whether a value is less than another value.
SELECT * FROM 15 > 10;
true
>=
Check whether a value is less than or equal to another value.
SELECT * FROM 15 >= 10;
true
+
Add two values together.
SELECT * FROM 10 + 10;
20
SELECT * FROM "test" + " " + "this";
"test this"
SELECT * FROM 13h + 30m;
"13h30m"
-
Subtracts a value from another value.
SELECT * FROM 20 - 10;
10
SELECT * FROM 2m - 1m;
"1m"
*
or ×
Multiplies a value by another value.
SELECT * FROM 20 * 2;
40
/
or ÷
Divides a value with another value.
SELECT * FROM 20 / 2;
10
**
Raises a base value by another value.
SELECT * FROM 20 ** 3;
8000
CONTAINS
or ∋
Check whether a value contains another value.
SELECT * FROM [10, 20, 30] CONTAINS 10;
true
SELECT * FROM "this is some text" CONTAINS "text";
true
SELECT * FROM {
type: "Polygon",
coordinates: [[
[-0.38314819, 51.37692386], [0.1785278, 51.37692386],
[0.1785278, 51.61460570], [-0.38314819, 51.61460570],
[-0.38314819, 51.37692386]
]]
} CONTAINS (-0.118092, 51.509865);
true
CONTAINSNOT
or ∌
Check whether a value does not contain another value.
SELECT * FROM [10, 20, 30] CONTAINSNOT 15;
true
SELECT * FROM "this is some text" CONTAINSNOT "other";
true
SELECT * FROM {
type: "Polygon",
coordinates: [[
[-0.38314819, 51.37692386], [0.1785278, 51.37692386],
[0.1785278, 51.61460570], [-0.38314819, 51.61460570],
[-0.38314819, 51.37692386]
]]
} CONTAINSNOT (-0.518092, 53.509865);
true
CONTAINSALL
or ⊇
Check whether a value contains all of multiple values.
SELECT * FROM [10, 20, 30] CONTAINSALL [10, 20, 10];
true
CONTAINSANY
or ⊃
Check whether a value contains any of multiple values.
SELECT * FROM [10, 20, 30] CONTAINSANY [10, 15, 25];
true
INSIDE
or ∈
or IN
Check whether a value is contained within another value.
SELECT * FROM 10 INSIDE [10, 20, 30];
true
SELECT * FROM "text" INSIDE "this is some text";
true
SELECT * FROM (-0.118092, 51.509865) INSIDE {
type: "Polygon",
coordinates: [[
[-0.38314819, 51.37692386], [0.1785278, 51.37692386],
[0.1785278, 51.61460570], [-0.38314819, 51.61460570],
[-0.38314819, 51.37692386]
]]
};
true
NOTINSIDE
or ∉
or NOT IN
Check whether a value is not contained within another value.
SELECT * FROM 15 NOTINSIDE [10, 20, 30];
true
SELECT * FROM "other" NOTINSIDE "this is some text";
true
SELECT * FROM (-0.518092, 53.509865) NOTINSIDE {
type: "Polygon",
coordinates: [[
[-0.38314819, 51.37692386], [0.1785278, 51.37692386],
[0.1785278, 51.61460570], [-0.38314819, 51.61460570],
[-0.38314819, 51.37692386]
]]
};
true
ALLINSIDE
or ⊆
Check whether all of multiple values are contained within another value.
SELECT * FROM [10, 20, 10] ALLINSIDE [10, 20, 30];
true
ANYINSIDE
or ⊂
Check whether any of multiple values are contained within another value.
SELECT * FROM [10, 15, 25] ANYINSIDE [10, 20, 30];
true
NONEINSIDE
or ⊄
Check whether none of multiple values are contained within another value.
SELECT * FROM [15, 25, 35] NONEINSIDE [10, 20, 30];
true
OUTSIDE
Check whether a geometry value is outside another geometry value.
SELECT * FROM (-0.518092, 53.509865) OUTSIDE {
type: "Polygon",
coordinates: [[
[-0.38314819, 51.37692386], [0.1785278, 51.37692386],
[0.1785278, 51.61460570], [-0.38314819, 51.61460570],
[-0.38314819, 51.37692386]
]]
};
true
INTERSECTS
Check whether a geometry value intersects another geometry value.
SELECT * FROM {
type: "Polygon",
coordinates: [[
[-0.38314819, 51.37692386], [0.1785278, 51.37692386],
[0.1785278, 51.61460570], [-0.38314819, 51.61460570],
[-0.38314819, 51.37692386]
]]
} INTERSECTS {
type: "Polygon",
coordinates: [[
[-0.11123657, 51.53160074], [-0.16925811, 51.51921169],
[-0.11466979, 51.48223813], [-0.07381439, 51.51322956],
[-0.11123657, 51.53160074]
]]
};
true
MATCHES
Checks whether the terms are found in a full-text indexed field.
SELECT * FROM book WHERE title @@ 'rust web';
[
{
id: book:1,
title: 'Rust Web Programming'
}
]
Using the matches operator with a reference checks whether the terms are found, highlights the searched terms, and computes the full-text score.
SELECT id,
search::highlight('<b>', '</b>', 1) AS title,
search::score(1) AS score
FROM book
WHERE title @1@ 'rust web'
ORDER BY score DESC;
[
{
id: book:1,
score: 0.9227996468544006f,
title: '<b>Rust</b> <b>Web</b> Programming'
}
]
#KNN
Since 1.3.0
Performs a K-Nearest Neighbors (KNN) search to find a specified number of records closest to a given data point, optionally using a defined distance metric. Supports customizing the number of results and choice of distance calculation method.
CREATE pts:3 SET point = [8,9,10,11];
DEFINE INDEX mt_pts ON pts FIELDS point MTREE DIMENSION 4;
SELECT id, vector::distance::euclidean(point, [2,3,4,5]) AS dist FROM pts WHERE point <|2,EUCLIDEAN|> [2,3,4,5];
SELECT id FROM pts WHERE point <|2|> [2,3,4,5] EXPLAIN;