我所知道的数据库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 = ‘张三‘);--查询张三的成绩。
时间: 2024-12-21 02:17:09

我所知道的数据库10-DQL语言SELECT(续)的相关文章

我所知道的数据库7-DDL语言(续2)

昨天写到单表的创建,创建带有约束的表单,其实约束也可以在后续添加或者修改的.语法格式是: ALTER TABLE 表名 ADD (CONSTRAINT 约束名 约束类型(约束字段)); 例:CREATE TABLE CLASS( ID NUMBER, NAME CHAR(20) );--创建班级表. ALTER TABLE CLASS ADD (CONSTRAINT CLASS_PK PRIMARY KEY(ID));--修改班级表,为ID字段添加主键约束. ALTER是一个关键字,可以对创建后

SQL结构化查询语——之DQL语言

记忆思路:SQL的DQL语言select查询命令.from从哪个表中where以什么条件select查询哪些列,order by是否基于某字段排序,limit # 输出多少行.一.单表查询1. 常用查询语法: SELECT 输出显示字段 FROM 表名 无条件查询语法:SELECT 指定输出的列 FROM 表名 ; 限制输出语法:SELECT 指定输出的列 FROM 表名 LIMIT 显示记录数 ; 条件查询语法:SELECT 指定输出的列 FROM 表名 WHRER 查询条件 : 条件查询再排

数据库与SQL语言&lt;4&gt;

s数据库面试主要包含范式.事务.存储过程.SQL语言,以及索引等诸多方面. 1.数据库理论 第一范式:关系模式R的所有属性的值域中每一个值都是不可再分解的值,则称R属于第一范式. 第二范式:如果关系型数据库属于第一范式,并且R中每一个非主属性完全函数依赖于R的某个候选键,则称第二范式. 第三范式:如果关系型数据库是第二范式,且每个非主属性每个非主属性都不传递依赖于R的候选键,则称R的第三范式. BC范式:关系模式属于第一范式,且每个属性都不传递依赖于R的候选键. 第四范式:R是一个关系模式,D是

黑上财的最毒奇文——《我所知道的劳伦斯》

自称"国内一名任职于985高校知情的知名学者"(网名"诗和远方",以下简称"985知名学者")撰写了一篇知乎专栏文章--<我所知道的劳伦斯>.该文讲述了在美国法学界混不下去的Lawrence Mitchell(劳伦斯?米切尔,中文名米罗)是如何入职上海财经大学的,为引进Lawrence Mitchell声嘶力竭地做最后的辩护.可惜的是,该文没有达到解决问题的目的,反而引起了更多的疑问.? 学术资本既不是无错误行为的证明更不是保障<

MySQL的DQL语言(查)

MySQL的DQL语言(查) DQL:Data Query Language,数据查询语言. DQL是数据库中最核心的语言,简单查询,复杂查询,都可以做,用select语句. 原文地址:https://www.cnblogs.com/WZ-BeiHang/p/12370033.html

你必须知道的495个C语言问题,学习体会五

本文是 你必须知道的495个C语言问题 系列的第五篇,主要还是来了解下字符和字符串相关的东西,同时也会涉及内存相关的知识. 一般来说,字符串以及字符的处理都是编程语言中的常客,在C语言中,我们被给予了很好的灵活性,但是同时字符也成了最诡秘的处理单元. 在指针的内容里,我基本上讲解了字符串和字符数组的差异,所以这里就不再赘述了. 我们知道字符的英语翻译是character,这也是为什么字符类型为char的原因,我们使用单引号''来标示一个字符而使用双引号""来标示字符串.实际上,在C语言

《你必须知道的495个C语言问题》笔记--标准输入输出

getchar的返回值 这样的代码有什么问题: char c; while((c = getchar()) != EOF).... getchar返回值变量必须是int型.因为EOF通常定义为-1,二十进制为255的字符会被符号扩展,和EOF比较时会相等,从而 过早第结束输入. feof函数的使用 为什么这些代码最后一行复制了两遍? #include <stdio.h> #include <unistd.h> #include <fcntl.h> #define MAX

Swift 2.0学习笔记(Day5)——我所知道的标识符和关键字

Swift 2.0学习笔记(Day5)--我所知道的标识符和关键字   原创文章,欢迎转载.转载请注明:关东升的博客 好多计算机语言都有标识符和关键字,一直没有好好的总结,就是这样的用着,现在小小的整理一下Swift中的标识符和关键字. 什么是标识符呢? 标识符就是给变量.常量.方法.函数.枚举.结构体.类.协议等由开发人员指定的名字. 其实,构成标识符的字母是有一定规范的,Swift中命名规则是: 区分大小写,Myname与myname是两个不同的标识符: 标识符首字符可以以下划线(_)或者字

MySQL数据库、C语言免费技术交流活动201503

  老男孩教育2015 MySQL数据库.C语言免费技术交流活动 适用人群:对运维自动化开发.IT系统架构管理.数据库管理有兴趣的IT从业人员 听课时间:2015年3月14日(周六)下午1:00(提前20分钟签到) 听课地点:北京市昌平区沙河青年创业大厦B座1519室(地铁昌平线沙河站B1口右转200米) 听课内容: MySql DBA(1.5-2小时) 主题:SQL优化和MySQL高可用架构(门户经验) 专业级MySQL DBA SQL优化的思想. 通过案例分析从开发人员的角度上如何设计高效S