利用pl/sql块解决复杂sql查询
2016-05-27 00:04
393 查看
Ss (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄
Cc (C#,CN ) C#,CN 分别代表课程编号、课程名称
SCsc ( S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩
1 列出既学过“1”号课程,又学过“2”号课程的学生且“1”号课成绩比“2”号成绩高的学生学号
Select SC1.Sid,SC1.g as "1号课成绩",SC2.g as "2号课成绩" FROM SCsc SC1,Cc C1,SCsc SC2,Cc C2 Where SC1.Cid=C1.Cid AND C1.cn='1' AND SC2.Cid=C2.Cid AND C2.cn='2' AND SC1.g>SC2.g;
2 利用pl/sql编程解决
declare
----------列出既学过“1”号课程,又学过“2”号课程的所有学生编号----------------
cursor c_cursor is select sid from scsc where cid in ('1','2') group by sid having count(cid) =2;
v_c1G scsc.g%type;
v_c2G scsc.g%type;
v_sql varchar2(100);
begin
for v_sid in c_cursor loop--open c_cursor
v_sql:='select g from scsc where sid='||v_sid.sid||' and cid=1';
execute immediate v_sql into v_c1G;--execute dynamic sql
v_sql:='select g from scsc where sid='||v_sid.sid||' and cid=2';
execute immediate v_sql into v_c2G;--execute dynamic sql
if(v_c1G > v_c2G) then
--列出既学过“1”号课程,又学过“2”号课程的学生
--且“1”号课成绩比“2”号成绩高的学生学号
dbms_output.put_line('sid='||v_sid.sid);
end if;
end loop;
end;
Cc (C#,CN ) C#,CN 分别代表课程编号、课程名称
SCsc ( S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩
1 列出既学过“1”号课程,又学过“2”号课程的学生且“1”号课成绩比“2”号成绩高的学生学号
Select SC1.Sid,SC1.g as "1号课成绩",SC2.g as "2号课成绩" FROM SCsc SC1,Cc C1,SCsc SC2,Cc C2 Where SC1.Cid=C1.Cid AND C1.cn='1' AND SC2.Cid=C2.Cid AND C2.cn='2' AND SC1.g>SC2.g;
2 利用pl/sql编程解决
declare
----------列出既学过“1”号课程,又学过“2”号课程的所有学生编号----------------
cursor c_cursor is select sid from scsc where cid in ('1','2') group by sid having count(cid) =2;
v_c1G scsc.g%type;
v_c2G scsc.g%type;
v_sql varchar2(100);
begin
for v_sid in c_cursor loop--open c_cursor
v_sql:='select g from scsc where sid='||v_sid.sid||' and cid=1';
execute immediate v_sql into v_c1G;--execute dynamic sql
v_sql:='select g from scsc where sid='||v_sid.sid||' and cid=2';
execute immediate v_sql into v_c2G;--execute dynamic sql
if(v_c1G > v_c2G) then
--列出既学过“1”号课程,又学过“2”号课程的学生
--且“1”号课成绩比“2”号成绩高的学生学号
dbms_output.put_line('sid='||v_sid.sid);
end if;
end loop;
end;
相关文章推荐
- thinkPHP连接sqlite3数据库的实现方法(附Thinkphp代码生成器下载)
- MySQL数据库远程访问权限如何打开(两种方法)
- 数据库Mysql性能优化详解
- Mysql常用命令大全
- Mysql 表分区技术
- CentOS7下安装并设置MariaDB并配置
- 控制台调试,mybatis sql打印
- Centos6.4 安装redis-2.8.18
- SQL 左外连接,右外连接,全连接,内连接
- 数据库的多表操作
- memcache学习之c客户端
- 数据库操作(使用FMDB)
- windows下Redis+PHP使用
- 『SQL注入』 User-Agent 手工注入的探测与利用分析
- ThinkPHP使用Memcached缓存数据
- 分布式数据库
- mysql5.6 gtid复制
- sublime Text3 on window8.1远程连接mysql on ubuntu14.04 Sever
- mysql与oracle在groupby语句上的细节差异
- Mysql查询使用Limit优化