查询操作符
选择
从表中读取数据。
1. SELECT all
dingo> select * from TEST;
+----+-------+--------+
| ID | NAME | AMOUNT |
+----+-------+--------+
| 1 | Alice | 3.5 |
| 2 | Betty | 4.0 |
| 3 | Cindy | 4.5 |
| 4 | Doris | 5.0 |
| 5 | Emily | 5.5 |
| 6 | Alice | 6.0 |
| 7 | Betty | 6.5 |
| 8 | Alice | 7.0 |
| 9 | Cindy | 7.5 |
+----+-------+--------+
2. SELECT vector
select * from vector(table_name, vector_index,m,n,y);
参数
参数 |
描述 |
|---|---|
table_name |
表名。 |
vector_index |
向量指数。 |
m |
要查询的向量。 |
n |
指要查询的行数。 |
y |
指附加查询参数,如 HNSW 算法中的 efSearch。 |
3. SELECT clause
dingo> SELECT amount FROM TEST;
+--------+
| AMOUNT |
+--------+
| 3.5 |
| 4.0 |
| 4.5 |
| 5.0 |
| 5.5 |
| 6.0 |
| 6.5 |
| 7.0 |
| 7.5 |
+--------+
4. WHERE
dingo> SELECT * FROM TEST WHERE id > 5;
+----+-------+--------+
| ID | NAME | AMOUNT |
+----+-------+--------+
| 6 | Alice | 6.0 |
| 7 | Betty | 6.5 |
| 8 | Alice | 7.0 |
| 9 | Cindy | 7.5 |
+----+-------+--------+
5. Distinct
dingo>insert into Test values
(14, 'QWE', 3.5),
(11, 'ASE', 3.5);
dingo>select * from TEST;
+----+-------+--------+
| ID | NAME | AMOUNT |
+----+-------+--------+
| 1 | Alice | 3.5 |
| 2 | Betty | 4.0 |
| 3 | Cindy | 4.5 |
| 4 | Doris | 5.0 |
| 5 | Emily | 5.5 |
| 6 | Alice | 6.0 |
| 7 | Betty | 6.5 |
| 8 | Alice | 7.0 |
| 9 | Cindy | 7.5 |
| 15 | QWE | 3.5 |
| 16 | ASE | 3.5 |
+----+-------+--------+
11 rows selected (0.107 seconds)
dingo> select distinct amount from Test;
+--------+
| AMOUNT |
+--------+
| 7.5 |
| 3.5 |
| 7.0 |
| 6.5 |
| 6.0 |
| 5.5 |
| 5.0 |
| 4.5 |
| 4.0 |
+--------+
9 rows selected (0.499 seconds)
6. LIKE
dingo> SELECT * FROM TEST;
+----+-------+-----+--------+----------+-----------------------+
| ID | NAME | AGE | AMOUNT | CLASS | BIR |
+----+-------+-----+--------+----------+-----------------------+
| 1 | lisa | 25 | 92.0 | class_03 | 2000-02-23 18:00:00.0 |
| 2 | alice | 18 | 99.0 | class_01 | 2003-02-23 17:00:00.0 |
| 3 | Ben | 19 | 90.0 | class_03 | 2002-01-11 16:00:00.0 |
| 4 | Joy | 18 | 99.5 | class_03 | 2003-11-25 23:00:00.0 |
| 5 | Susan | 19 | 98.5 | class_02 | 2003-02-23 23:05:00.0 |
+----+-------+-----+--------+----------+-----------------------+
dingo> SELECT * FROM TEST where name like ‘%e%’;
+----+-------+-----+--------+----------+-----------------------+
| ID | NAME | AGE | AMOUNT | CLASS | BIR |
+----+-------+-----+--------+----------+-----------------------+
| 2 | alice | 18 | 99.0 | class_01 | 2003-02-23 17:00:00.0 |
| 3 | Ben | 19 | 90.0 | class_03 | 2002-01-11 16:00:00.0 |
+----+-------+-----+--------+----------+-----------------------+
7. GROUP BY
dingo> SELECT class,count(amount) FROM TEST group by class;
+----------+--------+
| CLASS | EXPR$1
+----------+--------+
| class_01 | 2 |
| class_03 | 6 |
| class_02 | 2 |
+----------+--------+
连接
1. Inner Join
内部连接条件中的关系是等量关系,返回满足连接条件的所有数据。如果找不到匹配的数据,查询结果将返回空结果集。
语法
SELECT <column>
FROM <table1>
Inner JOIN <table2>
ON table1.column = table2.column;
返回类型
Result set
实例
dingo::///> SELECT student_01.name,student_01.age,student_01.amount,student_01.class, student_02.name,student_02.age,student_02.amount,student_02.school
FROM student_01
Inner JOIN student_02
ON student_01.age = student_02.age;
+-----+----+-------+------+------+----+-------+---------+
| NAME | AGE | AMOUNT | CLASS | NAME | AGE | AMOUNT | SCHOOL |
+-----+----+-------+------+------+----+-------+---------+
| Alice | 15 | 98.5 | class01 | zhangsna | 15 | 86.0 | haidianyizhong |
| Cindy | 18 | 100.0 | class01 | liuliu | 18 | 100.0 | shiyanzhognxue |
| Doris | 17 | 100.0 | class03 | yangyi | 17 | 100.0 | shiyanyizhong |
+-----+----+-------+------+------+----+-------+---------+
2. Inner Join (non-equivalent)
内连接条件中的关系是一种非等价关系,会返回满足连接条件的所有数据。如果找不到匹配数据,查询结果将返回空结果集。
语法
SELECT <column>
FROM <table1>
Inner JOIN <table2>
ON table1.column (>、<、<> ) table2.column;
返回类型
Result set
实例
dingo::///>SELECT student_01.name,student_01.age,student_01.amount,student_01.class, student_02.name,student_02.age,student_02.amount,student_02.school
FROM student_01
Inner JOIN student_02
ON student_01.age = student_02.age AND student_01.amount > student_02.amount;
+-----+----+-------+------+------+----+-------+---------+
| NAME | AGE | AMOUNT | CLASS | NAME | AGE | AMOUNT | SCHOOL |
+-----+----+-------+------+------+----+-------+---------+
| Alice | 15 | 98.5 | class01 | zhangsna | 15 | 86.0 | haidianyizhong |
+-----+----+-------+------+------+----+-------+---------+
3. Full join
连接表将包含两个表中的所有记录。连接语句相当于将两个表相乘,并使用 NULL 值作为双方缺失匹配的结果。
语法
SELECT <column
FROM <table1>
FULL JOIN <table2>
ON table1.column = table2.column;
返回类型
结果集
实例
dingo::///> SELECT student_01.*,student_02.* FROM student_01 FULL JOIN student_02 ON student_01.age = student_02.age;
+------+-------+------+--------+---------+-----------+------+----------+------+---------+---------+----------------+
| ID | NAME | AGE | AMOUNT | CLASS | ADDRESS | ID0 | NAME0 | AGE0 | AMOUNT0 | CLASS0 | SCHOOL |
+------+-------+------+--------+---------+-----------+------+----------+------+---------+---------+----------------+
| 1 | Alice | 15 | 98.5 | class01 | beijing | 1 | zhangsna | 15 | 86.0 | class01 | haidianyizhong |
| 2 | Joy | 13 | 95.0 | class02 | beijing | NULL | NULL | NULL | NULL | NULL | NULL |
| 3 | Cindy | 18 | 100.0 | class01 | shanghai | 4 | liuliu | 18 | 100.0 | class01 | shiyanzhognxue |
| 4 | Betty | 22 | 99.0 | class01 | guangzhou | NULL | NULL | NULL | NULL | NULL | NULL |
| 5 | Doris | 17 | 100.0 | class03 | shenzhen | 5 | yangyi | 17 | 100.0 | class03 | shiyanyizhong |
| NULL | NULL | NULL | NULL | NULL | NULL | 2 | lisi | 19 | 72.0 | class02 | rendafuzhong |
| NULL | NULL | NULL | NULL | NULL | NULL | 3 | wangzi | 16 | 90.0 | class01 | qinghuafuzhong |
+------+-------+------+--------+---------+-----------+------+----------+------+---------+---------+----------------+
4. Cross join
返回连接表的笛卡尔乘积。
语法
SELECT <column>
FROM <table1>
CROSS JOIN <table2>
[WHERE ... ];
OR
SELECT <column>
FROM <table1>, <table2>
[WHERE ... ] ;
返回类型
Result set
实例
dingo::///> select student_01.*,student_02.* from student_01 cross join student_02
WHERE student_01.amount = student_02.amount;
+----+-------+-----+--------+---------+----------+-----+--------+------+---------+---------+----------------+
| ID | NAME | AGE | AMOUNT | CLASS | ADDRESS | ID0 | NAME0 | AGE0 | AMOUNT0 | CLASS0 | SCHOOL |
+----+-------+-----+--------+---------+----------+-----+--------+------+---------+---------+----------------+
| 3 | Cindy | 18 | 100.0 | class01 | shanghai | 4 | liuliu | 18 | 100.0 | class01 | shiyanzhognxue |
| 3 | Cindy | 18 | 100.0 | class01 | shanghai | 5 | yangyi | 17 | 100.0 | class03 | shiyanyizhong |
| 5 | Doris | 17 | 100.0 | class03 | shenzhen | 4 | liuliu | 18 | 100.0 | class01 | shiyanzhognxue |
| 5 | Doris | 17 | 100.0 | class03 | shenzhen | 5 | yangyi | 17 | 100.0 | class03 | shiyanyizhong |
+----+-------+-----+--------+---------+----------+-----+--------+------+---------+---------+----------------+
5. Left join
获取左表中的所有记录,即使右表中没有相应的匹配数据。如果未找到匹配数据,查询结果将返回空结果集。
语法
SELECT <column>
FROM <table1>
LEFT JOIN <table2>
ON table1.column = table2.column;
返回类型
Result set
实例
dingo::///> SELECT student_01.name,student_01.age,student_01.address,student_02.name,student_02.age,student_02.school FROM student_01 LEFT JOIN student_02 ON student_01.age = student_02.age;
+-----+--- +--------+-------+-----=+--------+
| NAME | AGE | ADDRESS | NAME | AGE | SCHOOL |
+-----+--- +--------+-------+-----=+--------+
| Alice | 15 | beijing | zhangsna | 15 | haidianyizhong |
| Joy | 13 | beijing | NULL | NULL | NULL |
| Cindy | 18 | shanghai | liuliu | 18 | shiyanzhognxue |
| Betty | 22 | guangzhou | NULL | NULL | NULL |
| Doris | 17 | shenzhen | yangyi | 17 | shiyanyizhong |
+-----+--- +--------+-------+-----=+--------+
6. Right join
获取右侧数据表中的所有数据,即使左侧数据表中没有相应数据。如果未找到匹配数据,查询结果将返回空结果集。
语法
SELECT <column>
FROM <table1>
RIGHT JOIN <table2>
ON table1.column = table2.column;
返回类型
Result set
实例
dingo::///> SELECT student_01.name,student_01.age,student_01.address,student_02.name,student_02.age,student_02.school
FROM student_01
RIGHT JOIN student_02
ON student_01.age = student_02.age;
+-----+--- +--------+-------+-----=+--------+
| NAME | AGE | ADDRESS | NAME | AGE | SCHOOL |
+-----+--- +--------+-------+-----=+--------+
| Alice | 15 | beijing | zhangsna | 15 | haidianyizhong |
| Cindy | 18 | shanghai | liuliu | 18 | shiyanzhognxue |
| Doris | 17 | shenzhen | yangyi | 17 | shiyanyizhong |
| NULL | NULL | NULL | lisi | 19 | rendafuzhong |
| NULL | NULL | NULL | wangzi | 16 | qinghuafuzhong |
+-----+--- +--------+-------+-----=+--------+