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