Oracle表的常用查询实验(五)

Oracle表的常用查询实验(五)

1.问题描述:

test表中有ID(人员编号),A(考核标准),B(实际得分),C(课程编号)四个字段,一个ID可能会有多个科目的评分,如果一个ID中存在A=B,则合格,求合格的人员编号。

Oracle表的常用查询实验(五)_第1张图片

2.需求分析:

要得到的结果为:

ID 是否合格

1011 合格

1012 合格

1013 合格

1014 不合格

1015 合格

如果直接用decode()函数,则会出现同一id有合格和不合格的成绩,错误

Oracle表的常用查询实验(五)_第2张图片

故合格产品满足以下两个条件:(1)ID不能重复—》distinct (2)同一id存在A=B

3.解答过程:

(1)查出合格的

selectdistinctid,'合格' PJ fromtestwhereidin(selectidfromtestwhere a=b)

(2)查出不合格的

selectdistinctid,'不合格' PJ fromtestwhereidnotin(selectidfromtestwhere a=b)

(3)使用union联接

selectdistinctid,'合格' PJ fromtestwhereidin(selectidfromtestwhere a=b)union

selectdistinctid,'不合格' PJ fromtestwhereidnotin(selectidfromtestwhere a=b);

Oracle表的常用查询实验(五)_第3张图片

4.SQL代码:

selectdistinctid,'合格' PJ fromtestwhereidin(selectidfromtestwhere a=b)union

selectdistinctid,'不合格' PJ fromtestwhereidnotin(selectidfromtestwhere a=b);

5.联想扩展:

假设只有A,B两列数据,如果存在A=B,则显示匹配成功(即根据A来判断)

select t3.xx,decode(t3.xx,t3.yy,'success','fail')匹配情况 from

(select*from(selectdistinct A xx fromtest) t1 leftjoin

(selectdistinct A yy fromtestwhere A=B) t2 on t1.xx=t2.yy) t3

Oracle表的常用查询实验(五)_第4张图片

你可能感兴趣的:(Oracle表的常用查询实验(五))