ORACLE表格操作图文教学二(分组去重、计数、加减、多表)

禁止转载!

oracle用户操作一(登录,创建用户、表空间、创建新表):传送门
普通的增、删、改、查咱们就不介绍了哈~,还有一些情况下能用的暂时想不到,后续三里面想到了继续记录,附上了自己创建的几个表格留理解用,真的烦oracle里面大小写。
本文如有出错欢迎指正。

一、去重查询

假设现在有一张test表,有设备名(DEVNAME),产品型号(PRODUCTTYPE),报警编码(ALARMCODE)
ORACLE表格操作图文教学二(分组去重、计数、加减、多表)_第1张图片

1.DISTINCT去重

查询DEVNAME字段中名字不重复的,但是这种方法只能显示选择的信息,distinct devname,那么就只能看到devname

SELECT DISTINCT DEVNAME FROM "Test"

结果:
ORACLE表格操作图文教学二(分组去重、计数、加减、多表)_第2张图片

2.group by去重

查询设备名、产品名不同的:意思就是这两个字段合起来,数据不同的。
下面语句两者一样

SELECT DISTINCT DEVNAME,PRODUCTTYPE FROM "Test"
select DEVNAME,PRODUCTTYPE from "Test" group by DEVNAME,PRODUCTTYPE

结果
ORACLE表格操作图文教学二(分组去重、计数、加减、多表)_第3张图片

但是group by可以设置所返回的数据,比如只显示设备名和产品名不同的设备名

select DEVNAME from "Test" group by DEVNAME,PRODUCTTYPE

ORACLE表格操作图文教学二(分组去重、计数、加减、多表)_第4张图片

二、查询条数总计

1.查询表格所有条数

查询Test表中所有记录的条数

select COUNT(*) from "Test"

显示:
ORACLE表格操作图文教学二(分组去重、计数、加减、多表)_第5张图片

2.分组查询条件总数

查询Test表中,DEVNAME和PRODUCTTYPE不同时,所有报警的总数

select COUNT(*),DEVNAME,PRODUCTTYPE from "Test" group by DEVNAME,PRODUCTTYPE

显示,DevName为test1,加工产品型号为200x200时,报了2次警
ORACLE表格操作图文教学二(分组去重、计数、加减、多表)_第6张图片

三、基本加减语句

1.查询某一项条数占比

查询名字为test1的设备在记录中出现占比,Total为查询结果的字段名, C1、C2是查询结果存放在这两张表中。

SELECT C1.TOTAL/C2.TOTAL TOTAL FROM  (SELECT COUNT(*) TOTAL FROM "Test" 
WHERE DEVNAME = 'test1') C1,(SELECT COUNT(*) TOTAL FROM "Test" ) C2

输出
ORACLE表格操作图文教学二(分组去重、计数、加减、多表)_第7张图片

2.累加计算

查询test1的ALARMCODE相加值

SELECT SUM(ALARMCODE) FROM "Test" WHERE DEVNAME = 'test1'

运行结果
ORACLE表格操作图文教学二(分组去重、计数、加减、多表)_第8张图片

四、多表查询

假如现在有两张表,test_sql的Name字段和test_wumeng的k1字段非常相似
表一:test_seq
ORACLE表格操作图文教学二(分组去重、计数、加减、多表)_第9张图片

表二:test_wumeng
ORACLE表格操作图文教学二(分组去重、计数、加减、多表)_第10张图片

1.将两张表放在一起查询(不做处理)

SELECT * FROM "test_seq",  "test_wumeng" ;

结果:可以看出来结果为满足对应关系复制了很多次(这是因为左连接和右链接的问题)
ORACLE表格操作图文教学二(分组去重、计数、加减、多表)_第11张图片

2.对比查询(相同字段对比找出结果)

合并两张表查询一般是有关联关系的,上面两张表中的test_sql的Name字段和test_wumeng的k1字段非常相似,那么就有关联性。

现在查询test_seq字段Name和test_wumeng字段k1相同的数据。

语句:t1是test_seq的别名,t2 是test_wumeng的别名(不用别名也可)

SELECT t1.*,t2.* FROM "test_seq" t1, "test_wumeng" t2 WHERE t1.NAME = t2."k1";

结果:
ORACLE表格操作图文教学二(分组去重、计数、加减、多表)_第12张图片

3.(+)左右链接

但是实际上test_seq的Name中是有test_wumeng的k1字段没有的值,如果想给它也显示出来

SELECT t1.*,t2.* FROM "test_seq" t1, "test_wumeng" t2 WHERE t1.NAME = t2."k1"(+);

结果:
ORACLE表格操作图文教学二(分组去重、计数、加减、多表)_第13张图片
Oracle中的(+) 是外连接,如果在等号的左边就是左连接 和如果在等号的右边就是右连接(也有人说在右边是左连接,在左边是右链接
和left join ,right join 比较相似

4.累加+对比

用test_seq里面的Name找到test_wumeng字段k1里相同的数据,并将test_wumeng的k2字段累加

SELECT SUM(t2."k2") FROM "test_seq" t1, "test_wumeng" t2 WHERE t1.NAME = t2."k1";

结果:
ORACLE表格操作图文教学二(分组去重、计数、加减、多表)_第14张图片

你可能感兴趣的:(oracle,oracle)