查询数据
对表执行 SELECT 查询。
您可以使用 range()
查询来分页浏览数据。
select()
可以与 过滤器 结合使用
select()
也可以与 修饰符 结合使用
参数
参数 | 类型 | 必需 | 说明 |
---|---|---|---|
columns | Query | 可选 | 要检索的列,用逗号分隔。返回时可以使用 customName:aliasName 重命名列 |
options | object | 可选 | 查询选项配置 |
options 详细配置
参数 | 类型 | 必需 | 说明 |
---|---|---|---|
count | string | 可选 | 计数算法,可选值:"exact" - 底层执行 COUNT(*) |
head | boolean | 可选 | 设置为 true 时不返回数据,仅在需要计数时有用 |
代码示例
const app = cloudbase.init({
...
});
const db = app.mysql();
基础查询
获取数据
// 查询 articles 表中的所有数据
const { data, error } = await db.from("articles").select();
选择特定列
// 只查询文章的标题和创建时间
const { data, error } = await db.from("articles").select("title, created_at");
关联表查询
查询关联表
// 查询文章数据,同时获取关联的分类信息
const { data, error } = await db.from("articles").select(`
title,
categories (
name
)
`);
查询表名包含空格的关联表
// 如果表名中有空格,需要用双引号包裹
const { data, error } = await db.from("blog posts").select(`
title,
"article categories" (
name
)
`);
通过连接表查询关联表
// 查询文章及其作者信息
const { data, error } = await db.from("articles").select(`
title,
users (
name
)
`);
多次查询同一个关联表
// 查询文章,同时获取创建者和修改者的信息
// 使用外键约束名来区分不同的关联关系
const { data, error } = await db.from("articles").select(`
title,
created_by:users!articles_created_by_fkey(name),
updated_by:users!articles_updated_by_fkey(name)
`);
说明:当同一个表(这里是
users
)通过不同的外键关联多次时,需要使用外键约束名(articles_created_by_fkey
和articles_updated_by_fkey
)来区分不同的关联关系。这通常发生在一张表有多个字段都关联到同一张目标表的情况。
通过连接表查询嵌套的外键表
// 查询分类及其下的所有文章,以及文章的作者信息
const { data, error } = await db.from("categories").select(`
name,
articles (
title,
users (
name
)
)
`);
高级查询
通过关联表过滤
// 查询特定分类下的所有文章
const { data, error } = await db
.from("articles")
.select("title, categories(*)")
.eq("categories.name", "技术文章");
说明:通过在
.eq()
中使用关联表的字段(categories.name
),可以基于关联数据的条件来过滤主表数据。这种查询会自动处理表之间的关联关系。
查询关联表并计数
// 获取每个分类及其包含的文章数量
const { data, error } = await db
.from("categories")
.select(`*, articles(count)`);
说明:
articles(count)
会返回每个分类下文章的数量,而不会加载具体的文章数据。这在需要统计关联数据数量但不需要详细数据时非常有用,可以提高查询性能。
使用计数选项查询
// 只获取文章总数,不返回具体数据
const { count, error } = await db
.from("articles")
.select("*", { count: "exact", head: true });
使用内连接查询关联表
// 只获取有分类的文章,使用内连接确保分类存在
const { data, error } = await db
.from("articles")
.select("title, categories!inner(name)")
.eq("categories.name", "教程")
.limit(10);
说明:
!inner
表示内连接,只返回那些在关联表中存在匹配记录的数据。在这个例子中,只返回有对应分类的文章,排除了没有分类的文章。这在需要确保关联数据完整性时非常有用。