1 索引(二):索引是用来提高查询的效率。
  索引的优点和缺点:
  优点:索引可以提高查询的速度。
  缺点:创建索引会占用磁盘物理空间,而且添加索引,会减慢修改(insert,update,delete)数据速度。

2 Oracle中专门用来执行外链接操作的SQL语句(仅限于Oracle中使用)
  1)内连接:只查询表中有关联关系的数据。
    案例:查询emp表中员工的编号,姓名,职位,上级领导的编号,姓名,职位,最后根据员工的编号进行降序排列
      select e.empno,e.ename,e.job,e.mgr,m.ename,m.job
      from emp e,emp m --e,员工表;m,领导表
      where e.mgr = m.empno
      order by e.empno desc
  2)外连接:在查询的时候可以以某一张表为主,查询该表中所有的数据,以及与之关联另外一张或者多张表中数据(常见)
    insert into emp(empno,ename) values(1111,'刘备')
    insert into emp(empno,ename) values(5555,'关羽')
    insert into emp(empno,ename) values(6666,'张飞')
    insert into dept values(50,'研发部门','北京')
    insert into dept values(60,'人事部门','上海')

    select e.empno,e.ename,e.hiredate,d.deptno,d.dname
    from emp e,dept d
    where e.deptno = d.deptno

  3) 在关联条件的位置(在要查询所有数据的条件的表的对面)使用(+)
    案例:查询emp表中所有员工的编号,姓名,职位,工资以及所属部门的编号,名称
      select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
      from emp e,dept d
      where e.deptno = d.deptno(+)
    案例:查询dept表中所有部门的所有信息以及该部门下员工的编号,姓名,职位,工资,入职时间,最后根据员工的入职时间进行降序排列。
      select d.*,e.empno,e.ename,e.job,e.sal,e.hiredate
      from dept d,emp e
      where d.deptno = e.deptno(+)
      order by hiredate desc
    案例:查询emp表中名字中不包含'S'的所有员工的编号,姓名,职位,工资以及该部门的名字和地址,最后根据员工的编号进行升序排列
      select e.empno,e.ename,e.job,e.sal,d.dname,d.loc
      from emp e,dept d
      where e.deptno = d.deptno(+) and e.ename not like '%S%'
      order by e.empno

    案例:查询emp表中所有员工的编号,姓名,工资,职位以及该工资的等级,该等级的最低工资,最后根据员工的编号进行升序排列。
      select e.empno,e.ename,e.sal,e.job,s.grade,s.losal
      from emp e,salgrade s
      where e.sal between s.losal(+) and s.hisal(+)
      order by e.empno asc
      select e.empno,e.ename,e.sal,e.job,s.grade,s.losal
      from emp e,salgrade s
      where e.sal >= s.losal(+) and e.sal <=s.hisal(+)
      order by e.empno asc
    案例:查询emp表中职业不是MANAGER和SALESMAN的所有员工的编号,姓名,职位,工资以及工资等级
      select e.empno,e.ename,e.job,e.sal,s.grade
      from emp e,salgrade s
      where e.sal between s.losal(+) and s.hisal(+) and e.job not in('MANAGER','SALESMAN')
    案例:查询emp表中所有员工的编号,姓名,职位,工资以及对应上级经理的编号,姓名,职位,工资,最后员工的编号进行降序排列。
      select e.empno,e.ename,e.job,e.sal,m.empno,m.ename,m.job,m.sal
      from emp e,emp m -- e,员工表;m,领导表
      where e.mgr = m.empno(+)
      order by e.empno desc

  4) 不能在关联条件的两端都加上(+),仅仅只能在一端加上(+)
    --反例
      select e.*,d.*
      from emp e,dept d
      where e.deptno(+) = d.deptno(+)
  5) 使用(+)实现外链接,只能在Oracle中使用。

3 序列:Oracle中的一个数据库对象,可以通过序列自动的生成自增的数值,经常使用序列生成的数值作为主键所修饰的列的列值。
  1)创建序列:
    create sequence 序列名
    create sequence id_seq1
  2)nextval:第1次使用nextval生成数值默认的初始值,从第2次开始每次自增。
    select id_seq1.nextval from dual
    案例:创建一张表worker15,id number(4)主键,name varchar2(50)。创建一个序列id_seq2。往worker15表中插入任意的3条数据,使用id_seq2.nextval生成数值作为主键所在的列的列值。
      insert into worker15 values(id_seq2.nextval,'张三')
        create table worker15(
        id number(4) primary key,
        name varchar2(50)
      )
      create sequence id_seq2
      insert into worker15 values(id_seq2.nextval,'李世民')
      insert into worker15 values(id_seq2.nextval,'李靖')
      insert into worker15 values(id_seq2.nextval,'苏定方')

  3)currval:返回序列当前的值
    select id_seq2.nextval from dual
    select id_seq2.currval from dual

  4)序列的几个属性
    a)序列的初始值:第1次使用nextval生成数值

      start with 初始值,如果不设置初始值,默认的初始值是1。
    b)增长的步长:每次使用nextval的增量
      increment by 增量
    c)序列的最小值:
      minvalue 最小值
    d)序列的最大值:
      maxvalue 最大值

      create sequence id_seq3
      start with 1000
      increment by 100
      minvalue 1
      maxvalue 100000000000

      select id_seq3.nextval from dual

4 事务:对数据库一系列连续的操作都封装在一起(一个事务内),要么一起成功,要么一起失败。
  1)commit和rollback
    create table worker16(
      id number(4) primary key,
      name varchar2(20),
      age number(3)
    );
    insert into worker16 values(1,'张无忌',23);
    insert into worker16 values(2,'任我行',32);
    insert into worker16 values(3,'杨过',19);

    commit:提交,确认表中的数据真实发生改变,在Oracle中只有提交事务以后,表中的数据才可以真实被修改(数据在底层真正被修改)
    rollback:回退(回滚),撤销未提交(没有commit)的操作

    insert into worker16 values(4,'郭靖',31);
    insert into worker16 values(5,'黄蓉',35);
    insert into worker16 values(6,'周芷若',21);

  2) 为什么需要使用事务(把一系列连续对数据库的操作封装在一起)?
    银行表
    编号 姓名 余额
    1 大哥 99999999999999999999999.99
    2 范冰冰 100.1
    1号转给2号100
    第1步:从1号账户减去100
      update 银行表 set 余额 = 余额 - 100
      where 编号 = 1

    停电了

    第2步:给2号账户加上100
      update 银行表 set 余额 = 余额 + 100
      where 编号 = 2
      commit
  总结:把加钱和减钱的操作封装在一个事务内,要么一起成功,要么一起失败。

5 标准SQL外连接(可以在任何一款数据库中使用)
  1)左外连接查询:以左边的表为主,查询左表中所有的数据以及与之关联的右表中的数据
    格式:
      select 别名1.*/列名,别名2.*/列名
      from 左表 别名1 left (outer) join 右表 别名2
      on 关联条件
    案例:查询emp表中所有员工的编号,姓名,职位,工资以及所属部门的编号,名称
      select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
      from emp e left outer join dept d
      on e.deptno = d.deptno
    案例:查询dept表中所有部门的编号,名称以及该部门下员工的编号,姓名,职位,入职时间,最后根据入职时间进行降序排列
      select d.deptno,d.dname,e.empno,e.ename,e.job,e.hiredate
      from dept d left join emp e on d.deptno = e.deptno
      order by e.hiredate desc
    案例:查询emp表中所有员工的编号,姓名,职位,工资以及工资的等级,最后根据工资的等级进行升序排列。
      select e.empno,e.ename,e.job,e.sal,s.grade
      from emp e left join salgrade s on e.sal between s.losal and s.hisal
      order by s.grade
    案例:查询emp表中所有员工的编号,姓名,工资以及上级领导的编号,姓名,工资,最后根据员工的编号进行降序排列
      select e.empno,e.ename,e.sal,m.empno,m.ename,m.sal
      from emp e left join emp m on e.mgr = m.empno
      order by e.empno desc
    案例:查询emp表中名字中没有字母'K'的所有员工的编号,姓名,职位以及所在部门的编号,名称
      select e.empno,e.ename,e.job,d.deptno,d.dname
      from emp e left join dept d on e.deptno = d.deptno
      where e.ename not like '%K%'
  2) 右外连接查询:以右表为主,查询右表中所有的数据以及与之关联的左表中的数据
    格式:
      select 别名1.*/列名,别名2.*/列名
      from 左表 别名1 right (outer) join 右表 别名2 on 关联条件
    案例:查询dept表中所有部门的所有信息,以及与之关联的emp表中员工的编号,姓名,职位,工资
      select d.*,e.empno,e.ename,e.job,e.sal
      from emp e right join dept d on e.deptno = d.deptno
    案例:查询emp表中所有员工的编号,姓名,职位,工资以及该工资的等级和该等级的最高工资,最后根据员工的编号进行降序排列
      select e.empno,e.ename,e.job,e.sal,s.grade,s.hisal
      from salgrade s right join emp e on e.sal between s.losal and s.hisal
      order by e.empno desc
    案例:查询emp表中名字中不包含字母‘T’的所有员工的编号,姓名,工资,入职时间以及上级领导的编号,姓名,最后根据员工的编号进行升序排列
      select e.empno,e.ename,e.sal,e.hiredate,m.empno,m.ename
      from emp m right join emp e on m.empno = e.mgr
      where e.ename not like '%T%'
      order by e.empno asc
    案例:查询emp表中不是12月入职的所有员工的编号,姓名,职位,入职时间,工资,以及工资等级,最后根据入职时间进行降序排列,to_char(hiredate,'mm') = '12'

      select e.empno,e.ename,e.job,e.hiredate,e.sal,s.grade
      from salgrade s right join emp e on e.sal between s.losal and s.hisal
      where to_char(e.hiredate,'mm') != '12'
      order by e.hiredate desc
    案例:查询emp表中不在10号部门的所有员工的编号,姓名,职位,入职时间以及所在部门的所有信息
      select e.empno,e.ename,e.job,e.hiredate,d.*
      from dept d right join emp e
      on d.deptno = e.deptno
      where e.deptno <> 10

数据库——Oracle(7)的更多相关文章

  1. Oracle实例和Oracle数据库(Oracle体系结构)

    --========================================== --Oracle实例和Oracle数据库(Oracle体系结构) --==================== ...

  2. 【转载】Oracle实例和Oracle数据库(Oracle体系结构)

    免责声明:     本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除.     原文作者:Leshami      原文地址:http://blog.csdn.net/ ...

  3. Oracle 数据库(oracle Database)Select 多表关联查询方式

    Oracle数据库中Select语句语法及介绍 SELECT [ ALL | DISTINCT ] <字段表达式1[,<字段表达式2[,…] FROM <表名1>,<表名 ...

  4. spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置

    spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置 jdbc.properties 文件信息如下: ---------- ...

  5. 各种数据库(oracle、mysql、sqlserver等)在Spring中数据源的配置和JDBC驱动包----转

    在开发基于数据库的应用系统时,需要在项目中进行数据源的配置来为数据 库的操作取得数据库连接.配置不同数据库的数据源的方法大体上都是相同的,不同的只是不同数据库的JDBC驱动类和连接URL以及相应的数据 ...

  6. JDBC(用Eclipse操作数据库Oracle)的基础操作集合

    JDBC: JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编 ...

  7. [数据库]Oracle和mysql中的分页总结

    Mysql中的分页 物理分页 •在sql查询时,从数据库只检索分页需要的数据 •通常不同的数据库有着不同的物理分页语句 •mysql物理分页,采用limit关键字 •例如:检索11-20条 selec ...

  8. Ubuntu16.04下安装数据库oracle客户端

    在Ubuntu16.04下安装oracle数据库客户端,使Django项目连接到远程Oracle数据库. 1.下载oracle客户端安装包: 进入官网http://www.oracle.com/tec ...

  9. 不同数据库oracle mysql SQL Server DB2 infomix sybase分页查询语句

    在不同数据库中的使用的分页查询语句: 当前页:currentpage 页大小:pagesize 1. Oracle数据库 select * from (select A.*,rownum rn fro ...

  10. SpringAccess数据库(oracle)构造

    陈科朝:http://blog.csdn.net/u013474104/article/details/44279309 ================ 1.spring 对数据库訪问的支持 当我们 ...

随机推荐

  1. vue中如何使用event对象

    原文地址 一.event 对象 (一)事件的 event 对象 你说你是搞前端的,那么你肯定就知道事件,知道事件,你就肯定知道 event 对象吧?各种的库.框架多少都有针对 event 对象的处理. ...

  2. Windows 10 删除资源管理器中7个文件夹

    Windows 10 安装完成之后 ,在资源管理器中会存在 7 个文件夹,他们分别是:图片.视频.下载.音乐.桌面.文档.3D对象. 我们可以通过修改注册表的方式,隐藏这7个文件夹.相关注册表内容如下 ...

  3. PHP学习(5)——字符串操作与POSIX正则

    一.字符串操作 1.字符串的格式化 1.1 干掉空格 trim()函数可以除去字符串开始位置和结束位置的空格,并将结果字符串返回. ltrim()函数可以除去字符串开始位置的空格. rtrim()函数 ...

  4. nRF5 SDK Bootloader and DFU moudles(3)

    DFU控制点特性用于控制DFU过程的状态. 通过写入该特征来请求所有DFU程序. 标记过程结束的响应将作为通知收到. BLE传输 Transfer of an init packet DFU控制器首先 ...

  5. Java-Redis 热部署问题

    项目请求时报错: java.lang.ClassCastException: cn.xingaohbd.seckil.model.User cannot be cast to cn.xingaohbd ...

  6. Oracle数据库弱口令解密

    1.首先我们先看下Oracle加密的格式. 接下来我们把他头和尾部删除,中间加: 通过py脚本来进行完成 转换完成后输出成这种格式 之后直接丢进kali里面,用john --w=字典文件 + 转换文件 ...

  7. setsockopt用法详解

    最近做的一个程序用到了IOCP通信模型,里面用到了setsockopt对套接字进行设置,看源代码的时候最setsockopt函数很不理解,看了msdn以后还是不太明白这个函数的用法,于是就到网上找了一 ...

  8. vue中关于checkbox数据绑定v-model指令说明

    vue.js为开发者提供了很多便利的指令,其中v-model用于表单的数据绑定很常见, 下面是最常见的例子: <div id='myApp'> <input type="c ...

  9. SOSdp

    layout: post title: SOSdp author: "luowentaoaa" catalog: true tags: mathjax: true - codefo ...

  10. linux终端命令(四)系统信息相关命令(五)其他命令

    四.系统信息相关命令 时间和日期 date cal 磁盘和目录空间 df du 进程信息 ps top kill 1.时间和日期 序号 命令 作用 01 cal 查看日历,-y选项可以查看一年的日历 ...