数据查询语言(Database Query Language,DQL):SELECT语句
从数据库中检索行,并允许从一个或多个表中选择一个或多个行或列。虽然 SELECT 语句的完整语法较复杂,但是其主要的子句可归纳如下:
SELECT [ALL|DISTINCT]|[TOP n [PERCENT]]
{ *|{TableName|ViewName|TableAlias}.*
|{ColumnName|Expression|IDENTITYCOL|ROWGUIDCOL}[ [AS] ColumnAlias ]
|ColumnAlias=Expression
}[,...n]
[INTO NewTableName]
FROM TableName [[AS] TableAlias]|ViewName [[AS] TableAlias]
[,TableName [[AS] TableAlias]|ViewName [[AS] TableAlias]] [,…n]
[WHERE Condition_Expression]
[GROUP BY ColumnName [,ColumnName] [,…n] [HAVING Condition_Expression]]
[ORDER BY ColumnName [ASC|DESC] [,ColumnName [ASC|DESC]] [,…n]]
说明:方括号“[]”中的内容为可选项;中括号“{}”中的内容为必选项;“…n”表示紧跟其前的语法可以任意重复多次定义;竖线“|”表示由该符号隔开的内容必须任选其一;Expression可以是是列名、常量、函数以及由运算符连接的列名、常量和函数的任意组合,或者是子查询。
一、使用SELECT语句选择列。
1、使用DISTINCT关键字消除重复列;使用ALL关键字选择所有行(默认),可省略。
格式:SELECT DISTINCT ColumnName [,ColumnName] [,…n] FROM TableName|ViewName
例一:查询所有作者的所在城市和州名,要求没有重复信息。
SELECT DISTINCT city,state FROM authors
city state
-------------------- -----
Ann Arbor MI
Berkeley CA
Corvallis OR
Covelo CA
Gary IN
Lawrence KS
… …
(所影响的行数为 16 行)
例二:查询所有作者的所在城市和州名。
SELECT ALL city,state FROM authors
city state
-------------------- -----
Menlo Park CA
Oakland CA
Berkeley CA
San Jose CA
Oakland CA
Lawrence KS
… …
(所影响的行数为 23 行)
注:用DISTINCT关键字消除重复行时,NULL也会算在其中,且每一个SELECT命令只能拥有一个DISTINCT关键字,这就意味着,关键字DISTINCT是限制整条数据记录都重复的而且只显示其中的一条记录,而不是针对某个字段来处理。
2、使用“*”选择所有列
格式:SELECT * FROM TableName|ViewName
例:查询所有购书信息。
SELECT * FROM sales
3、选择指定列
格式:SELECT ColumnName [,ColumnName] [,…n] FROM TableName|ViewName
例:查询所有书籍的书号、购书数量、付帐方式信息。
SELECT titleid,qty,payterms FROM sales
注:SELECT后的各个列的顺序不一定要跟原表中一致,也就是说,用户在查询的时候可以根据自己的需要任意调整各个列的顺序,如果在上例中想把数量信息排在第一列,则语句应该写成如下的形式:
SELECT qty,titleid,payterms FROM sales
4、在结果中插入字符串
格式:SELECT ['string',] ColumnName [,['string',] ColumnName] [,…n] FROM TableName|ViewName
例:查询所有书籍的书号、购书数量、付帐方式信息,并在每个付帐方式前显示“付帐方式”,表明显示信息是付帐方式信息。
SELECT title_id,qty,'付帐方式:',payterms FROM sales
title_id qty payterms
-------- ------ --------- ------------
BU1032 5 付帐方式: Net 60
PS2091 3 付帐方式: Net 60
PC8888 50 付帐方式: Net 30
PS2091 75 付帐方式: ON invoice
PS2091 10 付帐方式: Net 60
TC3218 40 付帐方式: Net 30
… … … …
(所影响的行数为 21 行)
5、修改列标题,即为列指定一别名
格式:SELECT [ColumnTitle=] ColumnName [,[ColumnTitle=] ColumnName] [,…n] FROM TableName|ViewName 或
SELECT ['ColumnTitle'=] ColumnName [,['ColumnTitle'=] ColumnName] [,…n] FROM TableName|ViewName 或
SELECT ColumnName ['ColumnTitle'] [,ColumnName ['ColumnTitle']] [,…n] FROM TableName|ViewName 或
SELECT ColumnName AS ColumnTitle [,ColumnName AS ColumnTitle] [,…n] FROM TableName|ViewName
例:查询所有出版商的ID号和名称,并要求用ID和名称来进行区别。
SELECT ID=pub_id,名称=pub_name FROM publishers 或
SELECT 'ID'=pub_id,'名称'=pub_name FROM publishers 或
SELECT pub_id 'ID',pub_name '名称' FROM publishers 或
SELECT pub_id AS ID,pub_name AS 名称 FROM publishers
ID 名称
---- ----------------------------------------
0736 New Moon Books
0877 Binnet & Hardley
1389 Algodata Infosystems
1622 Five Lakes Publishing
1756 Ramona Publishers
9901 GGG&G
9952 Scootney Books
9999 Lucerne Publishing
(所影响的行数为 8 行)
6、在列中使用算术运算符
SQL Server常见的运算符有:
加(+) | 加法(注意并非字符串连接符) |
减(-) | 减法 |
乘(*) | 乘法 |
除(/) | 除法 |
模(%) | 返回一个除法的整数余数,例如5%2=1,因为5除以2余1 |
注:算术运算符+、-、*、/号可以用于任何数值列。取模操作(%)不能用于Money列。
例:查询将所有书的价格提高10%后的价格、书号和类型信息。
SELECT title_id,type,(price*1.1) 'price' FROM titles
title_id type price
-------- --------------- ------------------------
BU1032 business 21.98900
BU1111 business 13.14500
BU2075 business 3.28900
BU7832 business 21.98900
MC2222 mod_cook 21.98900
MC3021 mod_cook 3.28900
MC3026 UNDECIDED NULL
… … …
(所影响的行数为 18 行)
注:一个表达式中有多于一个算术符时,先进行乘、除和取模运算,然后是加和减运算。当运算符的运算优先级相同时,就从左到右进行运算。括号中的运算总是最先进行。