欢迎来到 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% 了!试着练习手写这些指令,因为这就是考试时的要求。