综合练习

目录

查询每个员工的编号、姓名、职位、基本工资、部门名称、部门位置

确定要使用的数据表

确定已知的关联字段

查询每个员工的编号、姓名、职位、基本工资、工资等级

确定要使用的数据表

确定已知的关联字段 

查询每个员工的编号、姓名、职位、基本工资、部门名称、工资等级

确定所需要的数据表

 确定已知的关联字段


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

前面介绍了多表查询,实际上就是在 from子句之后增加新的数据表,每增加一张数据表就必须消除笛卡尔积(没有关联字段的表不能够进行多表查询) 

需要注意:不管你怎么优化,笛卡尔积永远存在,数据量都会很大,现在来巩固一下前面学习的知识点

查询每个员工的编号、姓名、职位、基本工资、部门名称、部门位置

确定要使用的数据表

emp 表:员工的编号、姓名、职位、基本工资

dept 表:部门名称、部门位置

确定已知的关联字段

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

第一步:查询出每个员工的编号、姓名、职位、基本工资。现在只需要使用 emp 一张数据表即可

SQL> select e.empno,e.ename,e.job,e.sal2  from emp e;EMPNO ENAME                JOB                       SAL
---------- -------------------- ------------------ ----------7369 SMITH                CLERK                     8007499 ALLEN                SALESMAN                 16007521 WARD                 SALESMAN                 12507566 JONES                MANAGER                  29757654 MARTIN               SALESMAN                 12507698 BLAKE                MANAGER                  28507782 CLARK                MANAGER                  24507839 KING                 PRESIDENT                50007844 TURNER               SALESMAN                 15007900 JAMES                CLERK                     9507902 FORD                 ANALYST                  30007934 MILLER               CLERK                    13008989 HELLO已选择 13 行。

此时数据表 emp 别名命名为 e,并显示出该表每个员工的编号、姓名、职位和基本工资

第二步:查询出每个员工对应的部门信息,需要引入 dept 表(引入表的时候一定要考虑关联) 。这两张表直接可以利用 deptno 字段关联,利用 where子句来消除笛卡尔积

SQL> select e.empno,e.ename,e.job,e.sal,d.dname,d.loc2  from emp e,dept d3  where e.deptno=d.deptno;EMPNO ENAME                JOB                       SAL DNAME                        LOC
---------- -------------------- ------------------ ---------- ---------------------------- --------------------------7839 KING                 PRESIDENT                5000 ACCOUNTING                   NEW YORK7782 CLARK                MANAGER                  2450 ACCOUNTING                   NEW YORK7934 MILLER               CLERK                    1300 ACCOUNTING                   NEW YORK7902 FORD                 ANALYST                  3000 RESEARCH                     DALLAS7369 SMITH                CLERK                     800 RESEARCH                     DALLAS7566 JONES                MANAGER                  2975 RESEARCH                     DALLAS7900 JAMES                CLERK                     950 SALES                        CHICAGO7844 TURNER               SALESMAN                 1500 SALES                        CHICAGO7654 MARTIN               SALESMAN                 1250 SALES                        CHICAGO7521 WARD                 SALESMAN                 1250 SALES                        CHICAGO7499 ALLEN                SALESMAN                 1600 SALES                        CHICAGO7698 BLAKE                MANAGER                  2850 SALES                        CHICAGO已选择 12 行。

二张表通过“e.deptno=d.deptno”进行关联,显示的数据字段增加数据表 dept 中的 dname 和 loc 字段

以上的操作属于之前基本概念的加强,并且给出了明确的关联字段。很多查询是不会明确给出关联字段的

查询每个员工的编号、姓名、职位、基本工资、工资等级

SQL> select * from salgrade;GRADE      LOSAL      HISAL
---------- ---------- ----------1        700       12002       1201       14003       1401       20004       2001       30005       3001       9999

确定要使用的数据表

emp 表:员工的编号、姓名、职位、基本工资

salgrade 表:工资等级

确定已知的关联字段 

尽管 emp 表中没有确定的字段与 salgrade 表中的字段一样,但仍然可以通过其他关系进行关联。

通过 salgrade 表中的两个字段形成范围进行管理,即员工表的 sal 字段的值落在 salgrade 表中的两个字段形成范围中,这时关联关系可以写成 emp.sal BETWEEN salgrade.losal AND salgrade.hisal

第一步:查询出每个员工的编号、姓名、职位、基本工资。现在只需要使用 emp 一张数据表即可

SQL> select e.empno,e.ename,e.job,e.sal2  from emp e;EMPNO ENAME                JOB                       SAL
---------- -------------------- ------------------ ----------7369 SMITH                CLERK                     8007499 ALLEN                SALESMAN                 16007521 WARD                 SALESMAN                 12507566 JONES                MANAGER                  29757654 MARTIN               SALESMAN                 12507698 BLAKE                MANAGER                  28507782 CLARK                MANAGER                  24507839 KING                 PRESIDENT                50007844 TURNER               SALESMAN                 15007900 JAMES                CLERK                     9507902 FORD                 ANALYST                  30007934 MILLER               CLERK                    13008989 HELLO已选择 13 行。

第二步:增加 salgrade 表,增加了数据表之后就需要引入 where子句消除笛卡尔积

SQL> select e.empno,e.ename,e.job,e.sal,s.grade2  from emp e,salgrade s3  where e.sal between s.losal and s.hisal;EMPNO ENAME                JOB                       SAL      GRADE
---------- -------------------- ------------------ ---------- ----------7369 SMITH                CLERK                     800          17900 JAMES                CLERK                     950          17521 WARD                 SALESMAN                 1250          27654 MARTIN               SALESMAN                 1250          27934 MILLER               CLERK                    1300          27844 TURNER               SALESMAN                 1500          37499 ALLEN                SALESMAN                 1600          37782 CLARK                MANAGER                  2450          47698 BLAKE                MANAGER                  2850          47566 JONES                MANAGER                  2975          47902 FORD                 ANALYST                  3000          47839 KING                 PRESIDENT                5000          5已选择 12 行。

查询每个员工的编号、姓名、职位、基本工资、部门名称、工资等级

确定所需要的数据表

emp 表:编号、姓名、职位、基本工资

dept 表:部门名称

salgrade 表:工资等级

 确定已知的关联字段

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

员工与工资等级: emp.sal BETWEEN salgrade.losal AND salgrade.hisal

第一步:查询出每个员工的编号、姓名、职位、基本工资

SQL> select e.empno,e.ename,e.job,e.sal2  from emp e;EMPNO ENAME                JOB                       SAL
---------- -------------------- ------------------ ----------7369 SMITH                CLERK                     8007499 ALLEN                SALESMAN                 16007521 WARD                 SALESMAN                 12507566 JONES                MANAGER                  29757654 MARTIN               SALESMAN                 12507698 BLAKE                MANAGER                  28507782 CLARK                MANAGER                  24507839 KING                 PRESIDENT                50007844 TURNER               SALESMAN                 15007900 JAMES                CLERK                     9507902 FORD                 ANALYST                  30007934 MILLER               CLERK                    13008989 HELLO已选择 13 行。

 第二步:加入部门名称,增加一张表就增加一个条件消除笛卡尔积

SQL> select e.empno,e.ename,e.job,e.sal,d.dname2  from emp e,dept d3  where e.deptno=d.deptno;EMPNO ENAME                JOB                       SAL DNAME
---------- -------------------- ------------------ ---------- ----------------------------7839 KING                 PRESIDENT                5000 ACCOUNTING7782 CLARK                MANAGER                  2450 ACCOUNTING7934 MILLER               CLERK                    1300 ACCOUNTING7902 FORD                 ANALYST                  3000 RESEARCH7369 SMITH                CLERK                     800 RESEARCH7566 JONES                MANAGER                  2975 RESEARCH7900 JAMES                CLERK                     950 SALES7844 TURNER               SALESMAN                 1500 SALES7654 MARTIN               SALESMAN                 1250 SALES7521 WARD                 SALESMAN                 1250 SALES7499 ALLEN                SALESMAN                 1600 SALES7698 BLAKE                MANAGER                  2850 SALES已选择 12 行。

第三步:加入工资等级信息,与原始的消除笛卡尔积条件应该同时满足,所以使用 AND 连接

SQL> select e.empno,e.ename,e.job,e.sal,d.dname,s.grade2  from emp e,dept d,salgrade s3  where e.deptno=d.deptno and e.sal between s.losal and s.hisal;EMPNO ENAME                JOB                       SAL DNAME                             GRADE
---------- -------------------- ------------------ ---------- ---------------------------- ----------7839 KING                 PRESIDENT                5000 ACCOUNTING                            57902 FORD                 ANALYST                  3000 RESEARCH                              47566 JONES                MANAGER                  2975 RESEARCH                              47698 BLAKE                MANAGER                  2850 SALES                                 47782 CLARK                MANAGER                  2450 ACCOUNTING                            47499 ALLEN                SALESMAN                 1600 SALES                                 37844 TURNER               SALESMAN                 1500 SALES                                 37934 MILLER               CLERK                    1300 ACCOUNTING                            27654 MARTIN               SALESMAN                 1250 SALES                                 27521 WARD                 SALESMAN                 1250 SALES                                 27900 JAMES                CLERK                     950 SALES                                 17369 SMITH                CLERK                     800 RESEARCH                              1已选择 12 行。

在 emp 基本信息表中,有员工姓名、员工职位、入职日期等。如果现在把这 3 个 字段显示在同一个字段中,并且中间有分割符。

例如,现在想显示的结果为“SMITH 的岗位是 CLERK, 入职日期是 1980-12-27”

其实,这是比较简单的,我们可以在 select查询语句中,利用连接符把这些字段连接起来

SQL> select ename || '的岗位是' ||job||'入职日期是'||to_char(hiredate,'yyyy-mm-dd')2  from emp;ENAME||'的岗位是'||JOB||'入职日期是'||TO_CHAR(HIREDATE,'YYYY-MM-DD')
----------------------------------------------------------------------------------------------------------------
SMITH的岗位是CLERK入职日期是1980-12-17
ALLEN的岗位是SALESMAN入职日期是1981-02-20
WARD的岗位是SALESMAN入职日期是1981-02-22
JONES的岗位是MANAGER入职日期是1981-04-02
MARTIN的岗位是SALESMAN入职日期是1981-09-28
BLAKE的岗位是MANAGER入职日期是1981-05-01
CLARK的岗位是MANAGER入职日期是1981-06-09
KING的岗位是PRESIDENT入职日期是1981-11-17
TURNER的岗位是SALESMAN入职日期是1981-09-08
JAMES的岗位是CLERK入职日期是1981-12-03
FORD的岗位是ANALYST入职日期是1981-12-03
MILLER的岗位是CLERK入职日期是1982-01-23
HELLO的岗位是入职日期是已选择 13 行。

也就是说,我们在平时查询中,可以利用“||”连接符把一些相关的字段连接起来。这在报表视图中非常有用。而且,利用连接符还可以在字段中间加入一些说明性的文字,以方便大家阅读。这些使用连接符的方法可以大大提高内容的可读性。这也是我们在数据库设计过程中需要关注的一个内容

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

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

相关文章

⭐北邮复试刷题589. N 叉树的前序遍历__DFS (力扣每日一题)

589. N 叉树的前序遍历 给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。 示例 1: 输入:root [1,null,…

数据结构与算法:二叉树

一、二叉树的链式存储 树结点数据结构 typedef char BiElemType; typedef struct BiTNode{BiElemType c;struct BiTNode *lchild;struct BiTNode *rchild; }BiTNode,*BiTree;树中任何一个结点都是一个结构体,它的空间是通过malloc申请出来的 二、二叉树层次建树 …

<网络安全>《38 网络攻防专业课<第四课 - windows常见漏洞>》

1 系统漏洞概述 系统漏洞概述: 漏洞是指应用软件或操作系统软件在逻辑设计上的缺陷,或在编写时产生的错误。 漏洞是硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。 2 Window…

JS面向对象:六.原型链

原型链是 JavaScript 中实现对象之间继承关系的一种机制。在 JavaScript 中,每个对象都有一个指向另一个对象的链接,这个链接被称为原型。当试图访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,JavaScript 就会沿着…

数据安全之认识数据资产管理平台

文章目录 一、什么是数据资产二、什么是数据资产管理平台1、什么是数据资产管理平台2、为什么需要数据资产管理平台 三、数据资产管理平台的主要功能四、数据资产管理平台的工作原理五、数据资产管理平台的应用场景六、安全资产管理平台与数据资产管理平台的区别与关系1、安全资…

华为配置旁挂二层组网直接转发示例

配置旁挂二层组网直接转发示例 组网图形 图1 配置旁挂二层组网直接转发示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件扩展阅读 业务需求 企业用户通过WLAN接入网络,以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时&#xff…

已解决ModuleNotFoundError: No module named ‘cv2’异常的正确解决方法,亲测有效!!!

已解决ModuleNotFoundError: No module named ‘cv2’异常的正确解决方法,亲测有效!!! 文章目录 问题分析 报错原因 解决思路 解决方法 总结 在处理图像和视频等计算机视觉任务时,OpenCV是一个非常强大的库。然而…

数据库:存储、管理和分析数据的基石——数据库的介绍,分类,作用和特点

引言: 在现代信息时代,数据的管理和存储成为各个领域中不可或缺的一部分。数据库技术应运而生,它提供了一种结构化方式来组织、存储和管理数据。本文将详细介绍数据库的概念,并对常见的数据库进行分类,探讨它们的作用、…

图像处理之《隐写网络的隐写术》论文阅读

一、文章摘要 隐写术是一种在双方之间进行秘密通信的技术。随着深度神经网络(DNN)的快速发展,近年来越来越多的隐写网络被提出,并显示出良好的性能。与传统的手工隐写工具不同,隐写网络的规模相对较大。如何在公共信道上秘密传输隐写网络引起…

Linux colrm命令教程:如何移除文本文件中的指定列(附实例详解和注意事项)

Linux colrm命令介绍 colrm(column remove)命令在Linux中用于编辑源代码文件、脚本文件或常规文本文件中的文本。此命令可以从文件中移除选定的列。在这里,列被定义为一行中的单个字符。它始终从索引1开始,而不是0。 Linux colr…

anomalib1.0学习纪实-续2:三个文件夹

为了读懂程序,有三个最重要的文件夹,如下图: 正好对应四个类,如下图: 三个类的来源如下图所示: 注意,MVTec是个大类,里面用到了这里的第四个类MVTecDataset,代码如下。…

如何优雅地与ChatGPT对话?

ChatGPT已经发布了一年之久了,但你真的会使用ChatGPT吗?同一个问题,不同的问法得到的答案可能千差万别,你可以把ChatGPT当作一个知识面很广的专家,他上知天文下知地理,但他无法直接知道你的意图&#xff0c…

洛谷: P1553 数字反转(升级版)

思路: 没想到什么好办法,一步一步来。整体就是反转,删除前导/后导0,反转,删除前导/后导0。 第一次AC没过去,原因是没考虑到分数的分母前导0的情况,比如1234567890/1234567890这个样例,结果输出…

蓝桥杯官网填空题(寻找整数)

问题描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 有一个不超过 10^17 的正整数 n,知道这个数除以 2 至 49 后的余数如下表所示,求这个正整数最小是多少。 运行限制 最大运行时间:…

AutoSAR(基础入门篇)10.6-模式管理进阶

目录 一、概念 1、Mode Requester(MRqr) 2、Mode User(MUsr) 3、Mode Manager(MMgr) 4、Mode Declaration Group 5、Mode Switch Event 二、总结

【软考问题】-- 10 - 知识精讲 - 项目风险管理

一、基本问题 1:按照可预测性,风险分哪三类? (1)已知风险:如项目目标不明确, 过分乐观的进度计划, 设计或施工变更和材料价格波动等。(2)可预测风险&#xff…

RSA后端加密,解密,加签及验签

目录 1.说明 2.加密和加签的区别 3.示例 4.注意事项 1.说明 RSA算法是一种非对称加密算法,与对称加密算法不同的是,RSA算法有两个不同的密钥,一个是公钥,一个是私钥。 公钥是公开的,可以多人持有;私钥是保密的,只有自己持有。…

智慧城市与数字孪生:实现城市可持续发展的关键

一、引言 随着全球城市化进程的加速,城市面临着诸多挑战,如资源紧张、环境恶化、交通拥堵等。为了解决这些问题,智慧城市的概念应运而生。智慧城市利用先进的信息通信技术,提升城市治理水平,改善市民的生活质量。而数…

macOS 上从源码安装 Nginx

在 macOS 上从源码安装 Nginx 并带上 --with-ipv6 参数进行编译,你可以按照以下步骤操作: 1. 安装依赖 首先,安装 Nginx 编译所需的依赖项。对于 macOS,你可能需要使用 Homebrew 来安装这些依赖项: bash复制代码 br…

Java ArrayDeque源码剖析

LinkedList实现了队列接口Queue和双端队列接口Deque,Java容器类中还有一个双端队列的实现类ArrayDeque,它是基于数组实现的。我们知道,一般而言,由于需要移动元素,数组的插入和删除效率比较低,但ArrayDeque的效率却非常高&#xf…