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;

 

 

 

 

 

                                      

 

posted @ 2018-05-27 18:45  coderlzb  阅读(238)  评论(0编辑  收藏  举报