SQL新手;
希望快速学会并熟练使用SQL ;
希望知道如何使用SQL开发应用程序;
希望在无人帮助的情况下有效而快速地使用SQL ;
本书的 SQL 系统适用那些系统
部分节选
第2章 检索数据
这一课介绍如何使用SELECT 语句从表中检索一个或多个数据列。
2.1 SELECT 语句
正如第1课所述,SQL 语句是由简单的英语单词构成的。这些单词称为关键字,每个SQL 语句都是由一个或多个关键字构成的。最经常使用的SQL 语句大概就是SELECT 语句了。它的用途是从一个或多个表中检索信息。
关键字(keyword)作为SQL 组成部分的保留字。关键字不能用作表或列的名字。附录D 列出了某些经常使用的保留字。
为了使用SELECT 检索表数据,必须至少给出两条信息——想选择什么,以及从什么地方选择。
说明:理解例子本书各课程中的样例SQL 语句(和样例输出)使用了附录A 中描述的一组数据文件。如果想要理解和试验这些样例(我强烈建议这样做),请参阅附录A,它解释了如何下载或创建这些数据文件。
-
提示:使用正确的数据库利用DBMS 可以处理多个数据库(参见第1 课里文件柜的比喻)。根据附录A 安装好样例表之后,建议你把它们装进新的数据库。如果这样的话,要确保在处理之前就选择好了数据库,就像你在创建样例表之前做的那样。后面各课的学习过程中,如果你遇到未知表的错误,很可能就是没在正确的数据库里。
2.2 检索单个列
我们将从简单的SQL SELECT 语句讲起,此语句如下所示:
输入▼
SELECT prod_name
FROM Products;
分析▼上述语句利用SELECT 语句从Products 表中检索一个名为prod_name的列。所需的列名写在SELECT 关键字之后,FROM 关键字指出从哪个表中检索数据。此语句的输出如下所示:
输出▼
prod_name
-------------------Fish bean bag toy
Bird bean bag toy
Rabbit bean bag toy
8 inch teddy bear
12 inch teddy bear
18 inch teddy bear
Raggedy Ann
King doll
Queen doll
根据你使用的具体DBMS和客户端,可能你会看到一条信息说明检索了多少行,以及花了多长时间。例如,MySQL 命令行会显示类似下面这样的一行信息:
9 rows in set (0.01 sec)
说明:未排序数据如果你自己试验这个查询,可能会发现显示输出的数据顺序与这里的不同。出现这种情况很正常。如果没有明确排序查询结果(下一课介绍怎样指定顺序),则返回的数据没有特定的顺序。返回数据的顺序可能是数据被添加到表中的顺序,也可能不是。只要返回相同数目的行,就是正常的。
如上的一条简单SELECT 语句将返回表中的所有行。数据没有过滤(过滤将得出结果集的一个子集),也没有排序。以后几课将讨论这些内容。
提示:结束SQL 语句多条SQL 语句必须以分号(;)分隔。多数DBMS 不需要在单条SQL语句后加分号,但也有DBMS 可能必须在单条SQL 语句后加上分号。当然,如果愿意可以总是加上分号。事实上,即使不一定需要,加上分号也肯定没有坏处。
-
提示:SQL 语句和大小写请注意,SQL 语句不区分大小写,因此SELECT 与select 是相同的。同样,写成Select 也没有关系。许多SQL 开发人员喜欢对SQL 关键字使用大写,而对列名和表名使用小写,这样做代码更易于阅读和调试。不过,一定要认识到虽然SQL 是不区分大小写的,但是表名、列名和值可能有所不同(这有赖于具体的DBMS 及其如何配置)。
-
提示:使用空格在处理SQL 语句时,其中所有空格都被忽略。SQL 语句可以写成长长的一行,也可以分写在多行。下面这3种写法的作用是一样的。
SELECT prod_name
FROM Products;
SELECT prod_name FROM Products;
SELECT
prod_name
FROM
Products;
多数SQL 开发人员认为,将SQL 语句分成多行更容易阅读和调试。
2.3 检索多个列
要想从一个表中检索多个列,仍然使用相同的SELECT 语句。唯一的不同是必须在SELECT 关键字后给出多个列名,列名之间必须以逗号分隔。
提示:当心逗号在选择多个列时,一定要在列名之间加上逗号,但最后一个列名后不 加。如果在最后一个列名后加了逗号,将出现错误。
下面的SELECT 语句从Products 表中选择3列。
输入▼
SELECT prod_id, prod_name, prod_price
FROM Products;
分析▼与前一个例子一样,这条语句使用SELECT 语句从表Products 中选择数据。在这个例子中,指定了3 个列名,列名之间用逗号分隔。此语句的输出如下:
输出▼
prod_id prod_name prod_price
--------- -------------------- ----------
BNBG01 Fish bean bag toy 3.49
BNBG02 Bird bean bag toy 3.49
BNBG03 Rabbit bean bag toy 3.49
BR01 8 inch teddy bear 5.99
BR02 12 inch teddy bear 8.99
BR03 18 inch teddy bear 11.99
RGAN01 Raggedy Ann 4.99
RYL01 King doll 9.49
RYL02 Queen dool 9.49
说明:数据表示SQL 语句一般返回原始的、无格式的数据,不同的DBMS 和客户端显示数据的方式略有不同(如对齐格式不同、小数位数不同)。数据的格式化是表示问题,而不是检索问题。因此,如何表示一般会在显示该数据的应用程序中规定。通常很少直接使用实际检索出的数据(没有应用程序提供的格式)。