oracle--建表小题目

create table myemp as select * from emp; //此语句执行之后,会将表结构以及数据完整的复制出来,创建表emp就像那张临时表

添加数据:
insert语句中,不插入和插入空值,效果是一样的,如果不插入,那么默认会填入空值
在sql中插入日期,如果是使用表中的固定好的格式,那么直接插固定格式的字符串
如果使用的不是固定好的格式,那么使用TO_DATE("2001-01-03",'yyyy-mm-dd');

修改数据:
update emp set comm = 100 where empno = '11';

注意:增删改的数据,如果我们不去commit ,那么这些数据会被锁住,别人不能动他,
只有我们commit或者rollback之后,别人才能动

emp{empno,ename,job,mgr(雇员的领导的编号),hiredate,sal,comm,deptno}
dept{deptno,dname,loc}
salgrade{grade,losal,hisal}
bonus{ename,job,sal,comm}




delete清空数据 可以使用rollback回滚
truncate清空数据,不能回滚,会立即释放资源
truncate table 表名称 //这个不是对表结构修改,但是居然也使用了table 关键字,不过这个命令式Oracle自己的命令


Oracle中常用数据类型:NUMBER,VARCHAR,DATE
VARCHAR,VARCHAR2 : 表示字符串,有长度限制,为255
NUMBER(n) 等效于INT, NUMBER(m,n)等效于FLOAT
DATE
CLOB : char large object : 大文本对象,最大存放4G的文本
BLOB: byte large object : 大二进制对象,最大存放4G,放非文本,如电影,mp3,图片

表的建立与删除

create table 表名称(
   字段名称 字段类型 {default 默认值}
)

create table 表名称 AS(子查询)

如果现在子查询写的是: select * from emp ;复制表结构以及表内容
如果现在子查询写的是:select * from emp where 1==2,加入了一个永远不可能成立的条件,
则此时表示只复制表结构,不复制表内容

创建一张person表:
create table person(
   pid VARCHAR2(10),
   name VARCHAR2(200),
   age NUMBER(3),
   birthday DATE,
   sex VARCHAR2(2) DEFAULT '男'
   
); //表的创建语句和java的声明是相反的

删除表:
drop table person;

修改表结构语法:
alter table 表名称 add( 
     pid VARCHAR2(10),
     name VARCHAR2(200) default '男'
)
alter table 表名称 modify(
   pid VARCHAR2(5)  DEFAULT '8888'
) //如果在修改表结构的时候,如果假设数据库中对应的字段里面有一个超过修改字段长度的数据,那么肯定无法实现
注意:对表结构的增删改: 
create table XX() ,
drop table XX
alter table XX add ()
alter table XX modify()

ALTER TABLE office_organization MODIFY(desc VARCHAR2(20) CONSTRAINT nn_desc NOT NULL) ;







为表重命名
在Oracle中才能使用的rename
rename 旧的表名称 to 新的表名称

DB2数据库没有alter指令,DB2是最大型的数据,世界上有十个海量数据库其中7个就是DB2

现在有一张国家表,里面只有一个国家名称的字段,内容如下:"中国,美国,巴西,荷兰",
现在要求通过查询实现对战功能
中国---》美国
中国---》巴西
中国---》荷兰
美国---》中国
美国---》巴西
美国---》荷兰

问:此程序如何实现?
create table conutry(
   name vatchar2(4)
)

select c1.name ||'---->'||c2.name 
from country c1,country c2
where c1.name <>c2.name

id----varchar2(4)
name--varchar2(50)
address---varchar2(50)

题目:
有某个学生运动会比赛信息的数据库,保存了如下的表:
运动员sport(运动员编号sporterid,运动员姓名name,运动员性别 sex,所属系号 department);
项目item (项目编号 itemid,项目名称itemname,项目比赛地点location)
成绩grade(运动员编号sportid,项目编号itemid,积分mark)

1.建表
(1)定义各个表的主码外码约束
(2)运动员的姓名和所属系别不能为空值
(3)积分要么为空,要么为6,4,2,0,分别代表一。二,三名和其他名次的积分

create table sporter(
   sporterid varchar2(128) ,
   name varchar2(10) NOT NULL,
   sex varchar2(2),
   department varchar2(128) NOT NULL,
   constraint sport_sporterid_pk PRIMARY KEY(sporterid),
   constraint sport_sex_ck CHECK(sex IN ('男','女'))
)
项目item (项目编号 itemid,项目名称itemname,项目比赛地点location)
create table item(
   itemid varchar2(128),
   itemname varchar2(50),
   location varchar2(128),
   CONSTRANINT item_itemid_pk PRIMARY KEY(itemid)
)
成绩grade(运动员编号sportid,项目编号itemid,积分mark)
create table grade(
   sportid varchar2(128),
   itemid varchar2(128),
   mark NUMBER(1),
   CONSTRAINT sporter_grade_sportid_fk FORIGEN KEY(sportid) REFERENCES sport(sportid) ON DELETE CASCADE,
   CONSTRAINT item_grade_itemid_fk FOREIGEN KEY(itemid) REFERENCES item(itemid) ON DELETE CASCADE,
   CONSTRAINT grade_mark_ck CHECK(mark IN(6,4,2,0))
)

你可能感兴趣的:(数据结构,oracle,sql,db2,Office)