case
在数据库中对数据进行对比有两种用法:
1.不对任何列进行case条件判断
例:select
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使用,效率比较高