Sqlserver 学习笔记

by:授客 QQ1033553122

-----------------------接Part 10-------------------

DECLARE @myavg float--定义平均分

SELECT @myavg=avg(writtenExam) FROM studentMars

print '本班平均分'+convert(VARCHAR(5),@myavg)

IF(@myavg>70)

BEGIN

PRINT '本班笔试成绩优秀,前三名的成绩是'

SELECT TOP 3 * FROM studentMars order by writtenExam desc

END

ELSE

BEGIN

PRINT '本班笔试成绩较差,后三门的成绩为'

SELECT TOP 3 * FROM studentMars ORDER BY WrittenExam

END

结果:


 

2.WHILE循环语句

WHILE

(条件)

BEGIN

语句1

语句2

……

BREAK

END

注意:

BREAK表示退出循环

如果有多条语句,才需要BEGIN-END语句块


实例

 

问题:

本次考试成绩较差,假定要提分,确保每人笔试都通过。提分规则很简单,先每人都加2分,看是否都通过,如果没有全部通过,每人再加2分,再看是否都通过,如此反复提分,直到所有人都通过为止

分析:

第一步,统计没通过的人数;

第二步,如果有人没通过,加分;

第三步,循环判断。

--WHILE
循环语句的使用

DECLARE
@n INT

WHILE(1=1)--条件永远成立

BEGIN

SELECT @n=COUNT(*)
FROM studentMars

WHERE writtenExam<</span>60--统计不及格人数

IF(@n>0)

UPDATE studentMars--每个人加两分

SET writtenExam=writtenExam+2

ELSE

BREAK--退出循环

END

PRINT
'加分后的成绩如下:'

SELECT
* FROM studentMars

结果:

3.CASEEND多分支语句

CASE

WHEN
条件1
THEN

结果1

WHEN
条件2
THEN

结果2

……

ELSE
其他结果

END


问题:

采用美国的ABCDE五级打分制来显示笔试成绩。

A级:  
90分以上

B级:
80-89分

C级:  
70-79分

D级:
60-69分

E级:
60分以下

--CASE---END多分支语句

PRINT
'ABCDE五级显示成绩如下:'

SELECT
stunNo,

成绩=CASE

WHEN writtenExam<</span>60 THEN 'E'

WHEN writtenExam BETWEEN 60 AND
69 THEN 'D'

WHEN writtenExam BETWEEN 70 AND
79 THEN 'C'

WHEN writtenExam BETWEEN 80 AND
89 THEN 'B'

END

FROM
studentMars

11
EXISTS
子查询的语法:

IF
EXISTS
(子查询)

语句

对应的有NOT
EXISTS

IF
NOT EXISTS
(子查询)

语句

 

1. 
如果子查询的结果非空,即存在至少1条匹配记录数,则EXISTS

(子查询)将返回真(true),否则返回假(false)

2.  EXISTS也可以作为WHERE

语句的子查询,但一般都能用IN子查询替换

问题:

检查本次考试,本班如果有人笔试成绩达到80分以上,则每人提2分;否则,每人允许提5分

分析:

是否有人笔试成绩达到80分以上,可以采用EXISTS检测

 

IF
EXISTS(SELECT *
FROM studentMars WHERE writtenExam>80)

BEGIN

PRINT '本班有人笔试成绩高于分,每人加分,加分后的成绩为:'

UPDATE studentMars SET writtenExam=writtenExam+2

SELECT * FROM
studentMars

END

ELSE

BEGIN

PRINT '本班无人笔试成绩高于分,没人可以加分,加分后的成绩是:'

UPDATE studentMars SET writtenExam=writtenExam+5

SELECT * FROM
stuMarks

END

GO

问题:

检查本次考试,本班如果没有一人通过考试(笔试和机试成绩都>60分),则试题偏难,每人加3分,否则,每人只加1分

分析:

没有一人通过考试,即不存在“笔试和机试成绩都>60分”,可以采用NOT
EXISTS检测

IF
NOT EXISTS (SELECT * FROM stuMarks WHERE                                
writtenExam>60 AND labExam>60)

BEGIN

print
'本班无人通过考试,试题偏难,每人加3分,加分后的成绩为:'

UPDATE stuMarks  SET
writtenExam=writtenExam+3,labExam=labExam+3

SELECT * FROM stuMarks

END

ELSE

BEGIN

print
'本班考试成绩一般,每人只加1分,加分后的成绩为:'

UPDATE stuMarks SET
writtenExam=writtenExam+1,labExam=labExam+1

SELECT * FROM stuMarks

END

GO

12
FIRST()
函数

FIRST()

函数返回指定的字段中第一个记录的值。

语法

SELECT
FIRST(column_name) FROM table_name

实例

我们拥有下面这个 "Orders"

表:

13 LAST()

函数

函数返回指定的字段中最后一个记录的值。

语法

SELECT
LAST(column_name) FROM table_name

实例

我们拥有下面这个 "Orders"

表:

现在,我们希望查找 "OrderPrice"

列的最后一个值。我们使用如下 SQL

语句:

SELECT
LAST(OrderPrice) AS LastOrderPrice FROM Orders

结果集类似这样:

14 SQL HAVING

子句

HAVING

子句

在 SQL

中增加 HAVING

子句原因是,WHERE

关键字无法与合计函数一起使用。

where
子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。

having
子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having

条件显示特定的组,也可以使用多个分组标准进行分组。

语法

SELECT
column_name, aggregate_function(column_name)

FROM
table_name

WHERE
column_name operator value

GROUP
BY column_name

HAVING
aggregate_function(column_name) operator value

实例

我们拥有下面这个 "Orders"

表:

现在,我们希望查找订单总金额少于 2000

的客户。我们使用如下 SQL

语句:

SELECT
Customer,SUM(OrderPrice) FROM Orders

GROUP
BY Customer

HAVING
SUM(OrderPrice)<2000

结果集类似:

现在我们希望查找客户 "Bush"

或 "Adams"

拥有超过 1500

的订单总金额。

我们在 SQL

语句中增加了一个普通的 WHERE

子句:

SELECT
Customer,SUM(OrderPrice) FROM Orders

WHERE
Customer='Bush' OR Customer='Adams'

GROUP
BY Customer

HAVING
SUM(OrderPrice)>1500

结果集:

15 MID()

函数

MID

函数用于从文本字段中提取字符。

语法

SELECT
MID(column_name,start[,length]) FROM table_name

SQLServer 学习笔记之超详细基础SQL语句 Part 11的更多相关文章

  1. SQLServer 学习笔记之超详细基础SQL语句 Part 3

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 2------------------- 13. 使用compute对查 ...

  2. SQLServer 学习笔记之超详细基础SQL语句 Part 12(The End)

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 11------------------- 现在,我们希望从 " ...

  3. SQLServer 学习笔记之超详细基础SQL语句 Part 10

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 9------------------- 删除约束的语法 ALTER T ...

  4. SQLServer 学习笔记之超详细基础SQL语句 Part 9

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 8------------------- 3 范式的概念 第一范式的目标 ...

  5. SQLServer 学习笔记之超详细基础SQL语句 Part 8

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 7------------------- --触发器str_trigge ...

  6. SQLServer 学习笔记之超详细基础SQL语句 Part 7

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 6------------------- 29 存储过程和触发器 存储过 ...

  7. SQLServer 学习笔记之超详细基础SQL语句 Part 6

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 5------------------- 28 聚合函数 --求平均分 ...

  8. SQLServer 学习笔记之超详细基础SQL语句 Part 5

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 4------------------- 21使用默认 默认(也称默认值 ...

  9. SQLServer 学习笔记之超详细基础SQL语句 Part 4

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 3------------------- 17 带比较运算符的嵌套查询 ...

随机推荐

  1. odoo开发笔记:抛出警告的方式

    上边rase 加3种写法,都能实现,跑出警告的功能.

  2. 计算机网络 之 TCP协议报文结构

    前言:上学期实训课,由于要做一个网络通信的应用,期间遇到各种问题,让我深感计算机网络知识的薄弱.于是上网查找大量的资料,期间偶然发现了roc大神的博客,很喜欢他简明易懂的博文风格.本文受roc的< ...

  3. Android学习总结——输入法将BottomNavigationBar(底部导航栏)顶上去的问题

    在应用清单中给当前<Activity>设置: android:windowSoftInputMode="adjustPan" 关于android:windowSoftI ...

  4. sql左右连接的区别

    数据表的连接有: 1.内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现 2.外连接: 包括 (1)左外连接(左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右两表 ...

  5. mac mysql5.5升级5.7记录

    先删除当前的mysql文件 打开终端窗口 使用mysqldump备份你的数据库将文本文件! 停止数据库服务器 sudo rm /usr/local/mysql sudo rm -rf /usr/loc ...

  6. 超漂亮的CSS3按钮制作教程分享

    要求 必备知识 基本了解CSS语法,初步了解CSS3语法知识. 开发环境 Adobe Dreamweaver CS6/Chrome浏览器 演示地址 演示地址 利用CSS3属性制作按钮,我们只需要用到G ...

  7. 对CAP原理的理解

    对CAP原理的理解 CAP原理按照定义,指的是C(Consistency)一致性,A(Availability)可用性,P(Partition tolerance)分区容错性在一个完整的计算机系统中三 ...

  8. 复刻smartbits的国产网络测试工具minismb-如何测试DPI引擎

    复刻smartbits的网络性能测试工具MiniSMB,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此以太网测试工具测试任何ip网络设备的端口吞吐率,带宽,并发 ...

  9. double转换为int以及浮点型相加损失精度问题

    最近在做支付相关模块的业务,数据库字段却使用的是double类型,其实也行,只要计算不在sql语句中进行,也是没有问题的. 预先的类属性设置的是Double类型,自己算的时候发现小数相加会出现损失精度 ...

  10. CodeForces -977F(突破定式思维+map应用)

    题目链接: https://cn.vjudge.net/problem/CodeForces-977F /* 问题 输入n和n个数的数列 计算并输出最长增量为1的上升子序列 解题思路 用n2的最长上升 ...