SQL基础3-子查询

  1 --执行插入语句返回刚刚生成的自动编号
  2 insert into TblClass output inserted.ClsId values('大一一班','11',18)
  3 
  4 ------------CASE函数用法------------
  5 --相当于switch 注意then后面的数据类型要一样
  6 select * from Tblscore
  7 select 
  8 tScoreid,
  9 tenglish,
 10 评分=
 11 case
 12     when tenglish>=95 then '优秀'
 13     when tenglish>=90 then '良好'
 14     when tenglish>80 then ''
 15     when tenglish is null then '101'
 16     else '乔布斯'
 17 end
 18 from TblScore
 19 
 20 --等值判断
 21 select 
 22 tScoreid,
 23 tenglish,
 24 评分=
 25 case tenglish
 26     when 95 then '优秀'
 27     when 90 then '良好'
 28     when 80 then ''
 29     when  null then '101'
 30     else '乔布斯'
 31 end
 32 from TblScore
 33 
 34 
 35 
 36 --聚集索引(聚簇索引):
 37 -------当数据实际的存储顺序,与索引的顺序一致就把该索引叫聚集索引
 38 --非聚集索引(非聚簇索引)
 39 -------当索引中数据的顺序与,数据实际存储的顺序不一致的时候,该索引叫非聚集索引。
 40 =======非聚集索引=============
 41 --在表Sales.SalesPerson中给SalesQuota, SalesYTD这两列创建非聚集索引
 42 CREATE NONCLUSTERED INDEX IX_SalesPerson_SalesQuota_SalesYTD ON Sales.SalesPerson (SalesQuota, SalesYTD); GO 
 43 ====创建唯一非聚集索引=============
 44 CREATE UNIQUE INDEX AK_UnitMeasure_Name ON Production.UnitMeasure(Name); GO 
 45 =======创建聚集索引=================
 46 CREATE TABLE t1 (a int, b int, c AS a/b); 
 47 --创建唯一的聚集索引
 48 CREATE UNIQUE CLUSTERED INDEX Idx1 ON t1(c); INSERT INTO t1 VALUES (1, 0);
 49 --删除索引
 50 drop index T8.IX_T8_tage
 51 
 52 
 53 
 54 ----------------子查询--------------------
 55 --把一个查询结果作为另一个查询的查询源
 56 
 57 select * from 
 58 (select fname,fage,fgender from MyStudent
 59 where fage between 18 and 24 and fgender='') as tbl
 60 where fname like '赵%'
 61 
 62 --把另外一个查询的结果作为当前查询的where条件来使用。
 63 
 64 
 65 select * from tblstudent where tsclassid=
 66 (select tclassid from tblclass where tclassname='高二二班')
 67 
 68 ---exists-----
 69 --如果exists包含了的查询,能查到结果,就返回true,否则返回false
 70 if(exists(select * from tblstudent where tsid<>1))
 71 begin
 72   print '有数据'
 73 end
 74 else
 75 begin
 76    print '无查询结果'
 77 end
 78 
 79 
 80 --查询所有'高二二班''高二一班'的学生的信息
 81 --子查询中=、!=、<、<=、>、>= 之后只能返回单个值,如果多个值就报错了。
 82 
 83 --这个写法是错误的
 84 select * from tblstudent where tsclassid=
 85 (
 86 select tclassid from tblclass where tclassname='高二二班' or tclassname='高二一班'
 87 )
 88 ---这个写法是正确的
 89 select * from tblstudent where tsclassid in
 90 (
 91 select tclassid from tblclass where tclassname='高二二班' or tclassname='高二一班'
 92 )
 93 
 94 
 95 ------------------分页----------------
 96 ------desc   降序排序从高到底  asc升序排序(默认)
 97 
 98 -------第一种分页----------------
 99 -----每页5条数据,找第二页
100 select top 5 * from tblstudent where tsid not in
101 (
102 select top((2-1)*5) tsid from tblstudent order by tsid
103 ) order by tsid
104 
105 ---第二种分页--
106 select * from
107 (
108 select *, row_number() over(order by tsid) as number from tblstudent
109 ) as T
110  where T.number between 6 and 10
111  
112  
113  
114  --开窗函数与聚合函数一起使用,可以让聚合函数对每一条数据都计算一次。
115 select * ,count(*) over() as '总条数' from tblstudent 
116 
117 
118 --------------连接join-----------------
119 --案例3:查询学生姓名、年龄、班级及成绩
120 select 
121 ts.tsname as '学生姓名',
122 ts.tsage as '年龄',
123 tc.tclassname '班级',
124 tb.tenglish '英语成绩',
125 tb.tmath '数学成绩'
126 
127 from tblstudent as ts
128 inner join tblscore as tb on ts.tsid=tb.tsid
129 inner join tblclass as tc on tc.tclassid=ts.tsclassid
130 
131 
132 --请查询出所有没有参加考试(在成绩表中不存在的学生)的学生的姓名。
133 select ts.tsname
134 from tblstudent as ts
135 left join tblscore as tb on ts.tsid=tb.tsid
136 where tb.tenglish is null and tb.tmath is null

 

posted @ 2012-08-25 00:40  Carl --卡尔  阅读(231)  评论(0编辑  收藏  举报