• 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;

  • 相关阅读:
    面试1
    初级算法-数组1
    程序员常用单词
    SpringBoot
    JDBC
    animate.css 实现 网页滚动指定位置添加动画
    解决打包上线缓存问题
    组件之间双向绑定
    按照给定数组排序原数组
    扩展运算符... 的使用
  • 原文地址:https://www.cnblogs.com/huozhicheng/p/2533201.html
Copyright © 2020-2023  润新知