数据库:数据定义和单表查询

一、建立基本表
创建学生表(student)、学生选课表(SC)、课程表(course)
1)·学生表:Student_学号后四位 (Sno, Sname, Ssex, Sdept)其中学号Sno主码,其中sno为number,sname为varchar2(10),ssex为char(2),sdept为varchar2(10)
--学生表
create table Student_4085 (
    Sno number constraint pk_Sno primary key,  
    Sname varchar2(10),  
    Ssex char(2),  
    Sdept varchar2(20) 
);
2)·课程表:Course_学号后四位(Cno, Cname, Cpno, Ccredit)其中课程号Cno主码;先行课为外码参照Course表中Cno字段。其中cno为number,cname为varchar2(10),cpno为number,ccredit为number(2)。

--课程表
create table Course_4085 (
    Cno number constraint pk_Cno primary key,  
    Cname varchar2(10),  
    Cpno number,
    Ccredit number(2),
    foreign key (Cpno) references Course_4085(Cno)
);

3)·学生选课表:SC_学号后四位(Sno, Cno, Grade)其中(Sno、Cno)为主码;Sno为外码参照Student表中sno字段;Cno为外码参照Course表中cno字段。
--选课表
create table SC_4085 (
    Cno number,
    Sno number,
    Grade number,
    constraint pk_SC primary key(Sno, Cno),
    foreign key (Sno) references Student_4085(Sno),
    foreign key (Cno) references Course_4085(Cno)
);
二.修改基本表
1)在Student表中加入属性Sage(number型)。
Alter table Student_4085 add Sage number ;
2)修改某个表的属性的数据类型。

Alter table Student_4085 modify Ssex varchar(2);

3)给表student的sex列添加一个自定义约束sex只能取’男’,’女’两个值。

Alter table Student_4085 modify Ssex check (Ssex in ('男','女'));
三、索引操作
1.建立索引
1)在Student表上建立关于Sname的唯一索引stusnam+学号后四位
/**建立索引*/
create unique index stusname_4085 on Student_4085(Sname);
2)在SC表上建立关于Sno升序、Cno降序的唯一索引i_sc+学号后四位
/**建立索引*/
create unique index i_sc_4085 on SC_4085 (Sno asc, CNO desc);
2.删除索引
1)删除Student表上的索引stusnam+学号后四位

/*删除索引*/
Drop Index stusname_4085;
2)删除Course表上的索引i_sc+学号后四位

/*删除索引*/;
Drop Index i_sc_4085;
四.删除基本表
1) 删除基本表Student

--删除基本表

--必须先删除 SC 表,否则不让删除,先执行 2), 在执行 1)
drop table Student_4085; -- 1)

--drop table SC_4085; -- 2)
2)删除基本表SC
结果如何,先执行2),在执行1)结果如何。

--删除基本表

--必须先删除 SC 表,否则不让删除,先执行 2), 在执行 1)
--drop table Student_4085; -- 1)

drop table SC_4085; -- 2)
五、单表查询
运行如下sql代码:
Create table student as select * from scott.student;
Create table course as select * from scott.course;
Create table sc as select * from scott.sc;
再执行如下的查询:
1.  求数学系学生的学号和姓名。
--    <1>

select sno,sname from student where sdept='MA'; 

2.  求选修了课程的学生学号。
--   <2>

select distinct sno from sc where cno is not null;
3.  求选修课程号为‘2’的学生号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同按学号的升序排列。
--  <3>

select sno, grade from sc where cno='2' order by grade desc, sno asc;

4.  求选修课程号为’2’且成绩在80~90之间的学生学号和成绩,并将成绩乘以0.8输出。
--  <4>

select sno, grade*0.8 change_grade from sc where cno='2' and grade>=80 and grade <=90;
5.  求数学系或计算机系姓张的学生的信息。
--  <5>

select * from student where (sdept='MA' or sdept='CS') and sname like '张%';

6.  求缺少了成绩的学生的学号和课程号。

--   <6>

select sno, cno from sc where grade is null;
7.  查询各个课程号与相应的选课人数。

--   <7>

select cno, count(*) from sc group by cno;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值