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