Oracle基础教程(一)
Oracle简介
Oracle是甲骨文公司开发的一款关系型数据库,它一款系统可移植性好、使用简单、功能强大的关系型数据库。可以快速搭建一种高效率、可靠性好、高吞吐量的数据库解决方案。
Oracle体系结构
- 实例:一个操作系统只有一个Oracle数据库,但是可以安装多个Oracle实例,一个Oracle实例对应着一系列的后台进程(Backguound Processes)和内存结构(Memory Structures)。
- 数据文件:Oracle数据文件是数据存储的物理单位,数据库的数据是存储在表空间中的。一个表空间由一个或多个数据文件组成,一个数据文件只能属于一个表空间,一旦数据文件被加入到某个表空间后,就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行。
- 表空间:表空间是Oracle 对物理数据库数据文件(ora/dbf)的逻辑映射。一个数据库在逻辑上被划分成一到若干个表空间,每个表空间由同一磁盘上的一个或多个数据文件(datafile)组成。
- oracle用户:表数据由Oracle用户放入到表空间当中,而这些表空间会随机的把数据放入到一个或者多个数据文件中。oracle对表数据的管理是通过用户对表的管理去查询,而不是直接对数据文件或表空间进行查询。因为不同用户可以在同一个表空间上面建立相同的表名。但是通过不同的用户管理自己的表数据。
Oracle用户
oracle用户的概念对于Oracle数据库至关重要,在现实环境当中一个服务器一般只会安装一个Oracle实例,一个Oracle用户代表着一个用户群,他们通过该用户登录数据库,进行数据库对象的创建、查询等开发。每一个用户对应着该用户下的N多对象,因此,在实际项目开发过程中,不同的项目组使用不同的Oracle用户进行开发,不相互干扰。也可以理解为一个Oracle用户既是一个业务模块,这些用户群构成一个完整的业务系统,不同模块间的关联可以通过Oracle用户的权限来控制,来获取其它业务模块的数据和操作其它业务模块的某些对象。
Oracle用户创建
1 语法:创建用户 2 -- Create the user 3 create user Cloud--用户名 4 identified by "Wfy123456"--密码 5 default tablespace USERS--表空间名 6 temporary tablespace temp --临时表空间名 7 profile DEFAULT --数据文件(默认数据文件) 8 account unlock; -- 账户是否解锁(lock:锁定、unlock解锁)
创建用户
通过上面语句,可以创建一个Cloud用户,但是该用户现在还不能登录数据库,因为它没有登录数据库权限,最少他需要一个create session系统权限才能登录数据库。
用户权限
- Oracle用户权限分为:系统权限和对象权限。
- 系统权限:create session可以和数据库进行连接权限、create table、create view 等具有创建数据库对象权限。
- 对象权限:对表中数据进行增删改查操作,拥有数据库对象权限的用户可以对所拥有的对象进行相应的操作。
数据库角色
oracle角色是若干系统权限的集合,给用户进行授数据库角色,就是等于赋予该用户若干数据库系统权限。常用的数据库角色如下:
- CONNECT角色:connect角色是Oracle用户的基本角色,connect权限代表着用户可以和Oracle服务器进行连接,建立session(会话)。
- RESOURCE角色:resouce角色是开发过程中常用的角色。 RESOURCE给用户提供了可以创建自己的对象,包括:表、视图、序列、过程、触发器、索引、包、类型等。
- DBA角色:DBA角色是管理数据库管理员该有的角色。它拥护系统了所有权限,和给其他用户授权的权限。SYSTEM用户就具有DBA权限。
提示:系统权限只能通过DBA用户授权,对象权限由拥有该对象权限的对象授权(不一定是本身对象)!用户不能自己给自己授权!在实际开发过程中可以根据需求,把某个角色或系统权限赋予某个用户。授权语句如下:
1 语法:授权 2 --GRANT 对象权限 on 对象 TO 用户 3 grant select, insert, update, delete on ATE_DIE to cloud; 4 --GRANT 系统权限 to 用户 5 grant select any table to cloud; 6 --GRANT 角色 TO 用户 7 grant connect to cloud;--授权connect角色 8 grant resource to cloud;--授予resource角色 9 语法:取消用户权限 10 -- Revoke 对象权限 on 对象 from 用户 11 revoke select, insert, update, delete on ATE_DIE from cloud; 12 -- Revoke 系统权限 from 用户 13 revoke SELECT ANY TABLE from cloud; 14 -- Revoke 角色(role) from 用户 15 revoke RESOURCE from cloud; 16 语法:Oracle用户的其他操作 17 --修改用户信息 18 alter user cloud 19 identified by ****** --修改密码 20 account lock;--修改用户处于锁定状态或者解锁状态 (LOCK|UNLOCK )
授权语法
SQL语句介绍
SQL语句可以对Oracle进行对象创建、删除,数据的插入、删除、更新,以及数据库的管理等操作,SQL是一个结构化的的查询语言(Structured Query Language),不仅仅适用于Oracle数据库,再其它的数据也适用。在Oracle开发中,客户端把SQL语句发送给服务器,服务器对SQL语句进行编译、执行,把执行的结果返回给客户端。常用的SQL语句大致可以分为五类:
- 数据定义语言(DDL),包括 CREATE(创建)命令、 ALTER(修改)命令、 DROP(删除)命令等。
- 数据操纵语言(DML),包括 INSERT(插入)命令、 UPDATE(更新)命令、 DELETE(删除)命令、 SELECT … FOR UPDATE(查询)等。
- 数据查询语言(DQL),包括基本查询语句、Order By子句、 Group By子句等。
- 事务控制语言(TCL),包括COMMIT(提交)命令、 SAVEPOINT(保存点)命令、ROLLBACK(回滚)命令。
- 数据控制语言(DCL),GRANT(授权)命令、REVOKE(撤销)命令。
1 -- Create table 2 create table LOT_WAFER 3 ( 4 fab VARCHAR2(12) default '厂区未录入' not null,--地址 (1) 5 product VARCHAR2(40) not null,--(2) 6 flow VARCHAR2(40) not null, 7 lot VARCHAR2(40) not null, 8 lot_type VARCHAR2(12), 9 scribe_id VARCHAR2(40) not null, 10 wafer VARCHAR2(40) not null, 11 wafer_no VARCHAR2(2) not null, 12 run_no VARCHAR2(100) not null, 13 create_date DATE not null, 14 lot_owner VARCHAR2(40), 15 lot_comment VARCHAR2(100), 16 comment_detail VARCHAR2(400), 17 lot_state VARCHAR2(20), 18 update_time DATE 19 ) 20 tablespace USERS --(3) 21 pctfree 10 22 initrans 1 23 maxtrans 255 24 storage 25 ( 26 initial 64K 27 next 1M 28 minextents 1 29 maxextents unlimited 30 ); 31 -- Add comments to the table 32 comment on table LOT_WAFER --(4) 33 is 'WAFER下产线时的基本信息记录表'; 34 -- Add comments to the columns 35 comment on column LOT_WAFER.fab -- (5) 36 is '厂区'; 37 comment on column LOT_WAFER.lot_type 38 is 'Lot种类'; 39 comment on column LOT_WAFER.wafer_no 40 is 'COMPONENTID后两码'; 41 comment on column LOT_WAFER.create_date 42 is 'wafer下产线的时间'; 43 comment on column LOT_WAFER.lot_owner 44 is 'Run32 10/21-11/21.13IC工程补投小批量'; 45 comment on column LOT_WAFER.lot_comment 46 is '13IC工程补投小批量'; 47 comment on column LOT_WAFER.comment_detail 48 is '13IC工程补投小批量'; 49 comment on column LOT_WAFER.lot_state 50 is '该Lot当前状态'; 51 comment on column LOT_WAFER.update_time 52 is 'ETL maintains load datetime'; 53 -- Create/Recreate indexes 54 create unique index UK_LOT_WAFER on LOT_WAFER (WAFER, RUN_NO) 55 tablespace USERS 56 pctfree 10 57 initrans 2 58 maxtrans 255 59 storage 60 ( 61 initial 64K 62 next 1M 63 minextents 1 64 maxextents unlimited 65 );
表结构
Oracle建表(create table)
Oracle表是Oracle数据库的核心,是存储数据的逻辑基础。Oracle表是一个二维的数据结构,有列字段和对应列的数据构成一个数据存储的结构。可以简单看成行和列的二维表,列代表着Oracle字段(column),行代表着一行数据(即一条数据记录)。
Oracle字段数据类型
常用的Oracle列字段的数据类型如下:
数据类型 | 类型解释 |
VARCHAR2(length) | 字符串类型:存储可变的长度的字符串,length:是字符串的最大长度,默认不填的时候是1,最大长度不超过4000。 |
CHAR(length) | 字符串类型:存储固定长度的字符串,length:字符串的固定长度大小,默认是1,最大长度不超过2000。 |
NUMBER(a,b) |
数值类型:存储数值类型,可以存整数,也可以存浮点型。a代表数值的最大位数:包含小数位和小数点,b代表小数的位数。例子:number(6,2),输入123.4567,实际存入:123.45。 number(4,2),输入12345.678,提示不能存入,超过存储的指定的精度。 |
DATA | 时间类型:存储的是日期和时间,包括年、月、日、时、分、秒。内置函数sysdate获取的就是DATA类型 |
TIMESTAMP | 时间类型:存储的不仅是日期和时间,还包含了时区。内置函数systimestamp获取的就是timestamp类型 |
CLOB | 大字段类型:存储的是大的文本,比如:非结构化的txt文本,字段大于4000长度的字符串。 |
BLOB | 二进制类型:存储的是二进制对象,比如图片、视频、声音等转换过来的二进制对象 |
create table语句
Oracle数据库建表是通过create table命令来执行的,在system用户下创建一个LOT_WAFER(WAFER下产线时的基本信息记录表)create table 命令的使用。
1 -- Create table 2 create table LOT_WAFER 3 ( 4 fab VARCHAR2(12) default '厂区未录入' not null,--地址 (1) 5 product VARCHAR2(40) not null,--(2) 6 flow VARCHAR2(40) not null, 7 lot VARCHAR2(40) not null, 8 lot_type VARCHAR2(12), 9 scribe_id VARCHAR2(40) not null, 10 wafer VARCHAR2(40) not null, 11 wafer_no VARCHAR2(2) not null, 12 run_no VARCHAR2(100) not null, 13 create_date DATE not null, 14 lot_owner VARCHAR2(40), 15 lot_comment VARCHAR2(100), 16 comment_detail VARCHAR2(400), 17 lot_state VARCHAR2(20), 18 update_time DATE 19 ) 20 tablespace USERS --(3) 21 pctfree 10 22 initrans 1 23 maxtrans 255 24 storage 25 ( 26 initial 64K 27 next 1M 28 minextents 1 29 maxextents unlimited 30 ); 31 -- Add comments to the table 32 comment on table LOT_WAFER --(4) 33 is 'WAFER下产线时的基本信息记录表'; 34 -- Add comments to the columns 35 comment on column LOT_WAFER.fab -- (5) 36 is '厂区'; 37 comment on column LOT_WAFER.lot_type 38 is 'Lot种类'; 39 comment on column LOT_WAFER.wafer_no 40 is 'COMPONENTID后两码'; 41 comment on column LOT_WAFER.create_date 42 is 'wafer下产线的时间'; 43 comment on column LOT_WAFER.lot_owner 44 is 'Run32 10/21-11/21.13IC工程补投小批量'; 45 comment on column LOT_WAFER.lot_comment 46 is '13IC工程补投小批量'; 47 comment on column LOT_WAFER.comment_detail 48 is '13IC工程补投小批量'; 49 comment on column LOT_WAFER.lot_state 50 is '该Lot当前状态'; 51 comment on column LOT_WAFER.update_time 52 is 'ETL maintains load datetime'; 53 -- Create/Recreate indexes 54 create unique index UK_LOT_WAFER on LOT_WAFER (WAFER, RUN_NO) 55 tablespace USERS 56 pctfree 10 57 initrans 2 58 maxtrans 255 59 storage 60 ( 61 initial 64K 62 next 1M 63 minextents 1 64 maxextents unlimited 65 );
建表案例
代码解析:
(1)处:default 表示字段fab不填时候会默认填入‘厂区未录入’值。
(2)处:not null 表示product字段不能为空。
(3)处:表示表system存储的表空间是users,storage表示存储参数:区段(extent)一次扩展64k,最小区段数为1,最大的区段数不限制。
(4)处:comment on table 是给表名进行注释。
(5)处:comment on column 是给表字段进行注释。
通过上面crate table命令创建了LOT_WAFER(WAFER下产线时的基本信息记录表)后,还可以给表添加相应的约束来保证表数据的准确性。
1 案例2:LOT_WAFER(WAFER下产线时的基本信息记录表)添加约束 2 -- Create/Recreate primary, unique and foreign key constraints 3 alter table SYSTEM.LOT_WAFER 4 add constraint pk_lot_wafer_scribe_id primary key (SCRIBE_ID); 5 --把scribe_id当做主键,主键字段的数据必须是唯一性的 6 -- Create/Recreate check constraints 7 alter table SYSTEM.LOT_WAFER 8 add constraint ch_LOT_WAFER_product 9 check (product <> '123456');--给字段product添加约束,不等于123456
添加约束
Oracle查询(select)
Oracle表数据进行查询是数据查询语言(DQL)。下简单查询是利用SELECT命令从表中进行提取数据,SELECT命令结构如下:
select *|列名|表达式 from 表名 where 条件 order by 列名
1 案例1:查询WAFER下产线时的基本信息记录表(LOT_WAFER)中“C43500”的基本信息: 2 select t.* from SYSTEM.LOT_WAFER t where t.LOTID = 'C43500'; 3 Oracle查询(select) 4 案例2:查询“C43500”的厂区、Lot种类、wafer下产线的时间: 5 select t.fab,t.lot_type,t.create_date from SYSTEM.LOT_WAFER t where t.lotid = 'C43500'; 6 Oracle查询(select) 7 案例3:查询“C43500”所有信息,按wafer下产线的时间进行升序展示: 8 select t.* from SYSTEM.LOT_WAFER t where t.LOTID = 'C43500' ORDER BY T.create_date ASC
查(select)
语法解析:
1、“t”代表LOT_WAFER的别名。
2、”*” 代表所有字段。
3、表达式可以是函数(列名)、常数、连接词“||”等组成的表达式。
4、where子语句是查询语句的条件。
5、order by :查询结果按某个字段进行排序,默认是升序,desc是降序。
备份查询数据
Oracle进行表数据备份时,可以利用create table(建表)的方式对select查询的结果进行快速备份。备份查询数据命令结构:
create table 表名 as select 语句
1 create table SYSTEM.LOT_WAFER_2021 as select * from SYSTEM.LOT_WAFER; 2 select * from SYSTEM.LOT_WAFER_2021; 3 结果如下: 4 Oracle查询(select) 5 Oracle插入(insert into) 6 Oracle对表数据的插入是使用insert命令来执行的。 7 insert 命令结构: 8 insert into 表名(列名1,列名2,列名3.....)values(值1,值2,值3.....);
备份
Oracle插入(insert into)
Oracle对表数据的插入是使用insert命令来执行的。
insert 命令结构:
insert into 表名(列名1,列名2,列名3…..)values(值1,值2,值3…..);
在 Oracle 中,一个 INSERT 命令可以把一个select结果集一次性插入到一张表中。
语法结构如下:
INSERT INTO 表 SELECT 子句
语法解析:
1、列名可以省略,当列名不填时,默认的是表中的所有列,列的顺序是按照建表的顺序进行排列的。
2、列名的数量和值的数量要一致,并且值的类型要和列的类型一一对应。
3、当表当中某些字段设置了某些约束的情况下,必须按照字段的约束来进行该值的插入,例如:WAFER下产线时的基本信息记录表(LOT_WAFER)当中设置有主键(主键字段是scribe_id),因此该字段必须具有唯一性,不能和原有的数据重复。fab、prouduct、lot、wafer_no等字段是必填字段,因此是必须有值的。
1 案例1:向WAFER下产线时的基本信息记录表(LOT_WAFER)插入一条数据: 2 insert into SYSTEM.LOT_WAFER2021 3 (fab, 4 product, 5 flow, 6 lot, 7 lot_type, 8 scribe_id, 9 wafer, 10 wafer_no, 11 run_no, 12 create_date, 13 lot_owner, 14 lot_comment, 15 comment_detail, 16 lot_state, 17 update_time) 3 18 values 4 19 ('', 20 'IAL4UM-AA', 21 '', 22 'E2N316', 23 'P', 24 'E2N316#20', 25 '20', 26 '2021/12/7 7:55:35', 27 'ERP', 28 'Create', 29 'Lot User:3111144 CommentDetail:', 30 'Created', 31 '2021/12/9 10:36:13')
插入语句(insert into)
Oracle更新(update)
Oracle对表数据的更新是使用update命令来执行的。
update命令结构:
update 表名 set 列名1=值1,列名2=值2,列名3=值3….. where 条件
update 利用另外一张表关联更新本表数据的命令结构如下:
update 表1 set 列名=(select 列名 from 表2 where 表1.列名=表2.列名)where exists (select 1 from 表2 where 表1.列名=表2.列名)
1 案例1、更新scribe_id“E2N3xx#03”的lot和wafer信息: 2 update system.wip_lot_wafer t 3 set t.lot = 'E2xx16', t.wafer = 'A04xxxx03' 4 where t.scribe_id = 'E2N3xx#03'; 5 commit;
更新语句(update)
Oracle删除(delete)
Oracle中对表数据的删除是利用delete命令进行的。
delete命令结构:
delete from 表名 where 条件
命令解析:
1、当delete from不加where条件时,表示是把表中的数据全部删除。
1 案例1、删除WAFER下产线时的基本信息记录表(wip_lot_wafer)中scribe_id “E2N316#20”的数据: 2 delete from wip_lot_wafer t where t. scribe_id=' E2N316#20';
删除语句(delete)
truncate命令
truncate命令也是数据删除命令,他是直接把Oracle表数据一次删除的命令,truncate命令是一个DDL命令,不同于delete是DML命令。
truncate命令结构:
truncate table 表名;
1 案例2、删除WAFER下产线时的基本信息记录表(wip_lot_wafer): 2 truncate table wip_lot_wafer;
删除语句(truncate)
truncate和delete都能删除表中的数据,他们的区别:
1、TRUNCATE 是 DDL 命令,命令执行完就提交,删除的数据不能恢复; DELETE 命令是 DML 命令,命令执行完需提交后才能生效,删除后的数据可以通过日志文件恢复。
2、如果表中的数据量较大,TRUNCATE的速度比DELETE速度快很多。
3、truncate删除将重新设置表索引的初始大小,而delete不能。
4、delete能够触发表上相关的delete触发器,而truncate则不会触发。
5、delete删除的原理是一次一条从表中删除数据,并将删除操作当做事物记录在数据库的日志当中,以便进行数据回滚。而truncate是一次性进行数据页的删除,因此执行速度快,但是不能回滚。
总结:truncate命令是属于DDL命令,一次性删除表中所有数据,并且数据不能恢复,在实际开发过程当中truncate命令慎用。
Oracle运算符
Oracle运算符包括算术运算符、关系运算符和逻辑运算符。
Oracle算术运算符
Oracle算术运算符包括+、-、*、/四个,其中/获得的结果是浮点数。
Oracle关系运算符
Oracle关系运算符在where条件语句当中经常使用到,常用的关系如下:
符号 | 解释 | 符号 | 解释 |
= | 等于 | <>或者!= | 不等于 |
> | 大于 | >= | 大于或者等于 |
< | 小于 | <= | 小于或者等于 |
Oracle逻辑运算符
Oracle的逻辑运算符有三个:AND、OR、NOT。
Oracle字符串连接符||
Oracle中利用字符串连接符||(即双竖线)来连接查询结果。
Oracle DISTINCT
Oracle DISTINCT关键字的作用可以对Oracle查询结果进行重复数据的消除。具体的做法参考案例:
DISTINCT语法结构:
SELECT DISTINCT 列1,列2,列3… from 表名;
语法解析:
当关键字DISTINCT后面只有一个列1时,表示的是单个字段查询结果的不重复数据,当后面跟着多个列值时,表示的是多个字段组成的查询结果的所有唯一值,进行的是多个字段的分组消除。
1 案例1、查询WAFER下产线时的基本信息记录表(wip_lot_wafer)“lot,wafer,scribe_id”的所有出现的数据,不重复:(案例所需表结构) 2 select distinct lot,wafer,scribe_id from wip_lot_wafer;
去重语句(distinct )
Oracle 条件查询
Oracle条件查询时经常使用=、IN、LIKE、BETWEEN…AND来作为条件查询的操作符。
-
- =操作符:在条件查询语句中“=”表示列值等于一个固定值所查询出的结果。
- IN操作符:在 Where 子句中可以使用 IN 操作符来查询其列值在指定的列表中的查询结果。
- BETWEEN…AND:在 WHERE 子句中,可以使用 BETWEEN…AND 操作符来查询列值包含在指定区间内的查询结果 。
- LIKE模糊查询:在Oracle条件查询where条件之中,当遇到查询值不清楚时,可以利用模糊查询LIKE关键字进行where条件的模糊查询。LIKE 关键字通过字符匹配检索出所需要的数据行。
%:表示零个或者多个任意字符。
_:代表一个任意字符。
\:指转义字符,“\%”在字符串中表示一个字符“%”。
Oracle集合运算
Oracle集合运算就是把多个查询结果组合成一个查询结果,oralce的集合运算包括:INTERSECT(交集)、UINION ALL(交集重复)、UINION(交集不重复)、MINUS(补集)。
- INTERSECT(交集),返回两个查询共有的记录。
- UNION ALL(并集重复),返回各个查询的所有记录,包括重复记录。
- UNION(并集不重复),返回各个查询的所有记录,不包括重复记录 (重复的记录只取一条)。
- MINUS(补集),返回第一个查询检索出的记录减去第二个查询检索出的记录之后剩余的记录。
当我们使用Oracle集合运算时,要注意每个独立查询的字段名的列名尽量一致(列名不同时,取第一个查询的列名)、列的数据类型、列的个数要一致,不然会报错。
1 INTERSECT(交集): 2 3 select * from wip_lot_wafer 4 intersect 5 select * from wip_lot_wafer2021; 6 7 8 UNION ALL(并集重复) 9 10 select * from wip_lot_wafer 11 union all 12 select * from wip_lot_wafer2021; 13 14 15 UNION(并集不重复) 16 17 select * from wip_lot_wafer 18 union 19 select * from wip_lot_wafer2021; 20 21 22 MINUS(补集) 23 24 select * from wip_lot_wafer 25 minus 26 select * from wip_lot_wafer2021;
集合运算
Oracle连接查询
Oracle连接查询,包含内关联(inner jion )和外关联(outer join),其中外关联又分为左外关联(left outer join)、右外关联(right outer join)和全外关联(full outer join)其中外关联可以使用(+)来表示。
内连接:
Oracle内连接:两张表通过某个字段进行内关联,查询结果是通过该字段按关系运算符匹配出的数据行。其中可以包括:
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列。
2、不等连接:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值,这些关系运算符包括>、>=、<=、!>、!<、<>。
1 select a.lot, 2 a.lot_type, 3 a.scribe_id, 4 b.priority, 5 b.die_qty, 6 b.product 7 from wip_lot_wafer a, wip_lot b 8 where a.lot = b.lot;
内连接语句
外连接:
外连接,返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接或左连接))、右表(右外连接或右连接)或两个边接表(全外连接)中的所有数据行。
1、left join(左联接)等价于(left outer join)返回包括左表中的所有记录和右表中联结字段相等的记录。
2、right join(右联接)等价于(right outer join)返回包括右表中的所有记录和左表中联结字段相等的记录。
3.、full join (全连接)等价于(full outer join)查询结果等于左外连接和右外连接的和。
1 left join(左联接) 2 --左外连接(wip_lot_wafer表中数据都存在,wip_lot不在wip_lot_wafer中存在的相关字段为null值) 3 select a.*, b.product, b.priority 4 from wip_lot_wafer a 5 left join wip_lot b 6 on a.lot = b.lot; 7 --左外连接(利用(+)在右边)另外一种写法 8 select a.*, b.product, b.priority 9 from wip_lot_wafer a,wip_lot b 10 where a.lot=b.lot(+); 11 12 13 14 right join(右连接) 15 --右外连接(wip_lot表中数据都存在,wip_lot_wafer不在wip_lot存在的相关字段为null值) 16 select a.*, b.product, b.priority 17 from wip_lot_wafer a 18 right join wip_lot b 19 on a.lot = b.lot; 20 --右外连接(利用(+)在左边)另外一种写法 21 select a.*, b.product, b.priority 22 from wip_lot_wafer a,wip_lot b 23 where a.lot(+)=b.lot; 24 25 26 full join(全外连接) 27 --(全外连接(stuinfo、stuinfo_2018表中数据都存在, 28 --stuinfo不在stuinfo_2018存在的学生相关字段为null值, 29 --stuinfo_2018不在stuinfo存在的学生相关字段为null值) 30 select a.*, b.product, b.priority 31 from wip_lot_wafer a 32 full join wip_lot b 33 on a.lot = b.lot;
外连接语句
Oracle伪列
Oracle的伪列是Oracle表在存储的过程中或查询的过程中,表会有一些附加列,称为伪列。伪列就像表中的字段一样,但是表中并不存储。伪列只能查询,不能增删改。Oracle的伪列有:rowid、rownum。
ORACLE ROWID
Oracle表中的每一行在数据文件中都有一个物理地址, ROWID 伪列返回的就是该行的物理地址。使用 ROWID 可以快速的定位表中的某一行。 ROWID 值可以唯一的标识表中的一行。通过Oracle select 查询出来的ROWID,返回的就是该行数据的物理地址。
1 select t.*,t.rowid from wip_lot t ; 2 select t.*,t.rowid from wip_lot t where t.rowid='AAASjBAAEAAAAcrAAA';
rowid语句
ORACLE ROWNUM
ORACLE ROWNUM表示的Oracle查询结果集的顺序,ROWNUM为每个查询结果集的行标识一个行号,第一行返回1,第二行返回2,依次顺序递增。
ROWNUM 与 ROWID 不同, ROWID 是插入记录时生成, ROWNUM 是查询数据时生成。ROWID 标识的是行的物理地址。 ROWNUM 标识的是查询结果中的行的次序。
ROWNUM经常用来限制查询的结果返回的行数,求前几行或前几名的数据。
1 select t.lot,t.lot_type,t.priority,t.wafer_qty,t.die_qty,rownum from wip_lot t ; 2 3 4 案例1、返回wip_lot表中创建时间最早的前四位行数据。 5 select * from (select t.lot,t.lot_type,t.priority,t.wafer_qty,t.die_qty,t.create_date, rownum 6 from wip_lot t 7 order by t.create_date asc) where rownum <=4;
rownum语句
今天的文章Oracle基础教程分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/55328.html