SQL数据操作基础(初级)3
操作领域
通常,当您从表中取出字段值时,该值与创建表时定义的字段名称相关联。如果从表authors中选择所有的作者姓名,所有的值都将与字段名au_lname相关联。但是在某些情况下,您需要操作字段名称。在SELECT语句中,可以用新名称替换默认字段名称。例如,字段名称au_lname可以替换为更直观、更易读的名称Author Last Name:
从作者中选择au_lname“作者姓氏”
当执行这个SELECT语句时,来自字段au_lname的值将与“作者姓氏”相关联。该查询可能如下所示:
作者姓氏
…………………………………………………………………… ..
白色的
格林(姓氏);绿色的
卡森
奥利里
直的
…
(受影响的23行)
请注意,字段标题不再是au_lname,而是替换为作者姓氏。
还可以通过执行运算来操作从表中返回的字段值。例如,如果要将标题表中所有书籍的价格翻倍,可以使用下面的
SELECT语句:
从标题中选择价格*2
当这个查询被执行时,每本书的价格将会翻倍。但是,以这种方式操作该字段不会改变表中存储的图书价格。字段
的操作只会影响SELECT语句的输出,而不会影响表中的数据。为了同时显示图书的原价和涨价后的新价格,可以使用下面的查询:
从标题中选择价格“原价”,价格*2“新价格”
当从表标题中取出数据时,原始价格显示在标题“原始价格”下,加倍的价格显示在标题“新价格”下。结果可能是这样的
示例:
原价新价
……………………………………………………………….
39.98
5.98
39.98
…
(受影响的18行)
您可以使用大多数标准的数学运算符来处理字段值,例如加(+)、减(-)、乘(*)和除(/)。您也可以一次计算多个字段
,例如:
从标题中选择price*ytd_sales“总收入”
在本例中,每本书的总销售额是通过将价格乘以销售量计算出来的。该SELECT语句的结果将如下所示:
总收入
…………………………………………… ..
81,859,05
46,318,20
55,978,78
81,859,05
40,619,68
…
(受影响的18行)
最后,您还可以使用连接运算符(看起来像一个加号)来连接两个字符字段:
从作者中选择au_fname+" "+au_lname "作者姓名"
在本例中,您将字段au_fname和au_lname粘贴在一起,用逗号分隔,并将查询结果的标题指定为author
name。该语句的执行结果将如下所示:
作者姓名
…………………………………………………………
约翰逊·怀特
马乔里·格林
谢丽尔·卡森
迈克尔·奥利里
迪恩直男
…
(受影响的23行)
如您所见,SQL为您提供了对查询结果的大量控制。你应该在ASP编程中充分利用这些优势。使用SQL操作查询结果几乎总是
比使用具有相同效果的脚本更有效。
对查询结果排序
正如本章介绍中所强调的,SQL表没有内部顺序。例如,从表中取出第二条记录是没有意义的。从SQL的角度来看,没有任何记录
在任何其他记录之前。
但是,您可以操纵SQL查询结果的顺序。默认情况下,从表中提取记录时,记录不会以特定的顺序出现。例如,当从表
authors中取出字段au_lname时,查询结果显示如下:
au _ inname
…………………………………….
白色的
格林(姓氏);绿色的
卡森
奥利里
直的
…
(受影响的23行)
不按特定顺序看名单是不方便的。如果你把这些名字按字母顺序排列,阅读起来会容易得多。通过使用ORDER BY子句,您可以
强制查询结果按升序排序,如下所示:
SELECT au _ lname FROM authors ORDER BY au _ lname
当执行这个SELECT语句时,作者的名字将按字母顺序显示。order子句按升序对作者姓名进行排序。
还可以同时对多个列使用ORDER BY子句。例如,如果要同时以升序显示字段au_lname和字段au_fname,则需要对这两个字段进行排序
:
SELECT au_lname,au_fname FROM authors ORDER BY au _ lname,au _ fname
此查询首先按au_lname字段对结果进行排序,然后按au_fname字段进行排序。记录将按以下顺序取出:
au_lname
…………………………………………………………………….
伯奈特·亚伯拉罕
林格·艾伯特
林格·安妮
史密斯河曲
…
(受影响的23行)
注意两个作者有相同的名字Ringer。名为艾伯特·林格的作者出现在名为安妮·林格的作者之前,因为按字母顺序姓艾伯特应该在姓安妮之前。
如果你想把查询结果逆序排列,你可以使用关键字DESC。关键字DESC按降序对查询结果进行排序,如下例所示:
SELECT au_lname,au_fname FROM authors
其中au _ lname = " Ringer " ORDER BY au _ lname,au_fname DESC
该查询从表authors中获取所有名为Ringer的作者记录。order子句根据作者的名和姓对查询结果进行降序排序。结果是这样的
:
au_lname
……………………………………………………………………………………….
林格·安妮
林格·艾伯特
(2行影响c)
请注意,在此表中,姓氏Anne出现在姓氏Albert之前。作者姓名按降序显示。
您还可以按数值字段对查询结果进行排序。例如,如果您想按降序列出所有书籍的价格,可以使用以下SQL查询:
从标题中选择价格,按价格DESC排序
这个SELECT语句从表中取出所有书籍的价格。显示结果时,价格低的书先显示,价格高的书后显示。
警告:
不需要的时候不要对查询结果进行排序,因为服务器完成这项工作是要花费一些精力的。这意味着带有ORDER BY子句的SELECT语句执行
行的时间比一般的SELECT语句长。
拿出不同的记录。
一个表可能在同一列中有重复的值。例如,在数据库pubs的authors表中有两个作者的名字相同。如果您从该表中取出
的所有姓名,姓名振铃器将显示两次。
在某些情况下,您可能只对从表中取出互不相同的值感兴趣。如果字段有重复值,您可能希望每个值只被选择一次。您可以
使用关键字DISTINCT来做到这一点:
从作者中选择不同的au_lname,其中au_lname="Ringer "
当执行这个SELECT语句时,只返回一条记录。通过在SELECT语句中包含关键字DISTINCT,可以删除所有重复的值。举个例子,假设
有一个关于新闻组信息发布的表,你想把这个新闻组里所有发布过信息的人的名字都拿出来,那么你可以使用关键字DISTINCT。每个
帐户的名称只使用一次,尽管有些用户发布了不止一条消息。
警告:
就像ORDER BY子句一样,强制服务器返回不同的值也会增加运行开销。傅琦不得不花一些时间来完成这项工作。因此,不必要时不要使用关键字DISTINCT
。
创建新表格
如前所述,数据库中的所有数据都存储在表中。包括数据表行和列。列确定表中数据的类型。行包含实际数据。
例如,数据库pubs中的表authors有九个字段。其中一个字段名为au_lname,用于存储作者姓名信息。每当一个新的作者被添加到这个表中时,作者的名字被添加到这个字段中,产生一个新的记录。
通过定义字段,您可以创建一个新表。每个字段都有一个名称和一个特定的数据类型(数据类型将在后面的“字段类型”一节中描述)。例如,字段au_lname存储字符数据。字段也可以存储其他类型的数据。
使用SQL Sever创建新表有许多方法。您可以使用SQL企业管理器执行SQL语句或创建新表。在下一节中,您将学习如何用SQL语句创建一个新表。
位律师回复
0条评论