龙空技术网

Sql中的case函数和子查询

剑云锋 677

前言:

此时朋友们对“java case函数”可能比较讲究,同学们都想要分析一些“java case函数”的相关文章。那么小编也在网上汇集了一些有关“java 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 结果nelse 结果n+1end 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 结果nelse 结果n+1end 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 

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

子查询语句一般不宜过多:子查询为嵌套查询,嵌套过多,越复杂,可读性就越差。子查询使用过多,会严重消耗性能。子查询使用不利于sql语句的调试,问题的排查。查询的一般方法:

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

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

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

标签: #java case函数