DML操作(新增、更新、查询、伪列)
创建表:
CREATE TABLE <table_name>(
column1 DATATYPE [NOT NULL] [PRIMARY KEY],
column2 DATATYPE [NOT NULL],
...
[constraint <约束名> 约束类型 (要约束的字段)
... ] );
create table t_student(
s_id number(8) PRIMARY KEY,
s_name varchar2(20) not null,
s_sex varchar2(8),
clsid number(8),
constraint u_1 unique(s_name),
constraint c_1 check (s_sex in ('MALE','FEMALE'))
);
从现有的表创建表及复制其数据
CREATE TABLE <table_name> as <SELECT 语句>
create table emp as select * from scott.emp;
create table emp as select empno,ename from scott.emp --表结构只有empno和ename两个字段及该两字段对应的数据
--如果只复制表的结构不复制表的数据则:
create table emp as select * from scott.emp where 1=2;
修改表:
1、添加字段:
ALTER TABLE <table_name> ADD (字段1 类型 [NOT NULL], 字段2 类型 [NOT NULL] ... );
alter table t_student add (s_age number(3),s_address varchar2(20));
2、修改字段:
ALTER TABLE <table_name> MODIFY(字段1 类型,字段2 类型 ... );
alter table t_student modify(s_name varchar2(50),s_address varchar2(100));
3、删除字段:
ALTER TABLE <table_name> DROP(字段1,字段2... );
alter table t_student drop(s_age,s_address);
4、修改字段名称:
ALTER TABLE <table_name> RENAME COLUMN 原字段名称 TO 新字段名称;
alter table t_student rename column s_id to s_no;
删除表:
删除表结构及数据(删除后可在回收站查看并恢复)
DROP TABLE <table_name>;
删除表结构及数据(删除后不可在回收站查看并恢复)
DROP TABLE <table_name> PURGE;
查看回收站:
show recyclebin; 或 select * from recyclebin;
清空回收站:
purge recyclebin;
新增:
INSERT INTO table_name (column1,column2,...) VALUES ( value1,value2, ...);
insert into emp (empno,ename) values(1111,'itcast');
INSERT INTO <table_name> <SELECT 语句>;
create table t1 as select * from emp where 1=2;
insert into t1 select * from emp where sal>2000;
修改:
UPDATE table_name SET column1=new value,column2=new value,... WHERE <条件>;
update emp set sal=3000 where ename='xxx';
查询:
伪表:dual是一个虚表,用来构成select的语法规则,Oracle保证dual里面永远只有一条记录
查看当前用户:
select user from dual;
用来调用系统函数:
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
得到序列的下一个值或当前值
--获得序列seq的下一个值
select seq.nextval from dual;
--获得序列seq的当前值
select seq.currval from dual;
可以用做计算器
select 2*8 from dual;
rowid是物理结构上的,在每条记录insert到数据库中时候,都会有一个唯一的物理记录,通一条记录在不同查询中对应的rowid相同
SELECT ROWID,字段名... FROM 表名;
select rowid, emp.* from emp;
伪列:rownum是根据sql查询出来的结果每行分配一个逻辑编号,每次的查询都会有不同的编号,编号从1开始
SELECT ROWNUM,字段名... FROM 表名;
ROWNUM 不能使用大于号“>”
select rownum, emp.* from emp where rownum > 2 是不对的,没有任何结果
select rownum, emp.* from emp;
分页:
select * from (select rownum r,emp.* from emp where rownum < 7) where r > 3;
排序:
select rownum,t.* from (select empno,ename from emp order by empno desc) t;