select语句的语法形式如下:

select select_list

[ into new_table ]

from table_source

[ where search_condition ]

[ group by group_by_expression ]

[ having search_condition ]

[order by order_expression [ ASC | DESC ] ]

[compute clause]

[for browse]

几种常用语句的用法:

SELECT子句用于指定所选择的要查询的特定表中的列,它可以是星号(*)、表达式、列表、变量等。

INTO子句用于指定所要生成的新表的名称。

FROM子句用于指定要查询的表或者视图,最多可以指定16个表或者视图,用逗号相互隔开。

WHERE子句用来限定查询的范围和条件。

GROUP BY子句是分组查询子句。

HAVING子句用于指定分组子句的条件。

GROUP BY子句、HAVING子句和集合函数一起可以实现对每个组生成一行和一个汇总值。

ORDER BY子句可以根据一个列或者多个列来排序查询结果,在该子句中,既可以使用列名,也可以使用相对列号。

ASC表示升序排列,DESC表示降序排列。

COMPUTE子句使用集合函数在查询的结果集中生成汇总行。

COMPUTE BY子句用于增加各列汇总行。

 

例如:select  uid,type,unit,total from testmoney group by uid,type,unit,total compute avg(unit),sum(total)结果如下图:

例如现在有一个语句:SELECT  au_name,title FROM authors,titles,titleauthor  WHERE  authors.au_id=titleauthor.au_id

AND    titles.title_id=titleauthor.title_id   

当这个SELECT语句执行时,每个作者都将与正确的书名相匹配。表titleauthor指明了表authors和表titles的关系,它通过包含分别来自两个表的各一个字段实现这一点。第三个表的唯一目的是在另外两个表的字段之间建立关系。它本身不包含任何附加数据。

    注意在这个例子中字段名是如何书写的。为了区别表authors和表titles中相同的字段名au_id,每个字段名前面都加上了表名前缀和一个句号。名为author.au_id 的字段属于表authors,名为titleauthor.au_id的字段属于表titleauthor,两者不会混淆。

    通常,当你从一个表中取出字段值时,该值与创建该表时所定义的字段名联系在一起。如果你从表authors中选择所有的作者名字,所有的值将会与字段名au_lname相联系。但是在某些情况下,你需要对字段名进行操作。在SELECT语句中,你可以在缺省字段名后面仅跟一个新名字来取代它。例如,可以用一个更直观易读的名字Author Last Name来代替字段名au_lname

    SELECT au_lname "Author Last Name" FROM authors

    当这个SELECT语句执行时,来自字段au_lname的值会与“Author Last Name”相联系。查询结果可能是这样:

        Author Last Name

      …………………………………………………………………….. 

      White

      Green

      Carson

      O’Leary

      Straight

     

      (23 row(s) affected)

 

注意字段标题不再是au_lname,而是被Author Last Name所取代。

你也可以通过执行运算,来操作从一个表返回的字段值。例如,如果你想把表titles中的所有书的价格加倍,你可以使用下面的SELECT语句:

        SELECT  price*2 FROM titles      

    当这个查询执行时,每本书的价格从表中取出时都会加倍。但是,通过这种途径操作字段不会改变存储在表中的书价。对字段的运算只会影响SELECT语句的输出,而不会影响表中的数据。为了同时显示书的原始价格和涨价后的新价格,你可以使用下面的查询:

SELECT  price  "Original  price", price*2  "New price" FROM  titles

    当数据从表titles中取出时,原始价格显示在标题Original price下面,加倍后的价格显示在标题New price下面。结果可能是这样:

                original  price         new  price

      ……………………………………………………………….

19.99   39.98

11.95   23.90

2.99    5.98

19.99   39.98

(18 row(s)  affected)

       

    你可以使用大多数标准的数学运算符来操作字段值,如加(+),减(-),乘(*)和除(/)。你也可以一次对多个字段进行运算,例如:

     SELECT  price*ytd_sales "total revenue" FROM titles

    在这个例子中,通过把价格与销售量相乘,计算出了每种书的总销售额。这个SELECT语句的结果将是这样的:

      

      total  revenue

      ……………………………………………..

      81,859,05

      46,318,20

      55,978,78

      81,859,05

      40,619,68

     

      (18 row(s)  affected)

 

    最后,你还可以使用连接运算符(它看起来像个加号)来连接两个字符型字段:

      SELECT  au_fname+' '+au_lname   "author name" FROM authors

    在这个例子中,你把字段au_fname和字段au_lname粘贴在一起,中间用一个逗号 隔开,并把查询结果的标题指定为author name。这个语句的执行结果将是这样的:

       author  names

       …………………………………………………………

       Johnson White

       Marjorie Green

       Cheryl  Carson

      Michael O’Leary

      Dean Straight

     

      (23 row(s)  affected)

如果要随机取出10条数据,语句如下:

select top 10 * from tablename order by newid()

取出互不相同的记录

一个表有可能在同一列中有重复的值。例如,数据库pubs的表authors中有两个作者的名字是Ringer。如果你从这个表中取出所有的名字,名字Ringer将会显示两次。

    在特定情况下,你可能只有兴趣从一个表中取出互不相同的值。如果一个字段有重复的值,你也许希望每个值只被选取一次,你可以使用关键字DISTINCT来做到这一点:

     SELCET  DISTINCT au_lname  FROM  authors   WHERE  au_lname="Ringer"

    当这个SELECT语句执行时,只返回一个记录。通过在SELECT语句中包含关键字DISTINCT,你可以删除所有重复的值。例如,假设有一个关于新闻组信息发布的表,你想取出所有曾在这个新闻组中发布信息的人的名字,那么你可以使用关键字DISTINCT。每个用户的名字只取一次——尽管有的用户发布了不止一篇信息。