综合练习

目录

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

确定要使用的数据表

确定已知的关联字段

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

确定要使用的数据表

确定已知的关联字段 

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

确定所需要的数据表

 确定已知的关联字段


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.hqwc.cn/news/475821.html

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

相关文章

用Boule绘制地球重力场

文章目录 参考椭球标准重力重力地图 参考椭球 boule中定义了多种参考椭球,可用于表示地球、火星等星体的重力分布。可通过pip安装 pip install boule安装完成后可直接调用 import boule as blboule中已经定义的椭球如下 椭球星体GRS80地球WGS84地球MARS火星MERC…

linux内核模块module_put()函数详解--03

对应module_put()函数详细用法分享。 第一:函数简介 //函数原型 void module_put(struct module * module) //函数功能 该函数功能是将一个特定模块module的引用计数减一 这样当一个模块的引用计数不为0而不能被内核卸载的 时候,可以调用该函数一次或多…

【嵌入式学习】IO网络接口day02.18

1.使用fgets统计给定文件的行数 #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, const char *argv[]) {FILE *fpNULL;if((fpfopen("./test1.txt","r"))NULL){perror("错误信息");return -1…

springboot197基于springboot的毕业设计系统的开发

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的毕业设计系统的开发 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 …

Java六种常用线程创建执行方法

目录 方法一&#xff1a;继承Thread类方法二&#xff1a;实现Runnable接口方法三&#xff1a;实现Callable接口方法四&#xff1a;ThreadPoolExecutor执行Runnable任务方法五&#xff1a;ThreadPoolExecutor执行Callable任务方法六&#xff1a;Executors工具类实现线程池 方法一…

【数据结构】12 堆栈应用:表达式求值

表达式类型 后缀表达式 有一个常量表达式的中缀表达式为&#xff1a;5 6 / 2 - 3 * 4&#xff0c;其后缀形式表示为&#xff1a; 5 6 2 / 3 4 -。后缀表达式的特点是运算符位于两个预算数之后。其前缀表达式为&#xff1a; - 5 / 6 2 3 4。 后缀表达式相比于中缀表达式的…

告警能力中台设计与实践(三)——告警通知

一、告警消息与告警通知 1、告警消息 正如笔者在最开始所写的那样&#xff0c;第三方服务通过调用能力中台的OpenAPI实现告警发起&#xff0c;并且每一次的告警请求都会创建、归档为一条告警消息&#xff08;AlarmMsg&#xff09;。 这样的消息是无状态的&#xff0c;并且对…

递归算法与分治思想

递归算法 直接或间接的调用自身的算法称为递归函数,采用栈结构,先调用的最后返回。 主要形式就是先纵后横,一个分支走到底,再退回一个到兄弟节点,依次回退。 列出递归的三种形式:切蛋糕、递推公式、等价转换。 递归要素: 明确递归得到结果是什么提取重复的逻辑,缩小…

Python教程(26)——Python迭代器和生成器详解

迭代器 Python中的迭代器是一种对象&#xff0c;它可以迭代&#xff08;遍历&#xff09;一个可迭代对象&#xff08;比如列表、元组或字符串&#xff09;的元素。迭代器用于实现迭代器协议&#xff0c;即包含 __iter__() 方法和 __next__() 方法。 迭代器的工作原理是每次调…

15.一种坍缩式的简单——组合模式详解

当曾经的孩子们慢慢步入社会才知道&#xff0c;那年味渐淡的春节就像是疾驰在人生路上的暂停键。 它允许你在隆隆的鞭炮声中静下心来&#xff0c;瞻前顾后&#xff0c;怅然若失。 也允许你在寂静的街道上屏气凝神&#xff0c;倾听自己胸腔里的那团人声鼎沸。 孩子们会明白的&am…

【蓝桥杯】算法模板题(Floyd算法)

一.弗洛伊德算法 用途&#xff1a;用来求解多源点最短路径问题。 思想&#xff1a;Floyd算法又称为插点法&#xff0c;是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法。 主要步骤&#xff1a; 1&#xff09;初始化&#xff1a;使用邻接矩阵初始化dis…

MySQL为什么改进LRU算法?

普通LRU算法 LRU = Least Recently Used(最近最少使用): 就是末尾淘汰法,新数据从链表头部加入,释放空间时从末尾淘汰. 当要访问某个页时,如果不在Buffer Pool,需要把该页加载到缓冲池,并且把该缓冲页对应的控制块作为节点添加到LRU链表的头部。当要访问某个页时,如果在…