设为首页 收藏本站
查看: 1447|回复: 0

[经验分享] 《SQL必知必会》学习笔记(一)

[复制链接]

尚未签到

发表于 2017-7-14 17:30:59 | 显示全部楼层 |阅读模式
  这两天看了《SQL必知必会》第四版这本书,并照着书上做了不少实验,也对以前的概念有得新的认识,也发现以前自己有得地方理解错了。我采用的数据库是SQL Server2012.数据库中有一张比赛成绩表,表里有四个字段。下面变列出我新学到的知识。
  这个是数据库的全部记录
DSC0000.png

  1.order by  



语句:   select * from Scores order by name , Score desc
  执行结果:
DSC0001.png

  ①order by在执行排序功能时,会先对排序字段按abcd这样的顺序进行,汉字的话是按拼音的首字母,默认是正序。
  ②例子中先按name字段进行正序排序,当name相同时,又按score倒叙排,例如拜仁两条数据,胜的开头字母是s,负的是f,因为是倒叙,所以胜的那条数据排在前面。
  2.通配符 _ 和 %
  通配符 _表示的是匹配单个字符,而%则是匹配多个字符。具体写法两者无差别。



select * from Scores where name like '拜_'
select * from Scores where name like '拜%'
  注意:①通配符%看起来像是可以匹配任何东西, 但有个例外, 这就是NULL。 子句where name like '%' 不会匹配产品名称为NULL的行。
        ②不要过度使用通配符。 如果其他操作符能达到相同的目的,应该使用其他操作符。
在确实需要使用通配符时, 也尽量不要把它们用在搜索模式的开始处。 把通配符置于开始处, 搜索起来是最慢的。


  3.拼接字段 +



语句: select  name+ '('+ Score +')' as ac from Scores
  执行结果:
DSC0002.png

  拼接字段就算把两个字段合成一个字段的查询出来。
  4.文本处理函数
  ①SQL中有很多内置函数,这个表是常用的文本处理函数。
DSC0003.png




语句:  select upper(name) from Scores
select len(name) from Scores
select left(name,1) from Scores
  执行结果:
DSC0004.png       DSC0005.png       DSC0006.png

  ②其中对于SOUNDEX()解释一下,SOUNDEX是一个将任何文本串 转换为描述其语音表示的字母数字模式的算法。



  select soundex(date) from Scores
DSC0007.png




select * from Scores where  soundex(name) =soundex('张三')
DSC0008.png

  5.日期和时间处理函数
  日期和时间采用相应的数据类型存储在表中,每种DBMS都有自己的特殊形式。 日期和时间值以特殊的格式存储,以便能快速和有效地排序或过滤,并且节省物理存储空间。



语句:  select date,name from Scores where DATEPART(DD,Date)=10 --查询10号的数据
  执行结果:
DSC0009.png

  6.聚合函数
  聚合函数是对某些行进行函数运算,并返回一个值,下图是常用的聚合函数。
DSC00010.png

  说明:①五个函数都忽略列值为NULL的行。
  ②使用COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值,都会计算到总数中。
  ③使用COUNT(column) 对特定列中具有值的行进行计数, 忽略NULL值。
  7.分组函数Group By和having
  ① 当需要统计球队的胜场次数时,这个时候就需要用到分组函数Group By,用到Group By之后,过滤条件就不能用where了,而要用到having。



语句:  select name,COUNT(*) as 场次 from Scores group by name    --查询球队名和比赛场次信息
  结果:
DSC00011.png




语句:select name,COUNT(*)  as 场次 from Scores group by name having COUNT(*)>1   --查询球队名和比赛场次大于1场的信息
  结果:
DSC00012.png

  注意:分组查询中,slect的内容必须是group by的字段或聚合函数,不能是其他。例如将date字段放在select中,便出现错误。
DSC00013.png

  ②where和having 差别是:where过滤行, 而having过滤分组。
  这里有另一种理解方法, WHERE在数据分组前进行过滤, HAVING在数据分组后进行过滤。 这是一个重要的区别, WHERE排除的行不包括在分组
中。 这可能会改变计算值, 从而影响HAVING子句中基于这些值过滤掉的分组。





语句: select name,COUNT(*)  as 场次 from Scores where id<4 group by name having COUNT(*)>1 --在id小于4的数据中查询出球队名和比赛场次大于1场的信息

  结果:
DSC00014.png

  8.SELECT子句顺序
DSC00015.png
  SQL 语句的执行顺序跟其语句的语法顺序并不一致,上图是SQL语句的语法顺序。而执行顺序确是:From----->Where----->Group By---->Having----->Select----->Order By
  ①From 才是 SQL 语句执行的第一步,并非 Select 。数据库在执行 SQL 语句的第一步是将数据从硬盘加载到数据缓冲区中,以便对这些数据进行操作。
  ② Select 是在大部分语句执行了之后才执行的,严格的说是在 From 和 Group By 之后执行的。理解这一点是非常重要的,这就是你不能在 Where中使用在 Select 中设定别名的字段作为判断条件的原因。
  就先写到这里吧,后边的慢慢在写

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-393898-1-1.html 上篇帖子: MySQL Server-id踩到的坑 下篇帖子: office online server部署和简单操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表