1.分页

1.分页是通过限制返回的行数实现的
2.在oracle数据库中每一个表都有一个虚列rownum,它是从1开始的数字排序列。
3.rownum只能使用小于,而不能使用大于
4.开始测试,先把今天要用到的数据表创建一下吧(数据自己填一点)

CREATE TABLE EMP2(   "EMPNO" NUMBER(4,0), "ENAME" VARCHAR2(10 BYTE), "JOB" VARCHAR2(9 BYTE), "MGR" NUMBER(4,0), "HIREDATE" DATE, "SAL" NUMBER(7,2), "COMM" NUMBER(7,2), "DEPTNO" NUMBER(2,0), "SEX" CHAR(10 BYTE))
1.返回四条数据
select * from emp2 where rownum<5;

上面我们说了不能使用大于,那么我们怎么拿到第几条到第几条的数据呢

2.返回第5到第10条数据(包含5和10)
select * from(select e.*,rownum r from emp2 e where rownum<=10) where r>=5;
3.--按工资降序排序 要5-8条
select * from (select e.*,rownum r from emp e where rownum <=8 order by e.sal desc)
看似这个已经实现了对工资的排序,但是由于rownum是在order by
之前便存在的,所以(可以随便找一列的工资和R对应看看就明白了),所以在排序中跟着工资列被打乱了。
4.那么如何解决呢
--首先将整个emp表进行排序
select * from emp order by sal desc;
--然后进行封装成对象 e,在进行r的查询
select e.*,rownum r from (select * from emp order by sal desc) e where rownum<=8;
--最后在执行
where r>=5
--完整过程就是如下
select * from (select e.*,rownum r from (select * from emp order by sal desc) e where rownum<=8) where r>=5;

2.日期函数

1.首先说一下dual列
–dual是oracle内置的最小的表 单行单列

1.--在查询的当前月份上加上两个月
select add_months(sysdate,2) from dual;
2.--减两个月
select add_months(sysdate,-2) from dual;
3.--为指定日期加上指定月份
select ename,hiredate,add_months(hiredate,1) as newdate from emp;
4.--指定日期与今日的日期的月份差
select ename,hiredate,months_between(sysdate,hiredate) from emp;
5.--指定日期与今天的天数差
select ename,hiredate,sysdate-hiredate from emp;
6.--返回某个指定日期月的最后一天
select last_day(sysdate) from dual;
7.--返回指定日期的下一个星期几的日期
select next_day(sysdate,'星期一') from dual;
8.--截取时间值函数--截取年份的时间值
select extract(year from sysdate) from dual;
--截取月份的时间值
select extract(month from sysdate) from dual;
--截取日期的时间值
select extract(day from sysdate)+1 from dual;
--截取日期的时间值+1
select extract(day from sysdate)+1 from dual;--获取今天过生日的员工的信息
select * from emp where extract(month from hiredate)=extract(month from sysdate)
and extract(day from hiredate)=extract(day from sysdate);

3.字符函数

--将首字母大写Hello
select initcap('hello') from dual;--将字符转为小写 (输出全部小写)hhh
select lower('HHh') from dual;
--将字符转为大写 (输出为全部大写)HHI
select upper('HHi') from dual;--从左边截掉指定的字符串helloabc
select ltrim('abchelloabc','abc') from dual;
--从右边截掉指定的字符串 abca
select rtrim('abcabd','bd') from dual;--替换指定的字符串 back (有多少相同的字符串替换多少)
select translate('jack','j','b') from dual;
select replace('jack','j','b') from dual;--indexof 查询指定的字符串首次出现的位置 3
select instr('abcdc','c') from dual;--substring 字符串截取 (从第几个字符开始,截取几个,包含开始的字符)bcd
select substr('abcde',2,3) from dual;
--字符串连接 aabb (将两个字符串连接起来)
select concat('aa','bb') from dual;--从左边补充字符串数量至9个,所需的字符串从后面的参数中取得 hellabcde
select lpad('abcde','9','hello') from dual;
--从右边补充字符串数量至9个,所需的字符串从后面的参数中取得 abcdehell
select rpad('abcde','9','hello') from dual;
--从两边去除指定的字符 仅限两边 不包括中间 444646994
select trim('9' from '99944464699499') from dual;
--查询字符串的长度
select length('abcdef') from dual;--判断是否条件成立,成立显示信息1 不成立显示信息2 select empno,comm ,decode(comm,'','暂无补助',comm) from emp;--转换函数--转换为字符串格式select to_char(sysdate,'yyyy-mm-dd') from dual;insert into emp2(empno,ename,hiredate) values(20,'heihei',to_date('2021-4-14','yyyy-mm-dd'));

4.聚合函数

--sum
select sum(sal) from emp;--avg
select avg(sal) from emp;--max
select max(sal) from emp;--min
select min(sal) from emp;--count
select count(*) from emp;
select count(empno) from emp;

5.一些应用sql实例

1.聚合函数实例
--查询部门名叫开发部的员工的信息
select * from emp where deptno=(select deptno from dept where dname='开发部');
--查询部门名为开发部的员工工资总额
select sum(sal) from emp where deptno =(select deptno from dept where dname='开发部');
--查询部门名为开发部的员工人数
select count(empno) from emp where deptno=(select deptno from dept where dname='开发部');--查询部门名为开发部的员工的平均工资
select avg(sal) from emp where deptno =(select deptno from dept where dname='开发部');--查询部门名为开发部的员工的最低工资
select min(sal) from emp where deptno =(select deptno from dept where dname='开发部');--查询部门名为开发部的员工的最高工资
select max(sal) from emp where deptno =(select deptno from dept where dname='开发部');
2.分组

--查询每个部门的总工资
select deptno,sum(sal) from emp group by deptno;--查询每个部门的男女人数
select deptno,sex,count(empno)from emp2 group by deptno,sex order by deptno;--查询部门总工资大于10000的部门
--1.
select * from (select deptno,sum(sal) money from emp group by deptno
)where money>10000;--2.
select deptno,sum(sal) money from emp group by deptno having sum(sal)>10000;
3.内外连接
--内连接
--1.
select * from emp e,dept d where e.deptno=d.deptno;
--
2.
select * from emp e inner join dept d on(e.deptno=d.deptno);--3.
select * from emp e  join dept d on(e.deptno=d.deptno);--外连接
--左连接 以左边为基本表,查询左边不为空时最多条数据的sql
--1.
select * from emp e left join dept d on(e.deptno=d.deptno);
--2.(+)在那边不以那边为基本表
select * from emp e ,dept d where e.deptno=d.deptno(+);--右连接 以右边为基本表,查询右边不为空时最多条数据的sql
--1.
select * from emp e right join dept d on(e.deptno=d.deptno);
--2.
select * from emp e,dept d where e.deptno(+)=d.deptno;

6.SQL格式说明

select <列名> from <表名> where <条件表达式> group by <分组条件>having <过滤条件> order by <排序列> <排序关键词>

Oracle的select语句进阶和函数相关推荐

  1. 【转】oracle 把select语句中用到的时间去掉时分秒[问题点数:88分,结帖人:lzs45]...

    oracle 把select语句中用到的时间去掉时分秒[问题点数:88分,结帖人:lzs45] lzs45 (寻梦 MSN(Lzs45#16) 等 级: 结帖率:90.91% 楼主发表于:2006-1 ...

  2. Oracle中Select语句完整的执行顺序

    oracle Select语句完整的执行顺序:1.from 子句组装来自不同数据源的数据: 2.where 子句基于指定的条件对记录行进行筛选: 3.group by子句将数据划分为多个分组: 4.使 ...

  3. Oracle之SELECT语句

    1.SELECT语句 select * from t_c11_dxmb; (1)SELECT关键字后面需要跟要查询的列名,如果要查询该表中的所有列,可以使用*来代替所有的列名,然后跟着FROM关键字, ...

  4. oracle行的唯一标识符,Oracle 10g SELECT 语句

    对单表执行SELECT语句 SELECT customer_id, first_name, last_name, phone FROM customers; unix 选择一个表中的所有列SELECT ...

  5. oracle的jdbc语句,Java Oracle jdbc SELECT语句

    我在 Eclipse环境中使用java练习Oracle JDBC.我理解如何通过使用next()迭代每一行表来从产品输出SELECT *.我是在耍弄 输出语句 SELECT pid, pname fr ...

  6. Oracle 的 SQL语句中 decode()函数

    decode()函数简介: 主要作用:将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明): 使用方法: Select decode(columnname,值1,翻译值1,值2,翻译值2,.. ...

  7. oracle解析select,oracle_select语句例子解析

    oracle sql[select]语句练习 使用scott/tiger用户下的emp表完成下列练习,表的结构说明如下 empno 员工号 ename 员工姓名 job 工作 mgr 上级编号 hir ...

  8. oracle表回退语句,5 Oracle笔试题

    一.选择题(每题2分) 1.你要对操纵Oracle数据库中的数据.下列哪个选项表示Oracle中select语句的 功能,并且不需要使用子查询? A.可以用select语句改变Oracle中的数据 B ...

  9. oracle 12c pl/sql语言,ORACLE 12C SQL语句中通过with 定义PL/SQL 函数

    在ORACLE 12C支持在sql语句中编写函数,用来实现sql语句操作需要使用函数的部分功能,该功能对于你不想在数据库中新建函数 or 你的库是read only模式下要使用新函数实现某种功能,可以 ...

最新文章

  1. LeetCode简单题之旋转字符串
  2. RHEL7 timedatectl命令
  3. ws2_32.lib 网络编程
  4. 更改eclipse的Package Explorer的字体
  5. 防止我们账号被盗的5个方法
  6. 运筹学(最优化理论)学习笔记 | 共轭梯度法
  7. 时间序列数据库的秘密(3)——加载和分布式计算
  8. prism项目搭建 wpf_Prism完成的一个WPF项目
  9. SAP CRM WebClient UI 某些icon图标不能正常显示X
  10. Asp.net Vnext IValueProvider
  11. Practical Tactics for Social Intercourse One
  12. 20190509杂题选讲
  13. 深信服SCSA安全认证工程师
  14. Pr剪辑视频时,把视频变速,声音失真了怎么办,三个步骤完美搞定
  15. Fake it till you make it: face analysis in the wild using synthetic data alone
  16. 测试开发人员与开发人员_我是真正的开发人员还是优秀的Googler?
  17. 洛谷P3604 美好的每一天(莫队)
  18. 2023最新最新ChatGPT超全面从基础到实战视频教程/有兴趣自己学
  19. zcash官方介绍 zk-SNARK circuit-QAP转化
  20. 安卓客户端开发!如何试出一个Android开发者真正的水平?分享PDF高清版

热门文章

  1. 前后端必学的网络安全浏览器工作原理 学习笔记
  2. python 希尔伯特变换_Python在信号与系统中的应用(1)——Hilbert变换,Hilbert在单边带包络检波的应用,FIR_LPF滤波器设计,还有逼格高高的FM(PM)调制...
  3. 随机森林的特征 是放回抽样么_通过随机森林的例子解释特征重要性
  4. 发展规划可视化 电网_智能电网调度优化及可视化设计
  5. 计算机编码基础知识及Java中编码转换
  6. latex如何使文字不空格_latex 文字间加空格
  7. TXL C语言语法说明
  8. 【无标题】CCS3.3下载程序时出现错误:Unexpected Fatal Error Encountered which may have been caused by a stack over
  9. php epp 协议,EPP协议简介
  10. 定制centos一键自动化安装iso的详细解决方案