oracle习题SQL语句练习

表(一)Student (学生表)


属性名


数据类型


可否为空


含 义


Sno


Varchar2(3)



学号(主码)


Sname


Varchar2(8)



学生姓名


Ssex


Varchar2(2)



学生性别


Sbirthday


Date



学生出生年月


Class


Varchar2(5)



学生所在班级

create table student

(

Sno   varchar2(3) not null,

Sname   varchar2(8) not null,

Ssex   varchar2(2) not null,

Sbirthday   Date,

Class  varchar2(5)

)

;

comment on column student.Sno

is ‘学号‘;

comment on column student.Sname

is ‘学生姓名‘;

comment on column student.Ssex

is ‘学生性别‘;

comment on column student.Sbirthday

is ‘学生出生年月‘;

comment on column student.Class

is ‘学生所在班级‘;

表(二)Course(课程表)


属性名


数据类型


可否为空


含 义


Cno


Varchar2(5)



课程号(主码)


Cname


Varchar(10)



课程名称


Tno


Varchar2(3)



教工编号(外码)

create table Course

(

Cno   varchar2(5) not null,

Cname   varchar(10) not null,

Tno   varchar2(3) not null

)

;

comment on column Course.Cno

is ‘课程号‘;

comment on column Course.Cname

is ‘课程名称‘;

comment on column Course.Tno

is ‘教工编号‘;

alter table Course

add constraint pk_Course primary key (Cno);

alter table Course

add constraint fk_Tno foreign key (Tno)

references Teacher (Tno);

表(三)Score(成绩表)


属性名


数据类型


可否为空


含 义


Sno


Varchar2(3)



学号(外码)


Cno


Varchar2(5)



课程号(外码)


Degree


Number(4,1)



成绩


主码:Sno+ Cno

create table Score

(

Sno   varchar2(3) not null,

Cno   varchar2(5) not null,

Degree Number(4,1)

)

;

comment on column Score.Sno

is ‘学号‘;

comment on column Score.Cno

is ‘课程号‘;

comment on column Score.Degree

is ‘成绩‘;

alter table Score

add constraint fk_Sno foreign key (Sno)

references  student (SNO);

alter table Score

add constraint fk_Cno foreign key (Cno)

references  Course (Cno);

表(四)Teacher(教师表)


属性名


数据类型


可否为空


含 义


Tno


Varchar2(3)



教工编号(主码)


Tname


Varchar2(4)



教工姓名


Tsex


Varchar2(2)



教工性别


Tbirthday


Date



教工出生年月


Prof


Varchar2(6)



职称


Depart


Varchar(10)



教工所在部门

 

create table TEACHER

(

tno       VARCHAR2(3) not null,

tname     VARCHAR2(4) not null,

tsex      VARCHAR2(2) not null,

tbirthday DATE,

prof      VARCHAR2(6),

depart    VARCHAR2(10) not null

)

comment on column TEACHER.tno

is ‘教工编号‘;

comment on column TEACHER.tname

is ‘教工姓名‘;

comment on column TEACHER.tsex

is ‘教工性别‘;

comment on column TEACHER.tbirthday

is ‘教工出生年月‘;

comment on column TEACHER.prof

is ‘职称‘;

comment on column TEACHER.depart

is ‘教工所在部门‘;

alter table TEACHER

add constraint PK_Tno primary key (TNO)

 

1-2数据库中的数据

表(一)Student


Sno


Sname


Ssex


Sbirthday


class


108


曾华



1977-09-01


95033


105


匡明



1975-10-02


95031


107


王丽



1976-01-23


95033


101


李军



1976-02-20


95033


109


王芳



1975-02-10


95031


103


陆君



1974-06-03


95031

 

insert into Student values(‘108‘,‘曾华‘,‘男‘,to_date (‘1977-09-01‘,‘yyyy-mm-dd‘),‘95033‘);

insert into Student values(‘105‘,‘匡明‘,‘男‘,to_date (‘1975-10-02‘,‘yyyy-mm-dd‘),‘95031‘);

insert into Student values(‘107‘,‘王丽‘,‘女‘,to_date (‘1976-01-23‘,‘yyyy-mm-dd‘),‘95033‘);

insert into Student values(‘101‘,‘李军‘,‘男‘,to_date (‘1976-02-20‘,‘yyyy-mm-dd‘),‘95033‘);

insert into Student values(‘109‘,‘王芳‘,‘女‘,to_date (‘1975-02-10‘,‘yyyy-mm-dd‘),‘95031‘);

insert into Student values(‘103‘,‘陆君‘,‘男‘,to_date (‘1974-06-03‘,‘yyyy-mm-dd‘),‘95031‘);

 

表(二)Course


Cno


Cname


Tno


3-105


计算机导论


825


3-245


操作系统


804


6-166


数字电路


856


9-888


高等数学


831

insert into Course values(‘3-105‘,‘计算机导论‘,‘825‘);

insert into Course values(‘3-245‘   ,‘操作系统‘,‘804‘);

insert into Course values(‘6-166‘   ,‘数字电路‘, ‘856‘);

insert into Course values(‘9-888‘,  ‘高等数学‘,  ‘831‘);

表(三)Score


Sno


Cno


Degree


103


3-245


86


105


3-245


75


109


3-245


68


103


3-105


92


105


3-105


88


109


3-105


76


101


3-105


64


107


3-105


91


108


3-105


78


101


6-166


85


107


6-166


79


108


6-166


81

insert into score values(‘108‘, ‘6-166‘,  ‘81‘);

表(四)Teacher


Tno


Tname


Tsex


Tbirthday


Prof


Depart


804


李诚



1958-12-02


副教授


计算机系


856


张旭



1969-03-12


讲师


电子工程系


825


王萍



1972-05-05


助教


计算机系


831


刘冰



1977-08-14


助教


电子工程系

insert into Teacher values(‘804‘,   ‘李诚‘, ‘男‘,   to_date(‘1958-12-02‘,‘yyyy-mm-dd‘), ‘副教授‘, ‘计算机系‘);

insert into Teacher values(‘856‘,   ‘张旭‘, ‘男‘,   to_date(‘1969-03-12‘,‘yyyy-mm-dd‘), ‘讲师‘, ‘电子工程系‘);

insert into Teacher values(‘825‘,   ‘王萍‘, ‘女‘,   to_date(‘1972-05-05‘,‘yyyy-mm-dd‘), ‘助教‘, ‘计算机系‘);

insert into Teacher values(‘831‘,   ‘刘冰‘, ‘女‘, to_date(‘1977-08-14‘,‘yyyy-mm-dd‘), ‘助教‘, ‘电子工程系‘);

1、 查询Student表中的所有记录的Sname、Ssex和Class列。

select sname,ssex,class from student;

2、 查询教师所有的单位即不重复的Depart列。

select distinct * from student;

3、 查询Student表的所有记录。

select * from Student;

4、 查询Score表中成绩在60到80之间的所有记录。

select * from Score where DEGREE > 60 and DEGREE < 80;

5、 查询Score表中成绩为85,86或88的记录。

select * from Score where DEGREE = 85 or DEGREE = 86 or DEGREE = 88;

6、 查询Student表中“95031”班或性别为“女”的同学记录。

select * from Student where CLASS = 95031 or SSEX = ‘女‘;

7、 以Class降序查询Student表的所有记录。

select * from student order by class desc;

8、 以Cno升序、Degree降序查询Score表的所有记录。

select * from score order by cno asc , degree desc;

9、 查询“95031”班的学生人数。

select class,count(1) as 数量 from student where class =‘95031‘ group by class;

10、 查询Score表中的最高分的学生学号和课程号。(子查询或者排序)

select sno || cno as 学号和课程号 from score order by DEGREE desc;

11、 查询每门课的平均成绩。

select Cno,count(1) as 数量, avg(Degree) as 平均值 from Score group by Cno;

12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。

select Cno,count(1) as 数量, avg(Degree) as 平均值 from Score where cno like‘3%‘ group by Cno having count(cno)>5;

13、查询分数大于70,小于90的Sno列。

select * from Score where Degree between 70 and 90;

14、查询所有学生的Sname、Cno和Degree列。

Select s.sname,c.cno,c.degree from student s , score c where s.sno=c.sno;

15、查询所有学生的Sno、Cname和Degree列。

Select c.sno,q.cname,c.degree from student s , score c,course q where s.sno=c.sno and q.cno=c.cno;

16、查询所有学生的Sname、Cname和Degree列。

Select s.sname,q.cname,c.degree from student s , score c,course q where s.sno=c.sno and q.cno=c.cno;

17、 查询“95033”班学生的平均分。

Select class,avg(degree) as 平均值 from student s,score c where s.sno=c.sno and class = ‘95033‘ group by class ;

18、 假设使用如下命令建立了一个grade表:

create table grade(low  number(3),upp  number (3),rank  char(1))

insert into grade values(90,100,‘A‘);

insert into grade values(80,89,‘B‘);

insert into grade values(70,79,‘C‘);

insert into grade values(60,69,‘D‘);

insert into grade values(0,59,‘E‘);

现查询所有同学的Sno、Cno和rank列。

select s.sno,s.cno,g.rank from score s , grade g where s.Degree between g.low and g.upp;

时间: 2024-10-27 19:13:53

oracle习题SQL语句练习的相关文章

Oracle 动态SQL语句

Oracle 动态SQL语句 (2012-06-18 16:36:12) 转载▼ 标签: oracle it   EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQLpackage包. 它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,EXECUTEIMMEDIATE的目标在于减小企业费用并获得较高的性能,较之以前它相当容易编码.尽管DBMS_SQL仍然可用,但是推荐使用EXECUTEIMMEDIATE,因为它获的收益在包

Oracle之sql语句优化

项目中虽然使用了orm映射,但Oracle系统的优化还是很有价值的,这里从sql语句的角度对常用的语句做下总结. 1.from字段中的优化: Oracle安照从右到左的顺序加载表数据,应该把可以排除数据最多的表放到后面(基础表). 比如,在关联查询中,把课程表放到后面,成绩表放到前面,因为课程表数据一般比较少,关联的时候可以快速的过滤掉一些成绩数据. 2.where中的优化: 对可以过滤数据最多的,放到后面,原理也是Oracle执行从下到上(从右到左)的顺序. 3.使用列名替代*: 省去从字典表

oracle常用SQL语句(汇总版)

Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象 一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); INSERT INTO 表名(字段名1, 字段名2, ……) SELECT (字段名1, 字段名2, ……) FROM 另外的表名; 字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’ 如果字段值里包含单引号’ 需要

ORACLE基本SQL语句-查询篇

一.普通查询 /*查询表数据*/select * from STU /*取出前3行数据*/select * from stu where ROWNUM<=3 /*模糊查询*/select * from stu where stu_id like 'stu001%' 说明:通配符“%”代表一个或者多个字符,通配符“_”代表一个字符. /*别名*/select STU_ID as 学号 from stu 二.联合查询/*普通联合查询*/SELECT STU.STU_NAME, STU.STU_AGE

ORACLE基本SQL语句-用户及建表篇

一.用户相关SQL语句 /*新建用户*/create user SA identified by 2013; 说明:SA用户名,2013密码 /*授权connect,resource给用户sa*/grant connect,resource to sa; 说明:CONNECT角色: --是授予最终用户的典型权利,最基本的 . ESOURCE 角色: --是授予开发人员的 /*查询所有的用户*/select * from all_users; /*将表STU查询权限授予SA*/GRANT SELE

ORACLE基本SQL语句-添加更新数据函数篇

一.添加数据 /*添加数据*/insert into STU values('stu0004','赵一',18,1,"kc0004");insert into STU(STU_ID,STU_NAME,STU_AGE,STU_SET ) values('stu0013','储十一',19,1); 说明:如果不指定将数据添加到那个字段,那么此时必须列出全部数据,如果列出字段,则一一对应,必须列出约束不为空的所有字段,否则报错. 二.更新数据 /*更新数据*/update STU SET S

ORACLE 中 SQL语句优化

(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):  ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表.    (2) WHERE子句中的连接顺序.:  ORACLE采用自下而上的顺序解

ORACLE数据库SQL语句的执行过程

首先是最简单链接数据库的过程,JDBC标准的链接的过程: 1. 载入JDBC驱动程序,一般来说载入驱动程序,采用的都是利用Class.forName()反射来加载驱动 Oracle: Class.forName("oracle.jdbc.driver.OracleDriver"); SQLServer: Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); MySql: Class.forNam

Oracle 基础 —SQL语句优化的途径

一:SQL语句的优化途径 1.选择合适的Oracle优化器 (1).RBO 基于规则进行优化的优化器   --Oracle 10G 后被抛掉 (2).CBO基于成本(CPU 和 内存的占用率)优化的优化器  --优化器使用的模式根据目标而定 CBO 的优化模式: Rule:基于规则 Choose:默认,表或者索引有统计信息,走CBO模式,否则走RBO 模式 First row:表中有统计信息时,以最快方式返回查询的前几行,总体减少响应时间 All row:表中有统计信息时,以最快方式返回表的所有