zoukankan      html  css  js  c++  java
  • 我所知道的数据库10-DQL语言SELECT(续)

    昨天写到单表查询,今天写下嵌套吧,多表联查看时间了……

    先说伪劣吧

      ROWID

        ROWID是一种数据类型,用来唯一标识一条记录的物理位置,由基于64位编码的18个字符组成。

        组成:

          000000 | FFF | BBBBBB | RRR

          其中,1-6位是数据对象编号,7-9位是文件编号,10-15位是块编号,16-18位是行编号。

      ROWNUM

        ROWNUM是查询结果中某条记录的行号。

      这两者有着巨大的不同。ROWID是真实的存在,相当于隐藏的列。ROWNUM是虚拟的,是RDBMS自动设定的,如果单独进行筛选,除了rownum=1外,rownum不能等于任何值,否则会报错;rownum只能用<筛选,不能使用>,否则也会报错,因为rownum是针对整个查询结果的,无论什么条件,第一条记录的rownum绝对=1。示例如下:

    SELECT ROWNUM,* FROM EMP;--查询员工表的所有信息。
    SELECT ROWNUM,* FROM EMP WHERE DEPTNO =2 0;--查询部门编号为20的员工信息。
    SELECT ROWNUM,* FROM EMP WHERE DEPTNO = 20 AND ROWNUM = 1;--查询部门编号为20的一位员工的信息。
    SELECT ROWNUM,* FROM EMP WHERE DEPTNO = 20 AND ROWNUM < 10;--查询部门编号为20的9位员工的信息。
    SELECT ROWNUM,* FROM EMP WHERE DEPTNO = 20 AND ROWNUM > 3;--报错!
    SELECT ROWID,* FROM EMP WHERE ROWID='XXX';--查询rowid为XXX的员工的信息。

      如上所示,当rownum>3时是报错的,不能执行,那该怎么查询呢?别急,我们可以用嵌套查询,也称子查询,将查询结果作为查询对象或者条件表达式中的某对象。将查询到的ROWNUM作为单列,再针对其进行筛选,SQL语句如下:

    SELECT RN,* FROM (SELECT ROWNUM RN,* FROM EMP WHERE DEPTNO = 20) WHERE RN > 3;--查询部门编号为20,且排除前2个的员工信息。

    嵌套查询

      嵌套查询分为2种,一种是将查询结果当作一张表,作为查询对象进行查询。  

    SELECT * FROM (SELECT LASTNAME FROM EMP) WHERE LASTNAME = 'SMITH';--该嵌套没有任何意义,此处只作为示例演示。

      第二种是在where条件中,将查询结果作为某值或者某范围,用来筛选数据。

    SELECT SCORE FROM SCORE WHERE ID = (SELECT ID FROM CLASS WHERE NAME = '张三');--查询张三的成绩。
  • 相关阅读:
    客车网上订票系统项目--会员管理、前端注册页面
    客车网上订票系统项目--管理员管理、前端用户留言
    客车网上订票系统项目--新闻模块
    后端模块-管理员登录、显示留言列表
    前端模块--首页留言页编辑
    前端模块--登录注册界面编辑
    JVM深入理解(一) -JVM初识
    45:漏洞发现-API接口服务之漏洞探针类型利用修复
    42:漏洞发现-操作系统之漏洞探针类型利用修复
    linux系统安全-2
  • 原文地址:https://www.cnblogs.com/jason-huang/p/6363657.html
Copyright © 2011-2022 走看看