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

 

你可能感兴趣的:(sql)