结构化查询语言,通常称为SQL(常发音为“sequel”或“S-Q-L”),是与关系型数据库交互的标准语言。作为数据工程师,你会发现数据库是管理数据的核心存储位置,而SQL是你与它们沟通的主要工具。可以把它看作是访问和操作表中数据通用遥控器。你已经在第4章了解了不同的存储系统,包括关系型数据库(如PostgreSQL、MySQL、SQL Server)。这些数据库将数据组织成表,表的结构类似于电子表格,行代表记录,列代表这些记录的属性或特性。SQL提供了一种结构化的方式来向这些数据库提问(查询)并指示它们如何更改所持有的数据(操作)。为何SQL用于数据操作?数据很少是静态的。作为数据工程师,你将持续需要:获取数据: 用于检查数据质量、提供数据进行分析或将数据输入其他系统。添加新数据: 当新信息从不同来源抵达时。修改现有数据: 用于纠正错误、更新信息或丰富记录。删除数据: 用于删除重复项、处理过期记录或遵守法规。SQL提供了专门为这些任务设计的命令。虽然第4章涉及了数据库结构定义(数据定义语言,即DDL,如CREATE TABLE),但本节侧重于用于操作这些表内部数据的命令(数据操作语言,即DML)。SQL数据操作基本命令SQL中操作数据的主要操作常被称为CRUD(创建、读取、更新、删除)缩写,尽管在SQL术语中,它们主要对应于INSERT、SELECT、UPDATE和DELETE。我们逐一来看。读取数据:SELECT语句SELECT语句用于从一个或多个表中获取数据。这可能是你最常使用的SQL命令。选择特定列: 你可以指定要查看的列。SELECT user_id, email, registration_date FROM users;此查询仅从名为users的表中获取user_id、email和registration_date列。选择所有列: 星号(*)是选择所有列的通配符。SELECT * FROM users;这会获取users表中所有行的所有列。使用WHERE筛选数据: 通常,你只想要符合特定条件的行。WHERE子句允许你筛选结果。SELECT user_id, email FROM users WHERE city = 'New York';此查询仅获取city列值为'New York'的用户的user_id和email。你可以在WHERE子句中使用各种运算符,例如=、>、<、>=、<=、!=(不等于)、LIKE(模式匹配),并使用AND和OR组合条件。添加数据:INSERT INTO语句当需要向表中添加新数据时,使用INSERT INTO语句。语法: 你指定表、要提供数据的列以及相应的值。INSERT INTO users (user_id, email, city, registration_date) VALUES (101, 'new.user@example.com', 'London', '2023-10-26');这会向users表中添加一行新数据,包含user_id、email、city和registration_date的指定值。值的顺序必须与指定列的顺序匹配。修改数据:UPDATE语句要更改表中的现有数据,使用UPDATE语句。语法: 你指定表、要更改的列(SET),以及重要的,要更改哪些行(WHERE)。UPDATE users SET email = 'updated.email@example.com' WHERE user_id = 101;此命令会找到user_id为101的行,并更改该特定行中email列的值。重要: UPDATE语句务必使用WHERE子句。如果省略它,你将意外地更新表中每一行的指定列,这通常不是你的意图,并可能导致严重的数据损坏。删除数据:DELETE FROM语句要从表中删除整行,使用DELETE FROM语句。语法: 你指定表以及使用WHERE子句要删除的行。DELETE FROM users WHERE user_id = 101;此命令会删除user_id为101的行(或多行)。重要: 与UPDATE类似,使用DELETE时务必谨慎并使用WHERE子句。省略WHERE子句将删除表中的所有行。在执行DELETE语句之前,请仔细检查你的WHERE条件。SQL在数据工程工作流中的应用这些基本的SQL数据操作命令是数据工程师的常用工具:数据验证: 将数据加载到暂存表后,你将使用带有WHERE子句的SELECT查询来检查空值、不正确的格式或异常值。简单转换: 有时,可以直接在数据库中使用UPDATE进行快速修正或标准化。填充表: 你可以使用INSERT语句来填充小型维度表或查找表。数据清洗: DELETE可用于删除重复记录或在验证后被识别为错误的行。ETL/ELT逻辑: 这些SQL命令通常构成大型数据管道脚本的核心部分,用于提取数据(SELECT)、可能在数据库内转换数据(UPDATE)、将数据加载到其他位置,或删除已处理的暂存数据(DELETE)。虽然本入门内容涵盖了基础知识,但SQL提供了更多功能,包括合并来自多个表的数据(JOIN)、汇总数据(使用COUNT、SUM、AVG等聚合函数结合GROUP BY),以及进行复杂筛选。然而,掌握SELECT、INSERT、UPDATE和DELETE为与关系型数据库中存储的海量数据交互打下了坚实基础,使SQL成为你数据工程工具包中不可或缺的工具。