第2课 检索数据
2.1 SELECT语句
关键字(keyword)
作为SQL组成部分的保留字。关键字不能用作表或列的名字。
为了使用SELECT检索表数据,必须至少给出两条信息——想选择什么,以及从什么地方选择。
2.2 检索单个列
SELECT prod_name
FROM Products;
上述语句利用SELECT语句从Products表中检索一个名为prod_name的列。所需的列名写在SELECT关键字之后,FROM关键字指出从哪个表中检索数据。
提示:结束SQL语句
多条SQL语句必须以分号(;)分隔。
提示:SQL语句和大小写
请注意,SQL语句不区分大小写,因此SELECT与select是相同的。同样,写成Select也没有关系。不过,一定要认识到虽然SQL是不区分大小写的,但是表名、列名和值可能有所不同(这有赖于具体的DBMS及其如何配置)。
2.3 检索多个列
提示:当心逗号
在选择多个列时,一定要在列名之间加上逗号,但最后一个列名后不加。如果在最后一个列名后加了逗号,将出现错误。
SELECT prod_id, prod_name, prod_price
FROM Products;
在这个例子中,指定了3个列名,列名之间用逗号分隔。
2.4 检索所有列
SELECT *
FROM Products;
如果给定一个通配符(*),则返回表中所有列。
提示:检索未知列
使用通配符有一个大优点。由于不明确指定列名(因为星号检索每一列),所以能检索出名字未知的列。
2.5 检索不同的值
SELECT DISTINCT vend_id
FROM Products;
如果使用DISTINCT关键字,它必须直接放在列名的前面。
警告:不能部分使用DISTINCT
DISTINCT关键字作用于所有的列,不仅仅是跟在其后的那一列。
2.6 限制结果
在SQL Server和Access中使用SELECT时,可以使用TOP关键字来限制最多返回多少行,如下所示:
SELECT TOP 5 prod_name
FROM Products;
如果你使用的是DB2,很可能习惯使用下面这一DBMS特定的SQL语句,像这样:
SELECT prod_name
FROM Products
FETCH FIRST 5 ROWS ONLY;
如果你使用Oracle,需要基于ROWNUM(行计数器)来计算行,像这样:
SELECT prod_name
FROM Products
WHERE ROWNUM <=5;
如果你使用MySQL、MariaDB、PostgreSQL或者SQLite,需要使用LIMIT 子句,像这样:
SELECT prod_name
FROM Products
LIMIT 5;
LIMIT 5指示MySQL等DBMS返回不超过5行的数据。
为了得到后面的5行数据,需要指定从哪儿开始以及检索的行数,像这样:
SELECT prod_name
FROM Products
LIMIT 5 OFFSET 5;
LIMIT 5 OFFSET 5指示MySQL等DBMS返回从第5行起的5行数据。第一个数字是指从哪儿开始,第二个数字是检索的行数。
警告:第0行
第一个被检索的行是第0行,而不是第1行。因此,LIMIT 1 OFFSET 1会检索第2行,而不是第1行。
提示:MySQL和MariaDB快捷键
MySQL和MariaDB支持简化版的LIMIT 4 OFFSET 3语句,即LIMIT 3,4。使用这个语法,,之前的值对应LIMIT, ,之后的值对应OFFSET。
2.7 使用注释
我们先来看行内注释:
SELECT prod_name -- 这是一条注释
FROM Products;
-- 之后的文本就是注释,例如,这用来描述CREATE TABLE语句中的列就很不错。
下面是另一种形式的行内注释(虽然这种形式很少得到支持)。
# 这是一条注释
SELECT prod_name
FROM Products;
在一行的开始处使用#,这一整行都将作为注释。
你也可以进行多行注释,注释可以在脚本的任何位置停止和开始。
/* SELECT prod_name, vend_id
FROM Products; */
SELECT prod_name
FROM Products;
注释从/*开始,到*/结束,/*和*/之间的任何内容都是注释。
2.8 小结
这一课学习了如何使用SQL的SELECT语句来检索单个表列、多个表列以及所有表列。你也学习了如何返回不同的值,如何注释代码。