在学习oracle 过程当中,当在看tables时,比如STUDENT,右击——查看——查询,会自动有这样的一条查询语句:

select t.*, t.rowid from STUDENT_TJB t

其中,作为一个sql小白,我想问的就是rowid是什么用法,还有t.*定位的什么表还是用户呢?

经过查询资料,获得了几个重要的知识点:

 一、 ROWID(行ID)

ROWID也是一种数据类型,但是这种数据类型是Oracle 服务器使用并管理的。它具有以下几个特性:

  • ROWID是数据库每一行的唯一标识符。
  • ROWID作为列值是隐式存储的。
  • ROWID不直接给出行的物理地址,但是可以用ROWID来定位行。
  • ROWID提供了最快速地访问表中行的方法。

查询以下STUDENT表中的ROWID: select rowid from STUDENT; 结果如下:

可以看出, Oracle的物理扩展ROWID有18位。

ROWID的每位采用64位编码,分别用A~Z、a~z、0~9、+、/共64个字符表示。其中,A表示0,B表示1,……Z表示25,

a表示26,……z表示51,0表示52,……,9表示61,+表示62,/表示63。

例如,

create table test_rowid (id number, row_id rowid); --1.创建一临时表
insert into test_rowid values(1,null); --2.插入一行记录
update test_rowid set row_id = rowid where id = 1; --修改刚插入的记录
select rowid,row_id from test_rowid; --4.查看rowid 

返回结果为:

                  rowid                                 row_id
AAAO0DAAJAAAAMYAAA AAAO0DAAJAAAAMYAAA

ROWID具体划分可以分为4部分。

(1).OOOOOO:前6位表示DATA OBJECT NUMBER,将起转化位数字后匹配DBA_OBJECTS中的DATA_OBJECT_ID,可以确定表信息。

如上面的例子DATA OBJECT NUMBER是AAAO0D,转化位数字是14×64×64 +52×64 + 3。 
         输入以下查询:

  select owner, object_name from dba_objects
where data_object_id = 14*64*64 + 52*64 + 3;

返回:

                 OWNER    OBJECT_NAME
WG TEST_ROWID

(2).FFF:第7到9位表示相对表空间的数据文件号。 
         上面的例子中是AAJ,表示数据文件9。 
      (3).BBBBBB:第10到15位表示这条记录在数据文件中的第几个BLOCK中。

上面的例子是AAAAMY,转化位数字是12×64+24,表示这条记录在数据文件中的第792个BLOCK。

(4).RRR:最后3位表示这条记录是BLOCK中的第几条记录。

上面的例子是AAA,表示第0条记录(总是从0开始计数)。

 二、select t.* ,rowid.t from 表 t

      1.

select t.*   是选出t表的所有信息
       select *     是选出 关键字from后面的所有表的信息
       如果from 后面只有一个表,那么两者无区别。

2.

当from后面只有一个表名时,select t.*,rowid 能用, select *,rowid为什么不能用?提示“未找到要求的FROM关键字”。

因为select *,rowid的时候,会把rowid当作表的一个字段来用,而在select t.*,rowid的时候没有作为所查表的字段。

    3.

比如select t.* from table t,那么t就是你查的那张表table的别名,后面写的时候,table可以用t代替,简单点,这里的t.*就是查询table表的所有列名,有多少,查出多少,*就是全部的意思、     

一条sql语句引发的遐想:select t.*, t.rowid from STUDENT t的更多相关文章

  1. 一条sql语句引发mysql不停创建临时表的问题解决..coping to tmp table on desk

    (不懂临时表的先看 MySQL临时表 ) 首先,临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间.因此在不同的连接中可以创建同名的临时表,并且操作属于本连接的临时表.     ...

  2. select * from user 这条 SQL 语句,背后藏着哪些不可告人的秘密?

    作为一名 Java开发人员,写 SQL 语句是常有的事,但是你知道 SQL 语句背后的处理逻辑吗?比如下面这条 SQL 语句: select * from user where id=1 执行完这条语 ...

  3. 一条Sql语句分组排序并且限制显示的数据条数

    如果我想得到这样一个结果集:分组排序,并且每组限定记录集的数量,用一条SQL语句能办到吗? 比如说,我想找出学生期末考试中,每科的前3名,并按成绩排序,只用一条SQL语句,该怎么写? 表[TScore ...

  4. JavaWeb 学习007-4个页面,5条sql语句(添加、查看、修改、删除)2016-12-2

    需要复习的知识: 关联查询 =================================================================================班级模块学 ...

  5. 如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写SQL语句,SQL语句的命令结束符为分号(;)。

    1.如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写SQL语句,SQL语句的命令结束符为分号(;). 2.select查询的多个字段之间要用逗号“,”分割,如果查询涉及多个表,那多个表之 ...

  6. 用一条SQL语句取出第 m 条到第 n 条记录的方法

    原文:用一条SQL语句取出第 m 条到第 n 条记录的方法   --从Table 表中取出第 m 条到第 n 条的记录:(Not In 版本)       *    FROM Table     id ...

  7. MyBatis7:MyBatis插件及示例----打印每条SQL语句及其执行时间

    Plugins 摘一段来自MyBatis官方文档的文字. MyBatis允许你在某一点拦截已映射语句执行的调用.默认情况下,MyBatis允许使用插件来拦截方法调用 Executor(update.q ...

  8. 用一条SQL语句查出每门课都大于80分的学生的姓名

    用一条SQL语句查出每门课都大于80分的学生的姓名,数据表结构如下: 建表SQL如下: ; -- ---------------------------- -- Table structure for ...

  9. java执行多条SQL语句

    一次执行多条SQL的技术要点如下: DatabaseMetaData接口是描述有关数据库的整体综合信息,由于DatabaseMetaData是接口,所以没有构造方法,故不能使用new来创建Databa ...

随机推荐

  1. Hibernate入门1 - Hibernate概述及第一个小例子

    一.什么是ORM? ORM,即Object Relational Mapping.我们知道,利用面向对象的思想编写的数据库应用程序最终都是把对象信息保存在关系型数据库中,于是需要编写与底层数据库相关的 ...

  2. dwr学习(一):简单dwr实例

    博客分类:  dwr   最近写ajax写烦了,想着能不能有个更简单的“ajax”,一问就问到这个dwr了.赶紧去官网学习了下,这里写个博客记录一下实例. 测试环境:tomcat6.0 1.新建一个w ...

  3. ElasticSearch5.0之后的改变

    ES5的变化 search_type=count和scan都移除了 count可以用size=0代替 GET /my_index/_search { "size": 0, &quo ...

  4. Kubernetes-1

    master 节点负责管理整个集群,管理的控制面板,全局的角色和调度 3个组件 API Server : 统一入口 kubectl 客户端管理工具 Etcd 数据库 Scheduler 集群的调度 C ...

  5. 声反馈抑制使用matlab/simulink仿真

    第一份工作时做啸叫抑制的仿真,调大0.3可以有大的啸叫产生,下图的SIMULINK仿真模型 实现移相有多种方法: 1.iir实现 2.FFT实现 3.使用FIR实现 所有信号均可以由正弦信号叠加而成.

  6. [NOIP模拟赛] 序列

    Description 给定一个1~n的排列x,每次你可以将x1~xi翻转.你需要求出将序列变为升序的最小操作次数.有多组数据. Input 第一行一个整数t表示数据组数. 每组数据第一行一个整数n, ...

  7. IO流查找文件然后写入TXT文档

    今天领导让分析日志,把日志中所有登录过的员工信息都拿出来.于是.把日志摘下来谢了这段代码 import java.io.BufferedReader;import java.io.BufferedWr ...

  8. (转)内核模块操作命令-lsmod+rmmod+modinfo+modprobe

    原文:http://watchmen.xin/2018/07/13/IT%E7%A7%91%E5%AD%A6%E6%8A%80%E6%9C%AF%E7%9F%A5%E8%AF%86%E4%BD%93% ...

  9. Mysql 用户权限管理

    1. MySQL 权限介绍 mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表,我当前的版本mysql 5.7.22 . mysql权限表 ...

  10. kaggle-Digit Recognizer

    安装kaggle工具获取数据源(linux 环境) 采用sklearn的KNeighborsClassifier训练数据 通过K折交叉验证来选取K值是正确率更高 1.安装kaggle,获取数据源 pi ...