Oracle笔记 三、function 、select

时间:2022-09-03 15:50:55
Scott表下有这么几个常用的表,而且还带有数据。分别是emp、dept、salgrade;

1、查看表结构用desc

    desc emp;

 

2、空表dual,最常用的空表,如:

    select 2 * 4 from dual;

    select sysdate from dual;

 

3、双引号能保持格式

    如:select sysdate “toDay 日 期” from dual;

 

4、|| 字符串连接

    如:select 2*3 || 8 from dual;

    select ename || sal from scott.emp;

    select ename || ‘ORACLE’ from scott.emp;

 

5、单引号,如:select 2 * 2 || 'abc''efg' from dual;

    用两个单引号表示一个单引号

 

6、去掉重复数据distinct

    select distinct deptno from scott.emp;

    去掉重复组合:select distinct deptno,job from scott.emp;

 

7、where查询

    A、=查询,select * from scott.emp where sal = 1500;

 

    B、比较<、>、>=、<=

        select * from scott.emp where sal > 1500;

    C、and or

        select * from scott.emp where sal > 1500 and sal <= 5000 or deptno = 10;

    D、in、not in

        select * from scott.emp where sal in (1500, 800) and deptno not in (10, 20)

 

    E、like模糊 escape 转义

        Select * from scott.emp where ename like ‘%in%’;

        Select * from scott.emp where ename like ‘%in\%k%’;

        Select * from scott.emp where ename like ‘%in#%k%’ escape ‘#’;

        表示like中的#号是转义字符,相当于\

    F、is null、is not null

    K、    order by

        select sal, ename from scott.emp order by sal;

        select sal, ename from scott.emp order by sal asc;

        select sal, ename from scott.emp order by sal desc;

        select sal, ename from scott.emp where sal > 2000 order by sal desc;

        select sal, deptno, ename from scott.emp order by sal,deptno desc;

    

8、function

    A、lower、upper、substr

        select lower(‘abcABC’) from dual;

        select upper(‘abcABC’) from dual;

        substr(target, startIndex, length)

        select substr(‘abcABC’, 1, 3) from dual;

 

    B、chr、ascii

        将数字安装ascii值转换成字符:select char(65) from dual;

        将字符转换成ascii值:select ascii(‘Z’) from dual;

    

    C、round、to_char

        精确小数

        select round(22.456) from dual;

        保留2位小数:select round(22.456, 2) from dual;

        精确到个位:select round(22.456, -1) from dual;

    

        货币

        设置货币格式,000前面不足就用0代替

        select to_char(sal, '$000,000.00') from scott.emp;

        999就不会替换不足的地方,只会安装格式输出

        select to_char(sal, '$999,999.99') from scott.emp;

        本地货币格式

        select to_char(sal, 'L999,999.99') from scott.emp;

 

        日期

        日期格式 

        格式控制 描述 

        YYYY、YYY、YY 分别代表4位、3位、2位的数字年 

        YEAR 年的拼写 

        MM 数字月 

        MONTH 月的全拼 

        MON 月的缩写 

        DD 数字日 

        DAY 星期的全拼 

        DY 星期的缩写 

        AM 表示上午或者下午 

        HH24、HH12 12小时制或24小时制 

        MI 分钟 

        SS 秒钟 

        SP 数字的拼写 

        TH 数字的序数词 

 

        “特殊字符” 假如特殊字符 

        HH24:MI:SS AM 15:43:20 PM

        select to_char(sysdate, 'YYYY-MM-DD HH:MI:SS') from dual;

        select to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') from dual;

 

     D、to_date、to_number、nvl

        to_date(target, current_format)

        select to_date('2011-4-2 17:55:55', 'YYYY-MM-DD HH:MI:SS') from dual;

        select to_number('$12,322.56', '$999,999.99') + 10 from dual;

        select to_number('$12,322.56', '$00,000.00') + 10 from dual;

        select to_number('22.56') + 10 from dual;

        nvl可以将某个字段的空值转换成指定的值

        select ename, sal, nvl(comm, 1.00) from scott.emp;

 

9、group function 组函数:min、max、avg、sum、count

        select max(sal) from scott.emp;

        select min(sal) from scott.emp;

        select avg(sal) from emp;

        select round(avg(sal), 2) from emp;

        select to_char(avg(sal), 'L999,999.99') from emp;

        select sum(sal) from emp;

        select count(comm) from emp;

        select count(distinct deptno) from emp;

 

10、group by 分组

    select deptno, avg(sal) from emp group by deptno;

    select deptno, job, avg(sal) from emp group by deptno, job;

    求部门最高工资的所在部门的员工信息:

    select deptno, ename, sal from emp where sal in (select max(sal) from emp group by deptno);

 

11、having 对分组数据进行过滤

    求部门评价工资:

    select * from (select avg(sal) sal, deptno from emp group by deptno) where sal > 2000;

    select avg(sal) sal, deptno from emp group by deptno having avg(sal) > 2000;

 

12、子查询

    求部门分组后工资最高的员工信息

    select emp.ename, emp.sal, emp.deptno from emp, (select max(sal) max_sal, deptno from emp group by deptno) t where emp.sal = t.max_sal and emp.deptno = t.deptno;

    求部门平均工资等级

    select s.grade, t.deptno, t.avg_sal from scott.salgrade s, (select deptno, avg(sal) avg_sal from emp group by deptno) t where t.avg_sal > s.losal and t.avg_sal < s.hisal;(between)

 

13、自连接

    select a.ename, b.ename mgr_name from emp a, emp b where a.empno = b.mgr;

 

14、 连接查询

    select dname, ename from dept, emp where dept.deptno = emp.deptno;

    select dname, ename from dept join emp on dept.deptno = emp.deptno;

    select dname, ename from dept join emp using(deptno);

    select dname, ename from dept left join emp on dept.deptno = emp.deptno;

    select dname, ename from dept right join emp on dept.deptno = emp.deptno;

    select dname, ename from dept full join emp on dept.deptno = emp.deptno;

    select a.ename, b.ename mgr_name from emp a join emp b on a.mgr = b.empno;

    select a.ename, b.ename mgr_name from emp a left join emp b on a.mgr = b.empno;

 

15、 Rownum

    select rounum, deptno, dname from dept;

    select * from (

         select rownum r, dept.* from dept

    ) t where  t.r > 2;

 

16、树状结构查询

    select level, empno, ename, mgr from emp

    connect by prior mgr = empno;

 

17、排序函数

    --按部门分组,给出分组后的序号

    select row_number() over(partition by deptno order by sal), emp.* from emp;

    

    --rank排序,空出相同部分

    select rank() over(partition by deptno order by sal), emp.* from emp;

    select rank() over(order by deptno), emp.* from emp;

    select rank() over(order by sal), emp.* from emp;

    

    --dense_rank排序给出相同序号,不空留序号

    select rank() over(order by sal), emp.* from emp;

    select dense_rank() over(order by sal), emp.* from emp;

 

18、交集、并集、割集查询

    --并集:不带重复数据

    select * from emp

    union

    select * from emp2;

    

    --并集:带重复数据

    select * from emp

    union all

    select * from emp2;        

    

    --割集,显示不同部分

    select * from emp

    minus

    select * from emp2;

 

19、 查询系统表、视图

    select owner, object_name, object_type, status, dba_objects.* from dba_objects where object_type = 'view' and status = 'invalid';

 

    select * from user_objects where object_type like 'PROCEDURE';

 

20、练习题

    --部门最高薪资员工信息

    select ename, sal, deptno from emp 

    where sal in (select max(sal) from emp group by deptno);

    

    --部门最高薪资员工信息

    select ename, sal, emp.deptno from emp 

    join (select max(sal) max_sal, deptno from emp group by deptno) t 

    on emp.deptno = t.deptno and emp.sal = t.max_sal;

    

    --部门平均薪资等级

    select grade, losal, hisal, t.avg_sal from salgrade 

    join (select avg(sal) avg_sal, deptno from emp group by deptno) t

    on t.avg_sal between losal and hisal;

    

    --经理人

    select ename, job from emp where empno in (select mgr from emp);

    

    --不用分组函数,查询薪水最高值

    select * from (select sal, ename from emp order by sal desc) where rownum = 1;

    select distinct a.sal from emp a join emp b on a.sal > b.sal where rownum = 1;

    select sal from emp where sal not in (select distinct a.sal from emp a join emp b on a.sal < b.sal);

    

    --部门平均薪水最高的部门编号

    select deptno, t.avg_sal from (select avg(sal) avg_sal, deptno from emp group by deptno) t

    where avg_sal = (

        select max(avg_sal) max_sal from (select avg(sal) avg_sal, deptno from emp group by deptno)

    );

    

    select deptno, t.avg_sal from (select avg(sal) avg_sal, deptno from emp group by deptno) t

    where avg_sal = (

        select max(avg(sal)) max_sal from emp group by deptno

    );

    

    --部门平均薪水最高的部门名称

    select dname from dept where deptno = (

     select deptno from (select avg(sal) avg_sal, deptno from emp group by deptno) t

     where avg_sal = (

            select max(avg_sal) max_sal from (select avg(sal) avg_sal, deptno from emp group by deptno)

     )

    );

    

    select dname from dept where deptno = (

        select deptno from (select avg(sal) avg_sal, deptno from emp group by deptno) t

        where avg_sal = (

               select max(avg(sal)) from emp group by deptno

        )

    );

    

    --平均薪水最低的部门的部门名称

    select dname from dept where deptno = (

      select deptno from (select avg(sal) avg_sal, deptno from emp group by deptno) 

      where avg_sal = (

        select min(avg_sal) min_sal from (

               select avg(sal) avg_sal from emp group by deptno

        )

      )

    );

    

    select dname from dept where deptno = (

        select deptno from (select avg(sal) avg_sal, deptno from emp group by deptno) 

        where avg_sal = (    

          select min(avg(sal)) avg_sal from emp group by deptno

        )

    );

    

    --平均薪水等级最低的部门的部门名称

    select dname from dept where deptno = (

    select deptno from (

         select grade, t.deptno from salgrade s join (

            select avg(sal) avg_sal, deptno from emp group by deptno

         ) t

         on t.avg_sal between s.losal and s.hisal

      )

      where grade = (

        select min(grade) from salgrade s join (

            select avg(sal) avg_sal, deptno from emp group by deptno

        ) t

        on t.avg_sal between s.losal and s.hisal

      )

    );

    

    --部门经理人中,平均薪水最低的部门名称

    select t.deptno, dname from (

        select sal, deptno from emp where empno in (select distinct mgr from emp)

    ) t join dept 

    on t.deptno = dept.deptno

    where sal = (

        select min(sal) from emp where empno in (select distinct mgr from emp)

    );

    

    --比普通员工的最高薪水还要高的经理人名称

    select * from (

        select empno, ename, sal from emp where empno in (select distinct mgr from emp where mgr is not null)

    ) t

    where t.sal > (

        select max(sal) max_sal from emp where empno not in (

         select distinct mgr from emp where mgr is not null

        )

    );

Oracle笔记 三、function 、select的更多相关文章

  1. oracle 笔记---&lpar;三&rpar;&lowbar;&lowbar;体系架构

    查看控制文件位置 SQL> show parameter control_files; NAME TYPE VALUE ------------------------------------ ...

  2. Oracle笔记 目录索引

    Oracle笔记 一.oracle的安装.sqlplus的使用 Oracle笔记 二.常用dba命令行 Oracle笔记 三.function .select Oracle笔记 四.增删改.事务 Or ...

  3. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  4. 韩顺平Oracle笔记

    韩顺平Oracle笔记 分类: DataBase2011-09-07 10:24 3009人阅读 评论(0) 收藏 举报 oracle数据库sqljdbcsystemstring   目录(?)[-] ...

  5. oracle笔记

    一.sql*plus常用命令 (1)connect 用法:conn 用户名/密码@网络服务名[as sysdba/sysoper] 当特权用户连接时,必须带上as sysdba或是as sysoper ...

  6. Oracle笔记(1) 简单查询、限定查询、数据的排序

    Oracle笔记(四) 简单查询.限定查询.数据的排序   一.简单查询 SQL(Structured Query Language) 结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及 ...

  7. muduo网络库学习笔记&lpar;三&rpar;TimerQueue定时器队列

    目录 muduo网络库学习笔记(三)TimerQueue定时器队列 Linux中的时间函数 timerfd简单使用介绍 timerfd示例 muduo中对timerfd的封装 TimerQueue的结 ...

  8. Oracle笔记 多表查询

    Oracle笔记  多表查询   本次预计讲解的知识点 1. 多表查询的操作.限制.笛卡尔积的问题: 2. 统计函数及分组统计的操作: 3. 子查询的操作,并且结合限定查询.数据排序.多表查询.统计查 ...

  9. 转:oracle笔记

    oracle笔记1 卸载oracle developer server的方法: 1-1 oracle卸载工具中卸载对应的oracleds项目:在注册表中搜索ORACLEDS HOME对应的别名,删除对 ...

随机推荐

  1. (二)js下拉菜单

    默认的select标签比较难看,UI比较漂亮,如果想要实现UI上的下拉样式,好像必须用js写select,从网上拷贝而且修改了一个下拉框,为了方便以后引用所以记录下来. /* diy_select * ...

  2. supersr--KVO&sol;KVC

    KVO内部实现原理 1.KVO是基于runtime机制实现的. 2.当某个类的对象第一次被观察是,系统就会在运行期动态地创建该类的一个派生类,在这个派生类中重写基类中任何被观察属性的set方法.派生类 ...

  3. CF 7C&period; Line&lpar;扩展欧几里德&rpar;

    题目链接 AC了.经典问题,a*x+b*y+c = 0整数点,有些忘记了扩展欧几里德,复习一下. #include <cstdio> #include <iostream> # ...

  4. jQuery鼠标悬停图片放大显示

    jQuery鼠标悬浮放于图片上之后图片放大显示的效果,即鼠标移到图片上图片突出显示,鼠标移开后恢复原来的模样,你可以在图片滚动效果中加上本特效,相信会更炫一些. <!DOCTYPE html P ...

  5. SSIS CDC(Change Data Capture)组件在数据库中启用报错。 The error returned was 14234&colon; &&num;39&semi;The specified &&num;39&semi;&commat;server&&num;39&semi; is invalid

    昨天实验CDC,在数据库中执行以下语句的时候出错. EXEC sys.sp_cdc_enable_table @source_schema = N'stg', @source_name = N'CDC ...

  6. ApiDoc官方文档

    链接地址:https://blog.csdn.net/whatday/article/details/84590795

  7. pycharm汉化补丁

    将压缩包内容复制到 x:\xxx\JetBrains\PyCharm Community Edition 2019.1\lib 目录下 链接:https://pan.baidu.com/s/1TLEP ...

  8. 容器平台选型的十大模式:Docker、DC&sol;OS、K8S 谁与当先?【转】

    网易企业服务2017-10-13 无论是在社区,还是在同客户交流的过程中,总会被问到到底什么时候该用 Docker?什么时候用虚拟机?如果使用容器,应该使用哪个容器平台? 显而易见,我不会直接给大家一 ...

  9. Git的使用(一)

    最近在解除git的使用,开始觉得git某些地方还是挺方便的. 1.svn的话管理起来是比较方便,可是断网的话,会用不了 2.git的话,管理一些开源的东西比较方便,并且比较好管理日常写的demo程序, ...

  10. 第二个spring冲刺第9天

    其中一个队员在检查程序的BUG途中发现了几个重要的BUG比如答案乱码.程序闪退,弹出黑幕.于是我们决定先把这些问题解决再继续开发其他功能