07、SQL Server 基础 - SELECT数据查询功能的常见扩展

SELECT语句

SELECT语句属于SQL中的DQL,用于从表中选取数据,并生成结果集。

 SELECT 列名表 FROM 源表名称

①如选取students表中的地址和姓名:

 select SAddress,SName from students

②又如选取整个students表:

 select * from students

使用DISTINCT关键字返回不同的值

该关键字紧跟SELECT后即可,如:

 select distinct SName from students

使用ORDER BY子句对结果集排序

 ... ORDER BY 列1 [DESC],列2 [DESC],...,列m [DESC]

如:

 select SName,SAddress,SGrade from students order by SName desc,SAddress

使用TOP关键字取结果集前几行

该关键字跟在SELECT [DISTINCT]后,列名表前。往往还需要结合ORDER BY子句使用才有意义。

 ... TOP n [PERCENT] [WITH TIES] ...

①只使用n时表示取前n行:

 select top 5 SName,SAddress,SGrade from students 
order by SName desc,SAddress

②使用了PERCENT时表示取前n%:

 select top 25 percent SName,SAddress,SGrade from students 
order by SName desc,SAddress

③使用了WITH TIES表示包括最后一行取值并列的结果:

 select top 9 with ties SName from students 
order by SName desc,SAddress

使用CASE函数按需分类

CASE函数作为多分支语句,可以利用表达式值不同来分类显示数据,分为测试型CASE和搜索型CASE。注意和SELECT语句一起用时,CASE函数体部分将自己生成一列,可以用自定义列名=CASE函数体的方式为这一列命名。

①测试型CASE
对每行按[测试表达式]的结果进到CASE体里去测试,发现与[简单值或可运算式k]有相同的值时,使用对应的[结果值或表达式k]。

 CASE 测试表达式
    WHEN 简单值或可运算式1 THEN 结果值或表达式1
    WHEN 简单值或可运算式2 THEN 结果值或表达式2
    ......
    ELSE 结果值或表达式n
END

如:

 select SName,SGrade,
新的列名=
case SGrade
    when 1 then '一年级'
    when 2 then '二年级'
    when 3 then '三年级'
    when 4 then '四年级'
    else '留级'
end
from students

②搜索型CASE
对每行都从头搜索CASE体,如果[返布尔值式k]返回了True,使用对应的[结果值或表达式k]。

 CASE
    WHEN 返布尔值式1 THEN 结果值或表达式1
    WHEN 返布尔值式2 THEN 结果值或表达式2
    ......
    ELSE 结果值或表达式n
END

如:

 select SName,SGrade,
新的列名=
case
    when SGrade=1 then '一年级'
    when SGrade=2 then '二年级'
    when SGrade=3 then '三年级'
    when SGrade=4 then '四年级'
    else '留级'
end
from students

使用INTO子句将SELECT结果创建并保存在新表中

上节学习了SELECT-INTO-FROM语句,实质上就是这个的最简单用法,只要将”INTO 新表名”写在SELECT的”FROM 源表名称”前即可了。而这中间可以正常使用前面那些乱七八糟的东西,或者使用后面会学的SELECT的其它高级用法。

 SELECT ......
.....
INTO 新表名称
FROM 源表名称

如:

 select SName,SGrade,
新表的新列=
case
    when SGrade=1 then '一年级'
    when SGrade=2 then '二年级'
    when SGrade=3 then '三年级'
    when SGrade=4 then '四年级'
    else '留级'
end
into MyNewTab
from students