1 标准SQL外连接(二)
  1) 全外连接:查询所有表所有的数据
    格式:
      select 别名1.*/列名,别名2.*/列名
      from 表1 别名1 full outer join 表2 别名2
      on 关联条件
    案例:查询emp表中所有员工的编号,姓名,职位以及dept表所有部门的所有信息
      select e.empno,e.ename,e.job,d.*
      from emp e full outer join dept d
      on e.deptno = d.deptno
    案例:查询emp表中所有员工的姓名,职位,入职时间,工资以及工资等级表中所有工资的等级和该等下最低工资,最后根据入职时间进行升序排列。
      select e.ename,e.job,e.hiredate,e.sal,s.grade,s.losal
      from salgrade s full outer join emp e
      on e.sal between s.losal and s.hisal
      order e.hiredate asc
    案例:查询emp表中没有字母S的所有员工的编号,姓名,工资,入职时间以及所有部门的编号,名称,最后根据员工的编号进行升序排列。
      select e.empno,e.ename,e.sal,e.hiredate,d.deptno,d.dname
      from emp e full outer join dept d
      on e.deptno = d.deptno
      where e.ename not like '%S%'
      order by e.empno

  2) 可以使用标准SQL实现内连接,不常用,知道即可。
    格式:
      select 别名1.*/列名,别名2.*/列名
      from 表1 别名1 inner join 表2 别名2
      on 关联条件
    案例:查询emp表中员工的编号,姓名,职位,工资以及所属部门的编号,名称
      select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
      from emp e,dept d
      where e.deptno = d.deptno
      select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
      from emp e inner join dept d
      on e.deptno = d.deptno
    案例:查询emp表中工资在1000~3000之间员工的编号,姓名,职位,工资,入职时间以及工资的等级,最后根据员工的编号进行降序排列(2种写法)
      select e.empno,e.ename,e.job,e.sal,e.hiredate,s.grade
      from emp e inner join salgrade s
      on e.sal between s.losal and s.hisal
      where e.sal between 1000 and 3000
      order by e.empno desc
      select e.empno,e.ename,e.job,e.sal,e.hiredate,s.grade
      from emp e,salgrade s
      where e.sal between s.losal and s.hisal and e.sal between 1000 and 3000
      order by e.empno desc

2 视图:视图是一个虚拟表,通过视图从一张或者多张表中查看数据。
  1)视图中不存储任何物理数据,只是用来查看数据的窗口。所以删除视图,对表中的数据没有任何的影响。
  2)视图中的数据都来源于基本表,是在视图被引用的时候动态生成的。使用视图可以集中,简化,定制查询数据,让用户可以通过视图来访问表中的数据,而不需要去直接查询表格。
  3)创建视图的格式:
    create view 视图名称
    as
    查询语句
    案例:创建一个视图emp_view1,查询emp表中所有的数据,查询语句作为视图emp_view1
      create view emp_view1
      as
      select * from emp
      对视图的使用,跟使用表是一样的
    案例:通过视图emp_view1查询emp表中工资大于2000的所有员工的编号,姓名,职位,工资,以及入职时间。
      select empno,ename,job,sal,hiredate from emp_view1
      where sal > 2000
    案例:通过视图emp_view1查询emp表中名字不是以及K开头所有员工的姓名,职位,工资
      select ename,job,sal from emp_view1
      where ename not like 'K%'
    案例:创建一个视图dept_view,查询dept表中所有的数据,查询语句作为视图dept_view
      create view dept_view
      as
      select * from dept
    案例:创建一个视图emp_view2,查询emp表中所有员工的编号,姓名,职位,工资,入职时间以及所在部门的编号,名称,查询语句作为视图emp_view2
      create view emp_view2
      as
      select e.empno,e.ename,e.job,e.sal,e.hiredate,d.deptno,d.dname
      from emp e left outer join dept d
      on e.deptno = d.deptno

    案例:查询emp表中所有员工的编号,姓名,职位,入职时间以及所在部门的名字,最后根据入职时间进行降序排列
      select e.empno,e.ename,e.job,e.hiredate,d.dname
      from emp e left join dept d
      on e.deptno = d.deptno
      order by e.hiredate desc
      select empno,ename,job,hiredate,dname
      from emp_view2
      order by hiredate desc
    案例:创建一个视图emp_view3,查询emp表中所有员工的编号,姓名,职位,工资,上级领导的编号和该工资的等级,该等级的最低和最高工资,查询语句作为emp_view3
      create view emp_view3
      as
      select e.empno,e.ename,e.job,e.sal,e.mgr,s.*
      from emp e left join salgrade s
      on e.sal between s.losal and s.hisal
    案例:查询emp表中名字中没有T的所有员工的编号,姓名,工资,工资的等级和该等级的最高工资,最后根据员工的编号进行降序排列(2种写法)
      select e.empno,e.ename,e.sal,s.grade,s.hisal
      from salgrade s right join emp e
      on e.sal between s.losal and s.hisal
      where e.ename not like '%T%'
      order by e.empno desc
      select empno,ename,sal,grade,hisal from emp_view3
      where ename not like '%T%'
      order by empno desc

    案例:创建视图emp_view4,查询emp表中所有员工的编号,姓名,职位,工资,入职时间以及该员工上级领导的编号,姓名,职位,工资
      create view emp_view4
      as
      select e.empno,e.ename,e.job,e.sal,e.hiredate,m.empno 领导的编号,m.ename 领导的姓名,m.job 领导的职位,m.sal 领导的工资
      from emp e left join emp m
      on e.mgr = m.empno

  4)视图中列名不能重复,遇到重复列名,使用别名进行处理。
  5)修改视图:
    create or replace view 视图名
    as
    查询语句
    案例:查询emp表中10,20号部门员工的编号,姓名,职位,工资,所属部门的编号,查询语句来修改视图emp_view1
      create or replace view emp_view1
      as
      select empno,ename,job,sal,deptno from emp
      where deptno in(10,20)
  6) 使用视图对表进行修改操作(insert , update , delete)
    a) 使用视图实现插入操作(insert):
      select * from dept
      insert into dept_view values(70,'财务部门','迪拜')
    b) 使用视图实现修改操作(update):
      update dept_view set dname = '运维部门',loc = '旧金山'
      where deptno = 70
    c) 使用视图实现删除操作(delete):
      案例:使用视图删除50,60,70号部门
        delete from dept_view where deptno in(50,60,70)

  7) 只读视图:只能通过视图进行查询操作,不能通过视图进行修改操作。
    create view 视图名
    as
    查询语句
    with read only

    create view dept_view2
    as
    select * from dept
    with read only

    --反例:
      insert into dept_view2
      values(100,'开发部门','深圳')

  8)删除视图
    格式:
      drop view 视图名
      drop view dept_view2
    案例:删除视图emp_view1,emp_view2,emp_view3,
      emp_view4
      drop view emp_view1
      drop view emp_view2
      drop view emp_view3
      drop view emp_view4

3 外键约束:用来维护两张表或者多张表之间的关联关系,被外键约束所修饰的列,其列值参照与之关联的另外一张表中主键所修饰的列的列值。
  子表:外键所在的表,称为子表,外键所修饰的列的列值参照于主表中主键所修饰的列的列值。
  主表/父表:没有外键的表,子类中的数据参照主表中的数据。
  注意:插入数据的时候,要先往主表中插入数据,然后再往子表中插入数据。
  create table dept2(
    did number(4) primary key,
    dname varchar2(50) unique not null
  )
  create table emp2(
    eid number(4) primary key,
    ename varchar2(50),
    deptId number(4)
  )
  alter table emp2
  add constraint fk_deptId_did_emp2
  foreign key(deptId)
  references dept2(did)
  --反例
    insert into emp2 values(1,'刘备',1)

  先往主表中插入数据,然后再往子表中插入数据。
  insert into dept2 values(1,'研发')
  insert into emp2 values(1,'刘备',1)

4 子查询(二):在一条查询语句中又包含一条查询语句。
  案例:查询JONES所在部门的名称和地址
  1) JONES所在部门的编号
    select deptno from emp
    where ename = 'JONES'
  2) 根据部门的编号查询该部门的名称和地址
    select dname,loc from dept
    where deptno = (
      select deptno from emp
      where ename = 'JONES'
    )
    案例:查询部门名称是RESEARCH的部门下员工的编号,姓名,职位,以及所在部门的编号
      1)RESEARCH部门的编号
        select deptno from dept
        where dname = 'RESEARCH'
      2)根据部门编号查询该部门下员工的信息
        select empno,ename,job,deptno
        from emp
        where deptno = (
          select deptno from dept
          where dname = 'RESEARCH'
        )
    案例:查询职业是MANAGER的员工所在部门的编号,名称和地址
      1)查询职业是MANAGER的员工所在部门的编号
        select deptno from emp
        where job = 'MANAGER'
      2)根据部门的编号查询该部门的信息
        select * from dept
        where deptno in (
          select deptno from emp
          where job = 'MANAGER'
        )
    案例:查询工资在1000~2000之间的员工所在部门的编号,名称
      1)查询工资在1000~2000之间的员工的所在部门的编号
        select deptno from emp
        where sal between 1000 and 2000
      2)根据部门的编号查询该部门的编号,名称
        select deptno,dname from dept
        where deptno in(
          select deptno from emp
          where sal between 1000 and 2000
        )

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

  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. Windows下nginx配置多台服务器做负载均衡

    Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务. Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3 ...

  2. AssetBundle资源打包与加载

    AssetBundle资源打包  1.AssetLabels资源标签 文件名:资源打包成AssetBundle后的文件名,类似于压缩包的名字 后缀:自定义 文件名和后缀名都是小写格式(大写会自动转为小 ...

  3. kubeadm安装集群系列-3.添加工作节点

    添加工作节点 worker通过kubeadm join加入集群,加入所需的集群的token默认24小时过期 查看Token kubeadm token list # 如果失效创建一个新的 kubead ...

  4. CF792E Colored Balls【思维】

    题目传送门 考试的时候又想到了小凯的疑惑,真是中毒不浅... 设每一个数都可以被分成若干个$k$和$k+1$的和.数$x$能够被分成若干个$k$和$k+1$的和的充要条件是:$x%k<=floo ...

  5. SpringBoot项目在IDEA中以jar方式部署

    1.在pom.xml下添加如下插件 这个插件可以在项目打包成jar包后,通过java -jar运行 <build> <plugins> <plugin> <g ...

  6. C++命名建议

    如果想要有效的管理一个稍微复杂一点的体系,针对其中事物的一套统一.带层次结构.清晰明了的命名准则就是必不可少而且非常好用的工具. 活跃在生物学.化学.军队.监狱.黑社会.恐怖组织等各个领域内的大量有识 ...

  7. redis db0-15 的概念

    redis默认有db0~db15之多. redis有没有什么方法使不同的应用程序数据彼此分开同时又存储在相同的实例上呢?就相当于mysql数据库,不同的应用程序数据存储在不同的数据库下. redis下 ...

  8. vue click.stop

    <div id="app"> <div v-on:click="dodo"> <button v-on:click="d ...

  9. springboot2.0整合freemarker快速入门

    目录 1. 快速入门 1.1 创建工程pom.xml文件如下 1.2 编辑application.yml 1.3 创建模型类 1.4 创建模板 1.5 创建controller 1.6 测试 2. F ...

  10. 第二天:python数据类型及常用方法

    数字类型 #1. 整型 a1 = 10 a2 = int(20) #2. 长整型(py2特有,py3废弃) b1 = 12345678901234567890 b2 = long(100) #3. 浮 ...