用SELECT语句实现数据库的查询操作。同时,它还可以使用各种子句对查询结果进行分组统计、合计、排序等操作。SELECT语句还可将查询结果生成另一个表(临时表或永久表)。
SELECT语句的语法格式为:
在SELECT语句中,子句可以省略,但在列出时必须按照以上顺序。
简单查询:
简单的SQL查询只包括SELECT列表、FROM子句和WHERE子句,它们分别说明所查询列、查询操作的表或视图以及搜索条件等。
例:查询title表中1991年出版的"business"类图书及其价格。
SELECT title,price
FROM titles
WHERE DATEPART(YEAR,pubdate)=1991 AND type='business'
1.Select列表语句
SELECT列表语句(select_list)指定所选择的列,它可以为一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。
(1)选择所有列
用星号表示选择指定表或视图中的选择所有列
SELECT * FROM discounts
选择指定列并指定它们的显示次序
在SELECT列表语句中指定列名来选择不同的列,各列之间用逗号分隔,显示结果中数据的排列顺序为列名的列表顺序。
SELECT discount,discounttype FROM discounts
在SELECT列表中,还可以对数值进行算术运算(包括加、减、乘、除、取模等)。
其中,加、减、乘、除操作适用于任何数值型列(如int,smallint,tinyint,decimal,numeric,float,real,money,smallmoney等),而取模操作不能用于money和smallmoneyu数据类型列。
对数值进行运算时,如果列值为空(null),则所执行的所有算术操作的结果仍为空:
SELECT discounttype,'lowqty+50'=lowqty+50
FROM discounts
在SELECT列表中,还可以指定字符串常量或变量输出结果的显示格式:
DECLARE @var char(12)
SELECT @VAR='折扣幅度'
SELECT '折扣名称:',discounttype,@var,discount
SELECT discounts
(2)删除重复行
SELECT语句可以使用ALL|DISTINCT选项来显示所有行(ALL)或删除重复的行(DISTINCT),缺省时为ALL。使用DISTINCT选项时,对于所有数据重复的SELECT列表值只显示一次。
SELECT DISTINCT country FROM publishers
2.FROM子句
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定16个表或视图,它们相互之间用逗号分隔,如果这些表或视图属于不同的数据库,可用“数据库.所有者名称.对象”格式限定表或视图对象。
SELECT au_id,titles.title_id
//由于在两个表中都存在"title_id"列,加入"titles."避免二义性
FROM titles,titleauthor
WHERE titles.title_id=titleauthor.title_id
在FROM子句中,可为每个表或视图指定一个别名,别名紧跟在对象名称之后,之间用空格分隔,然后可以使用别名引用表中各列。
SELECT au_id,t.title_id
FROM titles t,titleauthor ta
WHERE t.title_id=ta.title_id
用WHERE子句限定搜索条件,SELECT语句中使用WHERE子句指定查询条件。
WHERE语句中可包含的运算符,如下表:
例1:范围运算符:相交书价为$10~$30之内的图书
SELECT title,price
FROM titles
WHERE price BETWEEN $10 AND $30
例2:列表运算符:列出publishers表中社址在德国和法国的出版社
SELECT pub_name
FROM publishers
WHERE country IN('germany','france')
3.模式匹配符
模式匹配符[NOT] LIKE常用于模糊条件查询,它判断列值是否与指定的字符串格式相匹配,可用于char,varchar,datetime和smalldatetime数据类型。可使用的通配字符有以下几种:
●百分号%:可匹配任意类型长度的字符;
●下划线_:匹配单个字符,它常用来限制表达式的字符长度;
●方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个字符;
●[^]:其取值与[]相同,但它要求所匹配对象为指定字符以外的任一个字符。
例6:列出名称长度为5个字符,且以'GG'开头的出版社
SELECT pub_name
FROM publishers
WHERE pub_name LIKE 'GG_'
例7:空值判断符:查找目前仍未定价的图书
SELECT title,price
FROM titles
WHRER price IS NULL
例8:逻辑运算符:列出收价低于$5或高于$15且当年销量小于5000的图书
SELECT price,ytd_sales,title
FROM titles
WHERE(price<$5 OR price>$15) AND ytd_sales<5000
查询结果排序
在SELECT语句中,使用ORDER BY语句对查询结果按一列或多列进行排序。ORDER BY子句的语法格式为:
例:列出"business"类的图书标识和价格,结果排序方式为:价格由高到低,title_id列由低到高。
SELECT title_id,price
FROM titles
WHERE type='business'
ORDER BY price DESC,title_id,ASC