综合练习

目录

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

确定要使用的数据表

确定已知的关联字段

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

确定要使用的数据表

确定已知的关联字段 

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

确定所需要的数据表

 确定已知的关联字段


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.sal
  2  from emp e;

     EMPNO ENAME                JOB                       SAL
---------- -------------------- ------------------ ----------
      7369 SMITH                CLERK                     800
      7499 ALLEN                SALESMAN                 1600
      7521 WARD                 SALESMAN                 1250
      7566 JONES                MANAGER                  2975
      7654 MARTIN               SALESMAN                 1250
      7698 BLAKE                MANAGER                  2850
      7782 CLARK                MANAGER                  2450
      7839 KING                 PRESIDENT                5000
      7844 TURNER               SALESMAN                 1500
      7900 JAMES                CLERK                     950
      7902 FORD                 ANALYST                  3000
      7934 MILLER               CLERK                    1300
      8989 HELLO

已选择 13 行。

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

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

SQL> select e.empno,e.ename,e.job,e.sal,d.dname,d.loc
  2  from emp e,dept d
  3  where e.deptno=d.deptno;

     EMPNO ENAME                JOB                       SAL DNAME                        LOC
---------- -------------------- ------------------ ---------- ---------------------------- --------------------------
      7839 KING                 PRESIDENT                5000 ACCOUNTING                   NEW YORK
      7782 CLARK                MANAGER                  2450 ACCOUNTING                   NEW YORK
      7934 MILLER               CLERK                    1300 ACCOUNTING                   NEW YORK
      7902 FORD                 ANALYST                  3000 RESEARCH                     DALLAS
      7369 SMITH                CLERK                     800 RESEARCH                     DALLAS
      7566 JONES                MANAGER                  2975 RESEARCH                     DALLAS
      7900 JAMES                CLERK                     950 SALES                        CHICAGO
      7844 TURNER               SALESMAN                 1500 SALES                        CHICAGO
      7654 MARTIN               SALESMAN                 1250 SALES                        CHICAGO
      7521 WARD                 SALESMAN                 1250 SALES                        CHICAGO
      7499 ALLEN                SALESMAN                 1600 SALES                        CHICAGO
      7698 BLAKE                MANAGER                  2850 SALES                        CHICAGO

已选择 12 行。

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

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

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

SQL> select * from salgrade;

     GRADE      LOSAL      HISAL
---------- ---------- ----------
         1        700       1200
         2       1201       1400
         3       1401       2000
         4       2001       3000
         5       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.sal
  2  from emp e;

     EMPNO ENAME                JOB                       SAL
---------- -------------------- ------------------ ----------
      7369 SMITH                CLERK                     800
      7499 ALLEN                SALESMAN                 1600
      7521 WARD                 SALESMAN                 1250
      7566 JONES                MANAGER                  2975
      7654 MARTIN               SALESMAN                 1250
      7698 BLAKE                MANAGER                  2850
      7782 CLARK                MANAGER                  2450
      7839 KING                 PRESIDENT                5000
      7844 TURNER               SALESMAN                 1500
      7900 JAMES                CLERK                     950
      7902 FORD                 ANALYST                  3000
      7934 MILLER               CLERK                    1300
      8989 HELLO

已选择 13 行。

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

SQL> select e.empno,e.ename,e.job,e.sal,s.grade
  2  from emp e,salgrade s
  3  where e.sal between s.losal and s.hisal;

     EMPNO ENAME                JOB                       SAL      GRADE
---------- -------------------- ------------------ ---------- ----------
      7369 SMITH                CLERK                     800          1
      7900 JAMES                CLERK                     950          1
      7521 WARD                 SALESMAN                 1250          2
      7654 MARTIN               SALESMAN                 1250          2
      7934 MILLER               CLERK                    1300          2
      7844 TURNER               SALESMAN                 1500          3
      7499 ALLEN                SALESMAN                 1600          3
      7782 CLARK                MANAGER                  2450          4
      7698 BLAKE                MANAGER                  2850          4
      7566 JONES                MANAGER                  2975          4
      7902 FORD                 ANALYST                  3000          4
      7839 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.sal
  2  from emp e;

     EMPNO ENAME                JOB                       SAL
---------- -------------------- ------------------ ----------
      7369 SMITH                CLERK                     800
      7499 ALLEN                SALESMAN                 1600
      7521 WARD                 SALESMAN                 1250
      7566 JONES                MANAGER                  2975
      7654 MARTIN               SALESMAN                 1250
      7698 BLAKE                MANAGER                  2850
      7782 CLARK                MANAGER                  2450
      7839 KING                 PRESIDENT                5000
      7844 TURNER               SALESMAN                 1500
      7900 JAMES                CLERK                     950
      7902 FORD                 ANALYST                  3000
      7934 MILLER               CLERK                    1300
      8989 HELLO

已选择 13 行。

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

SQL> select e.empno,e.ename,e.job,e.sal,d.dname
  2  from emp e,dept d
  3  where e.deptno=d.deptno;

     EMPNO ENAME                JOB                       SAL DNAME
---------- -------------------- ------------------ ---------- ----------------------------
      7839 KING                 PRESIDENT                5000 ACCOUNTING
      7782 CLARK                MANAGER                  2450 ACCOUNTING
      7934 MILLER               CLERK                    1300 ACCOUNTING
      7902 FORD                 ANALYST                  3000 RESEARCH
      7369 SMITH                CLERK                     800 RESEARCH
      7566 JONES                MANAGER                  2975 RESEARCH
      7900 JAMES                CLERK                     950 SALES
      7844 TURNER               SALESMAN                 1500 SALES
      7654 MARTIN               SALESMAN                 1250 SALES
      7521 WARD                 SALESMAN                 1250 SALES
      7499 ALLEN                SALESMAN                 1600 SALES
      7698 BLAKE                MANAGER                  2850 SALES

已选择 12 行。

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

SQL> select e.empno,e.ename,e.job,e.sal,d.dname,s.grade
  2  from emp e,dept d,salgrade s
  3  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                            5
      7902 FORD                 ANALYST                  3000 RESEARCH                              4
      7566 JONES                MANAGER                  2975 RESEARCH                              4
      7698 BLAKE                MANAGER                  2850 SALES                                 4
      7782 CLARK                MANAGER                  2450 ACCOUNTING                            4
      7499 ALLEN                SALESMAN                 1600 SALES                                 3
      7844 TURNER               SALESMAN                 1500 SALES                                 3
      7934 MILLER               CLERK                    1300 ACCOUNTING                            2
      7654 MARTIN               SALESMAN                 1250 SALES                                 2
      7521 WARD                 SALESMAN                 1250 SALES                                 2
      7900 JAMES                CLERK                     950 SALES                                 1
      7369 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 行。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

string的用法

概念 可代替字符数组来存储字符串 访问 string name[i];//下标访问 string::iterator it;//迭代器访问常用函数 1.begin():获得字符串首地址 2.end():获得字符串末地址 3.:字符串的加法,可将两个字符串拼接起来 4.比较符:,>…

GET与 POST

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) GET 和 POST 有什么区别? 根据 REC 规范,GET的语义是从服务器获取指定的资源,这个资源可以是静态的文本、页面、图片视频等。GET请求的参数位置一般是写在 URL 中,UR…

Python Selenium实现自动化测试及Chrome驱动使用!

本文将介绍如何使用Python Selenium库实现自动化测试,并详细记录了Chrome驱动的使用方法。 通过本文的指导,读者将能够快速上手使用Python Selenium进行自动化测试。 并了解如何配置和使用Chrome驱动来实现更高效的自动化测试。 一、Python Selenium简…

ClickHouse监控及备份

第1章 ClickHouse监控概述 第2章 Prometheus&Grafana的安装 第3章 ClickHouse配置 第4章 Grafana集成Prometheus 第5章 备份及恢复

2024 前端面试题(GPT回答 + 示例代码 + 解释)No.114 - No.121

本文题目来源于全网收集,答案来源于 ChatGPT 和 博主(的小部分……) 格式:题目 h3 回答 text 参考大佬博客补充 text 示例代码 code 解释 quote 补充 quote 上一篇链接:2024 前端面试题(GPT回答 示例…

Linux系统:iptables 防火墙

目录 一、安全技术与防火墙 1、安全技术概念 2、防火墙 2.1 防火墙概念 2.2 防火墙分类 2.3 linux的防火墙Netfilter 2.4 防火墙工具介绍 2.5 netfilter 和 iptables 的关系 二、iptables 1、概念 2、五表五链 2.1 五个table表 2.2 五个chain链 2.3 内核中数据包…

全网最详细的从0到1的turbo pnpm monorepo的前端工程化项目[搭建篇]

全网最详细的从0到1的turbo pnpm monorepo的前端工程化项目[搭建篇] 引言相关环境技术栈初始化工程安装turbo配置pnpm-workspace安装husky安装lint-staged安装eslint安装prettier配置 .editorconfig配置 .gitignore初步项目结构结语 引言 最近各种原因,生活上的&am…

PHP支持的伪协议

php.ini参数设置 在php.ini里有两个重要的参数allow_url_fopen、allow_url_include。 allow_url_fopen:默认值是ON。允许url里的封装协议访问文件; allow_url_include:默认值是OFF。不允许包含url里的封装协议包含文件; 各协议的利用条件和方法 php:/…

机器人内部传感器-位置传感器-电位器式位置传感器

位置传感器 位置感觉是机器人最基本的感觉要求,可以通过多种传感器来实现。位置传感器包括位置和角度检测传感器。常用的机器人位置传感器有电位器式、光电式、电感式、电容式、霍尔元件式、磁栅式及机械式位置传感器等。机器人各关节和连杆的运动定位精度要求、重…

【Java】图解 JVM 垃圾回收(一):GC 判断策略、引用类型、垃圾回收算法

图解 JVM 垃圾回收(一) 1.前言1.1 什么是垃圾1.2 内存溢出和内存泄漏 2.垃圾回收的定义与重要性3.GC 判断策略3.1 引用计数算法3.2 可达性分析算法 4.引用类型5.垃圾回收算法5.1 标记-复制(Copying)5.2 标记-清除(Mark…

Diffusion Model——扩散模型

Diffusion Model 文章目录 Diffusion ModelDenoising Diffusion Probabilistic Model(DDPM)去噪过程:Denoise结构训练过程Text-to-image Generation Model High Resolution Image Synthesis With_Latent Diffusion Models (Stable Diffusion)基本结构与推理过程Text…

【OpenAI Sora】 最强文生视频怎么用-新手小白必看教程

1. Sora 是什么AI 2024年2月16日,OpenAI在其官网上面正式宣布推出文本生成视频的大模型 Sora。 Sora能够根据简单的文本描述,生成高达60秒的高质量视频,使得视频创作变得前所未有的简单和高效。本文将为您提供关于如何使用Sora的最新详细教程…

Days 34 ElfBoard 音频接口

音频接口介绍 音频模块采用了 NAU88C22 芯片,芯片数据信号使用 I2S 接口进行通讯,主要信号功能: SAI_MCLK:音频信号主时钟; SAI_BCLK:音频信号位时钟; SAI_SYNC:左右声道控制信号&am…

OpenAI重磅发布Sora——首个视频生成模型:利用文本-视频人工智能将想象变为现实

想象一下,现在你有一段文本话描述的故事,通过输入这段文本,就可以立刻展开一个生动详细的视频。这就是 OpenAI 神奇的 Sora,一个革命性的文本到视频的 AI 模型。Sora于2024年2月推出,凭借其仅凭文字提示就能生成现实和…

天锐绿盾 | 办公终端文件数据\资料防泄密软件

天锐绿盾是一款电脑文件防泄密软件,旨在帮助企业保护其敏感数据免受未经授权的访问和泄露。该软件采用先进的加密技术和文件监控机制,确保企业数据在存储、传输和使用过程中的安全性。 PC地址:https://isite.baidu.com/site/wjz012xr/2eae091…

【计算机网络】P2P应用

将会在两个例子中得出结果 1,对等文件分发 ;2,大型对等方社区中的服务器 P2P文件分发 自拓展性 直接成因是:对等方除了是比特的消费者外还是它们的重新分发者BitTorrent 一个用于文件分发的P2P协议洪流 torrent 参与一个特定文件…

吴恩达机器学习全课程笔记第二篇

目录 前言 P31-P33 logistics (逻辑)回归 决策边界 P34-P36 逻辑回归的代价函数 梯度下降的实现 P37-P41 过拟合问题 正则化代价函数 正则化线性回归 正则化logistics回归 前言 这是吴恩达机器学习笔记的第二篇,第一篇笔记请见&…

HQChart实战教程69-分时图主图如何设置指标

HQChart实战教程69-分时图主图如何设置指标 效果图插件地址uniapp插件地址HQChart插件源码地址实现步骤1. 分时图主图指标2. 主图指标标题3. 切换指标示例源码效果图 在主图窗口,显示指标,并显示指标标题。效果入下图 H5,小程序, uniapp 都支持。插件最新版本才支持此功能。…

线程安全性的原理分析学习

初步认识Volatile 一段代码引发的思考 下面这段代码,演示了一个使用volatile以及没使用volatile这个关键字,对于变量更新的影响 package com.sp.demo;/*** author : lssffy* Description :* date : 2024/2/16 18:42*/ public class VolatileDemo {publi…

Linux第52步_移植ST公司的linux内核第4步_关闭内核模块验证和log信息时间戳_编译_并通过tftp下载测试

1、采用程序配置关闭“内核模块验证” 默认配置文件“stm32mp1_atk_defconfig”路径为“arch/arm/configs”; 使用VSCode打开默认配置文件“stm32mp1_atk_defconfg”,然后将下面的4条语句屏蔽掉,如下: CONFIG_MODULE_SIGy CONFIG_MODULE_…