2013-12-10复习数据库高级语法

    case

       在数据库中对数据进行对比有两种用法:

        1.不对任何列进行case条件判断

                      例:select

                                         name as 姓名,
                                         case
                                         when age>30 then '上班族'
                                         when age>22 then '你毕业了'
                                         when age>18 then '你成年了'
                                         else '其他'
                                         end as 判断
                                         from student

从case开始:开始判断什么不知道,当执行到when的时候才知道判断什么(age),如果在在判断一个列的时候,满足多个条件(when),先满足谁就执行谁。

        2.直接case列,对值进行判断。

                                       select
                                       name as 姓名,
                                       case id
                                       when 1 then 'id为1的是小七'
                                       when 2 then 'id为2的是李四'
                                       when 3 then 'id为3的是王五'
                                       else '不知道'
                                       end as'判断'
                                       from student

从case开始:一开始就知道要判断id,如果这个值是1就输出“id为1的是小七”

  注:1.在结果集中,可以包含多个相同的列名,在ado中用列名取数据会出问题的。

          2.多个then后面的所有数据类型都必须相同

          3如果多个then后面的数据类型不相同可以做数据类型转换

******************************************子查询***********************************************

  什么是子查询:简单说就是在一个查询中有另外一个查询,这个查询就叫做主查询的子查询。

   select * from PhoneNum where pTypeId=(select ptId from PhoneType where ptName='同事')

  注:1如果小括号内的查询返回多个列的话,会报错!

         2只有子查询返回的结果集是一行一列的才能当做值来用. 

         3 In 是判断一个值,是否在后面的所有值里面出现过,

         4 Not in是判断一个值,是否在后面的所有值里面没有出现过

*****************************************EXISTS**************************************

 select * from PhoneNum where EXISTS (select ptId from PhoneType where ptName='同事')

 :EXISTS引用了主查询的数据进行子查询的一种方式,子查询中,只做条件判断,不做任何列的输出。

***************************************分页查询**************************************

select top(10)* from Area where ar_id not in

(select top(30)ar_id from Area)

                             注:我们可以把结果集当成一张表,在通过表进行查询。

select* from
(select *, ROW_NUMBER() over(order by ar_id)as '新id' from Area )as biao
where biao.新id between 1 and 10

                                             注ROW_NUMBER()会在结果集的基础上加上了一列,这一列从1开始,中间不会有间断的,然后配合between and使用,效率比较高







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值