转 父表字表统计查询的sql练习

时间:2021-08-19 22:43:51

create table father(
       f_id number(2) primary key,
       f_name varchar2(10)
);
create table son(
       s_id number(2) primary key,
       s_name varchar2(10),
       s_height number(3,2),
       s_money number,
       f_id number(2),
       foreign key(f_id) references father(f_id)
);
--插入父亲信息
insert into father values(1,'何胜达');
insert into father values(2,'何忠达');
insert into father values(3,'何国达');
insert into father values(4,'陌生人');
--插入儿子信息
create sequence s1;
insert into son values(s1.nextval,'何亮',1.70,6000,1);
insert into son values(s1.nextval,'何星',1.68,4000,1);
insert into son values(s1.nextval,'何正安',1.73,7000,2);
insert into son values(s1.nextval,'何正明',1.72,4000,2);
insert into son values(s1.nextval,'何正元',1.68,8500,2);
insert into son values(s1.nextval,'何正陆',1.66,5000,3);
insert into son(s_id,f_id)values(s1.nextval,4);
--查询s_id、s_name、f_id
       select s_id,s_name,f_id from son;
--查询各儿子涨价20%以后的新学费,注意,8000块以下的不涨价。
       select s_name,s_money*1.2 from son where s_money>8000;
--查询s_id、s_name、f_id、f_name
       select f.*,s.s_id,s.s_name
       from father f
       join son s
       on f.f_id=s.f_id;
--查询f_id、f_name、儿子数(没有儿子的不显示)
       select f.f_id,f.f_name,count(s.s_name)as 有几个儿子
       from father f
       join son s
       on f.f_id=s.f_id
       group by f.f_id,f.f_name
       having count(s.s_name)>0;
--查询f_id、f_name、儿子数(没有儿子的个数显示为0)
       select f.f_id,f.f_name,count(s.s_name)as 有几个儿子
       from father f
       join son s
       on f.f_id=s.f_id
       group by f.f_id,f.f_name
       having count(s.s_name) is not null;
--找出不止有1个儿子的father信息:f_id、f_name、儿子数
       select f.f_id,f.f_name,count(s.s_name) as 不止一个儿子
       from father f
       join son s
       on f.f_id=s.f_id
       group by f.f_id,f.f_name
       having count(s.s_name)>1;
--找出儿子最多的father信息:fid、fname、儿子数
       select f.f_id,f.f_name,count(s.s_id) as 个数
       from father f
       join son s
       on f.f_id=s.f_id
       group by f.f_id,f.f_name;
--、找出fid为(7,9,11)的father中,各儿子的身高
     select s_name,s_height from son where f_id in(1,2,3);
--找出所有father中身高最高的儿子。
     select s_name from son where s_height=(
              select max(s_height) from son
       );
--找出各father中身高最高的儿子 
       select son.* from son,
              (select f_id,max(s_height) 最高儿子 from son group by f_id) x
        where son.f_id=x.f_id and son.s_height=x.最高儿子;
--找出身高在1.8到1.65之间的所有儿子及父亲信息:fid,fname,sid,sname,height;
--这里用到了where,之所以能用是因为前面没有用到聚合函数
      select f.*,s.s_id,s.s_name,s.s_height
      from father f
      join son s
      on f.f_id=s.f_id
      where s.s_height between 1.65 and 1.8;
select * from father;
select * from son;

<!DOCTYPE root [
 <!ELEMENT root (父亲+,儿子*)>
 <!ELEMENT 父亲 EMPTY>
 <!ELEMENT 儿子 EMPTY>
 <!ATTLIST 父亲
  fid CDATA #REQUIRED
  姓名 CDATA #REQUIRED
 >
 <!ATTLIST 儿子
  sid CDATA #REQUIRED
  姓名 CDATA #REQUIRED
  性别 (男|女) #REQUIRED
  年龄 CDATA #REQUIRED
  学费 CDATA #REQUIRED
  身高 CDATA #IMPLIED
  fid IDREFS #REQUIRED
 >
]>
<root>
 <父亲 fid="P_1" 姓名="何胜达"/>
 <父亲 fid="P_2" 姓名="何中达"/>
 <父亲 fid="P_3" 姓名="何国达"/>
 <父亲 fid="P_4" 姓名="陌生人"/>
 <儿子 sid="1" 姓名="何亮" 性别="男" 年龄="24" 学费="5000" 身高="1.72" fid="P_1"/>
 <儿子 sid="1" 姓名="何星" 性别="男" 年龄="24" 学费="5000" 身高="1.72" fid="P_1"/>
 <儿子 sid="1" 姓名="何正安" 性别="男" 年龄="24" 学费="1000" 身高="1.72" fid="P_2"/>
 <儿子 sid="1" 姓名="何明" 性别="男" 年龄="24" 学费="5000" 身高="1.72" fid="P_2"/>
 <儿子 sid="1" 姓名="何元" 性别="男" 年龄="24" 学费="5000" 身高="1.72" fid="P_2"/>
 <儿子 sid="1" 姓名="何陆" 性别="男" 年龄="24" 学费="5000" 身高="1.72" fid="P_3"/>
</root>

转 父表字表统计查询的sql练习的更多相关文章

  1. 010&period;简单查询、分组统计查询、多表连接查询(sql实例)

    -------------------------------------day3------------ --添加多行数据:------INSERT [INTO] 表名 [(列的列表)] --SEL ...

  2. mysql按年度、季度、月度、周、日统计查询的sql语句

    本文介绍一些mysql中用于查询的sql语句,包括按年度.季度.月度.周.日统计查询等,有需要的朋友,可以参考下. 一.年度查询 查询 本年度的数据   SELECT * FROM blog_arti ...

  3. thinkphp区间查询、统计查询、SQL直接查询

    区间查询 $data['id']=array(array('gt',4),array('lt',10));//默认关系是(and)并且的关系 //SELECT * FROM `tp_user` WHE ...

  4. 175&period; Combine Two Tables【LeetCode】-LEFT JON 和RIGHT JOIN,两张表关联查询-java -sql入门

    Table: Person +-------------+---------+ | Column Name | Type | +-------------+---------+ | PersonId ...

  5. 数据库联表统计查询 Group by &amp&semi; INNER JOIN

    原数据表 视频信息表  tab_video_info 播放记录表  tab_play_record 需求 统计播放量(已经开始播放)最多的前20个视频: SELECT a.video_id, SUM( ...

  6. ACTION 关联表之间查询语句 SQL语句写法

    /** EquUseRecord * @author cll * @return * @右边菜单中的使用记录操作 */ public String QueryAllEquUserecordAllInf ...

  7. hibernate实现多表联合查询

    转自:http://blog.sina.com.cn/s/blog_67b9ad8d01010by1.html 以前用sql实现联合查询 是非常简单的事,只需要写sql语句就可以,第一次遇到hiber ...

  8. hibernate 多表联合查询

    以前用sql实现联合查询 是非常简单的事,只需要写sql语句就可以,第一次遇到hibernate要实现多表联合查询的时候还楞了一下.最后看了下资料,才恍然大悟,hibernate实现多表联合查询跟SQ ...

  9. SQL调优--记一次表统计信息未及时更新导致查询超级慢

                某日同事丢给我一个看上去复杂的查询(实际就涉及两张表,套来套去)说只是换了日期条件,但一个查询5秒出数据,一个根本查不出来.现在整理下解决过程,及涉及的知识点. 若有不正之处, ...

随机推荐

  1. Spring MVC中文文档翻译发布

    前后经过九个月,我翻译的Spring MVC官方4.2.4版本中文文档可以发布第一个较为完整的版本了.译文上尽量做到准确并且符合中文习惯,让人能读懂,能理解.现全文发布如下,也希望它能够给出其价值,并 ...

  2. Hadoop&lowbar;UDF示例

    UDF:  一进一出 Eclipse端 1. 继承UDF 2. 实现evaluate方法(可重裁实现多个evaluate方法,以实现不同需求) 3. 导出类jar包,注意指定main方法 Hive端 ...

  3. SSH(Struts Spring Hibernate开发框架)

    Spring(Model) Spring的核心思想是IoC和AOP,Spring使得管理对象更加方便,极大的降低组件之间的耦合度,实现了软件各层之间的解耦. Struts(View) 使用Struts ...

  4. 封装getElementsByClassName()

    function getElementsByClassName(node,classname){             if(node.getElementsByClassName){        ...

  5. 1012 最小公倍数LCM

    1012 最小公倍数LCM 基准时间限制:1 秒 空间限制:131072 KB 输入2个正整数A,B,求A与B的最小公倍数. Input 2个数A,B,中间用空格隔开.(1<= A,B < ...

  6. Munin监控的安装与配置

    Munin 是一款类似 RRD tool 的优秀系统监控工具,它能提供给你多方面的系统性能信息,例如 磁盘.网络.进程.系统和用户. Munin 的工作原理 Munin 以客户端-服务器模式运行,主服 ...

  7. select option 下拉多选单选bootstrap插件使用总结

    <select id="example-getting-started" multiple="multiple"> <option value ...

  8. 阿里云VPS搭建Hexo博客

    最近买了一个阿里云服务器,准备写自己的网站,和将自己的作品放在上面:开始的时候,感觉就一个服务器应该很简单,但是从申请域名到备案,再到服务器搭建,没想到一波三折:闲话不多说,只是记录我在搭建时,最简单 ...

  9. linux去除&bsol;r(window中编辑的文本)

    vim -b file 二进制贷款文件:%s/^M//g         # 注意这里使用Ctrl+V+M输入^M 上面的方法我就不行,但是下面的可以: 如果不行可以使用 :%s/\r//

  10. cf1000F One Occurrence &lpar;线段树&rpar;

    这题我是离线做的 设i位置的数上次出现的位置是pre[i](如果第一次出现那就是0) 可以想到,用线段树维护一个区间的pre的最小值,如果它小于区间左端点,那这个数就是一个合法的答案 但直接这样做是错 ...