综合练习(一)

目录

列出薪金高于部门 30 的所有员工薪金的员工姓名和薪金、部门名称、部门人数

列出与 ALLEN从事相同工作的所有员工及他们的部门名称、部门人数、领导姓名


Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645

列出薪金高于部门 30 的所有员工薪金的员工姓名和薪金、部门名称、部门人数

● 确定要使用的数据表

emp 表:员工姓名和薪金。

dept 表:部门名称。

emp 表:统计出部门人数。

● 确定已知的关联字段

员工与部门:emp.deptno=dept.deptno 

第一步:找到部门 30 所有员工的薪金

SQL> select sal2  from emp3  where deptno=30;SAL
----------16001250125028501500950已选择 6 行。

第二步:以上查询中返回的是多行单列的数据,

那么此时就可以使用 3 种判断符判断:IN、ANY、ALL。

根据要求需要找到所有员工,因此使用“>ALL”。

SQL> select e.ename,e.sal2  from emp e3  where e.sal > all(4      select sal from emp where deptno=30);ENAME                       SAL
-------------------- ----------
JONES                      2975
FORD                       3000
KING                       5000

第三步:要找到部门的信息,自然在 from子句之后引入 dept 表,而后要消除笛卡尔积。用内连接

SQL> select e.ename,e.sal,d.dname2  from emp e,dept d3  where e.sal > all(4      select sal from emp where deptno=30)5      and e.deptno=d.deptno;ENAME                       SAL DNAME
-------------------- ---------- ----------------------------
JONES                      2975 RESEARCH
FORD                       3000 RESEARCH
KING                       5000 ACCOUNTING

第四步:需要统计出部门人数的信息

思考如下。

如果要进行部门的人数统计,那么一定要按照部门分组

在使用分组的时候,SELECT 子句只能够出现分组字段与统计函数

此时就出现了一个矛盾,因为 select 子句里面有其他字段,所以不可能直接使用 group by 分组,所以可以考虑利用子查询分组,即在 from子句之后使用子查询先进行分组统计,而后将临时表继续采用多表查询操作

select e.ename,e.sal,d.dname,temp.count
from emp e,dept d,(select deptno dno,count(empno) countfrom empgroup by deptno) temp
where e.sal > all(select sal from emp where deptno=30)and e.deptno=d.deptnoand d.deptno=temp.dno;

结果如下 

SQL> select e.ename,e.sal,d.dname,temp.count2  from emp e,dept d,(3  select deptno dno,count(empno) count4      from emp5      group by deptno) temp6  where e.sal > all(7      select sal from emp where deptno=30)8      and e.deptno=d.deptno9      and d.deptno=temp.dno;ENAME                       SAL DNAME                             COUNT
-------------------- ---------- ---------------------------- ----------
FORD                       3000 RESEARCH                              3
JONES                      2975 RESEARCH                              3
KING                       5000 ACCOUNTING                            3

列出与 ALLEN从事相同工作的所有员工及他们的部门名称、部门人数、领导姓名

确定要使用的数据表

emp 表:员工信息

dept 表:部门名称

emp 表:领导信息

确定已知的关联字段

员工与部门:emp.deptno=dept.deptno

员工与领导:emp.mgr=memp.empno

 第一步:没有 ALLEN的工作就无法知道哪个员工满足条件,需要找到 ALLEN的工作

SQL> select job2  from emp3  where ename='ALLEN';JOB
------------------
SALESMAN

第二步:以上的查询返回的是单行单列,所以只能够在 where子句或者是 having子句中使用,根据现在的需求需在 where子句中使用,对所有的员工信息进行筛选

SQL> select e.empno,e.ename,e.job2  from emp e3  where job=(4  select job from emp where ename='ALLEN');EMPNO ENAME                JOB
---------- -------------------- ------------------7499 ALLEN                SALESMAN7521 WARD                 SALESMAN7654 MARTIN               SALESMAN7844 TURNER               SALESMAN

第三步:如果不需要重复信息,可以删除 ALLEN

SQL> select e.empno,e.ename,e.job2  from emp e3  where job=(4  select job from emp where ename='ALLEN')5  and e.ename<>'ALLEN';EMPNO ENAME                JOB
---------- -------------------- ------------------7521 WARD                 SALESMAN7654 MARTIN               SALESMAN7844 TURNER               SALESMAN

第四步:部门名称只需要加入 dept 表即可

SQL> select e.empno,e.ename,e.job,d.dname2  from emp e,dept d3  where job=(4  select job from emp where ename='ALLEN')5  and e.ename<>'ALLEN'6  and e.deptno=d.deptno;EMPNO ENAME                JOB                DNAME
---------- -------------------- ------------------ ----------------------------7521 WARD                 SALESMAN           SALES7654 MARTIN               SALESMAN           SALES7844 TURNER               SALESMAN           SALES

第五步:此时的查询不可能直接使用 group by 进行分组,所以需要使用子查询实现分组

SQL> select e.empno,e.ename,e.job,d.dname,temp.count2  from emp e,dept d,(3  select deptno dno,count(empno) count4  from emp5  group by deptno) temp6  where job=(7  select job from emp where ename='ALLEN')8  and e.ename<>'ALLEN'9  and e.deptno=d.deptno10  and d.deptno=temp.dno;EMPNO ENAME                JOB                DNAME                             COUNT
---------- -------------------- ------------------ ---------------------------- ----------7521 WARD                 SALESMAN           SALES                                 67654 MARTIN               SALESMAN           SALES                                 67844 TURNER               SALESMAN           SALES                                 6

第六步:找到对应的领导信息,直接使用自身关联

SQL> select e.empno,e.ename,e.job,d.dname,temp.count,m.ename2  from emp e,dept d,(3  select deptno dno,count(empno) count4  from emp5  group by deptno) temp,emp m6  where e.job=(7  select job from emp where ename='ALLEN')8  and e.ename<>'ALLEN'9  and e.deptno=d.deptno10  and d.deptno=temp.dno11  and e.mgr=m.empno;EMPNO ENAME                JOB                DNAME                             COUNT ENAME
---------- -------------------- ------------------ ---------------------------- ---------- --------------------7654 MARTIN               SALESMAN           SALES                                 6 BLAKE7521 WARD                 SALESMAN           SALES                                 6 BLAKE7844 TURNER               SALESMAN           SALES                                 6 BLAKE

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/499350.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式学习第二十三天!(进程间通信)

进程间的通信&#xff1a; 1. 管道 2. 信号 3. 消息队列 4. 共享内存 5. 信号灯 6. 套接字 1. 管道&#xff1a; 1. 无名管道 无名管道只能用于具有亲缘关系的进程间通信 原因&#xff1a;无名管道没有名字&#xff0c;所有找不到管道的具体位置&#xff0c;那么在创建子进程前…

蓝牙耳机和笔记本电脑配对连接上了,播放设备里没有显示蓝牙耳机这个设备,选不了输出设备

环境&#xff1a; WIN10 杂牌蓝牙耳机6s 问题描述&#xff1a; 蓝牙耳机和笔记本电脑配对连接上了&#xff0c;播放设备里没有显示蓝牙耳机这个设备&#xff0c;选不了输出设备 解决方案&#xff1a; 1.打开设备和打印机&#xff0c;找到这个设备 2.选中这个设备&#…

Tomcat源码解析(二): Bootstrap和Catalina

Tomcat源码系列文章 Tomcat源码解析(一)&#xff1a; Tomcat整体架构 Tomcat源码解析(二)&#xff1a; Bootstrap和Catalina 目录 一、基础组件1、Lifecycle生命周期顶级接口2、组件的默认实现 二、启动类Bootstrap1、main2、init3、load与start 三、加载Catalina1、load2、s…

xss过waf的小姿势

今天看大佬的视频学到了几个操作 首先是拆分发可以用self将被过滤的函数进行拆分 如下图我用self将alert拆分成两段依然成功执行 然后学习另一种姿势 <svg id"YWxlcnQoIlhTUyIp"><img src1 οnerrοr"window[eval](atob(document.getElementsByTagNa…

深入理解Java泛型及其在实际编程中的应用

第1章&#xff1a;泛型的起源与重要性 大家好&#xff0c;我是小黑&#xff0c;在Java里&#xff0c;泛型&#xff08;Generics&#xff09;是一种不可或缺的特性&#xff0c;它允许咱们在编码时使用类型&#xff08;Type&#xff09;作为参数。这听起来可能有点绕&#xff0c…

单细胞Seurat - 细胞聚类(3)

本系列持续更新Seurat单细胞分析教程&#xff0c;欢迎关注&#xff01; 维度确定 为了克服 scRNA-seq 数据的任何单个特征中广泛的技术噪音&#xff0c;Seurat 根据 PCA 分数对细胞进行聚类&#xff0c;每个 PC 本质上代表一个“元特征”&#xff0c;它结合了相关特征集的信息。…

【网站项目】424学报稿件管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

ModStartCMS v8.1.0 图片前端压缩,抖音授权登录

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议&#xff0c;免费且不限制商业使用。 功能特性 丰富的模块市…

[LeetCode]143.重排链表

143. 重排链表 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/reorder-list/description/ 题目 示例 解题思路 寻找链表中点 链表逆序 合并链表 注意到目标链表即为将原链表的左半端和反转后的右半端合并后的结果。 这样我们的任务即可划分为三步&a…

React入门之React_使用es5和es6语法渲染和添加class

React入门 //react的核心库 <script src"https://cdn.jsdelivr.net/npm/react17/umd/react.development.js"></script> //react操作dom的核心库&#xff0c;类似于jquery <script src"https://cdn.jsdelivr.net/npm/react-dom17/umd/react-dom.…

微信干货知识分享:自动回复

信息太多回复太慢 回复新好友不及时 号太多&#xff0c;携带多个手机太重 今天给大家分享一下微信的隐藏功能 自动通过好友 有新的好友请求时&#xff0c;系统会自动通过好友&#xff0c;以免处理其他工作时错过客户。 通过好友自动回复 当微信号在系统登录&#xff0c;被动…

adb下载安装及使用教程

adb下载安装及使用教程 一、ADB的介绍1.ADB是什么&#xff1f;2.内容简介3.ADB常用命令1. ADB查看设备2. ADB安装软件3. ADB卸载软件4. ADB登录设备shell5. ADB从电脑上发送文件到设备6. ADB从设备上下载文件到电脑7. ADB显示帮助信息 4.为什么要用ADB 二、ADB的下载1.Windows版…