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是空的。