Orcal操作相关的增删改查
一.sql 结构化查询语言
oracle和MySQL的查询语言很像,sql:Structured Query Language
在oracle里的增删改查主要用到下面的关键字:
DDL: 数据定义语言 create alter drop
DQL: 数据查询语言 select
DML: 数据操作语言 insert update delete
DCL : 数据控制语言 grant revoke
TCL: 事务控制语言 commit rollback savepoint
二、表的操作:
创建表:
create table 表名 (列名 属性;);
查:
select table_name from user_tables;(查询库中所有的表格)
查看表结构:
desc 表名;
表重命名:
rename 原表名 to 新表名;
删除表:
drop 表名;
三、表的字段操作:
增:
alter table 表名 add 列名 列的属性(数据类型等); --单列操作
alter table 表名 add (列名1 列1的属性,列名2 列2的属性,…) --多列操作
删:
alter table 表名 drop column 列名; --单列操作
alter table 表名 drop (列1,列2); --多列操作(多列不需要加column)
改:
alter table 表名 modify 列名 新属性; --单列操作
alter table 表名 modify (列名1 列1的新属性,列名2 列2的新属性);–多列操作
四、添加约束
约束用于确保数据库数据满足特定的商业规则。在oracle中,约束包括:not null、 unique, primary key, foreign key和check 五种。
1)、not null(非空)
如果在列上定义了not null,那么当插入数据时,必须为列提供数据。
2)、unique(唯一)
当定义了唯一约束后,该列值是不能重复的,但是可以为null。
3)、primary key(主键)
用于唯一的标示表行的数据,当定义主键约束后,该列不但不能重复而且不能为null。
需要说明的是:一张表最多只能有一个主键,但是可以有多个unqiue约束。
4)、foreign key(外键)
用于定义主表和从表之间的关系。外键约束要定义在从表上,主表则必须具有主键约束或是unique 约束,当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为null。
5)、check
用于强制行数据必须满足的条件,假定在sal列上定义了check约束,并要求sal列值在1000-2000之间如果不在1000-2000之间就会提示出错。
1.添加主键约束:
alter table 表名 add constraint pk_主键约束名(一般是列名) primary key(列名)
2.检查约束:
alter table 表名 add constraint ck_约束名 check(约束条件)
3.唯一约束unique
altertable 表名 add constraint un_约束名 unique(列名)
4、外键约束
alter table 表名 add constraint fk_约束名 foreign key (外键列) references 表2(主键列)
删除:
alter table 表名 drop constraint 约束名;
查看当前用户所有的约束
select * from user_constraints;
查看某个表中的约束
select * from user_constraints where table_name=’表明必须大写 ';
五.数据操作
1.增:
insert into 表名(列名,…,列名) values(值,…值) //这种添加的方式是把要插入的数据列名也写出来
insert into 表名 values(值,…值) //这种只需要给插入的值即可
注意:在插入数据的时候我们要注意插入的数据的类型和插入的数据的数目和表里给的字段是不是一样多,还有插入的时候要考虑字段的约束条件.
插入表格
insert into…select…表复制语句 语法:insert into table2(field1,field2,…) select value1,value2,… from table1
2.删:
delete from 表名 //清空
deletefrom 表名 where//带条件的删除
3.改
改也就是更新
update 表名 set 列名=值,列名=值 //无条件全部修改
update 表名 set 列名=值,列名=值 where 条件
4.删除
delete from 表名
delete from 表名 where 条件
删除某一列数据(该列必须可以为null):
1.update 表名 set 列名=null;
2.delete from 表名 where 列名 is not null ;
3.查询的语法
①select * from 表名; --查看表的全部信息
②select 列1,列2 from 表名; --查看表的列1,列2信息
select 列名,列名 //要显示数据的列 * 所有列
from 数据源 //数据的来源
where 条件 //筛选符合条件的数据
group by 列名 // 将数据根据指定列进行分组
having 条件 // 分组后,筛选符合条件的数据
order by 列名 [asc|desc] // 根据执行的列进行排序,asc升序 desc降序
4.去除重复行
如何取消重复行distinct
语法:select distinct 列1,列2 … from 表名;
select distinct deptno(列1), job(列2) from emp(表名);
分页查询
根据rowid来分
SELECT *
FROM EMP
WHERE ROWID IN
(SELECT RID
FROM (SELECT ROWNUM RN, RID
FROM (SELECT ROWID RID, EMPNO FROM EMP ORDER BY EMPNO DESC)
WHERE ROWNUM <= ( (currentPage-1) * pageSize + pageSize )) --每页显示几条
WHERE RN > ((currentPage-1) * pageSize) ) --当前页数
ORDER BY EMPNO DESC;
eg、
-- 5 = (currentPage-1) * pageSize + pageSize 每页显示几条
-- 0 = (currentPage-1) * pageSize 当前页数
SELECT *
FROM EMP
WHERE ROWID IN
(SELECT RID
FROM (SELECT ROWNUM RN, RID
FROM (SELECT ROWID RID, EMPNO FROM EMP ORDER BY EMPNO DESC)
WHERE ROWNUM <= ( (1-1) * 5 + 5 )) --每页显示几条
WHERE RN > ((1-1) * 5) ) --当前页数
ORDER BY EMPNO DESC;