SQL基础3-子查询

系统 1429 0
      
          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基础3-子查询


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论