玖叶教程网

前端编程开发入门

Sql中的case函数和子查询

Sql中case函数的2种用法:

case函数一般用来做结果集字段的替换,生成一个新列,相当于switch...case or if begin ...end else begin....end等 。

1.简单case函数

语法:

--Simple CASE expression: 
CASE input_expression 
 WHEN when_expression THEN result_expression [ ...n ] 
 [ ELSE else_result_expression ] 
END 

中文格式:

--简单的case函数
case 
 when 条件表达式1 then 结果1 
 when 条件表达式2 then 结果2
 ......
 when 条件表达式n then 结果n
else 结果n+1
end as '列名'

例如:

Select Id ,Name ,Gender 
case Classid 
when 1 then '023班'
when 2 then '024班'
when 3 then '025班’
else '非本专业'
end as '班级'
from Teacher 

2.搜索case函数

语法:

--Searched CASE expression: 
CASE 
 WHEN Boolean_expression THEN result_expression [ ...n ] 
 [ ELSE else_result_expression ] 
END 

中文格式:

--搜索case函数:
case 
 when 判断表达式1 Then 结果1
 when 判断表达式2 Then 结果2 
 .....
 when 判断表达式n Then 结果n
else 结果n+1
end as '列名'

例如:

select Id, Name ,Gender ,Age 
case 
 when Age <18 then '少年'
 when Age >20 then '青年'
 when Age is null then '不晓得'
 when Gender = True then '男’
else '青少年'
end as '学生类型'
from Teacher 

注意:相当于if ...else 判断函数,但是不能判断NULL值,case函数常用于分组统计。


2种子查询(subquery)

查询一般是指select 语句,子查询简单来说就是嵌套在查询语句中作为查询条件查询语句。

子查询步骤:

1.将检索或者查询的问题进行解析,将其分开成按逻辑排列的单句查询

2.大家查询构架。

3.运用关键词对查询构架进行填充单句子查询。

1.独立子查询:

第一类:单行子查询,

where条件子句子查询,一般跟在(=、!=、<、<=、>、>=)之后。

select * from Teacher where Age >(select Age from Teacher where Name = 'cc')

分析:先子句再父句(剥皮法)

1.子句:查询出表Teacher中,名字为cc的老师的年龄。

2.父句:检索出表Teacher中,年龄大于cc老师年龄的老师的名单详细信息。

第二类:多行子查询,

in or not in(多结果集)子查询,返回多个值。还有(all、any、函数min,max等)

	select * from Teacher where Age,Gender in (select Age from Teacher where Name = 'cc')

注:in or not in常用于测试一个给定的比较值有没有出现在一个特定的结果集中。

第三类:关联子查询,

exists or not exists条件子句子查询

if exists (select * from sysdatabases where name = 'TestSchool')
drop database TestSchool

注:exists 检测查询数据是否存在 。

2.相关子查询:

相关子查询依赖于外部查询,子查询引用了父查询的相关结果集。

第一类:作为结果集

select * from (select * from Teacher where Classid = 2) temp where Gender = True

第二类:作为列的值

select (select Name from newTeacher where newTeacher.Name =Teacher.Name) Salary from Teacher 

注:相关子查询的效率相对较低,子查询的性能完全依赖于查询和有关的数据。

子查询语句一般不宜过多:

  1. 子查询为嵌套查询,嵌套过多,越复杂,可读性就越差。
  2. 子查询使用过多,会严重消耗性能。
  3. 子查询使用不利于sql语句的调试,问题的排查。

查询的一般方法:

1.表联合(union、join):合并多个数据集中的行.

2.子查询(subquery):将一个查询嵌套在另一个查询中.

3.表连接(inner join):合并多个数据表中的列.

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言