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

[经验分享] SQLserver运维必备:T-SQL语句简介

[复制链接]

尚未签到

发表于 2018-10-20 11:42:00 | 显示全部楼层 |阅读模式
  小生博客:http://xsboke.blog.51cto.com
  小生 Q Q:1770058260
  -------谢谢您的参考,如有疑问,欢迎交流
  一、T-SQL语言组成
  T-SQL主要有三种语言组成:
  1.      DML:数据操纵语言(data manipulation language)



    •   查询、插入、删除和修改数据
    •   SELECT、INSERT、UPDATE、DELETE

  2.      DDL:数据定义语言(data definition language)



    •   建立数据库、数据库对象和定义其列
    •   CREATE(新建数据库或者表)、ALTER(增加数据表中的列)、DROP(删除数据库或表)

  3.      DCL:数据控制语言(data control language)



    •   控制数据库组件的存取许可、存取权限等
    •   GRANT(授予权限)、REVOKE(回收权限)、DENY(拒绝)

  二、SELECT语法结构
  1. select语句的语法。
  SELECT select_list
  [INTO new_table_name]
  FROM table_name
  [ WHERE search_conditions ]
  [GROUP BY group_by_expression] [HAVING search_conditions]
  [ORDER BY order_expression [ASC|DESC] ]
  参数解释:



    •   SELECT子句:指定查询内容
    •   INTO子句:把查询结果存放到一个新表中
    •   FROM子句:指定查询源
    •   WHERE子句:查询条件
    •   GROUP BY子句:指定查询结果的分组条件
    •   HAVING子句:指定分组后在执行的条件,与GROUP BY子句一起使用,和where的功能一样,但是分组后的条件不能使用where只能使用having
    •   ORDER BY子句:指定查询结果的排序方式,默认是升序asc,降序是desc。

  2. 表达式,一般用于设置条件时。
  1)条件表达式
  ①常量:表示单个指定数据值的字母、数字或符号
  ②列名:表中列的名称
  ③一元运算符:仅有一个操作数的运算符:“+”表示正数,“-”表示负数
  ④二元运算符:将两个操作数组合执行操作的运算符:算术运算符、位运算符、逻辑运算符、比较运算符
DSC0000.jpg

DSC0001.png

  2)逻辑表达式
  用逻辑运算符将条件连接起来,运算结果是一个逻辑值:TRUE(真)或FALSE(假)
DSC0002.jpg

  关键字“in”可以用来限制范围,
  例:限制付款时可以使用的信用卡种类
  付款方式=‘信用卡’ and 信用卡 in (‘牡丹卡’,‘金穗卡’,‘龙卡’,‘阳光卡’)
  3. as的用法(as就是给某个输出结果的列名设置别名,然后输出时列名用别名显示)
  优点是可以事查询结果更人性化显示,比如把英文的列名输出成为中文的列名。
  例:查询表student中所有学员的平均分
  1)  不加as时
  Select  AVG(成绩)
  From student
DSC0003.jpg

  2)  加as时
  Select  AVG(成绩) as 平均成绩
  From student
DSC0004.png

  4. Like的用法(用于不完全匹配的条件)
  例:查询出表student中姓张的学员
DSC0005.png

  5. In的用法(限制范围)
  例:查询出student表中成绩为89、90、91的学生。
DSC0006.png

  6. Top的用法(限制查询返回值的行数)
  例:查询student表中的前五行的学员
DSC0007.png

  7. 函数count的用法(统计行)
  例:查询出表中每种职位的总人数
DSC0008.png

  三、多表查询
  1. 表的连接类型
  1)内连接(INNER JOIN)
  只返回两个数据集合之间完全匹配关系的行
  2)外连接(左右外连接其实差不多,记住一个即可)
  ①左外连接(LEFT JOIN/leftouter join)
  结果集包括左表的所有行
  ②右外连接(RIGHT JOIN/rightouter join)
  结果集包括右表的所有行
  ③完整外连接(FULL JOIN/fullouter join)
  返回左表和右表中的所有行
  3)交叉连接(cross join,一般不用)
  返回左表与右表挨个连接的所有行
  2. 内连接:只返回两个表中完全匹配的行
  例:在表A和表B中使用内连接查询学生姓名和职业(两个表中存在的姓名是不完全一样的)
  1)  方法1:结果显示如下图
  select A.name,a.school,b.job
  from A,B
  where a.name=b.name
DSC0009.png

  2)  方法2:结果显示如下图
  select A.name,a.school,b.job
  from A innerjoin B
  on A.name=b.name
DSC00010.png

  3. 外连接
  1)  左外连接
  例:在表A和表B中用左外连接查询学生姓名、学校和职业
DSC00011.jpg

  2)  右外连接
  例:在表A和表B中用左外连接查询学生姓名、学校和职业
DSC00012.png

  3)  完整外连接:不再举例,完整外连接将只显示两张表中完全匹配的内容
  4. 事务(如果执行的语句中有一条错误,此语句将不执行,并数据恢复语句执行前)
  1)  事务简介
  ①  概念
  事务是一个不可分割的工作逻辑单元,包括一组命令,这组命令要么都执行,要么都不执行。
  ②  属性


    •   原子性:事务是一个完整的操作。事务的各元素是不可分的。
    •   一致性:当事务完成时,数据必须处于一致状态。
    •   隔离性:事务是独立的,它不以任何方式依赖于或影响其他事务。
    •   持久性:一旦事务被提交,事务的效果会被永久的保留在数据库中。



  2)  执行事务的语法
  ①开始事务:BEGIN TRANSACTION
  ②提交事务:COMMITTRANSACTION
  ③回滚(撤销)事务:ROLLBACKTRANSACTION
  3)  例:



    •   张三卡中余额只有1000,李四向张三借1000,但是银行限制余额最少为1,这时就需要使用事务,否则结果将导致张三的余额不变,而李四的余额多了1000.

  select *from bank
  updatebank set 余额=余额-1000
  where 账户='张三'
  updatebank set 余额=余额+1000
  where 账户='李四'
  print  '查看转帐事务前的余额'
  select *from bank
  /*--开始事务(指定事务从此处开始,后续的T-SQL语句都是一个整体--*/
  begintransaction
  /*--定义变量,用于累计事务执行过程中的错误--*/
  declare@errorsum int --声明变量,用于保存所有T-SQL语句错误号的和
  set@errorsum=0
  /*--转帐:张三的帐户少1000元,李四的帐户多1000元--*/
  updatebank set 余额=余额-1000
  where 账户='张三'
  set@errorsum=@errorsum+@@ERROR     --累计是否有错误
  updatebank set 余额=余额+1000
  where 账户='李四'
  set@errorsum=@errorsum+@@ERROR     --累计是否有错误
  print  '查看转帐事务过程中的余额'
  select *from bank
  /*--根据是否有错误,确定事务是提交还是撤销--*/
  if@errorsum0     --如果有错误
  begin
  print  '交易失败,回滚事务'
  rollbacktransaction
  end
  else
  begin
  print  '交易成功,提交事务,写入磁盘,永久地保存'
  committransaction
  end
  go
  print  '查看转帐事务后的余额'
  select *from bank
  go


运维网声明 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-624026-1-1.html 上篇帖子: centos 6.5 X64 install Open*** Server fail 下篇帖子: iwebshop框架用到的几种常用sql处理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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