Oracle查询_单表查询

database

前面我们详解了关于Oracle的增删改,今天让我们接着来学习Oracle的查询吧,

Oracle中查询可是重头戏噢!!!跟着煌sir的步伐,走位,走位~~~

 

小知识锦囊

在此前,先讲解一个小知识点 Oracle注释,这对我们开发也是挺有帮助的噢!!!

--表注释
comment on table 表名 is "注释";
--列注释
comment on column 列名 is "注释";

实用:

comment  on table test1.ID  is ""主键";

可以更清晰的看懂对应的字段意思,是不是就可以更快的操作了呢,嚯嚯~~~

 

接着,让我们进入查询吧!

查询_单表查询

一.标准SQL和方言

 

二. 标准DQL语法

select distinct * | 列名 as 别名, 列表2 as 别名2... | 聚合函数
from 表名 as 别名, 表名2 as 别名2 ,....
where 查询条件
group by 分组字段 having 分组条件
order by 排序字段 asc | desc,....

 

 

三.简单查询

--精确查询  

--1 查询水表编号为30408的业主记录

select * from t_owners where WATERMETER="30408" ;

--使用表的别名

select * from t_owners ow as where ow.WATERMETER="30408" ;

--模糊查询

--2查询业主名称包含“刘”的业主记录

--like 语句 %匹配多个字符 _匹配1个字段

select * from t_owners ow where ow.NAME like "%刘%";

--and运算符

--3查询业主名称包含“刘”的并且门牌号包含5的业主记录

select * from t_owners ow where ow.name like "%刘%" and ow.HOUSENUMBER like "%5%";

--or运算符

--4查询业主名称包含“刘”的或者门牌号包含5的业主记录

select * from t_owners ow where ow.name like "%刘%" or ow.HOUSENUMBER like "%5%";

--and 与or运算符混合使用

--5查询业主名称包含“刘”的或者门牌号包含5的业主记录,并且地址编号为3的记录。

--and 优先级 高与or, 如果先执行or, 需要使用小括号

--1.不加括号,先执行and

select * from t_owners ow where ow.name like "%刘%" or ow.HOUSENUMBER like "%5%" and ow.ADDRESSID=3;

--2.加括号,先执行or

select * from t_owners ow where (ow.name like "%刘%" or ow.HOUSENUMBER like "%5%") and ow.ADDRESSID=3;

-- 范围查询

--6查询台账记录中用水字数大于等于10000,并且小于等于20000的记录

--1. > <

select * from t_account a where a.USENUM >=10000 and a.USENUM<=20000;

--2. between ..to..

select * from t_account a where a.usenum between 10000 and 20000;

-- 空值查询

--7 查询T_PRICETABLE表中MAXNUM为空的记录

select * from T_PRICETABLE p where p.maxnum is null;

--8 查询T_PRICETABLE表中MAXNUM不为空的记录

select * from T_PRICETABLE p where p.maxnum is not null;

 

 

四.去重复和排序

--1.升序排序

--需求:对T_ACCOUNT表按使用量进行升序排序

select * from T_ACCOUNT t order by t.USENUM asc;

--2.降序排序

--需求:对T_ACCOUNT表按使用量进行降序排序

select * from T_ACCOUNT t order by t.usenum desc;

--需求:对T_ACCOUNT表按month进行降序,如果相同按照usenum进行升序

select * from T_ACCOUNT t order by t.month desc ,t.usenum asc ;

 

 

五.伪列

伪列是oracle中独有的,伪列也是真实存在的列,用于查询操作,不能增删改操作。

  ROWID物理文件上唯一区别这条记录的唯一标识

表中的每一行在数据文件中都有一个物理地址,ROWID伪列返回的就是该行的物理地址。使用ROWID可以快速的定位表中的某一行。ROWID值可以唯一的标识表中的一行。由于ROWID返回的是该行的物理地址,因此使用ROWID可以显示行是如何存储的。

 

  • rowid
  • 在mysql表中存在数据相同记录,如果对某一条进行操作,将修改所有的数据。

 

Oracle使用rowid区别每一条数据,不会存在操作一条,影响多条的情况。

查询语句:                  select rowID,t.* from T_AREA t

 

 

  • rownum
  • 在查询的结果集中,ROWNUM为结果集中每一行标识一个行号,第一行返回1,第二行返回2,以此类推。通过ROWNUM伪列可以限制查询结果集中返回的行数。

查询语句: select rownum,t.* from T_OWNERTYPE t

 

 

 

六.聚合函数

  • ORACLE的聚合统计是通过分组函数来实现的,与MYSQL一致。

  • 聚合函数:通过提供函数,将查询结果处理成一行一列数据。

    • 特点:聚合函数不计算null值

实战样例:

--(五)聚合统计 ----不计算null值

--(1)求和 sum

--1 统计2012年所有用户的用水量总和

select sum(a.USENUM) from t_account a where a.YEAR="2012";

--(2)求平均 avg

--2 统计2012年所有用水量(字数)的平均值

select avg(a.usenum) from t_account a where a.year="2012";

--(3)求最大值 max

--3统计2012年最高用水量(字数)

select max(a.usenum) from t_account a where a.year="2012";

--(4)求最小值min

--4统计2012年最低用水量(字数)

select min(a.usenum) from t_account a where a.year="2012";

--(5)统计记录个数 count

--5统计记录个数 count

--1

select count(a.usenum) from t_account a ;

--2

select count(*) from t_account a ;

--2. 分组聚合Group by --+++++++++++++++++++++++++++++++++++++++++++++++++

--需求:按区域分组统计2012年水费合计数

select a.areaid 区域,sum(a.money) 年水费合计数 from t_account a where a.year="2012" group by a.areaid;

--3. 分组后条件查询 having

--需求:查询2012年水费合计大于169000的区域及水费合计

select a.areaid 区域,sum(a.money)水费合计 from t_account a where a.year="2012" group by a.areaid having sum(a.money)>=169000;

 

今天就到这里结束了噢,下期见,小伙伴们~~~

 

 

看完恭喜你,又知道了一点点!!!

你知道的越多,不知道的越多! 

~感谢志同道合的你阅读,  你的支持是我学习的最大动力 ! 加油 ,陌生人一起努力,共勉!!

以上是 Oracle查询_单表查询 的全部内容, 来源链接: utcz.com/z/533855.html

回到顶部