1.在T-SQL中用declare定义变量,
 用@@标示全局变量,
@标示局部变量,
--单行注释,
/* */
多行注释
begin......end 表示一个代码块

2.

  1. (1)定义变量:declare @变量名 变量数据类型  
  2. 例如:declare @count int, @coun2 int   
  3.  
  4. (2)变量赋值:set select 
  5. 例如:set @count = 1  赋值只能一种  
  6.       select @count = 1 赋值一般配合查询  
  7. select @name = stuname from student where stuno = 'S25301' 
  8.  
  9. (3)变量再加 go 关键字以前,存储过程结束以前,变量都是起作用的  
  10.  
  11. (4)常用的全局变量:@@error 返回执行上一个T-SQL语句的错误代码  
  12.                      @@identity 返回上回插入的标示值  
  13.                      @@Rowcount 返回受上一语句影响的行数  
  14. (5)输出 print 字符串 变量 函数 字符串表达式  
  15. 注意:print 以文字字符串输出  
  16.       select 一网格形式输出 
3.
  1. (1)流程控制语句:  
  2.    1. if-else 
  3. if(判断条件)  
  4.       begin 
  5.           语句1  
  6.           语句2  
  7.      end 
  8. else 
  9.      begin 
  10.           语句1  
  11.           语句2  
  12.      end      
  13.    
  14. if-else的例题:declare @pcid int , @pcuse int   
  15.               set @pcuse   
  16.               select @pcuse = pcinfo .pcuse from pcinfo where pcid= @pcid  
  17.               if(@pcuse = 0)  
  18.                   print convert(varchar,@pcid ) + '台机器处于空闲' 
  19.               else 
  20.                   print convert(varchar,@pcid) + '台机器处于忙碌' 
  21.  
  22. (2) case的简单格式  
  23. 语法:  
  24.      case 测试表达式  
  25.            when 表达式  then 结果表达式1  
  26.          when  表达式  then  结果表达式2  
  27.          [....]  
  28.          else  结果表达式n  
  29.      end 
  30. 例题:  
  31.     select pcid  
  32.            pcuse (对pcuse的分支,如下例题1)  
  33.           ,pcnote from pcinfo  
  34.    例题1.  
  35.         select pcid   
  36.                case pcuse   
  37.                     when 0 then '空闲' 
  38.                     when 1 then '忙碌' 
  39.                end 
  40.               ,pcnote from pcinfo  
  41.  
  42. (3)case的搜索格式:  
  43. 语法:  
  44.       case 
  45.            when 布尔表达式  then 结果表达式1  
  46.          when  表达式  then  结果表达式2  
  47.          [....]  
  48.          else  结果表达式n  
  49.      end 
  50.  
  51. 例题:select Sno as '学号',Sname as '姓名',  
  52.            case   
  53.                when Smark >=90 then '优秀' 
  54.                when Smark >=80 then '良好' 
  55.                when Smark >=70 then '中等' 
  56.                when Smark >=60 then '及格' 
  57.                when Smark >=0 then '不及格' 
  58.            end as '成绩等级' 
  59.            from Score  
  60.      go  
  61.  
  62. (4) while语句  
  63. 语法:  
  64.     while(条件)  
  65.          begin 
  66.              语句1  
  67.              [break]  
  68.              语句2  
  69.              [contiune]  
  70.           end 
  71.    go  
  72.     
  73. 例题:--从办卡之日起已有一年的所有会员,赠送50元上网费                     
  74. update cardinfo set CardBalance = CardBlance + 50  
  75.        where datediff(year ,transacttime ,getdate())=1  
  76. --从办卡之日起不足一年的所有会员,赠送10元上网费  
  77. update cardinfo set CardBalance = CardBlance + 10  
  78.        where datediff(year ,transacttime ,getdate())<1  
  79.  
  80. --定义变量@count,表示会员卡余额少于20元的会员个数  
  81. declare @count int 
  82. while (1+1)   --1=1永远成立  
  83. begin 
  84.      --为@count赋值,查询会员卡余额少于20元的会员个数  
  85.       select @count = count(*) from cardinfo where CardBalance <20  
  86.      --若还有会员卡余额少于20的  
  87.      if(@count >0)  
  88.           --为每张不足20元的会员卡增加1 元余额  
  89.             update cardinfo set CardBalance = CardBalance + 1  
  90.               where CardBalance <20  
  91.      else 
  92.          break  
  93. end   
  94. go   
  95.       

4.关于子查询

  1. (1)常用子查询:  
  2.  a.使用比较运算符(=、<>、>、>=、!>、!<、或者<=)的子查询  
  3.  
  4.   例题:  
  5. select * from recordinfo  
  6.  where datediff(month,endtime,getdate())=0  
  7.    and CardId = (select CardId from cardinfo where CardNumber='023-002')  
  8. go  
  9.  
  10.  b.in 和 not in 子查询(引入的子查询结果是包含0个值或多个值得列  表,子查询返回结果之后,外部查询将利用这些结果)  
  11.  
  12. 例题:  
  13. --查询2009-6-16的上网记录  
  14. select * from recordinfo  
  15.      where BeginTime <'2009-06-17 00:00:00' 
  16.       and EndTime >= '2009-06-16 00:00:00' 
  17. go  
  18.  
  19. 使用in子查询  
  20. 例题:select * from cardinfo  
  21.      where cardid in (select cardid from recordinfo   where BeginTime <'2009-06-17 00:00:00' 
  22. and EndTime >= '2009-06-16 00:00:00')  
  23. go  
  24.  
  25. c. exists 和 not exists子查询  
  26.  
  27. exists 的语法: while [not] exists(子查询)  
  28.  
  29. 例题:  
  30. select * from recordinfo  
  31.   where exists(  
  32.         select *from cardinfo   
  33.               where cardid = recordinfo.cardid and cardnumber = '002-003')  
  34. go  
  35.  
  36. (2)子查询出现在where关键字之后  
  37. 例题:  
  38. select                                 cardnumber ,cardpassword,cardbalance,transacttime,pcid,begintime,endtime,fee   
  39. from recordinfo r inner join cardinfo c  
  40. on c.cardid = r.cardid  
  41.  
  42. (3)子查询出现在from关键字之后  
  43. 例题:  
  44. select cardnumber as '会员号',sum (fee) as '消费' 
  45. from  (select                                 cardnumber ,cardpassword,cardbalance,transacttime,pcid,begintime,endtime,fee   
  46. from recordinfo r inner join cardinfo c   
  47. on c.cadid = r.cardid ) as temp_table   
  48. group by cardnumber  
  49. go  
  50.  
  51. (4)子查询出现在select关键字之后  
  52. 例题:  
  53. --查找会员卡信息表余额的最大值  
  54. select (select max(cardbalance) from cardinfo) as '最高余额'