zoukankan      html  css  js  c++  java
  • 五、oracle基本建表语句

    --创建用户
    create user han identified by han default tablespace
    users Temporary TABLESPACE Temp;
    grant connect,resource,dba to han; //授予用户han开发人员的权利
    
    --------------------对表的操作--------------------------
    --创建表
    create table classes(
           id number(9) not null primary key,
           classname varchar2(40) not null
    )      
    --查询表
    select * from classes;
    
    --删除表
    drop table students;
    
    --修改表的名称
    rename alist_table_copy to alist_table;
    
    --显示表结构
    describe test --不对没查到
    
    -----------------------对字段的操作-----------------------------------
    --增加列
    alter table test add address varchar2(40);
    
    --删除列
    alter table test drop column address;
    
    --修改列的名称
    alter table test modify address addresses varchar(40);
    
    --修改列的属性
    alter table test modi
    
    create table test1(
           id number(9) primary key not null,
           name varchar2(34)
          )
    rename test2 to test;
    
    --创建自增的序列
    create sequence class_seq increment by 1 start with 1 MAXVALUE 999999 NOCYCLE NOCACHE;
    
    select class_seq.currval from dual
    
    --插入数据
    insert into classes values(class_seq.nextval,'软件一班')
    commit;
    
    --更新数据
    update stu_account set username='aaa' where count_id=2;
    commit;
    
    --创建唯一索引
    create unique index username on stu_account(username);   --唯一索引不能插入相同的数据
    
    --行锁 在新打开的对话中不能对此行进行操作
    select * from stu_account t where t.count_id=2 for update; --行锁
    
    
    --alter table stuinfo modify sty_id to stu_id;
    
    alter table students drop constraint class_fk;
    alter table students add constraint class_fk foreign key (class_id) references classes(id);--外键约束
    alter table stuinfo add constraint stu_fk foreign key (stu_id) references students(id) ON DELETE CASCADE;--外键约束,级联删除
    
    alter table stuinfo drop constant stu_fk;   
    
    insert into students values(stu_seq.nextval,'张三',1,sysdate);
    
    insert into stuinfo values(stu_seq.currval,'威海');
    
    select * from stuinfo;
    
    create table zhuce(
           zc_id number(9) not null primary key,
           stu_id number(9) not null,
           zhucetime date default sysdate
    
    )
    
    create table feiyong (
           fy_id number(9) not null primary key,
           stu_id number(9) not null,
           mx_id number(9) not null,
           yijiao number(7,2) not null default 0,
           qianfei number(7,2) not null
           
    )
    
    
    create talbe fymingxi(
           mx_id number(9) not null primary key,
           feiyong number(7,2) not null,     //共7位数字,小数后有两位
           class_id number(9) not null
    }
    
    create table card(
           card_id number(9) primary key,
           stu_id number(9) not null,
           money number(7,2) not null default 0,
           status number(1) not null default 0   --0表可用,1表挂失
    )
    
    --链表查询
    
    select c.classname||'_'||s.stu_name as 班级_姓名,si.address from classes c,students s , stuinfo si where c.id=s.class_id and s.id=si.stu_id; 
    insert into students values(stu_seq.nextval,'李四',1,sysdate);
    insert into stuinfo values(stu_seq.currval,'南京');
    
    --函数
    select rownum,id,stu_name from students t order by id asc;
    
    
    --中间表实现多对多关联
    --(1   1, 1   n,n 1,n n )
    
    
    --1 n的描述   1的表不作处理   n的表有1表的字段
    --1 1的描述   主外键关联
    --n n的描述 中间表实现多对多关联
    
    create table course(
             course_id number(9) not null,
             couser_name varchar2(40) not null
    )
    alter table course to couse;
    create table stu_couse(
           stu_couse_id number(9) primary key,
           stu_id number(9) not null,
           couse_id number(9) not null
    
    )
    
    create unique index stu_couse_unq on stu_couse(stu_id,couse_id); --唯一学生
    create sequence stu_couse_seq increment by 1 start with 1 MAXVALUE 999999 NOCYCLE NOCACHE;
    
    
    create sequence couses_seq increment by 1 start with 1 MAXVALUE 999999 NOCYCLE NOCACHE;
    insert into course values(couses_seq.nextval,'计算机原理');
    insert into course values(couses_seq.nextval,'编译原理');
    insert into course values(couses_seq.nextval,'数据库原理');
    insert into course values(couses_seq.nextval,'数据结构');
    insert into course values(couses_seq.nextval,'计算机基础');
    insert into course values(couses_seq.nextval,'C语言初步');
    commit;
    
    insert into stu_couse values(stu_couse_seq.nextval,1,1);
    insert into stu_couse values(stu_couse_seq.nextval,1,3);
    insert into stu_couse values(stu_couse_seq.nextval,1,5);
    insert into stu_couse values(stu_couse_seq.nextval,1,5);
    
    insert into stu_couse values(stu_couse_seq.nextval,2,1);
    commit;
    select * from stu_couse;
    select * from course;
    
    --select s.stu_name,sc.couse_id, c.couser_name from students s,course c,stu_couse sc where stu_id=1
    
    --select couse_id from stu_couse where stu_id=1
    
    select cl.classname,s.stu_name,c.couser_name from stu_couse sc, students s,course c,classes cl where s.id=sc.stu_id and sc.couse_id=c.course_id and s.class_id=cl.id and s.id=1;
    
    --班级——姓名
    select c.classname,s.stu_name from students s,classes c where s.class_id=c.id and s.id=2;
    
    select * from students s where s.id=2
    --班级——姓名——课程
    
    select cl.classname,s.stu_name,c.couse_name from stu_couse sc,students s,classes cl,couse c where sc.stu_id=s.id and sc.couse_id=c.couse_id and s.id=26;
    
    
    --sql 语句的写法,现写出关联到的表,然后写出要查找的字段,第三 写出关联条件   ,记住在写关联到的表时先写数据多的表,这样有助于提高sql的效率
    
    select c.couser_name,s.stu_name from stu_couse sc,students s,course c where c.course_id=1 and c.course_id=sc.couse_id and sc.stu_id=s.id;
    
    select s.stu_name from students s,stu_couse sc where s.id=sc.stu_id group by s.id,s.stu_name;
    
    
    select c.classname,count(sc.couse_id) from stu_couse sc,students s,classes c where s.class_id=c.id and s.id=sc.stu_id group by c.classname;
    
    select s.stu_name, count(sc.couse_id) from stu_couse sc,students s,classes cl where s.id=sc.stu_id group by s.id,s.stu_name having count(sc.stu_couse_id)>3;
    班级 学生 选课数量
    select cl.classname,count(sc.stu_couse_id) from stu_couse sc,students s,classes cl where s.id=sc.stu_id and s.class_id=cl.id group by cl.classname;
    
    
    --班级 学生 选课数量
    select cl.classname,s.stu_name,count(sc.stu_couse_id) from stu_couse sc,students s,classes cl where s.id=sc.stu_id and s.class_id=cl.id group by s.stu_name;
    
    select cl.classname,s.stu_name,count(sc.stu_couse_id) from stu_couse sc ,students s,classes cl where sc.stu_id=s.id and s.class_id=cl.id group by s.id;
    
    select cl.classname,s.stu_name,count(sc.stu_couse_id) from stu_couse sc,students s,classes cl where sc.stu_id=s.id and s.class_id=cl.id group by s.stu_name;
    --班级 学生 所选课程id 所选课程名称
    
    
    --创建试图 目的把表联合起来 然后看成一个表,在与其他的联合进行查询 
    create view xsxk as select cl.classname, s.stu_name,c.couse_id, c.couse_name from stu_couse sc,students s,classes cl,couse c where sc.stu_id=s.id and sc.couse_id=c.couse_id and s.class_id=cl.id;
    
    select * from xsxk
    
    
    create view classstu as select s.id,c.classname,s.stu_name from students s,classes c where c.id=s.class_id;
    drop view classstu; --删除视图
    select * from classstu;
    create view stu_couse_view as select s.id ,c.couse_name from stu_couse sc,students s,couse c where s.id=sc.stu_id and sc.couse_id=c.couse_id;
    select * from stu_couse_view;
    create view csc as select cs.classname,cs.stu_name,scv.couse_name from classstu cs,stu_couse_view scv where cs.id=scv.id;
    select * from csc;
    
    
    select * from classes cross join students; --全连接,相当于select * from classes,students;
    
    select * from classes cl left join students s on cl.id=s.class_id; --左连接 不管左表有没有 都显示出来
    select * from classes cl right join students s on cl.id=s.class_id; --右连接
    select * from classes cl full join students s on cl.id=s.class_id; --全连接
    
    
    insert into classes values(class_seq.nextval,'软件四班');
    
    create table sales(
           nian varchar2(4),
           yeji number(5)
           
    );
    insert into sales values('2001',200);
    insert into sales values('2002',300);
    insert into sales values('2003',400);
    insert into sales values('2004',500);
    commit;
    select * from sales;
    drop table sale;
    
    
    select s1.nian,sum(s2.yeji) from sales s1,sales s2 where s1.nian>=s2.nian group by s1.nian order by s1.nian desc;
    
    select s1.nian,sum(s2.yeji) from sales s1,sales s2 where s1.nian>=s2.nian group by s1.nian;
    
    s
           年       年业绩总和 
           2001     200
           2002     500
           2003     900
           2004     1400
    
    
    create table test1(
           t_id number(4)
    );
    
    create table org(
           org_id number(9) not null primary key,
           org_name varchar2(40) not null,
           parent_id number(9)
    );
    
    create sequence org_seq increment by 1 start with 1 MAXVALUE 999999 NOCYCLE NOCACHE;
    drop sequence org_seq;
    insert into org values(1,'华建集团',0);
    insert into org values(2,'华建集团一分公司',1);
    insert into org values(3,'华建集团二分公司',1);
    insert into org values(4,'华建集团财务部',1);
    insert into org values(5,'华建集团工程部',1);
    insert into org values(6,'华建集团一分公司财务处',2);
    insert into org values(7,'华建集团一分公司工程处',2);
    
    select * from org;
    --不正确 不能实现循环
    select b.org_id , b.org_name ,b.parent_id from org a,org b where a.org_id=7 and a.parent_id=b.org_id;
    select * from org connect by prior parent_id=org_id start with org_id=7 order by org_id;
    select * from org connect by prior org_id=parent_id start with org_id=1 order by org_id;
    
    create table chengji(
           cj_id number(9) not null primary key,
           stu_cou_id number(9) not null,
           fen number(4,1)
           
    );
    insert into chengji values(1,1,62);
    insert into chengji values(2,2,90);
    insert into chengji values(3,3,85);
    insert into chengji values(4,4,45);
    insert into chengji values(5,5,68);
    insert into chengji values(6,6,87);
    commit;
    select * from chengji;
    select * from stu_couse;
    --在oracle 中好像不适用 alter table chengji change stu_cou_id stu_couse_id;alter table shop_jb change price1 price double;
    
    学生姓名   平均分
    select s.stu_name,avg(cj.fen) from stu_couse sc,chengji cj,students s where s.id=sc.stu_id and sc.stu_couse_id=cj.stu_couse_id group by s.id,s.stu_name;
    select s.stu_name from students s,stu_couse sc,chengji cj where s.id=sc.stu_id and sc.stu_couse_id=cj.stu_couse_id group by s.id,s.stu_name;
    select s.stu_name,cj.fen from students s,stu_couse sc,chengji cj where s.id=sc.stu_id and sc.stu_couse_id=cj.stu_couse_id and cj.fen>60;
    
    学生姓名   科目   成绩
    select s.stu_name,c.couse_name,cj.fen from stu_couse sc,students s,couse c,chengji cj where sc.stu_id=s.id and sc.couse_id=c.couse_id and sc.stu_couse_id=cj.stu_couse_id and cj.fen>60 order by=;
    
    select * from stu_couse;
    
     
    
    --集合运算
    --选择了课程3的学生   union 选择了课程5的学生   并集
    --选择了课程3 或者 选择了课程5的学生
    select s.stu_name from students s,couse c,stu_couse sc where s.id=sc.stu_id and sc.couse_id=c.couse_id and c.couse_id=3
    union
    select s.stu_name from students s,couse c,stu_couse sc where s.id=sc.stu_id and sc.couse_id=c.couse_id and c.couse_id=5
    
     
    
    --选择了课程3,5,2 的学生 intersect 选择课程1,2,4的学生    交集
    --求选择了课程 2 并且 选择了课程 3 的学生   交集
    select s.stu_name from students s,couse c,stu_couse sc where s.id=sc.stu_id and sc.couse_id=c.couse_id and c.couse_id=2
    intersect
    select s.stu_name from students s,couse c,stu_couse sc where s.id=sc.stu_id and sc.couse_id=c.couse_id and c.couse_id=3;
    
    
    --选择了课程3,5,8的学生   minus 选择了课程1,7,8的学生   --差集
    -- 求所有课程的成绩都大于 60 的学生 差集
    select distinct(s.stu_name) from stu_couse sc,students s,couse c,chengji cj where sc.stu_id=s.id and sc.couse_id=c.couse_id and sc.stu_couse_id=cj.stu_couse_id and cj.fen>60
    minus
    select distinct(s.stu_name) from stu_couse sc,students s,couse c,chengji cj where sc.stu_id=s.id and sc.couse_id=c.couse_id and sc.stu_couse_id=cj.stu_couse_id and cj.fen<60;
  • 相关阅读:
    WSP部署错误—SharePoint管理框架中的对象“SPSolutionLanguagePack Name=0”依赖其他不存在的对象
    Elevate Permissions To Modify User Profile
    Error with Stsadm CommandObject reference not set to an instance of an object
    ASP.NET MVC3添加Controller时没有Scaffolding options
    测试使用Windows Live Writer写日志
    配置TFS 2010出现错误—SQL Server 登录的安全标识符(SID)与某个指定的域或工作组帐户冲突
    使用ADO.NET DbContext Generator出现错误—Unable to locate file
    CSS
    HTML DIV标签
    数据库
  • 原文地址:https://www.cnblogs.com/c0liu/p/5450666.html
Copyright © 2011-2022 走看看