SELECT(二)
rowid和rownum
rowid 和rownum 都是伪列
rowid 每一条记录在插入到一张表中时就确定的地址,相当于对象的地址
当没有无可重复字段的时候,如果出现多条一模一样的数据,用rowid区分定位其中的某一条
rownum 结果集中数据的序号,每一个结果集都存在序号
rownum 都是从1开始排序,每次+1
无论内层结果集的rownum是否乱序,在其外部嵌套一个select确定新的结果集,保证有序有规律
分页使用rownum
表连接
当获取的数据不是来自同一张表而是来自多张表时就需要使用表连接。
92语法
92语法,故名思意,就是92年出现的语法。
笛卡尔积:select * from 表1,表2...
等值连接:在笛卡尔积的基础上取条件列相同的值
如果在表连接中,使用到了多表中的相同字段,必须要指明字段的出处,取别名
等值连接的条件不一定非要同名字段,不同名字段可以实现表连接,类型相同即可
非等值连接:> < != <> between and
自连接:特殊的等值连接(来自同一张表)
内连接:满足查询条件才显示
外连接:
在表连接的时候,想要某张表中,所有的信息数据全部显示,无论是否满足连接条件
主表:主表中的所有数据,无论是否满足连接条件都会显示
写法:在连接条件的地方,主表对面的表后面添加(+)
左外连接:主表在逗号坐边,叫做左连接
右外连接:主表在逗号右边,叫做右连接
99语法
99语法,故名思意,就是99年出现的语法。
交叉连接 cross join 相当于92语法的笛卡尔积
select * from 表1 cross join 表2;
自然连接(主外键、同名列) natural join
-->等值连接
select * from 表1 natural join 表2;
join using
连接(同名列) -->等值连接
指定哪一个字段做等值连接,同名字段不能出现限定词
select 字段 from 表1 join 表2 using 同名列;
join on 连接条件
-->等值连接 非等值 自连接 (解决一切) 关系列必须区分
select * from 表1 join 表2 on 连接条件(两表的相同列);
[inner] join
-->内连接 inner可省略
left|right [outer] join on|using
-->外连接 outer 可省略
主表:表1做为主表,所有表1信息都能显示
左连接:left join–主表在左边
select * from 表1 left join 表2;
右连接:right join–主表在右边
select * from 表2 right join 表1;
full join on|using
-->全连接 满足直接匹配,不满足相互补充null,确保所有表的记录都至少出现一次,两表都作为主表使用
视图
视图是介于表和结果集之间的虚拟表
作用:
1、简化:select 查询语句
2、重用:封装select语句 命名
3、隐藏:内部细节
4、区分:相同数据不同查询
注意:
1、不是所有的用户都有创建视图的权限
2、对视图的删除不会删除原有表的数据
创建视图:create or replace view 视图名 as select语句 [with read only];
with read only
设置视图只读,可根据需求设置
删除视图:drop view 视图名
索引
索引是数据库的对象之一
提高查询效率,对大量数据做查询的时候,如果对索引字段做赠删改|少量数据的查询,会降低效率,索引毕竟是数据库对象,需要维护以及更新
索引类似目录
索引的创建或者删除对sql使用完全没有任何影响
oracle会默认为主键字段添加索引
创建索引:create index 索引名 on表名 (字段列表...)
删除索引:drop index 索引名