• Oracle数据库学习笔记5


    select 字段名
    from 表明
    where 条件
    group by 分组字段
    having 筛选的条件
    order by 排序
    --伪表 dual
    --伪列 rownum,对面原表中的数据
    select rownum,empno,ename,sal from emp
    order by sal desc;
    --分析函数
    --row_number()over():为有序组中的每一行返回一个
    --唯一的排序值,序号由order by 子句指定,从1开始
    select ename,job,deptno,sal,
    row_number() over(order by sal asc)
    from emp;
    --根据每个部门返回排序值
    select ename,job,deptno,sal,
    row_number() over(partition by deptno
                      order by sal)
    from emp;
    --dense_rank:计算一个值在一组有序中的排序值,
    --排名是从1开始,具有相同值的排名相同,并且
    --后面的排序是连续的
    select ename,job,deptno,sal,
    dense_rank() over(partition by deptno order by
    sal asc)
    from emp;
    --rwoid 对应字段的物理地址
    select rowid,ename,deptno
    from emp;
    --子查询(单列)
    select * from emp;
    --查询谁的工资比ALLEN的工资高
    select * from emp where sal >
    (select sal from emp where ename = 'ALLEN');
    --销售部有哪些职位
    select * from dept;
    --distinct 去重
    --单值运算符连接,子查询只能有一个结果
    select distinct job from emp where deptno=
    (select deptno from dept where dname='SALES');
    --查询那些员工的薪水比ALLEN高
    --有问题的
    select * from emp_temp where sal >
    (select sal from emp_temp where ename = 'ALLEN');
    --改进
    select * from emp_temp where sal >
    (select max(sal) from emp_temp where ename = 'ALLEN');
    -- >all
    select * from emp_temp where sal >all
    (select sal fron emp_temp where ename='ALLEN');
    select * from emp_temp;
    insert into emp_temp(empno,ename,sal)
    values(8888,'ALLEN',3200);
    select * from emp_temp where ename='ALLEN';
    --查询那些人的薪水比人一个ALLEN的薪水高
    -->any(大于最小值)
    select * from emp_temp where sal >any
    (select sal from emp_temp where ename = 'ALLEN');
    --in
    --谁和ALLEN同部门,列出除了ALEEN以外的员工名子
    select * from emp_temp;
    update emp_temp set deptno = 20 where empno = 8888;
    select ename,sal from emp_temp where deptno in
    (select deptno from emp_temp where ename = 'ALLEN')
    and ename <> 'ALLEN'
    --子查询(多列)
    --查询每个部门薪水最高人的名子和薪水和部门号
    select ename,sal,deptno from emp
    where(deptno,sal) in
    (select deptno,max(sal) from emp
    group by deptno);
    --查询哪些部门的人数比20部门的少?
    select deptno,count(*) from emp
    group by deptno
    having count(*) <
    (select count(*) from emp
    where deptno = 20);
    --那些员工的薪水比本部门的平均薪水
    select ename,sal,deptno
    from emp a
    where sal <
    (select avg(nvl(sal,0)) from emp
    where deptno=a.deptno);
    --exists: 存在子查询,关联子查询
    --那些人是其他人的经理
    select * from emp;
    select ename from emp a
    where exists
    (select 1 from emp where mgr = a.empno);
    --1是不管结果,看存不存在
    --那些部门没有员工
    select * from dept;
    select deptno,dname from dept d
    where not exists
    --两个表相连的部门
    (select 1 from emp where deptno = d.deptno);
  • 相关阅读:
    制作一个简单的轮播图
    JS 与 jQery 的区别主要在于 DOM
    JS学习第九天
    JS学习第八天
    JS学习第七天
    JS学习第六天
    Luogu1175 | 表达式的转换 (表达式树)
    adworld int_overflow | 整形溢出
    蓝桥杯第十一届软件类校内模拟赛题解(下)
    蓝桥杯第十一届软件类校内模拟赛题解(上)
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7172334.html
Copyright © 2020-2023  润新知