欢迎来到 SQL 的世界!
你有没有想过 Spotify 是如何记住你的播放列表,或者学校是如何管理成千上万名学生的资料的呢?答案就是使用数据库 (Database)!在本章中,我们将学习 SQL (结构化查询语言),这是一种用来与数据库“沟通”的专门语言。如果初看之下觉得像程序代码,别担心,它其实和英语非常相似!
3.7.1 关系型数据库:全貌概览
数据库简而言之就是有组织的资料集合。而关系型数据库 (Relational Database) 是一种将资料存放在多个相互链接的数据表 (Table) 中的数据库类型。
资料如何组织?
将数据库表想象成体育俱乐部的电子表格:
• 数据表 (Table):关于某个主题的完整资料集合(例如:“学生”表)。
• 记录 (Record):表中的一行。它包含关于某个特定项目的所有信息(例如:关于某位学生的所有详情)。
• 字段 (Field):表中的一列。它存储某个特定类型的信息(例如:“出生日期”或“姓氏”)。
• 数据类型 (Data Type):每个字段都有一个类型,例如 Integer (整数)、Real (实数/小数) 或 String (文本)。这能告诉计算机预期接收什么类型的资料。
成功的“键值”
为了保持一切井井有条,我们使用称为“键值 (Keys)”的特殊字段:
• 主键 (Primary Key):一个用来识别每条记录的唯一字段。就像你的指纹或学生编号一样,两条记录不能拥有相同的主键。
• 外键 (Foreign Key):这是一个在某个数据表中链接到另一个数据表主键的字段。这就是我们如何“连接”不同数据表的方法!
为什么要使用关系型数据库?
如果我们把所有东西都放在同一个巨大的数据表中,最后会不断重复输入相同的内容。这会导致关系型数据库要解决的两个重大问题:
1. 数据冗余 (Data Redundancy):指相同的资料被存储超过一次。关系型数据库通过将资料拆分为独立的数据表来防止这种情况。
2. 数据不一致 (Data Inconsistency):如果你将某人的地址写在五个不同的地方,而他们搬家了,你可能会忘记更新其中一个。通过使用链接的数据表,你只需要修改一次,就能确保资料“一致”。
快速复习:
• 数据表拥有记录(行)和字段(列)。
• 主键是唯一的标识码。
• 外键用来将数据表链接在一起。
关键点:关系型数据库利用链接的数据表来节省空间(减少冗余)并防止错误(数据不一致)。
3.7.2 结构化查询语言 (SQL)
既然我们知道资料是如何存储的,那么该如何将它们提取出来呢?我们使用 SQL。
检索资料 (SELECT 语句)
当你想搜索信息时,你会对数据库进行“查询”。用这个方便的记忆口诀来记住顺序:Silly Frogs Watch Oranges! (SELECT, FROM, WHERE, ORDER BY)
• SELECT:你想查看哪些字段(列)?
• FROM:你要查看哪个数据表?
• WHERE:搜索条件是什么?(就像一个过滤器)。
• ORDER BY:你想排序吗?使用 ASC 进行 A-Z 排序,或 DESC 进行 Z-A 排序。
查询示例:
想象一个名为 Students 的数据表。我们想找出 11 年级学生的名字,并按名字排序。
SELECT FirstName, Surname
FROM Students
WHERE YearGroup = 11
ORDER BY Surname ASC
你知道吗? 在考试中,你可能会看到星号 (*)。在 SQL 中,SELECT * 的意思是“选取所有项目”。这是一个非常实用的捷径!
修改资料
有时我们需要新增、修改或删除资料。以下是我们的做法:
1. 新增资料 (INSERT)
当有新学生加入学校时,我们使用 INSERT INTO。
INSERT INTO Students (StudentID, FirstName, Surname)
VALUES (105, 'Alex', 'Smith')
2. 修改现有资料 (UPDATE)
如果 Alex Smith 改了姓氏,我们使用 UPDATE。
UPDATE Students
SET Surname = 'Jones'
WHERE StudentID = 105
3. 移除资料 (DELETE)
如果有学生离校,我们使用 DELETE。
DELETE FROM Students
WHERE StudentID = 105
警告! 在使用 UPDATE 和 DELETE 时,请务必小心 WHERE 子句。如果你忘记写它,你可能会不小心修改或删除数据库中的“每一个人”!天啊!
处理两个数据表
在 AQA 考试中,你可能需要同时从两个数据表中提取资料。这时你需要确保 WHERE 子句将一个数据表的主键与另一个数据表的外键链接起来。
SELECT Students.FirstName, Classes.ClassName
FROM Students, Classes
WHERE Students.ClassID = Classes.ClassID
快速复习:
• SELECT 用于寻找资料。
• INSERT 用于新增资料。
• UPDATE 用于修改资料。
• DELETE 用于移除资料。
• WHERE 是让查询更精确的过滤器。
关键点:SQL 是一种逻辑语言。只要记住 SELECT, FROM, WHERE,你就已经掌握 90% 了!试着练习手写这些指令,因为这就是考试时的要求。