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. appium+python+Windows自动化测试文档

    appium+python自动化测试文档 一.认识appium 1.    什么是appium appium是开源的移动端自动化测试框架: appium可以测试原生的.混合的.以及移动端的web项目: ...

  2. C#中的索引器(Indexers)

    前两天刚刚学习完了属性,这两天又搂完了索引器,发现两者非常的相似,但是相似之外还有一些不同之处.今天就来总结一下索引器--Indexers 索引器的作用及格式 索引器的作用就是能够使类或者结构体的实例 ...

  3. ASP.NET Core 入门笔记8,ASP.NET Core MVC 分部视图入门

    一.前言 1.本教程主要内容 ASP.NET Core MVC (Razor)分部视图简介 ASP.NET Core MVC (Razor)分部视图基础教程 ASP.NET Core MVC (Raz ...

  4. HTTP 状态代码的完整列表

    1xx(临时响应) 用于表示临时响应并需要请求者执行操作才能继续的状态代码. 代码 说明 100(继续) 请求者应当继续提出请求.服务器返回此代码则意味着,服务器已收到了请求的第一部分,现正在等待接收 ...

  5. 【计算机视觉】极限优化:Haar特征的另一种的快速计算方法—boxfilter

    这种以Boxfilter替代integral image 的方法很难使用到haar.LBP等特征检测中,因为像下面说的,它不支持多尺度,也就是说所提取的特征必须是同一个大小,最起码同一个宽高比的,这一 ...

  6. weekly paper read

    week9: 查找论文的情况 1.*(reference) title:Improving Performance and Capacity of Flash Storage Devices by E ...

  7. octave

    1. octave, 如何求一元二次方程的解: 例如:· -3x-9y=18  ·   4x+3y=12 命令: >>>  A=[-3 -9; 4 3]; B=[18;12]; &g ...

  8. [Comet OJ - Contest #6 D][48D 2280]另一道树题_并查集

    另一道树题 题目大意: 数据范围: 题解: 这个题第一眼能发现的是,我们的答案分成两种情况. 第一种是在非根节点汇合,第二种是在根节点汇合. 尝试枚举在第几回合结束,假设在第$i$回合结束的方案数为$ ...

  9. sql sever 授予用户create table权限

    sql server2008的用户权限管理及其细致.此处我也不知道是表扬还是批评.所以经常会遇到各种“对不起您没有**权限”的问题. 本次遇到的问题机器常见.在尝试修改数据库结构时提示"没有 ...

  10. 减2或减3(很搞的贪心)2019牛客国庆集训派对day6

    题意:https://ac.nowcoder.com/acm/contest/1111/D 问你先减二x次的情况下,最少减几次3. 思路: %3不为0的要先减2,然后%3为0的要先减大的(比如9 3 ...