- 文集信息
- 目录大纲
- 最新文档
- 知识宇宙
文集详情
文集导读
SQL 基础:数据库查询与管理入门
章节标题:SQL 基础:数据库查询与管理入门
引言
欢迎来到SQL的世界!SQL(Structured Query Language,结构化查询语言)是用于管理关系型数据库的标准语言。无论您是想从海量数据中提取特定信息,还是需要维护数据库的结构和内容,SQL都是不可或缺的工具。本章节将带您入门SQL,重点掌握数据查询的核心语句 SELECT,以及进行基本数据操作和数据库结构定义的命令。掌握这些基础,将为您后续深入学习SQL和数据库技术打下坚实的基础。
1. 数据库基础概念回顾
在深入学习SQL之前,我们先快速回顾几个核心概念,它们是理解SQL操作的基础:
-
数据库(Database): 存储数据的容器,通常包含一个或多个表。
-
表(Table): 数据库中最基本的数据存储单元,由行和列组成。
-
列(Column): 定义表中存储的数据类型和含义,代表一个属性(例如:客户姓名、订单金额)。
-
行(Row)/ 记录(Record): 表中的一行数据,代表一个独立的实体(例如:一个特定的客户、一笔特定的订单)。
-
模式(Schema): 数据库的逻辑结构,包括表、视图、索引等对象的定义和它们之间的关系。在很多数据库系统中,一个用户账户对应一个模式。
我们将以一个简单的示例数据库为例,其中包含一个 Customers 表和一个 Orders 表,来贯穿本章节的讲解。
Customers 表结构示例:
| 列名 | 数据类型 | 描述 |
|---|---|---|
CustomerID |
INT | 客户唯一标识 |
FirstName |
VARCHAR | 名字 |
LastName |
VARCHAR | 姓氏 |
City |
VARCHAR | 城市 |
Orders 表结构示例:
| 列名 | 数据类型 | 描述 |
|---|---|---|
OrderID |
INT | 订单唯一标识 |
CustomerID |
INT | 关联的客户ID |
OrderDate |
DATE | 订单日期 |
Amount |
DECIMAL | 订单金额 |
2. SQL 数据查询:SELECT 语句
SELECT 语句是SQL中最常用的命令,用于从数据库中检索数据。其基本结构包括 SELECT 子句和 FROM 子句,并可以配合其他子句进行更复杂的过滤、排序和分组。
2.1 基本查询:选择列与表
-
选择所有列: 使用星号
*表示选择指定表中的所有列。SELECT * FROM Customers;这条语句将返回
Customers表中的所有行和所有列的数据。 -
选择特定列: 列出您需要查询的列名,多个列名之间用逗号
,分隔。SELECT FirstName, LastName, City FROM Customers;这条语句将只返回
Customers表中FirstName,LastName,City这三列的数据。 -
为列设置别名(Alias): 使用
AS关键字为列或表设置一个临时的、更易读的名称。AS关键字可以省略,但建议保留以提高可读性。SELECT FirstName AS CustomerFirstName, City FROM Customers AS C; -- 为表设置别名结果中的列名将显示为
CustomerFirstName。
2.2 数据过滤:WHERE 子句
WHERE 子句用于指定筛选条件,只返回满足条件的行。它紧跟在 FROM 子句之后。
-
基本比较运算符:
=,!=(或<>),>,<,>=,<=。SELECT * FROM Customers WHERE City = 'New York'; -- 查找住在New York的客户SELECT OrderID, Amount FROM Orders WHERE Amount > 100.00; -- 查找金额大于100的订单 -
逻辑运算符:
AND,OR,NOT用于组合多个条件。SELECT * FROM Customers WHERE City = 'New York' AND FirstName = 'John'; -- 查找住在New York且名字是John的客户SELECT * FROM Customers WHERE City = 'New York' OR City = 'Los Angeles'; -- 查找住在New York或Los Angeles的客户SELECT * FROM Customers WHERE NOT City = 'New York'; -- 查找不住在New York的客户 -
特殊运算符:
-
BETWEEN: 检查值是否在某个范围内(包含边界)。SELECT * FROM Orders WHERE Amount BETWEEN 50.00 AND 200.00; -- 查找金额在50到200之间的订单 -
IN: 检查值是否在指定的值列表中。SELECT * FROM Customers WHERE City IN ('New York', 'Los Angeles', 'Chicago'); -- 查找住在指定城市之一的客户 -
LIKE: 用于模糊匹配字符串,通常与通配符结合使用:-
%: 匹配零个或多个任意字符。 -
_: 匹配一个任意字符。
SELECT * FROM Customers WHERE FirstName LIKE 'J%'; -- 查找名字以J开头的客户SELECT * FROM Customers WHERE LastName LIKE '%son'; -- 查找姓氏以son结尾的客户SELECT * FROM Customers WHERE City LIKE '_ondon'; -- 查找以ondon结尾,前面只有一个字符的城市名 (例如:London) -
-
IS NULL/IS NOT NULL: 检查列值是否为 NULL (表示缺失或未知数据)。注意不能用=或!=来判断 NULL。SELECT * FROM Customers WHERE City IS NULL; -- 查找城市信息为NULL的客户
-
2.3 数据排序:ORDER BY 子句
ORDER BY 子句用于按照一个或多个列对结果集进行排序。默认是升序(ASC),可以使用 DESC 指定降序。它通常位于 WHERE 子句之后。
SELECT FirstName, LastName, City FROM Customers ORDER BY City ASC; -- 按城市升序排序
SELECT OrderID, Amount, OrderDate FROM Orders ORDER BY OrderDate DESC, Amount ASC; -- 先按日期降序,日期相同时按金额升序排序
2.4 限制结果数量:LIMIT / TOP 子句
在处理大量数据时,有时我们只需要结果集的前几行。不同的数据库系统使用不同的关键字:
-
大多数数据库(如 MySQL, PostgreSQL, SQLite):使用
LIMIT。SELECT * FROM Customers LIMIT 10; -- 返回前10个客户 -
SQL Server, MS Access:使用
TOP。SELECT TOP 10 * FROM Customers; -- 返回前10个客户LIMIT和TOP通常放在查询语句的最后。
2.5 聚合函数:统计数据
聚合函数用于对一组值进行计算并返回单个值。常用的聚合函数包括:
-
COUNT(): 计算行数。SELECT COUNT(*) FROM Customers; -- 计算客户总数SELECT COUNT(City) FROM Customers; -- 计算城市不为NULL的客户数 -
SUM(): 计算数值列的总和。SELECT SUM(Amount) FROM Orders; -- 计算所有订单的总金额 -
AVG(): 计算数值列的平均值。SELECT AVG(Amount) FROM Orders; -- 计算订单的平均金额 -
MIN(): 查找数值列的最小值。SELECT MIN(Amount) FROM Orders; -- 查找最小订单金额 -
MAX(): 查找数值列的最大值。SELECT MAX(Amount) FROM Orders; -- 查找最大订单金额
聚合函数通常与 SELECT 子句一起使用。
2.6 数据分组:GROUP BY 子句
GROUP BY 子句用于将结果集按照一个或多个列进行分组,通常与聚合函数一起使用,以便对每个组进行统计计算。
SELECT City, COUNT(*) AS NumberOfCustomers FROM Customers GROUP BY City; -- 按城市分组,计算每个城市的客户数
SELECT CustomerID, SUM(Amount) AS TotalOrderAmount FROM Orders GROUP BY CustomerID; -- 按客户分组,计算每个客户的总订单金额
2.7 过滤分组:HAVING 子句
HAVING 子句用于在 GROUP BY 分组后过滤分组。它与 WHERE 子句类似,但 WHERE 用于过滤行,而 HAVING 用于过滤组。HAVING 子句必须在 GROUP BY 子句之后。
SELECT CustomerID, SUM(Amount) AS TotalOrderAmount FROM Orders GROUP BY CustomerID HAVING SUM(Amount) > 500.00; -- 查找总订单金额大于500的客户
SELECT City, COUNT(*) AS NumberOfCustomers FROM Customers GROUP BY City HAVING COUNT(*) > 5; -- 查找客户数大于5的城市
2.8 SELECT 语句的执行顺序(概念性)
理解 SELECT 语句各子句的逻辑执行顺序有助于编写和调试复杂的查询。虽然实际执行计划可能因数据库优化器而异,但逻辑顺序通常如下:
注意:Mermaid 图中为避免括号嵌套约束,使用了方括号 [] 和花括号 {} 作为节点形状标识,不代表SQL语法本身。箭头表示逻辑流向。
这个流程图展示了数据如何从原始表开始,经过行过滤 (WHERE),可选地分组 (GROUP BY),可选地过滤分组 (HAVING),然后选择最终要显示的列 (SELECT),最后进行排序 (ORDER BY) 和限制结果数量 (LIMIT/TOP)。
3. SQL 数据管理:DML (Data Manipulation Language)
DML 语句用于管理数据库中的数据,包括插入、更新和删除记录。
3.1 插入数据:INSERT INTO 语句
INSERT INTO 语句用于向表中添加新的行。
-
插入所有列的值: 值的顺序必须与表中列的定义顺序一致。
INSERT INTO Customers (CustomerID, FirstName, LastName, City) VALUES (101, 'Alice', 'Smith', 'London'); -
插入特定列的值: 明确指定要插入的列名,值的顺序与指定的列名顺序一致。未指定的列将插入默认值或 NULL。
INSERT INTO Customers (FirstName, LastName) VALUES ('Bob', 'Johnson'); -- CustomerID和City可能为NULL或默认值
3.2 更新数据:UPDATE 语句
UPDATE 语句用于修改表中现有记录的列值。WHERE 子句非常重要,用于指定要更新哪些行。如果没有 WHERE 子句,将更新表中的所有行!
UPDATE Customers SET City = 'Manchester' WHERE CustomerID = 101; -- 更新CustomerID为101的客户,将其城市改为Manchester
UPDATE Orders SET Amount = Amount * 1.10 -- 将所有订单金额增加10% WHERE OrderDate = '2023-01-01'; -- 只更新2023年1月1日的订单
3.3 删除数据:DELETE FROM 语句
DELETE FROM 语句用于从表中删除现有记录。WHERE 子句同样非常重要,用于指定要删除哪些行。如果没有 WHERE 子句,将删除表中的所有行!
DELETE FROM Customers WHERE CustomerID = 101; -- 删除CustomerID为101的客户记录
DELETE FROM Orders WHERE Amount < 10.00; -- 删除金额小于10的订单记录
警告:执行 UPDATE 和 DELETE 操作时务必谨慎,尤其是在没有 WHERE 子句的情况下,这会导致数据丢失或大范围修改。在生产环境中执行此类操作前,强烈建议先在测试环境验证或备份数据。
4. SQL 数据库结构定义:DDL (Data Definition Language) 入门
DDL 语句用于创建、修改和删除数据库对象(如表、视图、索引等)。本章节只介绍最基本的表操作。
4.1 创建表:CREATE TABLE 语句
CREATE TABLE 语句用于在数据库中创建一个新表。您需要指定表名、列名以及每列的数据类型。
CREATE TABLE Products ( ProductID INT, ProductName VARCHAR(255), Price DECIMAL(10, 2), Stock INT );
INT,VARCHAR(255),DECIMAL(10, 2)等是常见的数据类型,用于指定列可以存储的数据种类和格式。VARCHAR(255)表示可变长度字符串,最大长度255;DECIMAL(10, 2)表示十进制数,总共10位数字,其中2位在小数点后。
4.2 修改表结构:ALTER TABLE 语句
ALTER TABLE 语句用于修改现有表的结构,例如添加、删除或修改列。
-
添加列:
ALTER TABLE Customers ADD Email VARCHAR(255); -- 向Customers表添加一个Email列 -
删除列:
ALTER TABLE Products DROP COLUMN Stock; -- 从Products表删除Stock列 -
注意:修改列(如更改数据类型、长度)的语法因数据库系统而异,且可能导致数据丢失或转换问题,此处不做深入介绍。
4.3 删除表:DROP TABLE 语句
DROP TABLE 语句用于删除数据库中的一个现有表及其所有数据、索引、约束等。
DROP TABLE Products; -- 删除Products表
警告:DROP TABLE 是一个非常危险的操作,因为它会永久删除整个表及其所有数据,且通常无法恢复。在执行前务必确认。
5. 其他基础概念
-
数据类型(Data Types): SQL支持多种数据类型,常见的有:
-
数值类型:
INT(整数),DECIMAL/NUMERIC(精确小数),FLOAT/DOUBLE(浮点数)。 -
字符串类型:
VARCHAR/NVARCHAR(可变长度字符串),CHAR/NCHAR(固定长度字符串),TEXT(大文本)。 -
日期/时间类型:
DATE(日期),TIME(时间),DATETIME/TIMESTAMP(日期和时间)。 -
布尔类型:
BOOLEAN(真/假,并非所有数据库都直接支持,可能用0/1或T/F表示)。
-
-
SQL 语法规则:
-
SQL语句通常不区分大小写(关键字如
SELECT,FROM,WHERE)。但字符串文字和某些数据库系统的对象名可能区分大小写。建议关键字使用大写,表名/列名使用小写或驼峰命名法,以提高可读性。 -
语句通常以分号
;结束。虽然在某些环境中单条语句可以省略分号,但良好的习惯是总是加上分号,特别是在执行多条语句时。 -
注释:
-
单行注释:以
--开始,到行尾结束。 -
多行注释:以
/*开始,以*/结束。
-
-
结语
本章节带您初步认识了SQL,并详细讲解了其最核心的查询 (SELECT) 和基本的数据管理 (INSERT, UPDATE, DELETE) 以及数据库结构定义 (CREATE TABLE, ALTER TABLE, DROP TABLE) 命令。您学习了如何选择、过滤、排序、分组数据,如何插入、修改、删除记录,以及如何创建和删除表。这些是使用SQL与数据库交互的基础。
请记住,实践是掌握SQL的关键。尝试在实际的数据库环境中运行这些示例,并根据自己的需求进行修改。在掌握了这些基础之后,您可以进一步学习更高级的SQL概念,如连接 (JOIN)、子查询 (Subquery)、视图 (View)、索引 (Index) 以及数据库事务 (Transaction) 等,以解锁SQL更强大的功能。
目录大纲
最新文档
知识宇宙
正在加载知识图谱...