Oracle的关于建表,约束,查询等的练习
从建立一个简单表,到实现一些复杂查询的例子,
DROP TABLE grade;
DROP TABLE item;
DROP TABLE sporter;
CREATE TABLE sporter(
sporterid NUMBER(4) PRIMARY KEY NOT NULL,
name VARCHAR(50) NOT NULL,
sex VARCHAR(2) NOT NULL,
department VARCHAR(30) NOT NULL,
CONSTRAINT sporter_sex_CK CHECK(sex IN('男','女'))
);
CREATE TABLE item(
itemid VARCHAR(4) PRIMARY KEY NOT NULL,
itemname VARCHAR(50) NOT NULL,
location VARCHAR(50) NOT NULL
);
CREATE TABLE grade(
sporterid NUMBER(4),
itemid VARCHAR(4),
mark NUMBER(2),
CONSTRAINT sport_grade_sporterid_fk FOREIGN KEY(sporterid) REFERENCES sporter(sporterid) ON DELETE CASCADE,
CONSTRAINT item_grade_sporterid_fk FOREIGN KEY(itemid) REFERENCES item(itemid) ON DELETE CASCADE,
CONSTRAINT grade_mark_CK CHECK(mark IN (6,4,2,0))
);
-- 测试数据
INSERT INTO sporter(sporterid,name,sex,department)
VALUES(1001,'李明','男','计算机系');
INSERT INTO sporter(sporterid,name,sex,department)
VALUES(1002,'王二','男','数学系');
INSERT INTO sporter(sporterid,name,sex,department)
VALUES(1003,'张三','男','计算机系');
INSERT INTO sporter(sporterid,name,sex,department)
VALUES(1004,'李四','男','物理系');
INSERT INTO sporter(sporterid,name,sex,department)
VALUES(1005,'李娜','女','心理系');
INSERT INTO sporter(sporterid,name,sex,department)
VALUES(1006,'孙俪','女','数学系');
INSERT INTO item(itemid,itemname,location)
VALUES ('x001','男子五千米','一操场');
INSERT INTO item(itemid,itemname,location)
VALUES ('x002','男子标枪','二操场');
INSERT INTO item(itemid,itemname,location)
VALUES ('x003','男子跳远','二操场');
INSERT INTO item(itemid,itemname,location)
VALUES ('x004','女子跳高','二操场');
INSERT INTO item(itemid,itemname,location)
VALUES ('x005','女子三千米','三操场');
INSERT INTO grade(sporterid,itemid,mark)
VALUES(1001,'x001',6);
INSERT INTO grade(sporterid,itemid,mark)
VALUES(1002,'x001',4);
INSERT INTO grade(sporterid,itemid,mark)
VALUES(1003,'x001',2);
INSERT INTO grade(sporterid,itemid,mark)
VALUES(1004,'x001',0);
INSERT INTO grade(sporterid,itemid,mark)
VALUES(1001,'x003',4);
INSERT INTO grade(sporterid,itemid,mark)
VALUES(1002,'x003',6);
INSERT INTO grade(sporterid,itemid,mark)
VALUES(1004,'x003',2);
INSERT INTO grade(sporterid,itemid,mark)
VALUES(1005,'x004',6);
INSERT INTO grade(sporterid,itemid,mark)
VALUES(1006,'x004',4);
要求:
1.求出目前总积分最高的系名,及其积分:
·所有的系名都在SPORTERID表之中
SELECT * FROM (
SELECT s.department,SUM(g.mark) sum
FROM sporter s,grade g
WHERE s.sporterid=g.sporterid
GROUP BY s.department
ORDER BY sum DESC)
WHERE ROWNUM=1
;
·不使用ROWNUM
·求出最大的分数值
SELECT MAX(SUM(g.mark)) max
FROM sporter s,grade g
WHERE s.sporterid=g.sporterid
GROUP BY s.department
·把上面的最大分数值作为子查询作为子查询
SELECT t.* FROM (
SELECT s.department de,SUM(g.mark) sum
FROM sporter s,grade g
WHERE s.sporterid=g.sporterid
GROUP BY s.department
ORDER BY sum DESC) t
WHERE t.sum=(
SELECT MAX(SUM(g.mark)) max
FROM sporter s,grade g
WHERE s.sporterid=g.sporterid
GROUP BY s.department)
;
2.找出在二操场进行比赛的各个项目名称,及其冠军的姓名
·求出最高成绩的 项目ID 和 分数
SELECT i.itemname,s.name,g.mark
FROM item i,grade g,sporter s
WHERE i.location='二操场'
AND i.itemid=g.itemid
AND s.sporterid=g.sporterid
;
·根据最高分得出
SELECT i.itemname,s.name,g.mark
FROM item i,grade g,sporter s
WHERE i.location='二操场'
AND i.itemid=g.itemid
AND s.sporterid=g.sporterid
AND g.mark IN(
SELECT MAX(mark) FROM (
SELECT i.itemname itemname,s.name name,g.mark mark
FROM item i,grade g,sporter s
WHERE i.location='二操场'
AND i.itemid=g.itemid
AND s.sporterid=g.sporterid
)GROUP BY itemname
)
;
3.找出参加了张三所参加过的项目的其他同学的姓名
SELECT DISTINCT s.name FROM sporter s,grade g
WHERE s.sporterid=g.sporterid
AND s.name<>'张三'
AND g.itemid IN (
SELECT g.itemid
FROM sporter s,grade g
WHERE s.sporterid=g.sporterid
AND s.name='张三'
)
;
4.经查张三因为使用了违禁药品,其成绩都记为0分,做出修改
UPDATE grade SET mark=0
WHERE sporterid=(
SELECT sporterid FROM sporter WHERE name='张三'
);
5.取消山粗女子跳高比赛项目
DELETE FROM item WHERE itemname='女子跳高';
Oracle的关于建表,约束,查询等的练习的更多相关文章
- Oracle 数据库(oracle Database)Select 多表关联查询方式
Oracle数据库中Select语句语法及介绍 SELECT [ ALL | DISTINCT ] <字段表达式1[,<字段表达式2[,…] FROM <表名1>,<表名 ...
- 64、django之模型层(model)--建表、查询、删除基础
要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...
- django之模型层(model)--建表、查询、删除基础
要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...
- 一次作业过程及其问题的记录:mysql建立数据库、建表、查询和插入等
前言 这次的作业需要我建立一个小的数据库. 这次作业我使用了mysql,进行了建库.建表.查询.插入等操作. 以下是对本次作业相关的mysql操作过程及过程中出现的问题的记录. 正文 作业中对数据库的 ...
- Oracle 存储过程动态建表
动态sql,顾名思义就是动态执行的sql,也就是说在没执行之前是动态的拼接的. 任务 传入参数:新建的表名hd+当前的年和月,例如hd_201105表结构是:字段1:id ,类型是number,可以自 ...
- sql 建表以及查询---复杂查询之成绩排名
废话不说,直接建表 1.表Player USE T4st -- 设置当前数据库为T4st,以便访问sysobjects IF EXISTS(SELECT * FROM sysobjects WHERE ...
- oracle数据库的建表,删除字段,添加字段,修改字段,修改字段......
1. 使用oracle创建一张表: SQL> create table loginuser( id ,), username ), password ), email ), descriable ...
- oracle之 获取建表ddl语句
第一种方法是使用工具,如:pl/sql developer,在[工具]--[导出用户对象]出现就可以得到建表脚本. 第二种方法是,sql语句. DBMS_METADATA.GET_DDL包可以得到数据 ...
- Django ORM --- 建表、查询、删除基础
1.什么是ORM ORM的全称是Object Relational Mapping,即对象关系映射.它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的 ...
随机推荐
- java学习笔记day07
1.throwable下面的子类分为两大类:Error 和 Exception 2.如果方法上有throws Exception,则必须对异常进行处理: try{ 需要检测异常代码 } ...
- sql server去除重复信息,
SELECT st_id FROM ( SELECT *,ROW_NUMBER() OVER( PARTITION BY st_code ORDER BY st_code ) AS num FROM ...
- HttpApplication事件执行顺序(转)
HttpApplication 类的实例(Global继承自该类)是在 ASP.NET 基础结构中创建的,而不是由用户直接创建的.HttpApplication 类的一个实例在其生存期内被用于处理多个 ...
- 检查DISPLAY设置时Xlib出现No protocol specified错误
退出到root用户,执行xhost +命令后,再次切换到Oralce用户,执行runInstaller命令,错误消失
- Asp.net MVC razor语法参考
Razor语法的快捷参考http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx/ 只是copy下来便于查阅! I ...
- (ssh整合web导出excel)在ssh框架中使用poi正确导出具有比较高级固定格式的excel 整体过程,查询导出前后台下载
(一) 接需求 : 需求相关 (贴图 ) 生成三核对文件 1.新增三核对菜单页面中,增加生成三核对文件功能按钮,弹窗可根据变电站.电压等级查询定值单. 2.定值单信息以表格形式展示,根据选择 ...
- UVA 12113 Overlapping Squares
题意: 总共有6个2*2的正方形,判断是否能够成所给的形状. 思路: 一个正方形总共有9种摆放方式,对于整个地图来说摆放方式总共有2的9次方种摆放方式.然后将地图用9*5的数组表示,正方形的位置用其8 ...
- 关于ajax提交的公共接口的一大用处
在项目框架搭建的时候,就写了ajax提交的公共接口,是想统一的日志和处理ajax返回的错误信息. 今天,却又帮我解决了另外一个问题:每次点开某个页面,有一个ajax请求总是会调用两次,于是打开chro ...
- linux crontab设置
cron来源于希腊单词chronos(意为“时间”),是linux系统下一个自动执行指定任务的程序.例如,你想在每晚睡觉期间创建某些文件或文件夹的备份,就可以用cron来自动执行. 服务的启动和停止 ...
- SqlDataReader 获取存储过程返回值
编写存储过程,获取不到返回值 附上代码: SqlDataReader reader = null;// totalRecords = ; try { SqlConnectionHolder conne ...