zoukankan      html  css  js  c++  java
  • Oracle 学习笔记(二)

    Oracle 学习笔记

    Day_2

    image-20201225155308858

    • 多表查询

    • image-20201226144913604

    已有表

    image-20201225160349747

    已有的表格:

    select * from bonus;
    
    /*
    多表查询:
    笛卡尔积:实际上是两张表的乘积
    */
     
    select * from emp,dept;
    
    select * from emp e1,dept e2 where e1.deptno == d1.deptno;
    
    --查询员工编号,员工姓名,经理的编号,经理的姓名
     select * from em 
     
    --查询员工编号,员工姓名,员工的部门名称,经理的编号,经理的姓名
    select e1.empno,e1.ename, d1.dname , e1.mgr , m1.ename 
     from emp e1,emp m1,dept d1 where e1.mgr= m1.empno and e1.deptno = d1. deptno;
    
    
     /*
     内联接:
    险式内联接:
    等值内联接:where e1.deptno = d?. deptno ;不等值内联接:where ei.deptno <>di.deptno;自联接:自己连接自己
    内联接:
    select *from表iinner join 表2 in 连接条件I
    
    
    外连接:
    左外连接 ;left outer join 左表的所有记录,如果所有记录没有表记录, 就显示为空。
    
    右外连接“: right outer join 
    
    outer 关键字可以忽略
    
    Oracle的外连接(+): 如果没有对应的记录,就显示空值
    
    select * from emp e1,dept d1 where e1.deptno = d1.deptno(+)
    
    */
     
     --查询员工姓名 和员工 部门所属的位置
     select el.ename,d1.loc from emp e1 ,dept d1 where e1.deptno == d1.deptno ;
      
    

    image-20201226143848316

    --
    
    • 子查询

      --查询员工中的最高工资
      
      select max(sal) from emp ; --最高工资
      
      select * from emp where sal = (select max(sal) from emp )
      
      /*子查询语: 嵌套查询
      分类别:
      单行子查询:  是使用关系 查询语句 < > + =  等
      多行子查询: */
      
      --查询出比给雇员7654 的工资高,同时和7788 从事 相同工作的员工信息。
      
      /*分析:
      1.查询7654 的工资
      
      2.7788 从事的工作 
      
      3.符合条件的员工信息*/
      
      select sal from emp where empno = 7654;
      
      select job from emp where empno = 7788;
      
      select * from emp where  sal > (select sal from emp where empno = 7654) and job = (select job from emp where empno = 7788);
      

      sal:

      image-20201226150414163

      符合条件”

    image-20201226150833026

    --查询领导信息
    --1.查询所有经理的编号
    select mgr from emp;
    select dissinct mgr from emp;
    --2.结果
    select * from emp where empno in (select mgr from emp);
    
    --查询不是领导的信息
    
    select * from emp where empno not in (select mgr from emp) --写法错误,对NULL 值的理解错误
    
    
    select * from emp where empno <>all (select mgr from emp)--方法一:<> all 非所有的 sql 里的非
    
    select * from emp where empno not in (select mgr from emp where mgr is not NULL) --非 领导且不为空值中查找 
    
    /*
    内联接,单行子查询,多行子查询
    in
    not in
    any
    all
    exists
    通常情况下,数据库中不要出现null not null
    
    */
    
    /*
    --查词每个部门最低工资的员工信怎和他所在的部门信息
    --1.知谐每个部门7的最低工资
    --2.员工工资等宁脑所郊部i门了的最低工资
    --查询部门的相关信息  
    */
    
    select deptno ,min(sal) minsal  from emp group by deptno'
    
    select * from emp e1,dept d1 where e.deptno = d1.pno
    
    
    /*
    exists(存在):存在的意,思
        当作布尔值来处理:
        当查询语句有结果的时候,就是返回true
        否则返回的是false
        数据最比较大的时候是非常高效的
     */
    
    
    select * from emp order by sal desc
    /*
    按照列名是一个排序顺序,可以是:
    ASC表示按升序排序
    DESC表示按降序排序
    */
    select rownum,e1.* from emp e1 order by sal desc 
    
    /*
    rownum : 伪列,系统自动生成的一列,用:来表示行号
    rownum是oracle中特有的用来表示行号的,默认值/起始值是1,在查询出结果之后,再添加1
    */
    
    
    --统计每年入职的员工个数
    
    select hiredate from emp;
    
    select to_char (hiredate,'yyyy') from emp ;
    
    select to_char (hiredate,'yyyy') yy,count(1) cc from emp group by to_char(hiredate,'yyyy');
      
    

    image-20201226190216036

    /*
    rowid :伪列每行记录所存放的真实物理地址
    rownum : 行号,每查询出记录之后,就会添加一个行号
    */
    select * rowid ,e.* from emp e;
    
    create table p(
    name varchar2(10)
    )
    insert into p value('黄伟福');
    insert into p value('黄三');
    insert into p value('代五');
    
    select rowid,* from p;
    
    delete from p p1 where rowid > (select min(rowid) from p p2 where p1.name = p2.name );
    
    
    

    image-20201226191434471

    • Oracle 分页查询

    (1)>= y,<= x表示从第y行(起始行)~x行(结束行) 。
    (2)rownum只能比较小于,不能比较大于,因为rownum是先查询后排序的,例如你的条件为rownum>1,当查询到第一条数据,rownum为1,则不符合条件。第2、3…类似,一直不符合条件,所以一直没有返回结果。所以查询的时候需要设置别名,然后查询完成之后再通过调用别名进行大于的判断。

    --查询第6-10 的记录
    
    select rownum,emp.* from emp;
    select rownum hanghao,emp.* from emp;
    select * from (select rownum hanghao ,emp.* from emp) where tt.hanghao between 6 and 10;
    /*
    (select rownum hanghao ,emp.* from emp) 行号,emp的成员元素
     删选条件: 行号 在 6 到 10 之间
    */
    

    image-20201226192224705

    • 集合运算
    /*
    集合运算:
    并集:将两个查询结果进行合并交集 
    union / union all
    差集: 
    */
    

    效果图

    image-20201226192851216

    image-20201226193118526

    /*
    集合运算中的注意事项:
    1.列的类型要一致
    2.按照顺序写
    3.列的数量要一致,如果不足,用空值填充,如果没有,应该用null 填充 。
    */
    
  • 相关阅读:
    初识python 2.x与3.x 区别
    装饰器
    函数的进阶
    Spring Boot启动问题:Cannot determine embedded database driver class for database type NONE
    22.Spring Cloud Config安全保护
    23.Spring Cloud Bus 无法更新问题(踩坑) Spring cloud config server Could not fetch remote for master remote
    24.Spring Cloud之Spring Cloud Config及Spring Cloud Bus
    Spring Boot整合Spring Data Elasticsearch 踩坑
    项目中Spring Security 整合Spring Session实现记住我功能
    32.再谈SpringBoot文件上传
  • 原文地址:https://www.cnblogs.com/HelloBytes/p/14193989.html
Copyright © 2011-2022 走看看