Oracle查询_ 单表查询

前面我们详解了关于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; 

 

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

 

 

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

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

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

栏目