数据库技术与应用(SQL Server)——【SQL Server多表连接查询(二)】

SELECT TOP

TOP 字句

TOP字句用于规定返回记录的数目
注意:并非所有的数据库系统都支持 SELECT TOP 语句。 MySQL 支持 LIMIT 语句来选取指定的条数数据, Oracle 可以使用 ROWNUM 来选取
SQL Server语法:

select top nubmer |? precent colum_name from tabel_name;


查看一个表中的前百分之多少的记录。

实例:
如果我们想查看一个table表前面百分之二十的记录,则:
select top 20 precent * from table;
查看Persons表中的前两行记录,则:
select top 2 from Persons;

CASE表达式

CASE表达式

CASE表达式是一种多分支的表达式,它可以根据条件列表的值返回多个可能的结果表达式中的一个。CASE表达式可用在任何允许使用表达式的地方,它不是一个完整的T-SQL语句,因此不能单独执行。

CASE表达式有两种格式:
简单的CASE表达式和搜素CASE表达式(两种方式,可以实现相同的功能)
简单表达式比搜素表达式简洁,功能方面有限制,
CASE表达式只返回第一个符合条件的值,剩下的CASE表达式部分将会自动忽略。

CASE语句的格式

简单CASE函数

简单CASE函数将一个测试表达式和一组简单表达式进行比较,如果某个简单表达式与测试表达式的值相等,则返回相应的结果表达式的值。

简单CASE函数的语法格式为:
CASE测试表达式
WHEN简单表达式1 THEN 结果表达式1
WHEN简单表达式2 THEN结果表达式2
...
WEHN简单表达式n THEN结果表达式n
END[结果表达式n+1]
END

其中: 
测试表达式可以是一个变量名、字段名、函数或者子查询。
简单表达式中不能包含比较运算符,它们给出被比较的表达式或值,其数据类型必须与测试表达式的数据类型相同,或者可以隐身转换为测试表达式的数据类型。
CASE表达式的执行过程
计算测试表达式,然后按照从上到下的书写顺序将测试表达式的值与,每个WHEN子句的简单表达式进行比较。
如果某个简单表达式的值与测试表达式的值匹配(相同),则返回第一个与之匹配的WHEN子句所对应的结果表达式的值。如果所有简单表达式的值与测试表达式的都不匹配,若指定ELSE子句,则返回ELSE子句中指定的结果表达式的值,若没有指定ELSE子句,则返回NULL。

搜素CASE函数

搜素CASE表达式的语法格式
CASE
WHEN 布尔表达式1 THEN结果表达式1
WHEN 布尔表达式2 THEN结果表达式2
...
WHEN布尔表达式n THEN 结果表达式n
[ELSE 结果表达式n+1]
END

搜素CASE表达式与简单表达式区别:
在CASE关键字的后面没有任何表达式。
WHEN关键字后面是布尔表达式。
搜素CASE表达式中的各个WHEN子句的布尔表达式可以是由比较运算符、逻辑运算符组合起来的复杂的布尔表达式。
搜素CASE表达式的执行过程:
按从上到下的书写顺序计算每个WHEN子句的布尔表达式。
返回第一个取值为TRUE的布尔表达式所对应的结果表达式的值。
如果没有取值为TRUE的布尔表达式,则当指定ELSE子句时,返回ELSE子句中指定的结果,如果没有指定ELSE子句,则返回NULL。

将查询结果保存到表中

SELECT语句产生的查询结果是保存在内存中,如果希望将查询结果永久的保存,比如保存在一个物理表中,则可以通过在SELECT语句中使用INTO子句实现。

包含INTO子句的SELECT语句的语法格式:

SELECT 查询列表序列 INTO <新表名>
FROM 数据源
其他条件子句或分组子句等

新表名是用于存放查询结果的表名。
以上语句实现3个功能
(1)执行查询语句产生结果集。
(2)根据查询结果集的结果创建一个新表,新表中的各列的表名就是查询结果集中显示的列标题。
(3)将查询结果集按列对应顺序保存在该新建的表中。

子查询

在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询快。
如果在SELECT语句嵌套一个SELECT、INSERT、UPDATE或DELETE语句中,则称为子查询或内层查询。而包含子查询的语句则称为主查询或外层查询。
一个子查询也可以嵌套在另外一个子查询里。
为了与外层查询区别,总是把子查询写在圆括号里。
子查询语句可以出现在任何能够使用的表达式的地方,但是,子查询语句通常是出现在外层查询的WHERE子句或HAVING子句中。

写在WHER子句中的子查询通常有以下几种形式:
WHERE<列名>[NOT] IN (子查询语句)
WHERE<列名>比较运算符(子查询)
WHERE EXISTE  (子查询)


版权声明:本文为FLYMEXB原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。