SELECT 查询选出要显示的字段(SELECT)、要使用的表(FROM)和要保留的记录(WHERE)。结果是一张更小的新表。
这是数据库与查询推理单元的核心技能。这里继续使用第一课的 Plants 表。
| PlantID | Name | Type | Price | Stock | Indoor |
|---|---|---|---|---|---|
| P01 | Fern | Foliage | 12.50 | 8 | TRUE |
| P02 | Cactus | Succulent | 6.00 | 25 | TRUE |
| P03 | Rose | Flowering | 15.00 | 0 | FALSE |
| P04 | Mint | Herb | 4.50 | 40 | FALSE |
| P05 | Orchid | Flowering | 28.00 | 3 | TRUE |
| P06 | Basil | Herb | 5.00 | 12 | FALSE |
| P07 | Aloe | Succulent | 9.50 | 15 | TRUE |
| P08 | Hibiscus | Flowering | 18.00 | 6 | FALSE |
怎样构建一条查询?
每次都按同样的顺序书写:
SELECT field1, field2
FROM table
WHERE condition
在 SELECT 后面写 * 表示显示所有字段。文本值要加引号,数字不加。比较运算符有 =、<>(不等于)、<、<=、> 和 >=。
若要排序,在末尾加上 ORDER BY field(默认升序,降序用 DESC)。
例题
问题:列出价格高于 10.00 的每种植物的名称和价格,价格低的在前。
步骤 1,选择要显示的字段: Name、Price。
步骤 2,选择表: Plants。
步骤 3,写出条件: Price > 10。
步骤 4,加上排序: ORDER BY Price。
SELECT Name, Price
FROM Plants
WHERE Price > 10
ORDER BY Price
步骤 5,测试每条记录。 Fern 12.50 通过,Cactus 6.00 不通过,Rose 15.00 通过,Mint 4.50 不通过,Orchid 28.00 通过,Basil 5.00 不通过,Aloe 9.50 不通过,Hibiscus 18.00 通过。
步骤 6,按价格排序: 12.50、15.00、18.00、28.00。
| Name | Price |
|---|---|
| Fern | 12.50 |
| Rose | 15.00 |
| Hibiscus | 18.00 |
| Orchid | 28.00 |
返回四行。把八条记录全部检查一遍,而不只是看起来可能的几条,才能让答案准确无误。
要留意的错误
常见的失误是把被测试的字段写进 SELECT 而不是 WHERE。
错误答案:
SELECT Price > 10 FROM Plants这是要求数据库显示一个比较结果,而不是筛选记录。
纠正:SELECT 列出要显示的列;WHERE 放测试条件。第二个失误是文本没加引号,例如 Type = Herb。
自我检测
1. 写一条查询,列出所有香草(herb)的名称。
查看答案
SELECT Name
FROM Plants
WHERE Type = "Herb"
结果:Mint、Basil。
2. SELECT * FROM Plants WHERE Stock < 10 会返回几行?
查看答案
库存低于 10:Fern(8)、Rose(0)、Orchid(3)、Hibiscus(6)。共 4 行。
3. 把 Price > 28 改成 Price >= 28,结果有什么变化?
查看答案
> 28 不返回任何行,因为没有价格高于 28.00。>= 28 返回 Orchid(28.00)。
接下来学什么
接下来,用正确的布尔分组组合条件,然后试试单元练习题。你也可以在只读 SQL 练习实验室运行自己的查询。
如果你想让老师检查你构建每条查询的方式,可以看看我们的计算机科学线上一对一补习。