一、创建和管理表

1.1 常用的数据类型

 varchar/varchar2  ---> 表示一个字符串

 number(n)  ---> 表示一个整数,整数的长度为n,可以使用int

 number(m,n)  ---> 表示一个小数,数字小数长度为n,整数长度为m-n,可以使用float

 date  ---> 表示日期类型,按照标准日期格式存放

 clob ---> 大对象,表示大文本数据,一般存放4G文本

 blob  ---> 大对象,表示二进制数据,最大可以存放4G,如:电影、歌曲、图片

1.2 表的建立

  语法: create table 表名称(

  字段名称1 字段类型 [default 默认值],

  ...

  字段名称n 字段类型 [default 默认值],

  )

 create table 表名称 as(子查询)  ---> 将子查询的结果作为一张表

  如果子查询写的是:select * from emp; 表示将表结构和表内容一起复制

  如果子查询写的是:select * from emp where 1 =2; 加入一个永远都不会成立的条件,

则表示复制的只是表的结构,不复制表的内容

  复制表的结构: select table temp as(select* from emp where 1=2);

1.3 表的删除

  语法:drop table 表名称;

1.4 表的修改

  通过alter指令可以增加新的列

  1:为emp表增加一个address

   alter table from add(address varchar2(200)default'暂无地址');

  2:修改emp表中的ename,将长度改为50

   alter table from modify(ename varchar2(50));

1.5 重命名表

  语法:rename 旧的表名称 to 新的表名称

1.6 截断表

  如果需要清空一张表的数据,但是同时不需要回滚,可以立刻释放资源就可以使用截断表

  语法:truncate table 表名称

二、约束

  使用约束可以更好的保证数据库中数据的完整性

  2.1约束的分类

    a、主键约束primary key:表示一个唯一的标识,不可重复,不可为空

     一般都使用在id上,主键约束可以在建表的时候指定

     1:创建一张person表,在pid上增加主键约束

       createtable person(

       pidvarchar2(18)primary key,

       namevarchar2(200),

       agenumber(3),

       birthdaydate,

       sevvarchar2(3)default'',  //默认值

       )

     2:指定约束的名称:

       createtable person(

       pidvarchar2(18),

       namevarchar2(200),

       agenumber(3),

       birthdaydate,

       sexvarchar2(3)defult'',

       connstraintperson_pid_pk primary key(pid)

       )

    b、唯一约束unique:一个表中值允许建立一个主键约束,而其他列如果不希望出现重复的

值,就可以使用唯一约束

     create table person(

     pid varchar2(18),

     name varchar2(200),

      age number(3),

     birthday date,

     sex varchar2(3)default'',

     constraint person_pid_pk primary key(pid)

     )

    c、检查约束check:检查一个列的内容是否合法

     create table person(

     pid varchar2(18),

     name varchar2(200)unique not null,

     age number(3)not null check(age between 0 and 150),

     birthday date,

     sex varchar2(3)default '' check (sex in('','','')),

     constraint person_pid_pk primary key(pid)

     )

 

    d、非空约束not nill:字段中的内容不能为空

     create table person(

     pid varchar2(18),

     name varchar2(200)not null,

     age number(3)not null,

     birthday date,

     sex varchar2(3)default'',

     constraint person_pid_pk primary key(pid)

     )

    e、主-外键约束foreign key:两张表中进行约束

     例:完成一个程序,一本书只属于一个人

       createtable person(

       pidvarchar2(18),

       namevarchar2(200)not null,

       agenumber(3)not null,

       birthdaydate,

       sexvarchar2(3)defult '',

       constraintperson_pid_pk primary key(pid),

       constraintperson_name_uk unique(name),

       constraintperson_age_ck check(age between o and 150),

       constraintperson_sex_ck check(sex in('','',''))

       );

 

       createtable book(

       bidnumber primary key not null,

       bnamevarchar2(20),

       bpricenumber(5,2),

       pidvarchar2(18),

       constraintperson_book_pid_fk foreign key(pid)references person(pid)

       );

 

       insertinto person(pid,name,age,birthday,sex)values('010101','

',23,to_date('1992-2-19','yyyy-mm-dd'),'');

       insertinto book(bid,dname,bprice,pid)values(1,'Java',89.9,'010101');

    使用主-外键关联时的注意事项:

    1、在子表中设置的外键,在父表中必须是主键

    2、删除时应该先删除子表,在删除父表

 

    在主-外键关联中也可以使用级联删除,即一个表中的数据在删除时,可以自动删除其对应的

子表记录

    例:

       createtable book(

       bidnumber primary key not null,

       bnamevarchar2(20),

       bpricenumber(5,2),

       pidvarchar2(18),

       constraintperson_book_pid_fk foreign key(pid) references person pid

on detele

       cascade

       )

   

    f、修改约束

     如果一张表已经建立完成,则可以为其添加约束,关于约束类型的命名,一定要统一:

       --primarykey-->主键字段_pk

       --unique-->字段_uk

       --check-->字段_ck

       --foreignkey-->父字段_子字段_fk

     1:为person添加一个约束

       altertable person add constraint person_pid_pk primary key(pid);

     2:删除person中的主键约束

       altertable person drop constraint person_pid_pk; 

三、rownum

 rownum:表示行号,实际上这个是一个列的列名,一般称这个列为伪列

  1:在查询雇员表时加上rownum这个列名称

   select rownum,empno,ename,job,sal,hiredate from emp;

   rownum 本身采用自动编号的形式出现。

  2:查询出前5条雇员信息

    select rownum,empno,ename,job,sal,hiredatefrom emp where rownum <= 5;

  3:查询出6-10条雇员信息

   select * from (select rownum m,empno,ename,job,sal,hiredate from empwhere

rownum <=10) temp where temp.m >5;

  4:查询出后5条雇员信息

   select * from (select rownum m,empno,ename,job,sal,hiredate from empwhere

rownum <=15 )temp where temp.m >10;

四、集合操作

  三种集合操作:并(union)、交(intersect)、差(minus

  4.1union

    将多个查询的结果组合到一个查询结果中,没有重复的内容

  4.2union all

    将多个查询结果组合到一个查询之中,但是包含了重复值

  4.3intersect

    返回多个查询结果中相同的部分

  4.4 minus

    返回两个查询结果的差集

  例:复制emp表,将部门20的值全部取出

   create table emp20 as select * from emp where empno = 20;

   1)、验证union

     select * from emp

     union

     select * from emp20;

   2)union all

     select * from emp

     union all

     select * from emp20;

   3)、验证intersect

     select * from emp

     intersect

     select * from emp20;

   4)、验证minus

     select * from emp

     minus

     select * from emp20;