连接查询及分组查询强化练习

-- 求每个雇员的姓名,工资,工资等级

select a.ename, a.sal, b.grade from emp a, salgrade b
where a.sal between b.losal and b.hisal;

-- 求每个员工的姓名,部门名,部门号

select a.ename, b.dname, b.deptno
  from emp a, dept b
 where a.deptno = b.deptno;

-- 求每个人的名字和他的经理人的名字,用外连接把KING也取出来

select a.ename, b.ename mgrname from emp a, emp b
where a.mgr = b.empno;

select a.ename, b.ename mgrname from emp a, emp b
where a.mgr = b.empno(+);

-- 求公司中谁的薪水最高

select * from emp a where a.sal = (select max(sal) from emp);

-- 求薪水在部门的平均薪水之上的雇员姓名和及薪水

select a.ename, a.sal, a.deptno
  from emp a, (select avg(sal) avgsal, deptno from emp group by deptno) b
 where a.sal > b.avgsal
   and a.deptno = b.deptno;

-- 求每个部门中薪水最高的雇员编号,雇员姓名,部门编号,部门名

第一步,求每个部门的最高薪资

select max(sal) maxsal, deptno from emp group by deptno;

第二步,匹配每个部门的最高工资,查询最高工资员工姓名

select a.empno, a.ename, b.deptno, c.dname
  from emp a,
       (select max(sal) maxsal, deptno from emp group by deptno) b,
       dept c
 where a.deptno = b.deptno
   and b.deptno = c.deptno
   and a.sal = b.maxsal;

-- 求部门平均薪水的等级

select a.sal, b.grade
  from (select avg(sal) sal, deptno from emp group by deptno) a, salgrade b
 where a.sal between b.losal and b.hisal;

-- 求部门平均的薪水等级

后续补上sql

-- 雇员中有哪些人是经理人

select * from emp where job in ('MANAGER', 'PRESIDENT', 'ANALYST');

-- 求比普通员工的最高薪水还要高的经理人名称

select ename, sal
  from emp
 where sal > (select max(sal)
                from emp
               where job not in ('MANAGER', 'PRESIDENT', 'ANALYST'))
   and job in ('MANAGER', 'PRESIDENT', 'ANALYST');

-- 求薪水最高的前5名雇员

select c.ename, c.sal
  from (select b.ename, b.sal, rownum rn
          from (select a.ename, a.sal from emp a order by sal desc) b) c
 where c.rn <= 5;

-- 求薪水最高的6到10名的雇员姓名

select c.ename, c.sal
  from (select b.ename, b.sal, rownum rn
          from (select a.ename, a.sal from emp a order by sal desc) b) c
 where c.rn between 6 and 10;

-- 求最后入职的5名员工

select c.ename, c.hiredate
  from (select b.ename, b.hiredate, rownum rn
          from (select a.ename, a.hiredate from emp a order by hiredate desc) b) c
 where c.rn <= 5;

-- 求每个部门中薪水最高的前两名雇员

select * from emp e
where ( select count(*) from emp where sal > e.sal
and deptno = e.deptno ) < 2
order by e.deptno,e.sal desc;

-- 不用组函数求最高工资

select a.sal from (select * from emp order by sal desc) a where rownum = 1;
select e.sal from emp e where e.sal not in(select e2.sal from emp e1,emp e2 where e1.sal>e2.sal);
select distinct sal from emp
minus
select distinct e2.sal from emp e1,emp e2 where e1.sal>e2.sal;

-- 求平均薪水最高的部门名称

select a.dname, b.deptno
  from dept a,
       (select avg(sal) avgsal, deptno from emp group by deptno) b,
       (select max(a.avgsal) maxsal
          from (select avg(sal) avgsal, deptno from emp group by deptno) a) c
 where a.deptno = b.deptno
   and b.avgsal = c.maxsal;

以上题目均自己所做,如有错误,请及时指正,谢谢。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 02:27:48

连接查询及分组查询强化练习的相关文章

S1/C#语言和数据库技术基础/11-连接查询和分组查询

分组查询 采用分组查询的T-SQL语句如下. SELECT   CourseID,AVG(Score)   AS   课程平均成绩 FROM   Score GROUP   BY   CourseID (1)查询男女学生的人数各是多少 SELECT   COUNT(*)    AS   人数,SSex    FROM   Students GROUP   BY   SSex (2)查询每个年级的总人数 SELECT   COUNT(*)   AS   年级人数,SGrade   FROM   S

【Hibernate】Hibernate的聚类查询、分组查询、排序与时间之差

在Hibernate中的HQL语句其实能够基本能够实现SQL语句所做的事情,正如jQuery至于javascript一样.虽然HQL语句是对类的查询,但是HQL在实行聚类查询.分组查询.排序与时间之差等查询,也无须把查询结果查询出来,再通过对List的处理才得到结果. 比如有一张如下的Testtable表: 要像<[Mysql]求出离最近相差X天的项,sql语句关于日期的比对>(点击打开链接)一样,查询date字段离现在具有30年的项有多少,SQL语句则这样写: select count(*)

连表查询和分组查询

表连接和分组链接 1.分组查询 01.分组查询是按某一列分组,相同的列合并,查询出结果 02.Group by 关键字 03.分组查询支持的条件: 001.年级 002.姓氏 003.地址 004.年龄 04.语法 select 列名 from 表明 where 条件 group by 列名 *group by中查询的列,必须出现在查询列中!!! *分组的顺序为由前到后 2.having 01.对分组后的数据进行筛选,将"组"看做"列"来限定条件 02.语法 sel

Django学习【第7篇】:Django之ORM跨表操作(聚合查询,分组查询,F和Q查询等)

django之跨表查询及添加记录 一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系(one-to-many). 创建一对一的关系:OneToOne("要绑定关系的表名") 创建一对多的关系:ForeignKey("要绑定关系的表名") 创建多对多的关系:ManyToMany(&qu

Django之ORM跨表操作(聚合查询,分组查询,F和Q查询等)

一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系(one-to-many). 创建一对一的关系:OneToOne("要绑定关系的表名") 创建一对多的关系:ForeignKey("要绑定关系的表名") 创建多对多的关系:ManyToMany("要绑定关系的表名"

Django Mysql数据库-聚合查询与分组查询

一.聚合查询与分组查询(很重要!!!) 聚合查询:aggregate(*args, **kwargs),只对一个组进行聚合 from django.db.models import Avg,Sum,Count,Max,Min # 1.查询所有图书的平均价格 print(models.Book.objects.all().aggregate(Avg("price"))) aggregate()是QuerySet 的一个终止子句(也就是返回的不再是一个QuerySet集合的时候),意思是说

连接查询和分组查询

一.分组查询:用于统计时经常使用分组查询 1.group by分组 01.例如查询每个年级的总人数 --一旦通过group by分组,那么我们只能获取组相关的信息,而不能获取组中成员的信息 --在select后只能跟聚合函数和group by后面的列,其他列不允许 1 select gradeid as 年级编号,COUNT(studentno) as 总人数 2 from student 3 group by gradeid 聚合函数: sum()--count()--max() min()-

关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询

http://www.jianshu.com/p/eeb6a898d4ec 前言 上一篇关系数据库常用SQL语句语法大全主要是关系型数据库大体结构,本文细说一下关系型数据库查询的SQL语法. SQL数据查询 语法回顾 SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]- FROM <表名或视图名>[,<表名或视图名>]- [WHERE <条件表达式>] [GROUP BY <列名> [HAVING &l

接连查询和分组查询

一. 分组查询 1.语法 SELECT ... FROM ... GROUP BY ... --分组查询Group by    select COUNT(*) as 学生人数,GradeId as 年级编号 from Student group by GradeId 2.进行多表之间的分组查询 --查询每门课程的平均分    --where 和 group by 和 order by 的顺序    select AVG(StudentResult) as 平均分,SubjectName as 课

链接查询和分组查询

use Myschool--查询对应年级下的人数SELECT COUNT(1) AS '人数' FROM Student WHERE GradeId=1SELECT COUNT(1) AS '人数' FROM Student WHERE GradeId=2SELECT COUNT(1) AS '人数' FROM Student WHERE GradeId=3--分组查询地区对应的人数--分组查询原理:根据特定列进行的分组,找列的想同值SELECT COUNT(1) AS '人数',Address