zoukankan      html  css  js  c++  java
  • oracle 常用语句3

    - oracle 函数
    
    select sign(-3),sign(3), sign(0) from dual;
    
    select ceil(3.7) from dual;
    select floor(3.7) from dual;
           -- 四舍五入
    select round(123.456, 2) from dual;
    select round(183.456, -2) from dual;
    select round(183.556) from dual;
    
    
    select trunc(123.456, 2) from dual;
    select trunc(183.456, -2) from dual;
    select trunc(183.556) from dual;
    
    
    -- length() 返回字符串长度
    
    select ename, length(ename) from emp e;
    
    -- 查询长度是6个字符的员工名字
    select ename from emp e where length(ename) = 6;
    
    select ename from emp e where ename like '______';
    
    -- 查询长度是6个字符并且以M开头的员工名字
    select ename from emp e where length(ename) = 6 and ename like 'M%';
    
    select ename from emp e where ename like 'M_____';
    
    select lower('abCdE') from dual;
    select upper('abCdE') from dual;
    
    select * from emp where lower(ename) = 'scott';
    
           -- sysdate 当前日期时间
    select sysdate from dual;
    
    select sysdate, last_day(sysdate) from dual;
    
           -- to_date()
    select to_date('20170711', 'YYYYMMDD') from dual;
    select to_date('20170711 18:20:45', 'YYYYMMDD hh24:mi:ss') from dual;
    
           -- to_char()
    select to_char(sysdate, 'mm') from dual;
    
    select * from emp e;
    
    -- 查询12月份入职的员工信息
    select * from emp where to_char(hiredate, 'mm') = '12';
    
    -- 分组函数
    -- max()      最大值
    -- min()      最小值
    -- avg()      平均值
    -- sum()      求和
    -- count()    数目
    
    
    -- 分组函数有两种用法
    --1. 单独使用
    -- 查询10号部门最高工资
    select max(e.sal) from emp e where e.deptno = 10;
    
    -- 查询10号部门最高工资、最低工资
    select max(e.sal), min(e.sal) from emp e where e.deptno = 10;
    
    
    select sum(e.sal),count(e.sal) from emp e;
    
    -- 查询工资高于30号部门所有人的员工信息
    select * from emp where sal > (select max(sal) from emp where deptno = 30);
    
    
    -- 查询20号部门的员工数目
    select count(empno) from emp where deptno=20;
    
    select count(*) from emp where deptno=20;
    
    
    -- 查询所有销售(SALESMAN)的最低工资
    select min(e.sal) from emp e where e.job = 'SALESMAN';
    
    -- 查询30号部门工资最高员工名字
    
    select ename
      from emp
     where deptno = 30
       and sal = (select max(sal) from emp where deptno = 30);
    
    --2. 配合group by一起使用
    
    -- 分组: group by 列
    
    -- 查询每个部门的最高工资,显示部门编号和最高工资
    select deptno, max(sal) from emp group by deptno;
    
    -- (分组之后)筛选组: having ...
    -- 查询最高工资超过2900的部门,显示部门编号和最高工资
    select deptno, max(sal) from emp group by deptno having max(sal) > 2900;
    
    
    -- 查询最高工资超过2900的部门,显示部门编号和最高工资
    --  按照最高工资降序排序
    select deptno, max(sal)
      from emp
     group by deptno
    having max(sal) > 2900
     order by max(sal) desc;
     
     
    -- 查询语句骨架
    
    select xxx from xxx 
    [where ...] 
    [group by ...] 
    [having ...] 
    [order by ... [asc|desc]]
    
    
    --表连接查询
    
    create table stu(
    sno    number(3),
    sname  varchar2(20),
    sclass varchar2(10)
    );
    
    
    create table cls(
    cid    varchar2(10),
    ctype  varchar2(20)
    );
    
    insert into stu values(1, 'tom', 'c01');
    insert into stu values(2, 'mary', 'c02');
    insert into stu values(3, 'jack', 'c05');
    commit;
    
    
    insert into cls values('c01', '测试');
    insert into cls values('c02', '测试');
    insert into cls values('c03', '开发');
    commit;
    
    
    select * from stu;
    select * from cls;
    
    -- 查询结果是两张表的笛卡尔积
    select * from stu, cls;
    
    
    -- 内连接
    select * from stu s inner join cls c on s.sclass = c.cid;
    select * from stu s join cls c on s.sclass = c.cid;
    
    select * from stu s, cls c where s.sclass = c.cid;
    
    
    -- 左连接
    select * from stu s left join cls c on s.sclass = c.cid;
    select * from stu s, cls c where s.sclass = c.cid(+);
    
    -- 右连接
    select * from stu s right join cls c on s.sclass = c.cid;
    select * from stu s, cls c where s.sclass(+) = c.cid;
    
    
    -- 全连接
    select * from stu s full join cls c on s.sclass = c.cid;
    
    select * from emp e;
    select * from dept d;
    
    -- 查询所有员工的名字和所属部门名字
    select e.ename, d.dname from emp e, dept d where e.deptno=d.deptno;
    
    
    select e.ename, (select d.dname from dept d where d.deptno = e.deptno) dname
      from emp e;
    
    -- 查询ALLEN的所属部门名字
    select d.dname
      from emp e, dept d
     where e.deptno = d.deptno
       and e.ename = 'ALLEN';
    
    
    -- 查询销售部(SALES)所有员工名字
    select e.ename
      from emp e, dept d
     where e.deptno = d.deptno
       and d.dname = 'SALES';
    
    
    select ename
      from emp
     where deptno = (select deptno from dept where dname = 'SALES');
    
    
    -- 查询工资超过2000的员工姓名和上班地点
    select e.ename, d.loc
      from emp e, dept d
     where e.deptno = d.deptno
       and e.sal > 2000;
    
    -- 查询所有员工姓名和其主管姓名,没有主管的主管姓名为空
    select a.ename,b.ename from emp a, emp b where a.mgr = b.empno(+);
    
    -- 查询ALLEN的主管姓名
    select b.ename
      from emp a, emp b
     where a.mgr = b.empno
       and a.ename = 'ALLEN';
    
    -- 查询入职时间早于其主管的员工姓名
    select a.ename
      from emp a, emp b
     where a.mgr = b.empno
       and a.hiredate < b.hiredate;
    
    
    -- 查询每个部门的最高工资,显示部门编号和最高工资
    select e.deptno,max(e.sal) from emp e group by e.deptno;
    
    -- 查询每个部门的最高工资,显示部门名字和最高工资
    select d.dname, max(e.sal)
      from emp e, dept d
     where e.deptno = d.deptno
     group by d.dname;
    
    -- 查询最高工资超过2900的部门,显示部门名字和最高工资
    select d.dname, max(e.sal)
      from emp e, dept d
     where e.deptno = d.deptno
     group by d.dname
    having max(e.sal) > 2900;
    
    -- 查询最高工资超过2900的部门,显示部门名字和最高工资,按照最高工资升序排序
    select d.dname, max(e.sal)
      from emp e, dept d
     where e.deptno = d.deptno
     group by d.dname
    having max(e.sal) > 2900
     order by max(e.sal) asc;
     
    -- 查询员工数目超过2个的职位,显示职位和员工数目,按照员工数目降序排序
    select e.job, count(*)
      from emp e
     group by e.job
    having count(*) > 2
     order by count(*) desc;
     
    -- 查询工资高于平均工资的员工信息
    select * from emp where sal > (select avg(sal) from emp);
    
    -- 查询工资高于本部门平均工资的员工信息
    -- 方法1
    select *
      from emp e
     where e.sal > (select avg(a.sal) from emp a where a.deptno = e.deptno);
    
    -- 方法2
    
    select e.*
      from emp e, (select deptno, avg(sal) av from emp group by deptno) a
     where e.deptno = a.deptno
       and e.sal > a.av;
    
    
    -- 查询每个部门的编号、名字和员工数目
    
    select d.deptno, d.dname, a.c
      from dept d, (select e.deptno, count(*) c from emp e group by e.deptno) a
     where d.deptno = a.deptno(+);
    
    
    select d.deptno, d.dname, nvl(a.c, 0)
      from dept d, (select e.deptno, count(*) c from emp e group by e.deptno) a
     where d.deptno = a.deptno(+);
     
    -- nvl() 为空值赋值函数
    select ename,sal,nvl(comm, 0) from emp;
    
    -- 查询每个部门工资最高的员工姓名
    
    select e.ename
      from emp e, (select deptno, max(sal) m from emp group by deptno) a
     where e.deptno = a.deptno
       and e.sal = a.m;
  • 相关阅读:
    Oracle查询中将结果列按分组用逗号隔开,拼接成一行(listagg函数)
    Oracle SQL获取每个分组中日期最大的一条数据
    oracle字段根据字符串拆分,用subStr()和inStr()进行拆分
    javascript求最大公约数
    javascript单链表
    防input required属性的提示框
    css3绘制三色字
    js和php时间戳的问题
    ajax使用的一些错误
    浏览器js文件未及时更新问题
  • 原文地址:https://www.cnblogs.com/guog1/p/8508308.html
Copyright © 2011-2022 走看看