create database cstd;
use cstd;
/*1:建立学生表*/
create table student (
学号 char(3) primary key,
姓名 char(8),
性别 char(4),
年龄 int,
班级 char(5)
);
insert into student values('','曾华','男',19,'');
insert into student values('','匡明','男',20,'');
insert into student values('','王丽','女',20,'');
insert into student values('','李军','男',19,'');
insert into student values('','王芳','女',22,'');
insert into student values('','陆君','男',20,'');
/*2:建立教师表*/
create table teacher(
教师号 char(3) primary key,
姓名 char(8),
性别 char(4),
年龄 int ,
级别 char(12),
专业 char(16)
);
insert into teacher values('','李成','男',42,'副教授','计算机系');
insert into teacher values('','张旭','男',35,'讲师','电子工程');
insert into teacher values('','王萍','女',28,'助教','计算机系');
insert into teacher values('','刘冰','女',25,'助教','电子工程');
/*3:建立课程表*/
create table course (
课程号 char(5) primary key,
课程名 char(20),
教师号 char(3),
foreign key(教师号) references teacher(教师号)
);
insert into course values('3-105','计算机导论','');
insert into course values('3-245','操作系统','');
insert into course values('6-166','数字电路','');
insert into course values('9-888','高等数学','');
/*4:建立选课表*/
create table sc(
学号 char(3),
课程号 char(5),
primary key(学号,课程号),
成绩 int,
foreign key(学号) references student(学号),
foreign key(课程号) references course(课程号)
);
insert into sc values('','3-245',86);
insert into sc values('','3-245',75);
insert into sc values('','3-245',68);
insert into sc values('','3-105',92);
insert into sc values('','3-105',88);
insert into sc values('','3-105',76);
insert into sc values('','3-105',64);
insert into sc values('','3-105',91);
insert into sc values('','3-105',78);
insert into sc values('','6-166',85);
insert into sc values('','6-166',79);
insert into sc values('','6-166',81);
/*5:所有表内容*/
select * from student;
select * from course;
select * from teacher;
select * from sc; --1.查询选修课程'3-105'且成绩在60到80之间的所有记录。
--注释:用于指定某个范围使用between and,也可以使用and连接符;
select * from sc where 课程号='3-105' and 成绩 between 60 and 80; --2.查询成绩为85、86或88的记录。
select * from sc where 成绩 in (85,86,88); --3.查询'95031'班的学生人数。
select count(学号) "95031班的学生人数" from student where 班级=''; --4.查询最低分大于70,且最高分小于90的学号列。
select 学号,max(成绩),min(成绩) from sc
having max(成绩)<90 and min(成绩) > 70
group by 学号; --5.查询至少有5名学生选修并以3开头的课程的平均成绩。
select avg(成绩)as 平均成绩 from sc where 课程号 like '3%' group by 课程号
having count(课程号)>=5 --6.查询平均分大于80分的学生的成绩表
select * from sc where 学号 in(select 学号 from sc group by 学号 having avg(成绩) > 80); --7.查询'95033'班每个学生所选课程的平均分。
select 学号,avg(成绩) from sc
where 学号 in (select 学号 from student where 班级='')
group by 学号; --8.以选修 '3-105'为例,查询成绩高于'109'号同学的所有同学的记录。
select * from student where 学号 in (select 学号 from sc
where 课程号='3-105' and 成绩>(select 成绩 from sc
where 课程号='3-105' and 学号='')); --9.查询与学号为'108'的同学同岁的所有学生的学号、姓名和年龄。
select * from student
where 年龄=(select 年龄 from student where 学号='')
and 学号 <>'' --10.查询'张旭'教师任课的课程号,选修其课程学生的学号和成绩。
select 学号,成绩 from sc where 课程号 in(select 课程号 from course
where 教师号 in (select 教师号 from teacher where 姓名 ='张旭'));
-- 另一种方式
select teacher.姓名 as 教师姓名,course.课程号,student.姓名 as 学生姓名,student.学号,成绩
from teacher inner join(course inner join(sc inner join student on student.学号=sc.学号)
on course.课程号=sc.课程号)on course.教师号=teacher.教师号 where teacher.姓名='张旭'; --11.查询选修其课程的学生人数多于5人的教师姓名。
select 教师号,姓名 from teacher
where 教师号 in (select 教师号 from course
where 课程号 in (select 课程号 from sc
having count(学号) > 5
group by 课程号)); --13.查询选修编号为'3-105'课程
--且成绩至少高于选修编号为'3-245'课程的同学
--的课程号、学号 、成绩并按成绩从高到低次序排列。
select 课程号,学号,成绩 from sc where 课程号 = '3-105'
and 成绩 > (select min(成绩) from sc where 课程号 = '3-245')
order by 成绩 desc;
--第二种方法
select 课程号,学号,成绩 from sc where 课程号 = '3-105'
and 成绩 > any(select 成绩 from sc where 课程号 = '3-245')
order by 成绩 desc; --14.查询选修编号为'3-105'课程
--且成绩高于选修编号为'3-245'课程的同学的课程号、学号 、成绩。
select 课程号,学号,成绩 from sc where 课程号 = '3-105'
and 成绩 > (select max(成绩) from sc where 课程号 = '3-245');
--第二种方法
select 课程号,学号,成绩 from sc where 课程号 = '3-105'
and 成绩 > all(select 成绩 from sc where 课程号 = '3-245')
order by 成绩 desc; --15.列出所有教师和同学的姓名 、性别 、年龄。
select student.姓名 as 学生姓名,student.性别 as 学生性别,student.年龄 as 学生年龄,
teacher.姓名 as 教师姓名,teacher.性别 as 教师性别,teacher.年龄 as 教师年龄 from
student inner join(sc inner join (course inner join teacher on course.教师号=teacher.教师号)
on sc.课程号=course.课程号)on student.学号=sc.学号; --16.查询成绩比'3-105'课程的平均成绩低的学生的成绩表。
select * from sc where 成绩<
(select avg(成绩) from sc where 课程号='3-105')and 课程号='3-105'; --17.查询成绩比该课程平均成绩低的学生的成绩表。
select * from sc where 成绩<any
(select avg(成绩) from sc group by 课程号)order by 课程号 asc; --18.列出所有任课教师的姓名和专业。
select teacher.姓名 as 教师姓名,专业 from teacher where 教师号 in
(select 教师号 from course where 课程号 in(select 课程号 from sc group by 课程号)); --19.列出所有未讲课教师的姓名和专业。
select teacher.姓名 as 教师姓名,专业 from teacher where 教师号 not in(select 教师号 from course
where 课程号 in(select 课程号 from sc group by 课程号)); --20.列出至少有2名男生的班号。
select 班级 as 班号 from student where 性别='男' having count(*)>=2 group by 班级; --21.查询不姓'王'的学生记录。
select * from student minus
select * from student where 姓名 like '王%';
-- 第二种方法
select * from student where 姓名 not like '王%';
-- 第三种方法
select * from student where 姓名 not in
(select 姓名 from student where 姓名 like '王%'); --22.查询每门课最高分的学生的学号、课程号、成绩。
select 学号,课程号 ,成绩 from sc where 成绩
in (select max(成绩) from sc group by 课程号); --23.查询与'李军'同性别并同班的同学名字。
-- 不包括'李军'本人
select 姓名,性别 from student
where 性别 = (select 性别 from student where 姓名='李军')
and 班级 = (select 班级 from student where 姓名='李军')
and 姓名<>'李军'; --24.查询'男'教师及其所上的课程。
select 姓名 as 教师名,课程名 as 课程 from teacher inner join
course on teacher.教师号=course.教师号 where 性别='男'; --25.查询选修'计算机导论'课程的'男'同学的成绩表。
select * from sc where 学号
in (select 学号 from student where 性别='男')
and 课程号=(select 课程号 from course where 课程名='计算机导论'); --第二种表达
select sc.学号,student.姓名 as 学生姓名,
student.性别 as 学生性别,sc.课程号,sc.成绩,course.课程名 from student
inner
join(sc inner join course on sc.课程号=course.课程号) on student.学号=sc.学号
where 性别='男' and 课程名='计算机导论';

Oracle 小案例的更多相关文章

  1. Oracle定时任务小案例

    需求简述 一个数据表中包含此数据的录入时间,此数据的初始状态是有效,五天后系统自动置该数据的状态为无效. 方案 写一个存储过程,用于更新字段(改状态): 写一个job,用于定时执行存储过程: 方案逻辑 ...

  2. Eclipse使用JDBC小案例

    JDBC(Java Database Connectivity:Java访问数据库的解决方案)定义一套标准接口,即访问数据库的通用API,不同数据库厂商根据各自数据的特点去实现这些接口. JDBC是J ...

  3. Oracle备份与恢复案例

    注:以下内容来自<Oracle备份与恢复案例.doc>文档. Oracle备份与恢复案例 By Piner 一. 理解什么是数据库恢复 当我们使用一个数据库时,总希望数据库的内容是可靠的. ...

  4. 机械表小案例之transform的应用

    这个小案例主要是对transform的应用. 时钟的3个表针分别是3个png图片,通过setInterval来让图片转动.时,分,秒的转动角度分别是30,6,6度. 首先,通过new Date函数获取 ...

  5. shell讲解-小案例

    shell讲解-小案例 一.文件拷贝输出检查 下面测试文件拷贝是否正常,如果cp命令并没有拷贝文件myfile到myfile.bak,则打印错误信息.注意错误信息中basename $0打印脚本名.如 ...

  6. [jQuery学习系列六]6-jQuery实际操作小案例

    前言最后在这里po上jQuery的几个小案例. Jquery例子1_占位符使用需求: 点击第一个按钮后 自动去check 后面是否有按钮没有选中, 如有则提示错误消息. <html> &l ...

  7. 02SpringMvc_springmvc快速入门小案例(XML版本)

    这篇文章中,我们要写一个入门案例,去整体了解整个SpringMVC. 先给出整个项目的结构图:

  8. React.js入门小案例

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title&g ...

  9. SqlDependency缓存数据库表小案例

    SqlDependency的简介: SqlDependency是outputcache网页缓存的一个参数,它的作用是指定缓存失效的数据库依赖项,可以具体到数据库和表. SqlDependency能解决 ...

随机推荐

  1. ACM 兄弟郊游问题

    兄弟郊游问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 兄弟俩骑车郊游,弟弟先出发,每分钟X米,M分钟后,哥哥带一条狗出发.以每分钟Y米的速度去追弟弟,而狗则以 ...

  2. 关于CCSprite不能及时显示的问题

    今天在利用AFNetworking做网络请求时总是能看到添加的CCSprite精灵总是延迟一会才显示,google了半天没有找到答案, 考虑到CCSprite要被渲染才能显示,于是直接在场景中的CCL ...

  3. 【BZOJ】1436: Poi2003 Trinomial

    题意 \(q(1 \le q \le 10000)\)次询问,每一次求\((x^2+x+1)^n\)的第\(k\)项系数模3. 分析 听说正解是\(\binom{2n}{m} (m \% 2+1)\) ...

  4. 【HDU】3506 Monkey Party

    http://acm.hdu.edu.cn/showproblem.php?pid=3506 题意:环形石子合并取最小值= =(n<=1000) #include <cstdio> ...

  5. Unity5.x版本AssetBundle打包研究

    Unity5的AssetBundle打包机制和以前版本不太一样.简单的说就是,只要给你要打包的资源设置一个AssetBundleName ,Unity自身会对这些设置了名字的资源进行打包,如果一个资源 ...

  6. mysql的小总结

    1.什么是数据库 ? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数 ...

  7. Bootstrap做的HTML页面在本地IE打开正常,放到服务器上显示就不正常了

    <meta name="renderer" content="webkit"> <meta http-equiv="X-UA-Com ...

  8. 高性能分布式内存队列系统beanstalkd(转)

    beanstalkd一个高性能.轻量级的分布式内存队列系统,最初设计的目的是想通过后台异步执行耗时的任务来降低高容量Web应用系统的页面访问延迟,支持过有9.5 million用户的Facebook ...

  9. petapoco定制,比较SQL事务,存储过程,分布式事务(MSDTC)的区别和场景

    使用分布式事务时 就锁死了,而且是只锁编辑的行 使用.netSQL事务一定要执行了一个CUD的SQL才会锁死,而且也是锁行,但是也锁读的行 .netSQL事务要在这里才锁死 结论,对于产品要求细粒度的 ...

  10. Qt Load and Save Image Dialog 加载图片对话框

    在Qt中,我们想要通过对话框来打开某一个图片,可以通过使用QFileDialog来快速实现,参见以下代码: QString fileName = QFileDialog::getOpenFileNam ...