为了教学方便,我们先引入一个关键字:

SELECT

使用SELECT,可以查询得到表数据,比如:

SELECT 

其中,星号(*)代表所有列。运行上述SQL语句,返回的就是Student表的所有行所有列的内容。我们也可以指定其中的某些列:

SELECT 

SELECT除了通过查询表显示数据以外,也可以直接显示运算结果,比如:

SELECT 

显示结果为:

我们可以利用这一点,配合变量的声明:

DECLARE 

以及变量的赋值:

SET 

补充:这里可以将变量简单理解为“一个存放数据的盒子”。

我们就可以开始

运算符

的学习了(上文中的加号(+)就是一个运算符

SQL Server中常用的运算符有:

算术运算符

加减乘除:+-*/。和数学运算一样,运算符之间是有优先级的,乘除的优先级就大于加减,所以3+2-5*0=5,而不是0。

取余:%,比如:8/5=1...3,3是8除以5的余数,所以8%5=3

圆括号:(),和数学运算一样,比加减乘除的优先级更高。另外,飞哥建议:总是使用()来确定优先级,以增加代码的可读性,所以,在编程开发中,3+2-(5*0)是更好的写法。
延伸阅读:KISS原则:Keep It Stupid Simple,要让代码像个傻瓜一样

赋值:=,把等号(=)右边的值赋值给左边的变量

组合运算符:+=、-=、*=、/=,实际上就是将:

UPDATE 

在@Result的基础上再加(还可以减乘除)2,进行缩写:

UPDATE 

文本运算符

连接:+ ,可以将两个文本连接起来,比如:'源栈'+',欢迎您',结果就是'源栈,欢迎您'。注意TEXT和NTEXT不能使用加号(+)连接

LIKE:

通配符:

  • % :任意字符
  • _:单个任意字符(包含空格' '?)
IF

转义符(ESCAPE): 如果要查文本里有没有%呢?我们需要:

  1. 使用ESCAPE指定一个转义字符
  2. 在%前加上这个转义字符,告诉SQL Server不要认为%代指任意字符
IF

除了%和_,还有[]^都是需要转义的。

注意UNICODE文本任然需要在单引号前面加N,如:N'源栈欢迎您!'

比较运算符

比较运算符的结果是真假值,无法通过SELECT显示出来。为了演示,我们需要学习这个代码:

IF

意思就是:如果圆括号里面的运算结果为真(是),显示结果true;否则,显示结果false

好了,我们可以开始演示了。

比较运算符包括:

  • 大于小于等于:>, <, =,等于是单等号=,不是双等号==。注意赋值和比较都适用的=,要根据它出现的位置和上下文,进行判断。
  • 大于等于、小于等于:>=, <=,
  • 不等于:<>或 !=。<> 仅出现在SQL中,而且是“标准”的,!=是T-SQL特有的,^_^
  • 在...之间(包含边界值):BETWEEN...AND..,比如:6 BETWEEN 5 AND 7,结果为真;8 BETWEEN 5 AND 7,结果为假。

上述运算符可以比较数值和日期,以及文本。其中,文本的比较是按字符的编码……而且,文本的末尾空格会被忽略,即:'abc' = 'abc '的运算结果为真。

注意:NULL值的特殊性,总结起来,NULL值和任何值(包括NULL值)的任何比较,其结果总是为假

IF

那么,如何判断一个值是不是NULL呢?我们只能使用IS NULL:

IF

集合运算

ANY或SOME:只要集合中有一个满足条件,结果就为真

IF

ALL:集合里所有的值都必须满足条件,结果才为真

IF

IN:包含在集合中

IF

还是要注意这个NULL值:NULL也不会IN任何结果集:

IF

EXISTS:检查集合(或者说结果集,SELECT Id FROM Student的结果就是一个集合或者程序集)是否有返回数据(或者说行数据)。如果结果集有值,比如SELECT Id FROM Student的结果为:1,2,3,返回真;否则,如果没有返回值,返回假。

IF

注意:EXISTS只检查结果集有无返回行,不检查返回行数据是否为NULL。意思是哪怕结果集只有一行,且这一行的值为NULL,EXISTS运算结果也为真。结果集为空和结果集值为NULL的区别见下图:

另外,在T-SQL中,EXISTS可以在删除表/数据库时配合使用,以免因为要删除的表不存在而报错,如下所示:

DROP 

逻辑运算

针对上面比较运算的结果再次进行运算,包括:

NOT:汉语通常说成“非”或者“取反”。放在比较运算之前,可以将比较运算的结果再“颠倒”过来:以前是真,颠倒为假;以前为假,颠倒为真。比如:

IF

AND:汉语读作“且”,可以连接多个比较运算。只有当所有比较运算的结果都为真时,最终结果为真:

IF

OR:汉语读作“或”,可以连接多个比较运算。只要有一个比较运算的结果都为真时,最终结果为真:

IF

NOT、AND和OR还可以混合运算,其优先级高到低为:NOT > AND > OR,比如:

IF

但为了提高可读性,建议使用()显式指明其优先级。上述代码可写成:

IF

学习了上述基础知识之后,我们就可以:

在SELECT、UPDATE和DELETE后面添加WHERE子句,以进行条件查询和精确更新/删除。

比如,我们要查询所有未录入年龄(Age)的同学:

SELECT 

给所有入学时间(Enroll)在9月的同学成绩加上10分:

UPDATE 

删除Id大于3的同学:

DELETE 

WHERE子句,是SQL语句的重要组成部分!同学们需要通过作业来进行更多的练习。

作业

在User表中:

  1. 查找没有录入密码的用户
  2. 删除用户名(UserName)中包含“管理员”或者“17bang”字样的用户

在Problem表中:

  1. 给所有悬赏(Reward)大于10的求助标题加前缀:【推荐】
  2. 给所有悬赏大于20且发布时间(Created)在2019年10月10日之后的求助标题加前缀:【加急】
  3. 删除所有标题以中括号【】开头(无论其中有什么内容)的求助
  4. 查找Title中第5个起,字符不为“数据库”且包含了百分号(%)的求助

在Keyword表中:

  1. 找出所有被使用次数(Used)大于10小于50的关键字名称(Name)
  2. 如果被使用次数(Used)小于等于0,或者是NULL值,或者大于100的,将其更新为1
  3. 删除所有使用次数为奇数的Keyword

注意,上述作业需要自己插入数据进行测试。

每日单词


感谢童鞋们的阅读!^_^

我就是:黑律师/包工头/创业狗/老码农……现在还是教书匠的大飞哥。

再次重申这个系列的目标是:

1)通俗易懂。2)实战为主。3)面向就业。

系列内容的完善需要你的反馈!

欢迎点赞和评论,以及加入我们的QQ交流群:326801052。

sql找出2000-3000年中的闰年。_跟飞哥学编程:SQL入门-4-查询和条件相关推荐

  1. jpa 自定义sql if_跟飞哥学编程:SQL入门-:函数、存储过程和触发器

    最后不要忘记:SQL是一种结构化(Structured)的语言(Language),所以它具有 编程语言的特性 声明变量和赋值 所谓变量,可以是看成一个存储数据的容器,所有它里面存储的值是可以变化的. ...

  2. mysql比较两张表中两个字段值_如何通过SQL找出2个表里值不同的列的方法

    以下有两个表,他们的结构完全相同,请通过SQL找出值不同的列. Student_1 NAME AGE SCORE peter 26 100 jack 25 96 daniel 26 48 bark 2 ...

  3. python编写程序、输出公元2000年到3000年所有闰年_编写程序,输出从公元2000年至3000年所有闰年的年号,每输出10个年号换一行.判断公元年是否为闰年的条件...

    题目: 编写程序,输出从公元2000年至3000年所有闰年的年号,每输出10个年号换一行.判断公元年是否为闰年的条件 解答: #include void Judge(int y) { while(1) ...

  4. 自学SQL | 找出每部电影和单部电影销售冠军之间的销售差,列出电影名,销售额差额

    小菜鸡的第一篇笔记--自学SQL网 ------------------------------------------------------ 题目: 找出每部电影和单部电影销售冠军之间的销售差,列 ...

  5. SQL找出顺序列中的断号

    先假设info表中有如下数据 select id from info  id ----------- 1 2 3 5 6 7 8 10 11 12 15 select beginId,(select ...

  6. c# 找出目录下的所有子目录_第9期:Linux下文件系统满的处理

    文件系统满(file system full),几乎是每个程序员都会遇到的问题.它会导致各种神奇的现象,比如程序突然无法启动.日志突然不刷新了等.测试环境,我们通常找出大文件并删除即可.常规的步骤是: ...

  7. 找出最具竞争力的子序列_力扣300——最长上升子序列

    这道题主要涉及动态规划,优化时可以考虑贪心算法和二分查找. 原题 给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18]输出: 4 解释: ...

  8. 如何快速找出找出两个数组中的_看动画学算法之:排序-快速排序

    简介:快速排序也采用的是分而制之的思想.那么快速排序和归并排序的区别在什么地方呢? 归并排序是将所有的元素拆分成一个个排好序的数组,然后将这些数组再进行合并. 而快速排序虽然也是拆分,但是拆分之后的操 ...

  9. 找出最具竞争力的子序列_每日算法系列【LeetCode 376】摆动序列

    题目描述 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个元素的序列也是摆动序列. 例如, [1,7,4,9,2,5] 是一个 ...

最新文章

  1. 工作发狂:Mybatis 中$和#千万不要乱用!
  2. 使用Apache Archiva搭建Maven Repository Server
  3. day05 selenium库的基础使用
  4. linux中操作数据库的使用命令记录
  5. PostgreSQL备份还原
  6. 浅谈SDN中的OverLay与UnderLay技术
  7. Instruments性能优化-Core Animation
  8. 服务器操作系统修复补丁,最后的更新!微软Windows 7发布KB4534310修复补丁
  9. bin 转hex方法
  10. 反向题在测试问卷信效度_问卷一定要做信度效度检验吗?如果含有多选题怎样做信度分析,请各位高手帮帮忙。...
  11. 六一儿童节 python
  12. 如何成为一流的「匠人」?
  13. 解决U盘中文件全部变成快捷方式的问题
  14. java熔断器_一种熔断器的实现方法与流程
  15. 雨伞16骨好还是24骨好_伞骨质量好的雨伞推荐
  16. 碳纳米角、纳米囊泡等量子点复合纳米材料的定制合成方法
  17. 国产软件曝光美国51区真相 UFO?天坑?荒漠神秘圆圈?
  18. 窃取信息的新恶意软件通过假冒的破解网站感染使用者
  19. 人力资源招聘的黄金法则
  20. 便利店里的常用日语:“找”的日语不都是「探す」

热门文章

  1. 一文读懂-Impala
  2. MySQL高级知识(七)——索引面试题分析
  3. 消费金融盈利分析及风控能力建设
  4. MyBatis映射文件6
  5. 2.1依赖概念之前的预备--war、jar包内部结构
  6. Codeforces 938.C Constructing Tests
  7. js 金额处理加小数点后两位
  8. bzoj4195 [Noi2015]程序自动分析
  9. Pytorch在colab和kaggle中使用TensorBoard/TensorboardX可视化
  10. 阿里iconfont图库官网网址