一条sql语句引发的遐想:select t.*, t.rowid from STUDENT t
在学习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的更多相关文章
- 一条sql语句引发mysql不停创建临时表的问题解决..coping to tmp table on desk
(不懂临时表的先看 MySQL临时表 ) 首先,临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间.因此在不同的连接中可以创建同名的临时表,并且操作属于本连接的临时表. ...
- select * from user 这条 SQL 语句,背后藏着哪些不可告人的秘密?
作为一名 Java开发人员,写 SQL 语句是常有的事,但是你知道 SQL 语句背后的处理逻辑吗?比如下面这条 SQL 语句: select * from user where id=1 执行完这条语 ...
- 一条Sql语句分组排序并且限制显示的数据条数
如果我想得到这样一个结果集:分组排序,并且每组限定记录集的数量,用一条SQL语句能办到吗? 比如说,我想找出学生期末考试中,每科的前3名,并按成绩排序,只用一条SQL语句,该怎么写? 表[TScore ...
- JavaWeb 学习007-4个页面,5条sql语句(添加、查看、修改、删除)2016-12-2
需要复习的知识: 关联查询 =================================================================================班级模块学 ...
- 如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写SQL语句,SQL语句的命令结束符为分号(;)。
1.如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写SQL语句,SQL语句的命令结束符为分号(;). 2.select查询的多个字段之间要用逗号“,”分割,如果查询涉及多个表,那多个表之 ...
- 用一条SQL语句取出第 m 条到第 n 条记录的方法
原文:用一条SQL语句取出第 m 条到第 n 条记录的方法 --从Table 表中取出第 m 条到第 n 条的记录:(Not In 版本) * FROM Table id ...
- MyBatis7:MyBatis插件及示例----打印每条SQL语句及其执行时间
Plugins 摘一段来自MyBatis官方文档的文字. MyBatis允许你在某一点拦截已映射语句执行的调用.默认情况下,MyBatis允许使用插件来拦截方法调用 Executor(update.q ...
- 用一条SQL语句查出每门课都大于80分的学生的姓名
用一条SQL语句查出每门课都大于80分的学生的姓名,数据表结构如下: 建表SQL如下: ; -- ---------------------------- -- Table structure for ...
- java执行多条SQL语句
一次执行多条SQL的技术要点如下: DatabaseMetaData接口是描述有关数据库的整体综合信息,由于DatabaseMetaData是接口,所以没有构造方法,故不能使用new来创建Databa ...
随机推荐
- 生成多个git ssh密钥
如果你已经有了一套名为 id_rsa 的公秘钥,将要生成另外一个公钥,比如 aysee ,你也可以使用任何你喜欢的名字. 步骤如下: 1.生成一个新的自定义名称的公钥: ssh-keygen -t r ...
- 软件测试人员需要掌握的linux命令(一)
有些技能可以事半功倍,熟练的使用这些命令可以提高工作效率,并且结合这些命令对测试过程中遇到的问题进行一些初步的定位. 一:目录与文件操作: ls 使用权限:所有人功能 : 显示指定工作目录下之内容(列 ...
- I2C和I2S的区别和使用方法
I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备.是微电子通信控制领域广泛采用的一种总线标准.它是同步通信的一种特 ...
- python绘图工具matplotlib在linux下安装和使用
工具介绍:matplotlib 是Python编程语言的一个绘图库及其数值数学扩展 NumPy.它为利用通用的图形用户界面工具包, 如Tkinter, wxPython, Qt或GTK+向应用程序嵌入 ...
- JavaScript 全屏展示
浏览器都有页面全屏的功能 F11 ,那么如何用JavaScript控制页面全屏呢?MDN上提供的的API , 一个小demo验证一下! <!DOCTYPE html> <html l ...
- [EXP]ThinkPHP 5.0.23/5.1.31 - Remote Code Execution
# Exploit Title: ThinkPHP .x < v5.0.23,v5.1.31 Remote Code Execution # Date: -- # Exploit Author: ...
- 求一个集合的所有真子集 Python
给定一个集合,元素均为正整数且不重复,求该集合的所有子集 # -*- coding: utf-8 -*- """ Created on Tue Oct 10 09:04: ...
- underscore.js源码解析【函数】
// Function (ahem) Functions // ------------------ // Determines whether to execute a function as a ...
- IDEA中SpringBoot项目快速创建单元测试
如何在IDEA中对于SpringBoot项目快速创建单元测试 创建测试用例 右键需要进行测试的方法,选择GO TO然后选择Test 点击Create New Test 勾选需要创建单元测试的方法 然后 ...
- ProxySQL+MGR实现读写分离和主节点故障无感知切换 - 完整操作记录
前面的文章介绍了ProxySQL用法,这里说下ProxySQL中间件针对Mysql组复制模式实现读写分离以及主节点故障时能够自动切换到新的主节点,而应用对此过程无感知的功能.Mysql组复制(MGR) ...