SQLserver运维必备:T-SQL语句简介
? ?小生博客:http://xsboke.blog.51cto.com ? ?小生 Q Q:1770058260 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -------谢谢您的参考,如有疑问,欢迎交流 一、T-SQL语言组成 T-SQL主要有三种语言组成: ? 1.??????DML:数据操纵语言(data manipulation language)
? 2.??????DDL:数据定义语言(data definition language)
? 3.??????DCL:数据控制语言(data control language)
二、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] ] ? 参数解释:
2. 表达式,一般用于设置条件时。 ? 1)条件表达式 ①常量:表示单个指定数据值的字母、数字或符号 ②列名:表中列的名称 ③一元运算符:仅有一个操作数的运算符:“+”表示正数,“-”表示负数 ④二元运算符:将两个操作数组合执行操作的运算符:算术运算符、位运算符、逻辑运算符、比较运算符 ? ?? ? ?? ? 2)逻辑表达式 ???用逻辑运算符将条件连接起来,运算结果是一个逻辑值:TRUE(真)或FALSE(假) ? ?? ? ? 关键字“in”可以用来限制范围, ? ? 例:限制付款时可以使用的信用卡种类 ? ? 付款方式=‘信用卡’ and 信用卡 in (‘牡丹卡’,‘金穗卡’,‘龙卡’,‘阳光卡’) ? 3. as的用法(as就是给某个输出结果的列名设置别名,然后输出时列名用别名显示) ? 优点是可以事查询结果更人性化显示,比如把英文的列名输出成为中文的列名。 ? 例:查询表student中所有学员的平均分 ? 1)? 不加as时 ? ?Select ?AVG(成绩) ? ?From student ? ? ? 2)? 加as时 ? ?Select ?AVG(成绩) as 平均成绩 ? ?From student ? ? 4. Like的用法(用于不完全匹配的条件) ? 例:查询出表student中姓张的学员 ? 5. In的用法(限制范围) ? 例:查询出student表中成绩为89、90、91的学生。 ?? 6. Top的用法(限制查询返回值的行数) ? 例:查询student表中的前五行的学员 ?? 7. 函数count的用法(统计行) ? 例:查询出表中每种职位的总人数 ?? ? 三、多表查询 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 ?? ? 2)? 方法2:结果显示如下图 ????select A.name,b.job ????from A innerjoin B ????on A.name=b.name ?? 3. 外连接 ? 1)? 左外连接 ? ? 例:在表A和表B中用左外连接查询学生姓名、学校和职业 ? ?? ? 2)? 右外连接 ? ? 例:在表A和表B中用左外连接查询学生姓名、学校和职业 ? ?? ? 3)? 完整外连接:不再举例,完整外连接将只显示两张表中完全匹配的内容 4.?事务(如果执行的语句中有一条错误,此语句将不执行,并数据恢复语句执行前) ? 1)? 事务简介 ? ? ①??概念 ? ? ? 事务是一个不可分割的工作逻辑单元,包括一组命令,这组命令要么都执行,要么都不执行。 ? ? ②??属性
? 2)? 执行事务的语法 ? ? ①开始事务:BEGIN TRANSACTION ? ? ②提交事务:COMMITTRANSACTION ? ? ③回滚(撤销)事务:ROLLBACKTRANSACTION ? 3)? 例:
????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@errorsum<>0 ????--如果有错误 ????begin ????print ?'交易失败,回滚事务' ????rollbacktransaction ????end ????else ????begin ????print ?'交易成功,提交事务,写入磁盘,永久地保存' ????committransaction ????end ????go ????print ?'查看转帐事务后的余额' ????select *from bank ????go (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |