跳到主要内容

数据库

IGCSE 计算机科学 · 第 9 主题

训练
本章视频课 打开视频页面
8:17

Databases

Before computers, a library kept a drawer like this. One card per book, each holding the same few facts, all kept in order — so a librarian could find any book…

英文讲解 · 内嵌中英文字幕

大纲
Candidates should be able to: Notes and guidance
1 Define a single-table database from given data storage requirements • Including: – fields – records – validation
2 Suggest suitable basic data types • Including: – text/alphanumeric – character – Boolean – integer – real – date/time
3 Understand the purpose of a primary key and identify a suitable primary key for a given database table
4 Read, understand and complete structured query language (SQL) scripts to query data stored in a single database table • Limited to: – SELECT – FROM – WHERE – ORDER BY DESCENDING – ORDER BY ASCENDING – SUM – COUNT – AND – OR • Identifying the output given by an SQL statement that will query the given contents of a database table

来源:剑桥国际大纲

9.1

什么是数据库?

一个数据库(database)是一个有组织的数据存储,被保存得容易搜索、排序和更新。在 IGCSE 你用一个单表数据库(single-table database)——所有的数据都容纳在一个表中。

一个图书馆卡片目录里一排排小的标注的抽屉
一个图书馆卡片目录是纸上的一个数据库——你能按索引搜索和排序的记录
一个数据中心里一排排服务器
大型现代数据库存储在数据中心的服务器上
词汇表 训练
英文 中文 拼音
database/ˈdeɪtəbeɪs/ 数据库 shù jù kù
single-table database/ˈsɪŋɡl ˈteɪbl ˈdeɪtəbeɪs/ 单表数据库 dān biǎo shù jù kù
9.2

记录与字段

一个数据库表由记录和字段构成。

  • 一个记录(record)是表中的一行——关于一件事物的所有数据(例如一个学生)。
  • 一个字段(field)是表中的一列——每个记录都有的一份数据(例如"名字")。
StudentID FirstName DateOfBirth FormClass FeesPaid
1 Amy 14/03/2009 10A TRUE
2 Ben 02/11/2008 10B FALSE

这里每一是一个记录,而每一是一个字段。

Student 表,每一行被标为一个记录、每一列为一个字段,而 StudentID 列被高亮为主键
每一行是一个记录,而每一列是一个字段;主键(StudentID)对每个记录唯一
词汇表 训练
英文 中文 拼音
record/ˈrekɔːd/ 记录 jì lù
field/fiːld/ 字段 zì duàn
9.3

字段的数据类型

每个字段存储一个数据类型(data type)。你选择最适合数据的类型。

字段类型:文本(一个名字)、数字(一个年龄)、日期/时间(一个生日)、布尔值(是/否)
字段类型:文本、数字、日期/时间和布尔值
数据类型 用于 例子
文本/字母数字(text/alphanumeric) 字母、数字和符号 "10A"、"Amy"
字符(character) 一个单一字符 'M'
布尔值(Boolean) 两个值之一 TRUE / FALSE
整数(integer) 一个整数 42
实数(real) 一个带小数点的数 3.5
日期时间(date/time) 一个日期或一个时间 14/03/2009
词汇表 训练
英文 中文 拼音
data type/ˈdeɪtə taɪp/ 数据类型 shù jù lèi xíng
text/alphanumeric/tekst ˌælfənjuːˈmerɪk/ 文本 wén běn
character/ˈkærɪktə/ 字符 zì fú
Boolean/ˈbuːlɪən/ 布尔值 bù ěr zhí
integer/ˈɪntɪdʒə/ 整数 zhěng shù
real/rɪəl/ 实数 shí shù
date/time/deɪt taɪm/ 日期时间 rì qī shí jiān
9.4

主键

一个主键(primary key)是一个为每个记录容纳一个唯一的(unique)值的字段。没有两个记录能有同样的主键,所以它让你精确地挑出一个记录。

在上面的表中,StudentID 是一个好的主键,因为每个学生有一个不同的数。一个像 FormClass 的字段会是一个糟糕的主键,因为许多学生共享同一个班。

词汇表 训练
英文 中文 拼音
primary key/ˈpraɪməri kiː/ 主键 zhǔ jiàn
unique/juːˈniːk/ 唯一的 wéi yī de
9.5

数据库中的有效性检查

当数据被放入一个数据库时,验证(validation)检查确保它是合理的——例如对一个年龄字段的一个范围检查,或一个存在性检查使一个字段不被留空。(你在主题 7 中看到过这些检查。)

对一个年龄字段的一个范围检查接受 16 但拒绝 200
一个范围检查接受合理的值并拒绝其余的
词汇表 训练
英文 中文 拼音
validation/ˌvælɪˈdeɪʃn/ 验证 yàn zhèng
9.6

结构化查询语言(SQL)

结构化查询语言(Structured Query Language,SQL)是一种用来查询(query)一个数据库——挑出你想要的记录——的语言。你必须理解并完成 SQL 脚本。

SELECT, FROM and WHERE

  • SELECT 说明显示哪些字段
  • FROM 说明用哪个表
  • WHERE 给一个条件(condition),所以只显示匹配的记录。
一个 SQL 查询:SELECT name FROM students WHERE age > 15
SELECT 挑选字段,FROM 命名表,WHERE 设定条件
SELECT FirstName, FormClass
FROM Student
WHERE FeesPaid = TRUE;

这显示每个已付费的学生的名字和班级。

* 选择所有字段:

SELECT *
FROM Student
WHERE FormClass = '10A';

ORDER BY

ORDER BY 排序结果。用 ASC 表示升序(ascending,最小的先,A→Z)或用 DESC 表示降序(descending,最大的先,Z→A)。

SELECT FirstName, DateOfBirth
FROM Student
ORDER BY DateOfBirth ASC;

AND and OR

AND(两者都必须为真)或 OR(至少一个必须为真)连接条件。

SELECT FirstName
FROM Student
WHERE FormClass = '10A' AND FeesPaid = FALSE;

SUM and COUNT

  • SUM 把一个数字字段中的值加起来。
  • COUNT 数有多少记录匹配。
SELECT COUNT(StudentID)
FROM Student
WHERE FeesPaid = FALSE;

这数有多少学生还没付费。SUM 以同样的方式工作,但加一个数字字段而不是数行。

Working out the output

要找到一个 SQL 脚本的输出,按这个顺序读它:

  1. FROM——哪个表;
  2. WHERE——只保留匹配条件的记录;
  3. SELECT——只显示选定的字段;
  4. ORDER BY——把结果排序。
四个步骤按顺序:FROM(哪个表)、WHERE(保留匹配的行)、SELECT(显示选定的字段)、ORDER BY(排序结果)
按这个顺序读一个 SQL 查询:FROM(哪个表)、WHERE(哪些行)、SELECT(哪些字段)、ORDER BY(排序)

遵循这些步骤,你可以精确地写下查询返回哪些行和列。

例题。 一个 Book 表有字段 TitleAuthorPriceInStock。写一个查询,显示 Orwell 所著且有库存的每本书的书名和价格,最便宜的排在前面。

SELECT Title, Price
FROM Book
WHERE Author = 'Orwell' AND InStock = TRUE
ORDER BY Price ASC;

按阅读顺序来构建:FROM 指出是哪个表;WHERE 只保留匹配的记录,因为有两个条件,所以要用 AND;SELECT 只显示题目要求的那两个字段;ORDER BY … ASC 把它们排序。文本值要加引号,而且只有题目要求的字段才应出现在 SELECT 中 - 仅仅因为你按 Author 筛选过就把它也加进去,是这里最常见的丢分方式。

探索

SELECT … WHERE

Step through a query: WHERE filters rows, SELECT picks columns.

词汇表 训练
英文 中文 拼音
structured query language/ˈstrʌktʃəd ˈkwɪərɪ ˈlæŋɡwɪdʒ/ 结构化查询语言 jié gòu huà chá xún yǔ yán
query/ˈkwɪərɪ/ 查询 chá xún
condition/kənˈdɪʃn/ 条件 tiáo jiàn
ascending/əˈsendɪŋ/ 升序 shēng xù
descending/dɪˈsendɪŋ/ 降序 jiàng xù
9.7

考试技巧

  • 一个记录是一行(关于一件事物的所有数据);一个字段是一列(每个记录都有的一项)。
  • 一个主键对每个记录必须唯一,所以它精确地挑出一个记录(StudentID,而不是 FormClass)。
  • 学习 SQL 各部分:SELECT(哪些字段)、FROM(哪个表)、WHERE(条件)、ORDER BY(排序,ASC 或 DESC)。
  • FROM → WHERE → SELECT → ORDER BY 的顺序读一个查询以算出它的输出。
  • COUNT 数匹配的记录;SUM 加起来一个数字字段。

本主题的互动课程

逐步学习,并即时检测练习。

IGCSE 计算机科学历年真题

IGCSE 计算机科学的更多主题

登录或创建账号

IGCSE, A-Level & AP