博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORACLE1.13-综合例子应用01
阅读量:5158 次
发布时间:2019-06-13

本文共 2543 字,大约阅读时间需要 8 分钟。

-- 多对多的秘密:项目中,往往把关系分拆出一张单独表

--维表(学生维度)

create table t_stu(

   id number primary key,

   user_name varchar2(10)

);

insert into t_stu values(1,'小军');

insert into t_stu values(2,'小黄');

commit

select * from t_stu

drop table t_ke

--维表(课程维度)

create table t_ke(

   id number primary key,

   ke_name varchar2(100)

);

insert into t_ke values(1,'高等数学');

insert into t_ke values(2,'离散数学');

insert into t_ke values(3,'牛顿法');

insert into t_ke values(4,'大学英语');

insert into t_ke values(5,'马克思主义');

insert into t_ke values(6,'江泽明思想');

insert into t_ke values(7,'邓小平理论');

commit

select * from t_ke

-- 事实表

CREATE TABLE t_stu_ke(

  id NUMBER PRIMARY KEY,

  user_id NUMBER(5),

  ke_id NUMBER(5)

);

delete from t_stu_ke

insert into t_stu_ke values(1,1,1);

insert into t_stu_ke values(2,1,2);

insert into t_stu_ke values(3,1,6);

commit;

insert into t_stu_ke values(4,2,4);

insert into t_stu_ke values(5,2,6);

commit;

 

select sk.id,s.user_name,k.ke_name from t_stu_ke sk

left join t_stu s on sk.user_id =s.id

left join t_ke k on sk.ke_id=k.id

 

insert into t_stu_ke values(6,3,3);

insert into t_stu_ke values(7,2,8);

commit

 

select

   sk.id,

   nvl(s.user_name,'未知学生:'||sk.user_id) 学生,

   nvl(k.ke_name,'未知课程:'||sk.ke_id) 选课

from t_stu_ke sk

   left join t_stu s on sk.user_id =s.id

   left join t_ke k on sk.ke_id=k.id

  

-- 站在不通的维度看世界  

   group by

 

 

--1.查询有多少科

select * from t_ke

select count(1) from t_ke

 

--2.查询同学选了多少课

select count(1) from

   (select distinct ke_id from t_stu_ke) tt

  

--3.查选一下每个同学各选多少课

-- group by 有5个聚合函数count

select user_id,count(1) from t_stu_ke group by user_id

 

 

--4.查选一下每个同学各选多少课(条件是这个课程必须存在)

select user_id,count(1) from t_stu_ke

   where ke_id in (select id from t_ke)

group by user_id

 

--5.查选一下每门课程各有多少学生选

select * from t_ke

--错误示范:

select ke_id,count(1) from t_stu_ke group by ke_id

--正确:

select ke_name,count(ke_id) from t_ke

left join t_stu_ke

on t_ke.id=t_stu_ke.ke_id

group by ke_name

 

--6.查选一下每门课程各有多少学生选

-- 条件:【显示人数】1人以上的课程

-- 思路:【显示人数】-->>集合数,不能用where,改用having

select ke_name,count(ke_id) r from t_ke

left join t_stu_ke

on t_ke.id=t_stu_ke.ke_id

group by ke_name

having count(ke_id)>=1

order by r desc

 

-- 7 查询出现毛的课程出来

select * from t_ke where ke_name like '%毛%'

 

-- 8 最多人选的课程是什么?

-- 思路1:

select * from t_ke where id=

(select ke_id from (

select ke_id,count(1) tt from t_stu_ke

group by ke_id order by tt desc

) where rownum=1)

 

--思路2(不推荐)

select * from t_ke where id=(

select ke_id from

(select ke_id,count(1) tt from t_stu_ke group by ke_id) where tt =

(select max(tt) from

(select ke_id,count(1) tt from t_stu_kegroup by ke_id) tt)

);

转载于:https://www.cnblogs.com/wyj1212/p/8567749.html

你可能感兴趣的文章
Java Scala获取所有注解的类信息
查看>>
delphi ,安装插件
查看>>
case when then的用法-leetcode交换工资
查看>>
11.28.cookie
查看>>
BeanShell简介
查看>>
python字符串操作
查看>>
MySQL学习之备份
查看>>
不同程序语言的注释和变量要求
查看>>
语言基础(9):static, extern 和 inline
查看>>
windows linux—unix 跨平台通信集成控制系统
查看>>
【编程练习】复习一下树的遍历
查看>>
邮件和短信验证码
查看>>
(转)Android studio 使用心得(五)—代码混淆和破解apk
查看>>
构建之法阅读笔记03
查看>>
ES5_03_Object扩展
查看>>
Apache-ab 接口性能测试
查看>>
EF 4.1 Code First Walkthrough
查看>>
常用MySQL语法
查看>>
007API网关服务Zuul
查看>>
bzoj 2600: [Ioi2011]ricehub
查看>>