当前位置: 首页 > news >正文

多表查询

目录

统计出一张数据表中的数据量

查询 dept 表中的数据量

查询 emp 表中的数据量

实现 emp 与 dept 的多表查询

笛卡尔积

消除笛卡尔积

把数据表 emp 的别名定为 e,数据表 dept 的别名定为 d,然后在查询中分别使用 e 和 d 代替这两个表


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

所谓的多表查询指的就是同时从多张数据表中取出数据并且显示的一种操作

select [distinct] * | 列 [ 别名 ] , 列 [ 别名 ] ...
from 表名称 [ 别名 ], 表名称 [ 别名 ],...
[where 限定条件 (s)] 
[order by  排序字段 [asc | desc], 排序字段 [asc | desc],...]

上面语法中,

第一行表示确定要显示的数据列;

第二行确定数据来源;

第三行对数据行进行筛选;

第四行对选定数据的行与列排序。

和前面唯一的不同之处在于 FROM 后面增加了更多的表

下面按照这样的语法结构实现多表查询。本次将利用 emp 与 dept 两张表进行多表查询操作。在查询之前,先介绍一个函数

统计出一张数据表中的数据量

关键词是count()

查询 dept 表中的数据量

SQL> select count(*)2  from dept;COUNT(*)
----------4

可以看出这个数据表有 4 行记录

查询 emp 表中的数据量

SQL> select count(*)2  from emp;COUNT(*)
----------13

运行后可以看出这个数据表有 13 行记录

有些同学会发现记录数不一样,这个没有关系的

也就是说,这两张表加起来,总共有 17 行记录

实现 emp 与 dept 的多表查询

SQL> select *2  from emp,dept;EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO     DEPTNO DNAMELOC
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ---------- ---------- ---------------------------- --------------------------7369 SMITH                CLERK                    7902 17-12月-80            800                    20         10 ACCOUNTINGNEW YORK7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300         30         10 ACCOUNTINGNEW YORK7521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500         30         10 ACCOUNTINGNEW YORK7566 JONES                MANAGER                  7839 02-4月 -81           2975                    20         10 ACCOUNTINGNEW YORK7654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400         30         10 ACCOUNTINGNEW YORK7698 BLAKE                MANAGER                  7839 01-5月 -81           2850                    30         10 ACCOUNTINGNEW YORK7782 CLARK                MANAGER                  7839 09-6月 -81           2450                    10         10 ACCOUNTINGNEW YORK7839 KING                 PRESIDENT                     17-11月-81           5000                    10         10 ACCOUNTINGNEW YORK7844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0         30         10 ACCOUNTINGNEW YORK7900 JAMES                CLERK                    7698 03-12月-81            950                    30         10 ACCOUNTINGNEW YORK7902 FORD                 ANALYST                  7566 03-12月-81           3000                    20         10 ACCOUNTINGNEW YORK7934 MILLER               CLERK                    7782 23-1月 -82           1300                    10         10 ACCOUNTINGNEW YORK8989 HELLO                                                                                                      10 ACCOUNTINGNEW YORK7369 SMITH                CLERK                    7902 17-12月-80            800                    20         20 RESEARCHDALLAS7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300         30         20 RESEARCHDALLAS7521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500         30         20 RESEARCHDALLAS7566 JONES                MANAGER                  7839 02-4月 -81           2975                    20         20 RESEARCHDALLAS7654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400         30         20 RESEARCHDALLAS7698 BLAKE                MANAGER                  7839 01-5月 -81           2850                    30         20 RESEARCHDALLAS7782 CLARK                MANAGER                  7839 09-6月 -81           2450                    10         20 RESEARCHDALLAS7839 KING                 PRESIDENT                     17-11月-81           5000                    10         20 RESEARCHDALLAS7844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0         30         20 RESEARCHDALLAS7900 JAMES                CLERK                    7698 03-12月-81            950                    30         20 RESEARCHDALLAS7902 FORD                 ANALYST                  7566 03-12月-81           3000                    20         20 RESEARCHDALLAS7934 MILLER               CLERK                    7782 23-1月 -82           1300                    10         20 RESEARCHDALLAS8989 HELLO                                                                                                      20 RESEARCHDALLAS7369 SMITH                CLERK                    7902 17-12月-80            800                    20         30 SALESCHICAGOEMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO     DEPTNO DNAMELOC
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ---------- ---------- ---------------------------- --------------------------7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300         30         30 SALESCHICAGO7521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500         30         30 SALESCHICAGO7566 JONES                MANAGER                  7839 02-4月 -81           2975                    20         30 SALESCHICAGO7654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400         30         30 SALESCHICAGO7698 BLAKE                MANAGER                  7839 01-5月 -81           2850                    30         30 SALESCHICAGO7782 CLARK                MANAGER                  7839 09-6月 -81           2450                    10         30 SALESCHICAGO7839 KING                 PRESIDENT                     17-11月-81           5000                    10         30 SALESCHICAGO7844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0         30         30 SALESCHICAGO7900 JAMES                CLERK                    7698 03-12月-81            950                    30         30 SALESCHICAGO7902 FORD                 ANALYST                  7566 03-12月-81           3000                    20         30 SALESCHICAGO7934 MILLER               CLERK                    7782 23-1月 -82           1300                    10         30 SALESCHICAGO8989 HELLO                                                                                                      30 SALESCHICAGO7369 SMITH                CLERK                    7902 17-12月-80            800                    20         40 OPERATIONSBOSTON7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300         30         40 OPERATIONSBOSTON7521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500         30         40 OPERATIONSBOSTON7566 JONES                MANAGER                  7839 02-4月 -81           2975                    20         40 OPERATIONSBOSTON7654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400         30         40 OPERATIONSBOSTON7698 BLAKE                MANAGER                  7839 01-5月 -81           2850                    30         40 OPERATIONSBOSTON7782 CLARK                MANAGER                  7839 09-6月 -81           2450                    10         40 OPERATIONSBOSTON7839 KING                 PRESIDENT                     17-11月-81           5000                    10         40 OPERATIONSBOSTON7844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0         30         40 OPERATIONSBOSTON7900 JAMES                CLERK                    7698 03-12月-81            950                    30         40 OPERATIONSBOSTON7902 FORD                 ANALYST                  7566 03-12月-81           3000                    20         40 OPERATIONSBOSTON7934 MILLER               CLERK                    7782 23-1月 -82           1300                    10         40 OPERATIONSBOSTON8989 HELLO                                                                                                      40 OPERATIONSBOSTON已选择 52 行。

发现每一行 emp 表中的记录出现了 4 次,而 4 次是 dept 表中的数据量,所以最终产生了 emp 表 13 行 *dept 表 4 行 =52 行记录

在查询显示的时候,emp 表每行记录同时显示了 dept 表的 4 行记录,而实际上只有 1 行记录是对应的,即数据表 emp 中字段 deptno 与数据表 dept 中 字段 deptno 相等

笛卡尔积

之所以会出现这样的情况,主要与数据库的产生原理有关数学的集合。这样的集合操作,会 将两个集合(数据表)的统一查询,作为乘法的形式出现。结果一定会产生积笛卡尔积

在任何情况下,进行多表查询都会存在笛卡尔积的问题。但是事实上这些积的产生对用户而言是没有任何实质上的用处的,所以需要想办法进行消除。如果要想消除积,那么必须有关联字段 

很明显,现在 emp 与 dept 数据表中都存在关联字段(大部分情况下,都习惯将关联字段设置为同名) 。此时就可以利用关联字段消除笛卡尔积

消除笛卡尔积

SQL> select *2  from emp,dept3  where emp.deptno=dept.deptno;EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO     DEPTNO DNAMELOC
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ---------- ---------- ---------------------------- --------------------------7839 KING                 PRESIDENT                     17-11月-81           5000                    10         10 ACCOUNTINGNEW YORK7782 CLARK                MANAGER                  7839 09-6月 -81           2450                    10         10 ACCOUNTINGNEW YORK7934 MILLER               CLERK                    7782 23-1月 -82           1300                    10         10 ACCOUNTINGNEW YORK7902 FORD                 ANALYST                  7566 03-12月-81           3000                    20         20 RESEARCHDALLAS7369 SMITH                CLERK                    7902 17-12月-80            800                    20         20 RESEARCHDALLAS7566 JONES                MANAGER                  7839 02-4月 -81           2975                    20         20 RESEARCHDALLAS7900 JAMES                CLERK                    7698 03-12月-81            950                    30         30 SALESCHICAGO7844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0         30         30 SALESCHICAGO7654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400         30         30 SALESCHICAGO7521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500         30         30 SALESCHICAGO7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300         30         30 SALESCHICAGO7698 BLAKE                MANAGER                  7839 01-5月 -81           2850                    30         30 SALESCHICAGO已选择 12 行。

对应显示的是 emp 数据表中 deptno 字段和 dept 数据表中 deptno 字段相等的数据行。显示的列是两个数据表的所有列。这时候只显示 emp 表中的 13 行记录,同时每个记录所 对应的 dept 中字段的信息也显示在后面

只要是多表查询,在多张表之间一定要存在关联关系,没有关联关系的表是不可能进行多表查询的

但是现在的代码还存在一个问题,此时进行字段访问的时候采用的是“表名称 . 字段名称” ,表名称短没什么问题,而如果表名称长了就比较麻烦,例如“yuzhou_yinhexi_diqiu_yazhou_beijing_zhongyang_ren” 。所以在进行多表查询的时候强烈建议使用别名 

把数据表 emp 的别名定为 e,数据表 dept 的别名定为 d,然后在查询中分别使用 e 和 d 代替这两个表

SQL> select e.*,d.dname2  from emp e,dept d3  where e.deptno=d.deptno;EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO DNAME
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ---------- ----------------------------7839 KING                 PRESIDENT                     17-11月-81           5000                    10 ACCOUNTING7782 CLARK                MANAGER                  7839 09-6月 -81           2450                    10 ACCOUNTING7934 MILLER               CLERK                    7782 23-1月 -82           1300                    10 ACCOUNTING7902 FORD                 ANALYST                  7566 03-12月-81           3000                    20 RESEARCH7369 SMITH                CLERK                    7902 17-12月-80            800                    20 RESEARCH7566 JONES                MANAGER                  7839 02-4月 -81           2975                    20 RESEARCH7900 JAMES                CLERK                    7698 03-12月-81            950                    30 SALES7844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0         30 SALES7654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400         30 SALES7521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500         30 SALES7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300         30 SALES7698 BLAKE                MANAGER                  7839 01-5月 -81           2850                    30 SALES已选择 12 行。

这次显示的数据列和上一个查询不完全一样,因为查询的数据列是 e.* 和 d.name,所以显示的列应该是数据表 emp 的全部字段和 dept 的 dname 字段

实际上,笛卡尔积的存在对整个程序影响是相当巨大的,即便可以消除掉显示的笛卡尔积,但是从本质上来说,永远无法避免笛卡尔积

相关文章:

多表查询

目录 统计出一张数据表中的数据量 查询 dept 表中的数据量 查询 emp 表中的数据量 实现 emp 与 dept 的多表查询 笛卡尔积 消除笛卡尔积 把数据表 emp 的别名定为 e,数据表 dept 的别名定为 d,然后在查询中分别使用 e 和 d 代替这两个表 Oracle从…...

PHP开发日志 ━━ 深入理解三元操作与一般条件语句的不同

概况 三元运算符的功能与“if…else”流程语句一致。 在一般情况下,三元操作替换if条件语句可以精简代码,并且更为直观,但是在下面的情况中使用三元操作将会返回警告。 借图: 案例 比如原代码: class classA{publ…...

多维时序 | Matlab实现RF-Adaboost随机森林结合Adaboost多变量时间序列预测

多维时序 | Matlab实现RF-Adaboost随机森林结合Adaboost多变量时间序列预测 目录 多维时序 | Matlab实现RF-Adaboost随机森林结合Adaboost多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现RF-Adaboost随机森林结合Adaboost多变量时间序列预…...

vue3-内置组件-Suspense

Suspense (实验性功能) <Suspense> 是一项实验性功能。它不一定会最终成为稳定功能&#xff0c;并且在稳定之前相关 API 也可能会发生变化。 <Suspense> 是一个内置组件&#xff0c;用来在组件树中协调对异步依赖的处理。它让我们可以在组件树上层等待下层的多个嵌…...

Rust入门:如何在windows + vscode中关闭程序codelldb.exe

在windows中用vscode单步调试rust程序的时候&#xff0c;发现无论是按下stop键&#xff0c;还是运行完程序&#xff0c;调试器codelldb.exe一直霸占着主程序不退出&#xff0c;如果此时对代码进行修改&#xff0c;后续就没法再编译调试了。 目前我也不知道要怎么处理这个事&am…...

git错误整理

remote: Support for password authentication was removed on August 13, 2021. 参考&#xff1a;这篇即可 GnuTLS recv error (-110): The TLS connection was non-properly terminated. 执行下面的指令&#xff1a; git config --global http.sslVerify false...

跟着cherno手搓游戏引擎【22】CameraController、Resize

前置&#xff1a; YOTO.h: #pragma once//用于YOTO APP#include "YOTO/Application.h" #include"YOTO/Layer.h" #include "YOTO/Log.h"#include"YOTO/Core/Timestep.h"#include"YOTO/Input.h" #include"YOTO/KeyCod…...

微信小程序(四十二)wechat-http拦截器

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.wechat-http请求的封装 2.wechat-http请求的拦截器的用法演示 源码&#xff1a; utils/http.js import http from "wechat-http"//设置全局默认请求地址 http.baseURL "https://live-api.ith…...

tomcat部署zrlog

1.下载zrlog包&#xff0c;并添加到虚拟机中 1)进入/opt/apache-tomcat-8.5.90/webapps目录 cd /opt/apache-tomcat-8.5.90/webapps2)下载zrlog包 wget http://dl.zrlog.com/release/zrlog-1.7.1-baaecb9-release.war 3)重命名包 mv zrlog-1.7.1-baaecb9-release zrblog 2…...

Ubuntu Desktop 开机数字小键盘

Ubuntu Desktop 开机数字小键盘 1. 开机数字小键盘References 1. 开机数字小键盘 一般情况下&#xff0c;Ubuntu 开机后小键盘区是控制方向键而非数字键&#xff0c;每次开机后若用到数字键都需要按下 NumLock 键。 References [1] Yongqiang Cheng, https://yongqiang.blog…...

树莓派编程基础与硬件控制

1.编程语言 Python 是一种泛用型的编程语言&#xff0c;可以用于大量场景的程序开发中。根据基于谷歌搜 索指数的 PYPL&#xff08;程序语言流行指数&#xff09;统计&#xff0c;Python 是 2019 年 2 月全球范围内最为流行 的编程语言 相比传统的 C、Java 等编程语言&#x…...

autojs通过正则表达式获取带有数字的text内容

视频连接 视频连接 参考 参考 var ctextMatches(/\d/).findOne()console.log("当前金币"c.text()) // 获取当前金币UiSelector.textMatches(reg) reg {string} | {Regex} 要满足的正则表达式。 为当前选择器附加控件"text需要满足正则表达式reg"的条件。 …...

Android java基础_类的继承

一.Android Java基础_类的继承 先封装一个persion类&#xff0c;在persion的基础上定义Student类&#xff0c;并基础persion类。 子类能访问父类的成员函数。 class Person {private int age;public void setAge(int age) {if (age < 0 || age > 200)age 0;else {thi…...

nginx stream proxy 模块的ssl连接源码分析

目录 1. 源起2. 分析验证环境的配置3. 源码分析3.1 代理模块的请求入口点分析3.2 发起与上游服务器的连接3.3 连接回调3.4 TCP连接建立成功后为上下游数据透传做准备3.5 TCP连接的ssl上下文初始化3.6 ssl握手成功后的处理3.7 连接数据的收与发1. 源起 我一直来对ssl建立连接的过…...

C#面:Static Nested Class 和 Inner Class 有什么不同

这是两种不同的类嵌套方式。 Static Nested Class &#xff1a; 是一个静态嵌套类&#xff0c;它是在外部类中定义的一个静态类。它可以访问外部类的静态成员和方法&#xff0c;但不能直接访问外部类的非静态成员和方法。静态嵌套类可以独立于外部类实例化&#xff0c;即可以…...

LeetCode、208. 实现 Trie (前缀树)【中等,自定义数据结构】

文章目录 前言LeetCode、208. 实现 Trie (前缀树)【中等&#xff0c;自定义数据结构】题目链接与分类思路 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领…...

java数据结构与算法刷题-----LeetCode151. 反转字符串中的单词

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 解题思路 这道题&#xff0c;可以理解为&#xff0c;将字符串颠倒&#xf…...

《Java 简易速速上手小册》第8章:Java 性能优化(2024 最新版)

文章目录 8.1 性能评估工具 - 你的性能探测仪8.1.1 基础知识8.1.2 重点案例&#xff1a;使用 VisualVM 监控应用性能8.1.3 拓展案例 1&#xff1a;使用 JProfiler 分析内存泄漏8.1.4 拓展案例 2&#xff1a;使用 Gatling 进行 Web 应用压力测试 8.2 JVM 调优 - 魔法引擎的调校8…...

mysql全国省市县三级联动创表sql(一)

1. 建表sql CREATE TABLE province (id VARCHAR ( 32 ) PRIMARY KEY COMMENT 主键,code CHAR ( 6 ) NOT NULL COMMENT 省份编码,name VARCHAR ( 40 ) NOT NULL COMMENT 省份名称 ) COMMENT 省份信息表;CREATE TABLE city (id VARCHAR ( 32 ) PRIMARY KEY COMMENT 主键,code …...

go面试题--使用两个goroutine交替打印数字与字母

使用两个goroutine交替打印数字与字母 题目如下&#xff1a; 使用两个goroutine交替打印序列&#xff0c;一个goroutine打印数字&#xff0c;另外一个goroutine打印字母&#xff0c;最终效果如下&#xff1a; 12AB34CD56EF78GH910IZ1112KL1314MN1516OP1718QR1920ST2122UV2324W…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...