数据库基础--多表查询

2023-11-05

在数据库查询过程中无法避免的需要从两张表中同时查询数据,此时我们需要用到各式各样的多表查询方式。接下来,简单介绍一下数据库基础的多表查询方式,以便于让大家更好的了解多表查询的过程。

多表查询

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:

一对多(多对一)

多对多

实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键。

一对一

一对一关系,用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率

多表查询

概述:指从多张表中查询数据

笛卡尔积:笛卡尔积是指在数学中,两个集合A和B的所有组合情况。在多表查询是,需要消除无效的笛卡尔积)

多表查询分类:

连接查询

内连接:相当于查询A、B交集部分数据

外连接:

左外连接:查询左表所有数据,以及两张表交集部分数据

右外连接:查询右表所有数据,以及两张表交集部分数据

自连接:当前表与自身的连接查询,自连接必须使用别名

子查询

内连接

内连接查询的是两张表交集的部分

隐式内连接:

select 字段列表 from 表1,表2 where 条件...;

显式内连接:

select 字段列表 from 表1 inner on 表2 on 连接条件...;

外连接

左外连接

相当于查询表1 (左表)的所有数据 包含表1和表2交集部分的数据

select 字段列表 from 表1 left outer o n 表2 on 条件

右外连接

相当于查询表2 (右表)的所有数据 包含表1和表2交集部分的数据

select 字段列表 from 表1 right outer oin 表2 on 条件

可以查询内连接查询不到的数据

自连接:

可以是内连接查询,也可以是外连接查询。

select 字段列表 from 表A 别名A join 表A 别名B on 条件...;

联合查询:

把多次查询的结果合并起来,形成一个新的查询结果集。

select 字段列表 from 表A...

union[all]

select 字段列表 from 表B...;

对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。

union all 会将全部的数据直接合并在一起,union会对合并之后的数据去重。

子查询

概念:SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。

子查询外部的语句可以是insert/ update/delete/select中的任何一个。

根据子查询结果不同,分为:

标量子查询(子查询结果为单个值)

列子查询(查询结果为一列)

行子查询(一行)

表子查询(查询结果为多行多列)

根据子查询位置,分为:where之后,from之后,select之后

子查询返回的结果是单个值(数字,字符串,日期等),最简单的形式,这种子查询称为标量子查询

常用的操作符: = <> > >= < <=

列子查询

子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。

常用的操作符:in,not in ,any , some , all

 

行子查询

返回的结果值是一行(可以是多列),这种子查询称为行子查询。

常用的操作符:=、<>、in、not in 、

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据库基础--多表查询 的相关文章

  • 我们可以有条件地声明 spring bean 吗?

    有没有一种方法可以有条件地声明 Spring bean 例如
  • Java中Gson、JsonElement、String比较

    好吧 我想知道这可能非常简单和愚蠢 但在与这种情况作斗争一段时间后 我不知道发生了什么 我正在使用 Gson 来处理一些 JSON 元素 在我的代码中的某个位置 我将 JsonObject 的 JsonElements 之一作为字符串获取
  • PostgreSQL:有效地将 JSON 数组拆分为行

    我有一个表 表 A 其中包含一个包含 JSON 编码数据的文本列 JSON 数据始终是一个包含一到几千个普通对象的数组 我有另一个表 表 B 其中有几列 包括数据类型为 JSON 的列 我想从表 A 中选择所有行 将 json 数组拆分为其
  • T-SQL 中是否有 LIKE 语句的替代方案?

    我有一个场景我需要执行以下操作 SELECT FROM dbo MyTable WHERE Url LIKE
  • getCurrentSession 在网络中休眠

    我正在使用 hibernate 和 jsp servlet 编写一个基于 Web 的应用程序 我读过有关sessionFactory getCurrentSession and sessionFactory openSession方法 我知
  • 为什么 jar 执行的通配符在 docker CMD 中不起作用?

    我有一个Dockerfile与以下CMD启动我的 Spring Boot 应用程序 FROM java 8 jre CMD java jar app file jar 当我尝试从创建的图像启动容器时 我得到 Error Unable to
  • JAXB - 忽略元素

    有什么方法可以忽略 Jaxb 解析中的元素吗 我有一个很大的 XML 文件 如果我可以忽略其中一个大而复杂的元素 那么它的解析速度可能会快很多 如果它根本无法验证元素内容并解析文档的其余部分 即使该元素不正确 那就更好了 例如 这应该只生成
  • 在Oracle中查找不包含数字数据的行

    我试图在一个非常大的 Oracle 表中找到一些有问题的记录 即使该列是 varchar2 列 也应包含所有数值数据 我需要找到不包含数字数据的记录 当我尝试在此列上调用 to number col name 函数时 它会抛出错误 我想你可
  • 2^31 次方的 Java 指数错误 [重复]

    这个问题在这里已经有答案了 我正在编写一个java程序来输出2的指数幂 顺便说一句 我不能使用Math pow 但是在 2 31 和 2 32 处我得到了其他东西 另外 我不打算接受负整数 My code class PrintPowers
  • 如何在 IntelliJ IDEA 中运行 akka actor

    来自 Akka 网站文档 然后 这个主要方法将创建所需的基础设施 运行演员 启动给定的主要演员并安排 一旦主要参与者终止 整个应用程序就会关闭 因此 您将能够使用类似于以下的命令运行上面的代码 下列的 java classpath akka
  • Mysql获取特定表的最后一个id

    我必须从特定的插入表中获取最后的插入 ID 可以说我有这个代码 INSERT INTO blahblah test1 test 2 VALUES test1 test2 INSERT INTO blahblah2 test1 test 2
  • IntelliJ Idea:将简单的 Java servlet(无 JSP)部署到 Tomcat 7

    我尝试按照教程进行操作here http wiki jetbrains net intellij Creating a simple Web application and deploying it to Tomcat部署 servlet
  • 数据库中的持久日期不等于检索日期

    我有一个具有 Date 属性的简单实体类 此属性对应于 MySQL 日期时间列 Entity public class Entity Column name start date Temporal TemporalType TIMESTAM
  • Android - 存储对ApplicationContext的引用

    我有一个静态 Preferences 类 其中包含一些应用程序首选项和类似的内容 可以在那里存储对 ApplicationContext 的引用吗 我需要该引用 以便我可以在不继承 Activity 的类中获取缓存文件夹和类似内容 你使用的
  • Joshua Bloch 的构建器设计模式有何改进?

    早在 2007 年 我就读过一篇关于 Joshua Blochs 所采用的 构建器模式 的文章 以及如何修改它以改善构造函数和 setter 的过度使用 特别是当对象具有大量属性 其中大部分属性是可选的 时 本文对此设计模式进行了简要总结
  • 文本视图不显示全文

    我正在使用 TableLayout 和 TableRow 创建一个简单的布局 其中包含两个 TextView 这是代码的一部分
  • MySQL #1093 - 您无法在 FROM 子句中指定用于更新的目标表“赠品”

    I tried UPDATE giveaways SET winner 1 WHERE ID SELECT MAX ID FROM giveaways 但它给出了 1093 您无法指定目标表 赠品 进行更新FROM clause 本文 ht
  • 使用 Apache 允许 Glassfish 和 PHP 在同一服务器中协同工作

    是否可以建立从 Java 到 php 文件的桥梁 我有一个用 Java 编写的应用程序 我需要执行http piwik org http piwik org 这是用 PHP 编写的 在服务器中 我正在运行 PHP 但无法从浏览器访问 php
  • 确定 JavaFX 中是否消耗了事件

    我正在尝试使用 JavaFX 中的事件处理来做一些非滑雪道的事情 我需要能够确定手动触发事件后是否已消耗该事件 在以下示例中 正确接收了合成鼠标事件 但调用 Consumer 不会更新该事件 我对此进行了调试 发现 JavaFX 实际上创建
  • 关闭扫描仪是否会影响性能

    我正在解决一个竞争问题 在问题中 我正在使用扫描仪获取用户输入 这是 2 个代码段 一个关闭扫描器 一个不关闭扫描器 关闭扫描仪 import java util Scanner public class JImSelection publ

随机推荐

  • 多线程能有事务吗?

    需求 多线程插入 保证原子性 要么都成功 要么都失败 其中一个线程报错 所有线程回滚 为什么做不了 首先事务的四大特性 ACID 特性都知道吧 面试中张口就来 原子性 Atomicity 一个事务要么全部提交成功 要么全部失败回滚 不能只执
  • SpringFramework核心技术五:面向切面编程(AOP)和代理机制

    AOP与代理 Spring AOP使用JDK动态代理或CGLIB为给定目标对象创建代理 只要有选择 JDK动态代理就是首选 一 代理机制 如果要代理的目标对象实现至少一个接口 则将使用JDK动态代理 目标类型实现的所有接口都将被代理 如果目
  • socket异步编程--libevent的使用

    http www cnblogs com cnspace archive 2011 07 19 2110891 html 这篇文章介绍下libevent在socket异步编程中的应用 在一些对性能要求较高的网络应用程序中 为了防止程序阻塞在
  • Spring Boot集成RocketMq(一看就会)

    目录 1 创建topic 2 新建Spring boot项目 3 导入依赖 4 配置yml文件 5 新建Controller 生产服务 6 新建消费者 7 配置类 定义topic 8 添加消息以及 消费者查看 8 1 调用接口 往Mq中添加
  • 岛屿数量(Java)

    分析 把1当成陆地 0当成海 简单来说只要上下左右如果是1的话就可以看成一个陆地 从示例中也可以很清楚的看懂 思路 用一个和grid大小一样的整型二维数组arr来代表岛屿的生成过程 遍历grid 如果遇到grid i j 1 arr i j
  • 软件生命周期与技术人的职业周期

    话题有点大 但还是忍住想说两句 也算把自己曾经的困惑落在纸上 做个记录 什么是软件的生命周期的 相信你能比我还熟练的罗列出来 从初步规划 到需求分析 再到系统设计 接着系统实现 往下系统测试 跟着发布部署 最后运行维护 中途免不了打些小补丁
  • UART通信原理

    UART 通信格式 串口全称叫做串行接口 通常也叫做 COM 接口 串行接口指的是数据一个一个的顺序传输 通信线路简单 使用两条线即可实现双向通信 一条用于发送 一条用于接收 串口通信距离远 但是速度相对会低 串口是一种很常用的工业接口 I
  • python国内镜像源

    让python pip使用国内镜像 国内源 清华 https pypi tuna tsinghua edu cn simple 阿里云 http mirrors aliyun com pypi simple 中国科技大学 https pyp
  • 有关HC-05蓝牙模块的学习记录

    文章目录 HC 05学习笔记 一 HC 05的基本硬件介绍 二 工作原理 三 使用方法 一 硬件连接 二 软件控制 1 第一个片段 2 第二个片段 四 具体应用 一 信息的传送 二 手机操纵单片机 五 注意事项 一 AT状态 1 第一种方法
  • mysql存储过程之循环(WHILE,REPEAT和LOOP)

    MySQL提供循环语句 允许我们根据条件重复执行一个SQL代码块其中有三个循环语句 WHILE REPEAT和LOOP 我们接下来分别看下 首先是WHILE语句来看下语法 WHILE expression DO statements END
  • 在 C++ STL 中复制的不同方法

    文章目录 1 C STL 中复制的不同方法及实例解析 传送门 gt gt AutoSAR实战系列300讲 糖果Autosar 总目录 1 C STL 中复制的不同方法及实例解析 C STL 中存在各种不同的 copy 它们允许以不同的方式执
  • idea设置控制台为单独的窗口

    如图 点击控制台右上角的齿轮 设置 按钮 然后点击windowed mode就可以分离出来了
  • 推荐一组用过好几年的非常稳定的dns

    通常宽带或路由里 都是未设置dns 自动获取的是本地运营商推荐的dns 那些dns非常非常的不稳定 经常打不开网页或有些图片不显示 甚至更可恶的还有广告劫持 下面推荐一组用过好几年的dns 比较稳定 分享给大家 223 5 5 5 4 2
  • you need to install ‘unbuffer‘ (from package expect or expect-dev)

    在下载完RK3399 Linux SDK后的第一次编译时 报以下错误 you need to install unbuffer from package expect or expect dev log saved on home user
  • Java循环查询数据库优化

    1 static 和 final 的用法 static 的作用从三个方面来谈 分别是静态变量 静态方法 静态类 静态变量 声明为 static 的静态变量实质上就是全局变量 当声明一个对象时 并不产生static 变量的拷贝 而是该类所有实
  • 使用git fetch和git merge手动解决一次pull request冲突

    问题提出 github上的一次 pull request 出现了 conflicts 需要解决合并冲突 冲突的内容主要是新增功能的代码和修改的注释 问题思考 由于之前没有更新分支 同时又提交了分支中的代码 而git不能在不丢失提交的情况下对
  • 自动驾驶和自然语言如何结合?NuPrompt来了!

    点击下方卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 gt gt 点击进入 自动驾驶之心 大模型 技术交流群 自动驾驶语言提示 原标题 Language Prompt for Autonomous Driving 论文链接
  • VMware Workstation17下载安装、环境搭建、网络配置最小化安装操作步骤

    一 VMware Workstation17下载安装 1 官网下载 官网网址 https www vmware com cn products workstation pro html 安装Workstation 17 Pro for Wi
  • openssl+http实现https

    openssl详解及实现https openssl详解及实现https OpenSSL 是一个安全套接字层密码库 囊括主要的密码算法 常用的密钥和证书封装管理功能及SSL协议 并提供丰富的应用程序供测试或其它目的使用 秘钥算法和协议 对称加
  • 数据库基础--多表查询

    在数据库查询过程中无法避免的需要从两张表中同时查询数据 此时我们需要用到各式各样的多表查询方式 接下来 简单介绍一下数据库基础的多表查询方式 以便于让大家更好的了解多表查询的过程 多表查询 项目开发中 在进行数据库表结构设计时 会根据业务需