从建立一个简单表,到实现一些复杂查询的例子,

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的关于建表,约束,查询等的练习的更多相关文章

  1. Oracle 数据库(oracle Database)Select 多表关联查询方式

    Oracle数据库中Select语句语法及介绍 SELECT [ ALL | DISTINCT ] <字段表达式1[,<字段表达式2[,…] FROM <表名1>,<表名 ...

  2. 64、django之模型层(model)--建表、查询、删除基础

    要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...

  3. django之模型层(model)--建表、查询、删除基础

    要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...

  4. 一次作业过程及其问题的记录:mysql建立数据库、建表、查询和插入等

    前言 这次的作业需要我建立一个小的数据库. 这次作业我使用了mysql,进行了建库.建表.查询.插入等操作. 以下是对本次作业相关的mysql操作过程及过程中出现的问题的记录. 正文 作业中对数据库的 ...

  5. Oracle 存储过程动态建表

    动态sql,顾名思义就是动态执行的sql,也就是说在没执行之前是动态的拼接的. 任务 传入参数:新建的表名hd+当前的年和月,例如hd_201105表结构是:字段1:id ,类型是number,可以自 ...

  6. sql 建表以及查询---复杂查询之成绩排名

    废话不说,直接建表 1.表Player USE T4st -- 设置当前数据库为T4st,以便访问sysobjects IF EXISTS(SELECT * FROM sysobjects WHERE ...

  7. oracle数据库的建表,删除字段,添加字段,修改字段,修改字段......

    1. 使用oracle创建一张表: SQL> create table loginuser( id ,), username ), password ), email ), descriable ...

  8. oracle之 获取建表ddl语句

    第一种方法是使用工具,如:pl/sql developer,在[工具]--[导出用户对象]出现就可以得到建表脚本. 第二种方法是,sql语句. DBMS_METADATA.GET_DDL包可以得到数据 ...

  9. Django ORM --- 建表、查询、删除基础

    1.什么是ORM ORM的全称是Object Relational Mapping,即对象关系映射.它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的 ...

随机推荐

  1. C# Socket 简易的图片传输

    关于网络的数据传输我就是个小白,所以今天学习一下简易的Socket图片传输. 客户端和服务器的连接咱们上次已经学过了,咱们先从简易的文件传输入手.下面开始代码分析了. Server.cs using ...

  2. Windows下配置sphinx+reStructuredText详解

    最近有朋友想在windows下做个人笔记,没有找到顺手的工具,问我有什么好的工具推荐.正好前两天在网上看到一款做文档的利器sphinx+reStructText,当时在ubuntu下搭了下环境试了试, ...

  3. Intersection of Two Linked Lists(java)

    eg: a1 → a2 ↘ c1 → c2 → c3 或者直接a1 → b1 ↗ b1 → b2 → b3求公共链表c1. 常规的指针分裂法,复制法,偏移法. public class Solutio ...

  4. CDZSC_2015寒假新人(1)——基础 d

    Description These days, I am thinking about a question, how can I get a problem as easy as A+B? It i ...

  5. python学习day7

    目录 一.反射 二.socket 三.socketserver 一.反射 python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分 ...

  6. 【转载】来自苹果的编程语言——Swift简介

    本文转自Lucida的博客 (新浪微博.豆瓣)   这篇文章简要介绍了苹果于WWDC 2014发布的编程语言——Swift.   前言   在这里我认为有必要提一下Brec Victor的Invent ...

  7. Oracle误删表空间文件后数据库无法启动

    [问题描述]Oracle误删表空间文件后数据库无法启动,报错表空间文件不存在 [解决办法]sqlplus / as sysdba       #以dba身份登陆数据库shutdown immediat ...

  8. win7 安装 redis +php扩展

    1:首先下载redis:redis-2.0.2.zip (32 bit),解压. 从下面地址下:http://code.google.com/p/servicestack/wiki/RedisWind ...

  9. WPF中实现先登录后启动主程序的方法

    原文:WPF中实现先登录后启动主程序的方法 我觉得先登录后启动应用主程序是一个很经典的问题,基本上如果要写一个应用程序都会用到这个的小环节.我在这个问题上挣扎了大半天才找到解决方案,我的实现方法我觉得 ...

  10. Android Studido下的应用性能优化总结--布局优化

    前言:一个应用的成功=产品设计*性能 ,再此我们不讨论一个应用的设计,那交给我们可爱又可恨的产品经理和UI设计师来决定!所以这里分步骤讨论如何提升一个应用的性能,这里先探讨布局优化问题. 布局优化 避 ...