zoukankan      html  css  js  c++  java
  • Oracle-07

    数据查询语言--DDL

    1、表间关联查询

    内连接:

        语法:表1 [inner] join 表2 on 条件 (涉及到两张表)

    eg:查询员工的姓名和他领导的名字

    select e1.ename 员工,e2.ename 领导 from emp_xu e1 join emp_xu e2 on e1.leader=e2.empno;
    select e1.ename 员工,e2.ename 领导 from emp_xu e2 join emp_xu e1 on e1.leader=e2.empno;//表1和表2可以互换,没影响

    注意:内连接操作得到的结果集中的数据一定是在两张表中都能找到匹配数据的记录,找不到数据就丢掉

    说明:

    a.表1为驱动表,表2为匹配表

    b.执行过程:不断遍历驱动表,在匹配表中找匹配记录(匹配表中每条记录都要进行匹配)

    c.等值连接(=)方式,驱动表和匹配表是可以进行互换的,不影响结果

    d.内连接操作:结果集保留是遍历驱动表,在匹配表中匹配上的记录数据,将匹配不上的记录数据去掉,只显示匹配上的记录,匹配不上的不显示出来

    外链接:

    1、左外连接(表示以左边的表为驱动表)

        语法:表1 left [outer] join 表2 on 条件

    2、右外连接(表示以右边的表为驱动表)

        语法:表1 right [outer] join 表2 on 条件

    3、全外连接(表示以左、右边的表既可以作为驱动表也可以作为匹配表)

        语法:表1 full [outer] join 表2 on 条件

    外连接特征:若驱动表在匹配表中找不到匹配记录,则匹配一行空行。驱动表中数据全部出现在结果集中

    eg:查询员工的姓名和其部门的名字,要求没有部门的员工也要查询出来(用外连接)

    select e.ename,nvl(d.dname,'No Dept'),deptno from emp_xu e left outer join dept_xu d on e.deptno=d.deptno;//报错,未明确定义字段deptno
    select ename,nvl(dname,'No Dept'),d.deptno from emp_xu e left outer join dept_xu d on e.deptno=d.deptno;//左外连接,d.dept需要加上表名
    select e.ename,nvl(d.dname,'No Dept') from dept_xu d right outer join emp_xu e on e.deptno=d.deptno;//右外连接

    eg:查询哪些部门没有员工

    select d.dname,d.deptno from dept_xu d left outer join emp_xu e on d.deptno=e.deptno where e.empno is null;

    总结:

    a. 外连接的结果集=内连接的结果集+驱动表在匹配表中匹配不上的记录和空值

    b. 外连接的本质:将驱动表中数据全部出现在结果集中,一条都不能少

    eg:查询员工姓名及其部门的名字,要求没有部门的员工和没有员工的部门全部查询出来(全外连接)

    select nvl(e.ename,'No'),nvl(d.dname,'No') from emp_xu e full join dept_xu d on e.deptno=d.deptno;

    注意:

    a.全外连接,可以将两个表中的数据全部显示出来

    b.全外连接=内连接的结果集+驱动表在匹配表中匹配不上的记录和空值+匹配表在驱动表中匹配不上的记录和空值

    2、oracle数据库中排名分页

    关键字:rownum(oracle)/limit(mysql)

         rownum表示一个伪列,对查询返回数据的行进行行编即行号,行号由‘1’开始

     eg:查询员工表中前五条记录
    select * from emp_xu where rownum<=5;
    select empno,ename,rownum from emp_xu where rownum<=5;
    eg:查询员工表中第4、5、6条记录
    select empno,ename,rownum from emp_xu where rownum>3 and rownum<7;//错误的,未选定
     注意:rownum不能用大于号(>)判断  ,用集合中的差集 minus
    select empno,ename,rownum from emp_xu where rownum<7
    minus
    select empno,ename,rownum from emp_xu where rownum<4;
    换一种方式:
    //先查询出前六条记录,再从前六条rn中找想要的字段 select empno,ename,rownum from emp_xu where rownum<7; select empno,ename,rn,rownum from (select empno,ename,rownum rn from emp_xu where rownum<7) where rn>3;
  • 相关阅读:
    Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十五)阶段总结
    [Beautifulzzzz的博客目录] 快速索引点这儿O(∩_∩)O~~,红色标记的是不错的(⊙o⊙)哦~
    OpenCV学习记录之摄像头调用
    很不错的python 机器学习博客
    华清远见Linux设备驱动(每章小结)
    Linux 查看服务器开放的端口号
    MySQL简单优化
    数据探索之数据质量分析
    两张图简说代理服务器和反向代理服务器
    集合类中嵌套定义和引用的举例
  • 原文地址:https://www.cnblogs.com/xslzwm/p/9648008.html
Copyright © 2011-2022 走看看