综合练习

目录

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

确定要使用的数据表

确定已知的关联字段

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

确定要使用的数据表

确定已知的关联字段 

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

确定所需要的数据表

 确定已知的关联字段


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,…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

一、直方图相关学习

1、灰度直方图 1.1 基本概念和作用 表示图像中每个灰度级别的像素数量。用于分析图像的亮度分布情况。 1.2 代码示例 参数介绍 hist cv2.calcHist(images, channels, mask, histSize, ranges, hist, accumulate)-images:输入图像的列表。对于灰度图像&#xff0…

Prometheus安装

一、Prometheus的简介 Prometheus是一种开源的监控和警报工具,用于收集、存储和查询各种系统和服务的指标数据。它具有灵活的查询语言和强大的可视化功能,可用于实时监控应用程序性能和状态。 二、Prometheus下载 1、官网下载地址 下载Prometheus 2、P…

【regex】正则表达式

集合 [0-9.] [0-9.\-] 例子 正则表达式,按照规则写,写的时候应该不算困难,但是可读性差 不同语言中regex会有微小的差异 vim 需要转义, perl/python中不需要转义 锚位 \b am\b i am 命名 / 命名捕获组 ( 捕获组(…

167基于matlab的根据《液体动静压轴承》编写的有回油槽径向静压轴承的程序

基于matlab的根据《液体动静压轴承》编写的有回油槽径向静压轴承的程序,可显示承载能力、压强、刚度及温升等图谱.程序已调通,可直接运行。 167 显示承载能力、压强、刚度及温升 (xiaohongshu.com)https://www.xiaohongshu.com/explore/65d212b200000000…

numpy模块:从基础到高级的完整指南【第88篇—NumPy数组操作】

numpy模块:从基础到高级的完整指南 在Python的科学计算领域,NumPy模块是一个不可或缺的利器。它提供了丰富的数学函数和矩阵操作,使得数据处理、分析和科学计算变得更加高效。本文将带你初步了解NumPy模块,并通过实例代码深入解析…

2.17日学习打卡----初学Dubbo(二)

2.17日学习打卡 目录: 2.17日学习打卡一. Dubbo入门案例需求介绍配置开发环境dubbo-producerdubbo-consumer运行测试IDEA开启DashBoard面板 二. Dubbo高级特性序列化协议安全地址缓存超时时间与配置覆盖关系重试机制多版本负载均衡集群容错服务降级服务限流原理服务限流实现结果…

[深度学习] 深入理解什么是卷积神经网络

​ 🌈 博客个人主页:Chris在Coding 🎥 本文所属专栏:[深度学习] ❤️ 热门学习专栏:[Linux学习] ⏰ 我们仍在旅途 目录 1.卷积的定义 2.卷积的"卷"在哪里 3.什么又是卷积神…

Kerberos认证详解

对于Kerberos认证,可以大概如下图: 但是如果是详细的话,Kerberos认证过程可以分为三个部分,六个过程 1.AS-REQ&&AS-REP 1.AS-REQ 当域内某个用户输入了账号或者密码的时候,客户端就会发送一个authenticator…

企业大宽带服务器用哪里最合适

如今,数字经济的发展速度不断加快,进入数字化跑道的企业,每天都在大量输出、共享、存储数字内容,想要更高效、安全地让用户看到内容,企业的服务器需要满足大带宽、低延时、高并发等要求。 中小企业受限于资金、资源等…

【教程】Linux使用aria2c多线程满速下载

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 安装aria2c&#xff1a; sudo apt-get install aria2多线程下载&#xff1a; aria2c -x 16 -s 16 <url> 比如&#xff1a; aria2c -x 16 -s 16 http://images.cocodataset.org/zips/test2017.zip

白话微机:8.解释FPGA以及一些考研面试问题

一. 前言&#xff08;更新世界观&#xff09; 在“微机世界”&#xff0c;普通的城市(单片机)里&#xff0c;人又有一个别的名字叫做“数据”&#xff0c;人有0有1&#xff1b;人们也有住房&#xff0c;这些住房在这个世界叫做“存储器”&#xff1b;地上有路&#xff0c;这些路…