1- 排序查询
select * from 表名 order by 字段;
desc :从大到小排序
默认是从小到大排序
2- 基于伪列的查询
ROWID 和 ROWNUM
rowid : 唯一的编号
select rowid,表名.*
from 表名
where ROWID= 'AAAStKAANAAAAC/AAC'; (rowid号)
ROWNUM查询列表中从1开始编号
select rownum,表名.* from 表名
相当于排列序号
但如果查询 where rownum时 不可以跳过1开始 rownum>5 不行
可以with 名字 as()进行查询
3-分页查询
使用rownum
查看前10条
select rownum, 表名.* from 表名 where rownum<=10
4-基于排序的分页
每页 10 条记录 ,按使用字数降序排序,查询第 2 页数据
select * from
(select rownum r,表名.* from 表名
where rownum<=20
order by usenum desc)
where r>10
5-其他函数
5-1:空值处理函数(与sql中的if差不多)
NVL (检测的值 ,如果为 null 的值) ;
语句 :
select NVL(NULL, 0) from dual |
显示价格表中业主类型 ID 为 1 的价格记录 ,如果上限值为 NULL,则显示 9999999
语句 :
select price, minnum, nvl(maxnum,9999999) from t_pricetable where ownertypeid=1 |
空值处理函数 NVL2
用法 :
NVL2 (检测的值,如果不为 null 的值,如果为 null 的值) ;
需求 :显示价格表中业主类型 ID 为 1 的价格记录 ,如果上限值为 NULL,显示“不限“ .
select price, minnum, nvl2(maxnum, to_char(maxnum), '不 限')
from t_pricetable
where ownertypeid=1
6-时间相关函数
Orcale中时间类型date是 必须为 年月日时分秒的样式
和mysql中不一样 没有单独的year时间类型
使用 to date('时间','yyyy-mm-dd.....')
SELECT TO_DATE('2006-05-01 19:25:34', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
SELECT TO_DATE('2006-05-01 19:25', 'YYYY-MM-DD HH24:MI') FROM DUAL;
SELECT TO_DATE('2006-05-01 19', 'YYYY-MM-DD HH24') FROM DUAL;
SELECT TO_DATE('2006-05-01', 'YYYY-MM-DD') FROM DUAL;
SELECT TO_DATE('2006-05', 'YYYY-MM') FROM DUAL;
SELECT TO_DATE('2006', 'YYYY') FROM DUAL;
trunc函数截取后的结果依然为时间类型
trunc(sysdate) S2,
trunc(sysdate,'year') YEAR,
trunc(sysdate,'month') MONTH ,
trunc(sysdate,'day') DAY
from dual;
to_char 函数 时间转变为字符串类型
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual;
select to_char(sysdate,'yyyy') as nowYear from dual;
select to_char(sysdate,'mm') as nowMonth from dual;
select to_char(sysdate,'dd') as nowDay from dual;
select to_char(sysdate,'hh24') as nowHour from dual;
select to_char(sysdate,'mi') as nowMinute from dual;
select to_char(sysdate,'ss') as nowSecond from dual;
7-行列转换
按月份统计 2012 年各个地区的水费 ,如下图
代码如下:
select (select name from T_AREA where id= areaid ) 区域, sum ( case when month= '01' then money else 0 end) 一月, sum ( case when month= '02' then money else 0 end) 二月, sum ( case when month= '03' then money else 0 end) 三月, sum ( case when month= '04' then money else 0 end) 四月, sum ( case when month= '05' then money else 0 end) 五月, sum ( case when month= '06' then money else 0 end) 六月, sum ( case when month= '07' then money else 0 end) 七月, sum ( case when month= '08' then money else 0 end) 八月, sum ( case when month= '09' then money else 0 end) 九月, sum ( case when month= '10' then money else 0 end) 十月, sum ( case when month= '11' then money else 0 end) 十一月, sum ( case when month= '12' then money else 0 end) 十二月 from t_account where year='2012' group by areaid ; |
8-集合运算
- UNION ALL(并集) ,返回各个查询的所有记录 ,包括重复记录。
- UNION(并集) ,返回各个查询的所有记录 ,不包括重复记录。
- INTERSECT(交集) ,返回两个查询共有的记录。
union all :不去重
select * from t_owners where id<=7
union all
select * from t_owners where id>=5
UNION 去掉重复记录
select * from t_owners where id<=7 union select * from t_owners where id>=5 |
INTERSECT(交集)
select * from t_owners where id<=7
intersect
select * from t_owners where id>=5
只会输出567 交集的数据
9-差集运算
select * from t_owners where id<=7
minus
select * from t_owners where id>=5
只会显示1234 显示没有重合的数据