数码资讯
sql语句中case语句用法的探讨
sql中的用例 案例有两种形式:简单案例功能和案例搜索功能。 复制代码代码如下所示: 简单的功能 案例性 当'1'then '男性' 当'2'then '女' 其他的其他结束 ——案例搜索功能 当性别= '1'then '男性' 当性= '2'then '女' 其他的另一端 这两种方法可以实现相同的
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
sql中的用例
案例有两种形式:简单案例功能和案例搜索功能。
复制代码代码如下所示:
简单的功能
案例性
当'1'then '男性'
当'2'then '女'
其他的其他结束
——案例搜索功能
当性别= '1'then '男性'
当性= '2'then '女'
其他的另一端
这两种方法可以实现相同的功能,简单的案例函数比较简单,但与案例搜索功能相比,在功能上有一定的局限性,如写判断。
另一个需要注意的问题是,案例函数只返回第一个条件值,其余的部分将被自动忽略。
例如,下面的SQL部分,您永远不会得到这个结果的第二种类型
复制代码代码如下所示:
当col_1在(A,B)然后第一类
当col_1在(a)然后第二类
else'other结束
让我们来看看如何使用案例功能。
首先,已知数据按另一种方式分组,并进行分析。
有以下数据:(为了更清楚地看到,我没有使用国家代码,而是使用国家名称作为主键)。
国家(国家)人口(人口)
中国600
美国100
加拿大100
英国200
法国300
日本250
德国200
墨西哥50
印度250
根据该国的人口数据,计算了亚洲和北美洲的人口。
大陆人口
亚洲1100
北美洲250
其他700
你将如何解决这个问题用大陆代码创建视图是一种解决方案,但是很难动态地改变统计方式。
如果使用案例功能,SQL代码如下所示:
复制代码代码如下所示:
选择和(人口),
病例的国家
当'中国'然后'亚洲'
当印度,然后是亚洲
日本然后是亚洲
当我们,然后北美国
然后是加拿大,然后是北美国
然后是墨西哥,然后是北美国
其他的另一端
从table_a
逐组国家
当'中国'然后'亚洲'
当印度,然后是亚洲
日本然后是亚洲
当我们,然后北美国
然后是加拿大,然后是北美国
然后是墨西哥,然后是北美国
其他的另一端;
同样,我们也可以用这种方法来确定工资水平,并计算每个级别的人数。
复制代码代码如下所示:
选择
然后'1'salary时500
当工资> 500工资<= 600然后2
当工资> 600工资<= 800那么远
当工资> 800工资<= 1000英尺4英寸
其他salary_class空端,
计数(*)
从table_a
组
然后'1'salary时500
当工资> 500工资<= 600然后2
当工资> 600工资<= 800那么远
当工资> 800工资<= 1000英尺4英寸
否则空结束;
二,SQL语句用于完成不同条件的组。
有以下数据
国家(国家)性别(性别)人口(人口)
中国1340
中国2260
美国145
美国255
加拿大151
加拿大249
英国140
英国260
根据国家和性别团体,结果如下
全国男女
中国340260
美国4555
加拿大5149
英国4060
在普通情况下,联合也可以用于语句查询,但这增加了消费(两个选择部分),SQL语句将更长。
下面是一个用案例函数来做这个的例子
复制代码代码如下所示:
选择国家,
(情况和性别= '1'then)
其他人口0年底)-男性人口
(情况和性别= '2'then)
其他人口0年底)-女性人口
从table_a
按国家分组;
这样,我们利用选择完成了二维表的输出形式,显示了功能强大的功能。
三,检查用例函数。
在很多情况下,检查用例函数是一个很好的解决方案,可能有很多人根本不使用检查,所以我建议你在看下面的例子后尝试使用sql复选语句。
让我们举个例子。
A公司有一条规定,女职员的工资必须比工资高,如有支票和发票,如下所示
复制代码代码如下所示:
check_salary检查约束
(在性别= 2
然后工资为1000分。
然后1个其他0个结束
否则1结束= 1)
如果您使用简单的检查,如下所示
复制代码代码如下所示:
check_salary检查约束
(性别= '2'and工资> 1000)
女职工的条件与男职工一致。
四,根据条件选择更新。
例如,有以下更新条件
员工工资高于工资,工资降低百分之五。
工资在员工之间,工资增加了%。
可以很容易地考虑执行两个UPDATE语句的选择,如下所示
复制代码代码如下所示:
-条件
更新人才
设定工资=薪金* 0.9
工资范围> 5000;
-条件
更新人才
设定工资=薪金* 1.15
工资和薪金<4600>2000;
但它不是想象的那么容易,有一个人的工资。第一,根据条件,工资减少,并成为他们的工资。接下来,跑第二SQL的时间,因为人的工资范围内的限制增加,和最后的人工资不是降低而是提高了。如果反向进行,那么工资将工资降低。无论规则是多么荒谬,如果你想要一个SQL语句来实现这个功能,我们需要使用的功能,代码如下:
复制代码代码如下所示:
更新人才
设定工资=工资=5000时的工资
那么工资* 0.9
当工资和工资<4600=2000
那么工资* 1.15
其他薪酬目标;
重要的是要注意最后一行的其他薪水是必要的。如果没有这样的行,不符合这两个条件的人的工资将被写为null,这将是一个重大事件。
该方法也可用于许多场合,如关键工作的更改。
总的来说,这两个数据的主键,A和B交换,需要通过临时存储,复制,读出数据的三个过程,如功能的使用,一切都变得容易。
p_key col_1 col_2
1张三
b 2 Li Si
C 3国王五
假设有数据在上面,您需要交换主密钥A和B。当实现了案例功能时,代码如下所示
复制代码代码如下所示:
更新有
集p_key =情况时,p_key = A
then'b
当p_key = B
then'a
其他p_key结束
在p_key在(A,B);
同样的也可以交换为两个唯一的键。应该注意的是,如果需要交换主键,则表的设计通常是不够的。建议清单的设计是适当的。
五、两表数据一致性检查。
这样的功能是不同的解码功能。在案例的功能,你可以使用之间,像是空的,在存在等等。例如,使用中,存在,可以执行子查询来实现更多的功能。
作为下一个面具的一个例子,有两张桌子,tbl_a,tbl_b,两表keycol列。现在我们比较这两个表。如果在tbl_a keycol列的数据可以对tbl_b keycol列的数据发现,该result'matched'is返回。如果没有找到,则返回result'unmatched。
要实现以下功能,可以使用以下两个语句
复制代码代码如下所示:
-使用时
选择keycol,
当keycol在(选择keycol从tbl_b)
then'matched
else'unmatched'end标签
从tbl_a;
-使用时存在
选择keycol,
当存在(SELECT * FROM tbl_b)
在tbl_a.keycol = tbl_b keycol)。
then'matched
else'unmatched'end标签
从tbl_a;
使用和存在的结果是一样的,你也可以使用不存在和不存在,但是这一次你必须注意null的情况。
六,在用例函数中使用聚合函数
假设下面有一张桌子
的std_id课程ID(class_id)课程名称(class_name)大剑(main_class_flg)
1001经济学Y
1002历史n
2002历史n
2003考古Y
2004电脑
3004电脑
4005化学N
5006数学N
一些学生选择在同一时间上几门课程(100200),有些学生只选择一门课程(300400500),选择了许多课程的学生应该选择一门课程作为专业,而主标志是在Y.写的,只有一门课程的学生是国旗N(实际上,如果你写Y,就不会有麻烦了。)。例如,请包括更多)。
现在我们必须根据以下两个条件查询表
只修一门课程并返回课程ID的人。
选择若干主题并返回选定的主课程ID。
简单的想法是执行两个不同的SQL语句进行查询。
条件
复制代码代码如下所示:
-条件:只选择一门课程的学生
选择std_id,max(class_id)作为main_class
从Studentclass
集团通过std_id
有计数(*)=1;
结果执行
std_id main_class
----
三千零四
四千零五
五千零六
条件
复制代码代码如下所示:
-条件:选择多节课的学生
选择std_id,class_id作为main_class
从Studentclass
在main_class_flg = Y;
结果执行
std_id main_class
----
一千零一
二千零三
如果我们使用案例功能,只要一个SQL语句,我们就可以解决这个问题,如下所示
复制代码代码如下所示:
选择std_id,
计数(*)=1的情况——只选择一门课程的学生的情况
马克斯(class_id)
其他的马克斯(情况时,main_class_flg = Y)
然后class_id
其他的空端
)
最后main_class
从Studentclass
集团通过std_id;
运行结果
std_id main_class
----
一千零一
二千零三
三千零四
四千零五
五千零六
通过将案例函数嵌套在案例函数中,在聚合函数中使用案例函数,我们就可以很容易地解决这个问题,使用案例函数给我们更大的自由度。
最后,提醒新手的案例功能不要犯以下错误
复制代码代码如下所示:
案例col_1
当1 then'right
当零then'wrong
结束
在这份声明中,当零线总是返回到未知,所以永远不会有一例错了。因为这句话可以用在col_1 = null,这是一个错误的使用,这时候我们应该选择使用时col_1是空的。
案例有两种形式:简单案例功能和案例搜索功能。
复制代码代码如下所示:
简单的功能
案例性
当'1'then '男性'
当'2'then '女'
其他的其他结束
——案例搜索功能
当性别= '1'then '男性'
当性= '2'then '女'
其他的另一端
这两种方法可以实现相同的功能,简单的案例函数比较简单,但与案例搜索功能相比,在功能上有一定的局限性,如写判断。
另一个需要注意的问题是,案例函数只返回第一个条件值,其余的部分将被自动忽略。
例如,下面的SQL部分,您永远不会得到这个结果的第二种类型
复制代码代码如下所示:
当col_1在(A,B)然后第一类
当col_1在(a)然后第二类
else'other结束
让我们来看看如何使用案例功能。
首先,已知数据按另一种方式分组,并进行分析。
有以下数据:(为了更清楚地看到,我没有使用国家代码,而是使用国家名称作为主键)。
国家(国家)人口(人口)
中国600
美国100
加拿大100
英国200
法国300
日本250
德国200
墨西哥50
印度250
根据该国的人口数据,计算了亚洲和北美洲的人口。
大陆人口
亚洲1100
北美洲250
其他700
你将如何解决这个问题用大陆代码创建视图是一种解决方案,但是很难动态地改变统计方式。
如果使用案例功能,SQL代码如下所示:
复制代码代码如下所示:
选择和(人口),
病例的国家
当'中国'然后'亚洲'
当印度,然后是亚洲
日本然后是亚洲
当我们,然后北美国
然后是加拿大,然后是北美国
然后是墨西哥,然后是北美国
其他的另一端
从table_a
逐组国家
当'中国'然后'亚洲'
当印度,然后是亚洲
日本然后是亚洲
当我们,然后北美国
然后是加拿大,然后是北美国
然后是墨西哥,然后是北美国
其他的另一端;
同样,我们也可以用这种方法来确定工资水平,并计算每个级别的人数。
复制代码代码如下所示:
选择
然后'1'salary时500
当工资> 500工资<= 600然后2
当工资> 600工资<= 800那么远
当工资> 800工资<= 1000英尺4英寸
其他salary_class空端,
计数(*)
从table_a
组
然后'1'salary时500
当工资> 500工资<= 600然后2
当工资> 600工资<= 800那么远
当工资> 800工资<= 1000英尺4英寸
否则空结束;
二,SQL语句用于完成不同条件的组。
有以下数据
国家(国家)性别(性别)人口(人口)
中国1340
中国2260
美国145
美国255
加拿大151
加拿大249
英国140
英国260
根据国家和性别团体,结果如下
全国男女
中国340260
美国4555
加拿大5149
英国4060
在普通情况下,联合也可以用于语句查询,但这增加了消费(两个选择部分),SQL语句将更长。
下面是一个用案例函数来做这个的例子
复制代码代码如下所示:
选择国家,
(情况和性别= '1'then)
其他人口0年底)-男性人口
(情况和性别= '2'then)
其他人口0年底)-女性人口
从table_a
按国家分组;
这样,我们利用选择完成了二维表的输出形式,显示了功能强大的功能。
三,检查用例函数。
在很多情况下,检查用例函数是一个很好的解决方案,可能有很多人根本不使用检查,所以我建议你在看下面的例子后尝试使用sql复选语句。
让我们举个例子。
A公司有一条规定,女职员的工资必须比工资高,如有支票和发票,如下所示
复制代码代码如下所示:
check_salary检查约束
(在性别= 2
然后工资为1000分。
然后1个其他0个结束
否则1结束= 1)
如果您使用简单的检查,如下所示
复制代码代码如下所示:
check_salary检查约束
(性别= '2'and工资> 1000)
女职工的条件与男职工一致。
四,根据条件选择更新。
例如,有以下更新条件
员工工资高于工资,工资降低百分之五。
工资在员工之间,工资增加了%。
可以很容易地考虑执行两个UPDATE语句的选择,如下所示
复制代码代码如下所示:
-条件
更新人才
设定工资=薪金* 0.9
工资范围> 5000;
-条件
更新人才
设定工资=薪金* 1.15
工资和薪金<4600>2000;
但它不是想象的那么容易,有一个人的工资。第一,根据条件,工资减少,并成为他们的工资。接下来,跑第二SQL的时间,因为人的工资范围内的限制增加,和最后的人工资不是降低而是提高了。如果反向进行,那么工资将工资降低。无论规则是多么荒谬,如果你想要一个SQL语句来实现这个功能,我们需要使用的功能,代码如下:
复制代码代码如下所示:
更新人才
设定工资=工资=5000时的工资
那么工资* 0.9
当工资和工资<4600=2000
那么工资* 1.15
其他薪酬目标;
重要的是要注意最后一行的其他薪水是必要的。如果没有这样的行,不符合这两个条件的人的工资将被写为null,这将是一个重大事件。
该方法也可用于许多场合,如关键工作的更改。
总的来说,这两个数据的主键,A和B交换,需要通过临时存储,复制,读出数据的三个过程,如功能的使用,一切都变得容易。
p_key col_1 col_2
1张三
b 2 Li Si
C 3国王五
假设有数据在上面,您需要交换主密钥A和B。当实现了案例功能时,代码如下所示
复制代码代码如下所示:
更新有
集p_key =情况时,p_key = A
then'b
当p_key = B
then'a
其他p_key结束
在p_key在(A,B);
同样的也可以交换为两个唯一的键。应该注意的是,如果需要交换主键,则表的设计通常是不够的。建议清单的设计是适当的。
五、两表数据一致性检查。
这样的功能是不同的解码功能。在案例的功能,你可以使用之间,像是空的,在存在等等。例如,使用中,存在,可以执行子查询来实现更多的功能。
作为下一个面具的一个例子,有两张桌子,tbl_a,tbl_b,两表keycol列。现在我们比较这两个表。如果在tbl_a keycol列的数据可以对tbl_b keycol列的数据发现,该result'matched'is返回。如果没有找到,则返回result'unmatched。
要实现以下功能,可以使用以下两个语句
复制代码代码如下所示:
-使用时
选择keycol,
当keycol在(选择keycol从tbl_b)
then'matched
else'unmatched'end标签
从tbl_a;
-使用时存在
选择keycol,
当存在(SELECT * FROM tbl_b)
在tbl_a.keycol = tbl_b keycol)。
then'matched
else'unmatched'end标签
从tbl_a;
使用和存在的结果是一样的,你也可以使用不存在和不存在,但是这一次你必须注意null的情况。
六,在用例函数中使用聚合函数
假设下面有一张桌子
的std_id课程ID(class_id)课程名称(class_name)大剑(main_class_flg)
1001经济学Y
1002历史n
2002历史n
2003考古Y
2004电脑
3004电脑
4005化学N
5006数学N
一些学生选择在同一时间上几门课程(100200),有些学生只选择一门课程(300400500),选择了许多课程的学生应该选择一门课程作为专业,而主标志是在Y.写的,只有一门课程的学生是国旗N(实际上,如果你写Y,就不会有麻烦了。)。例如,请包括更多)。
现在我们必须根据以下两个条件查询表
只修一门课程并返回课程ID的人。
选择若干主题并返回选定的主课程ID。
简单的想法是执行两个不同的SQL语句进行查询。
条件
复制代码代码如下所示:
-条件:只选择一门课程的学生
选择std_id,max(class_id)作为main_class
从Studentclass
集团通过std_id
有计数(*)=1;
结果执行
std_id main_class
----
三千零四
四千零五
五千零六
条件
复制代码代码如下所示:
-条件:选择多节课的学生
选择std_id,class_id作为main_class
从Studentclass
在main_class_flg = Y;
结果执行
std_id main_class
----
一千零一
二千零三
如果我们使用案例功能,只要一个SQL语句,我们就可以解决这个问题,如下所示
复制代码代码如下所示:
选择std_id,
计数(*)=1的情况——只选择一门课程的学生的情况
马克斯(class_id)
其他的马克斯(情况时,main_class_flg = Y)
然后class_id
其他的空端
)
最后main_class
从Studentclass
集团通过std_id;
运行结果
std_id main_class
----
一千零一
二千零三
三千零四
四千零五
五千零六
通过将案例函数嵌套在案例函数中,在聚合函数中使用案例函数,我们就可以很容易地解决这个问题,使用案例函数给我们更大的自由度。
最后,提醒新手的案例功能不要犯以下错误
复制代码代码如下所示:
案例col_1
当1 then'right
当零then'wrong
结束
在这份声明中,当零线总是返回到未知,所以永远不会有一例错了。因为这句话可以用在col_1 = null,这是一个错误的使用,这时候我们应该选择使用时col_1是空的。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。