第2课 检索数据
介绍如何使用SELECT
语句从表中检索一个或多个数据列。
2.1 SELECT语句
SELECT
语句,是从一个或多个表中检索信息。
关键字keyword
:作为SQL组成部分的保留字。关键字不能用作表或列的名字。- 为了使用
SELECT
检索表数据,必须至少给出两条信息——想选择什么,以及从什么地方选择。
2.2 检索单个列
列名写在SELECT
关键字之后,FROM
关键字指出从哪个表中检索数据。
- 多条
SQL
语句必须以分号;
分割。 - SQL语句不区分大小写。许多SQL开发人员喜欢对SQL关键字使用大写,而对列名和表名使用小写,这样做使代码更易于阅读和调试。
- 虽然
SQL
是不区分大小写的,但是表名、列名和值可能有所不同。 - 多数
SQL
开发人员认为,将SQL
语句分成多行更容易阅读和调试。
2.3 检索多个列
唯一不同的是必须在SELECT
关键字后给出多个列名,列名之间必须以逗号分割。
提示:当心逗号
在选择多个列时,一定要在列名之间加上逗号,但最后一个列名后不加。
提示:数据表示
SQL
语句一般返回原始的、无格式的数据。数据的格式化是表示问题,而不是检索问题。
2.4 检索所有列
在实际列名的位置使用星号*
通配符,则返回表中所有列。列的顺序一般是列在表定义中出现的物理顺序,但并不总是如此。
2.5 检索不同的值
使用DISTINCT
关键字,指示数据库只返回不同的值。
如果使用DISTINCT
关键字,它必须直接放在列名的前面。
注意:不能部分使用
DISTINCT
DISTINCT
关键字作用于所有列,不仅仅是跟在其后的那一列。
2.6 限制结果
各种数据库中的这一SQL
实现并不相同。
如果使用Mysql
、MariaDB
、PostgreSQL
或者SQLite
,需要使用LIMIT
子句。
LIMIT 5;
指示MySQL
等DBMS
返回不超过5行的数据。LIMIT 5 OFFSET 5;
指示MySQL
等DBMS
返回从第5行起的5行数据。第一个数字是检索的行数,第二个数字是指从哪儿开始。LIMIT
指定返回的行数。LIMIT
带的OFFSET
指定从哪儿开始。
提示:
MySQL
、MariaDB
和SQLite
捷径
MySQL
、MariaDB
和SQLite
支持简化版的LIMIT 4 OFFSET 3
语句,即LIMIT3,4
。使用这个语法,逗号之前的值对应OFFSET
,逗号之后的值对应LIMIT
。
2.7 使用注释
- 注释使用
--
(两个连字符)嵌在行内。--
之后的文本就是注释。 - 在一行的开始处使用
#
,这一整行都将作为注释。 - 多行注释,注释可以在脚本的任何位置停止和开始。注释从/* 开始,到 /结束,/* 和 */之间的任何内容都是注释。
2.8 小结
这一课学习了如何使用SQL
的SELECT
语句来检索单个表列、多个表列以及所有表列。你也学习了如何返回不同的值,如何注释代码。
第3课 排序检索数据
3.1 排序数据
ORDER BY
子句取一个或多个列的名字,据此对输出进行排序。
注意:
ORDER BY
子句的位置在指定一条
ORDER BY
子句时,应该保证它是SELECT语句中最后一条子句。提示:通过非选择列进行排序
通常,
ORDER BY
子句中使用的列将是为显示而选择的列。但是,实际上并不一定要这样,用非检索的列排序数据是完全合法的。
3.2 按多个列排序
要按多个列排序,简单指定列名,列名之间用逗号分开即可。
3.3 按列位置排序
除了能用列名指出排序顺序外,ORDER BY
还支持按相对列位置进行排序。
ORDER BY 2,3;
对应前面的列。
如果有必要,可以混合使用实际列名和相对列位置。
3.4 指定排序方向
为了进行降序排列,必须指定DESC
关键字。
DESC
关键字只应用到直接位于其前面的列名。
警告:在多个列上降序排序
必须对每一列指定
DESC
关键字。
DESC
是DESCENDING
的缩写,这两个关键字都可以使用。与DESC
相对的是ASC
(或ASCENDING
),在升序排序时可以指定它。默认是升序。
3.5 小结
这一课学习了如何用SELECT
语句的ORDER BY
子句对检索出的数据进行排序。这个子句必须是SELECT
语句中的最后一条子句。根据需要,可以利用它在一个或多个列上对数据进行排序。