尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

DuckDB教程:基本检索功能

DuckDB教程:基本检索功能 检索数据是数据库中最基本的操作SQL 标准定义的查询语句就是 SELECT。DuckDB 遵循这个标准同时也提供了一些更加用户友好的扩展。《DuckDB 教程》使用的示例表和数据https://github.com/dongxuyang1985/duckdb_tutorial查询指定字段员工表employee中存储了关于员工的信息。假设我们现在需要找出所有员工的姓名、性别和电子邮箱地址。这个功能可以通过一个简单的查询语句来实现SELECTemp_name,sex,emailFROMemployee;其中SELECT 是关键字表示查询数据FROM 也是关键字表示要从哪个表中进行查询emp_name、sex 和 email 表示需要返回的字段多个字段使用逗号分隔分号表示 SQL 语句的结束。查询返回的结果如下。注意SQL 语句由不同的子句组成部分SELECT、FROM 和 WHERE 等关键字都是子句。编写 SQL 语句时关键字不分区大小写一般使用大写形式。表名、列名等标识符一般也不区分大小写使用小写形式。很多初学者不理解为什么 SELECT 关键字写在查询语句的最前面而是更愿意写作 FROM从哪个表中再写 SELECT查询哪些字段。为此 DuckDB 支持这种写法FROMemployeeSELECTemp_name,sex,email;当我们需要查询的字段具有一定的模式时可以使用 COLUMNS 表达式简化查询。例如以下语句表示查询所有名称包含“id”的字段FROMemployeeSELECTCOLUMNS(id);括号内是一个正则表达式查询结果如下除了使用正则表达式之外COLUMNS 还支持 Lambda 函数。例如FROMemployeeSELECTCOLUMNS(lambda col: colLIKE%id%);查询全部字段SQL 为查询表的全部字段提供了一个简单写法就是使用星号*。例如以下 3 个语句都可以查询职位信息表中的全部字段-- 标准SQLSELECT*FROMjob;-- FROM优先FROMjobSELECT*;-- 省略SELECTFROMjob;DuckDB 在解析该语句时会基于表的字段定义将其扩展为如下形式SELECTjob_id,job_title,min_salary,max_salaryFROMjob;查询返回的结果如下。使用星号无法指定字段出现的顺序由数据库按照表定义时的顺序返回结果。基于星号表达式DuckDB 还扩展了一些简洁的用法。例如当我们需要查询表中绝大多数的字段只需要排除个别字段时标准 SQL 要求必须列出所需的字段-- 查询除了comments之外的其他字段SELECTemp_id,emp_name,sex,dept_id,manager,hire_date,job_id,salary,bonus,email,create_by,create_ts,update_by,update_tsFROMemployee;这种写法效率比较低为此 DuckDB 允许使用 EXCLUDE 排除不需要的字段。以上查询可以改写成SELECT*EXCLUDE(comments)FROMemployee;快速查询信息通常来说查询操作的对象是表但是为了执行简单的计算和快速信息检索DuckDB 支持不需要表的查询语句例如-- 查询DuckDB版本SELECTversion();┌─────────────┐ │version()│ │varchar│ ├─────────────┤ │ v1.5.4│ └─────────────┘以上查询语句中只有 SELECT 子句没有 FROM 子句。这种语法并不属于 SQL 标准而是 DuckDB 的扩展功能。
返回列表