【SQL】外连接 LEFT JOIN

目录

一.内连接与外连接

   1.内连接(inner join)

   2.外连接(outer join)

二.两表连接

1.我们先来试试看内连接:

2.我们再来试试外连接

三.单表外连接

四.总结


一.内连接与外连接

  先得介绍内连接和外连接两个概念:

     要将两张表连接,有两种方式一种是内连接(inner join),第二种是内连接(outer join)

   1.内连接(inner join)

     这种连接需要:A,B表值都存在情况

   2.外连接(outer join)

     

外连接又分左外连接和右外连接

左外连接是取A表全部,B表没有对应的值,则为null

右外连接是取B表全部,A表没有对应的值,则为null

语法:

SELECT 列名
FROM 左表
LEFT JOIN 右表
ON 左表.列名 = 右表.列名;

   这样介绍概念可能还是比较抽象,来看下面的例题: 


二.两表连接

 例题链接:https://leetcode.cn/problems/combine-two-tables/description/

1.我们先来试试看内连接:

select firstname,lastname,city,state
from person,address
where person.personid=address.personid

    我们可以发现输出结果比答案结果少了一个Allen的数据,我们观察上面的Person和Address表

我们发现Address表中的personid没有allen的id,由于内连接是取交集所以Allen没有被选中。

   这就是在前面概念中叙述的:A,B表值都存在情况

2.我们再来试试外连接

select firstname,lastname,city,state
from person left join address
on person.personid=address.personid;

    这样输出就对了。

         我们可以可以这样理解外连接,当左外连接时固定住左表,去右表中依据on之后跟的条件去寻找符合条件的行,若是没寻找到则在那行写null,即左表原有的数据全部不变,只是通过右表扩充列。 right join 则反之。

      这就是前面说的:左外连接是取A表全部,B表没有对应的值,则为null


三.单表外连接

    例题链接:https://leetcode.cn/problems/rising-temperature/description/

     单表外连接用于检索一个表中的所有数据

 

这题用内连接也能做出来,但是消耗的时间比外连接高太多了

上面时内连接,下面时外连接

所以我们直接来讲怎么用外连接解决这题:

select w1.id
  from weather w1
  left join weather w2
  on datediff(w1.recordDate, w2.recordDate) = 1  #把每一天与前一天连接

  where w1.temperature > w2.temperature   #where 选择下温度大的

所以在有的时候用left join可以优化计算时间


四.总结

  

       内连接和外连接都是用于连接多个表的查询操作。内连接是指只返回两个表中符合条件的行,而外连接则会返回符合条件的行以及不符合条件的行。

      当需要查询两个表中有关联的数据,并且只想返回符合条件的数据时,应该使用内连接。内连接可以通过使用JOIN关键字或者WHERE子句来实现。

       当需要查询两个表中有关联的数据,并且希望返回符合条件的数据以及不符合条件的数据时,应该使用外连接。外连接可以分为左外连接、右外连接和全外连接,分别表示返回左表中的所有数据、返回右表中的所有数据以及返回两个表中的所有数据。

       因此,根据查询需求来选择使用内连接或外连接,可以更有效地获取所需的数据。

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

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

相关文章

esp32(8266)如何在platformio中上传文件到单片机

本来认为这是基础内容,不用我来介绍,结果,在个人的单片机字库开源项目 GitHub - StarCompute/tftziku: 这是一个通过单片机在各种屏幕上显示中文的解决方案 中有两个人问到了,就特别来说明一下: 在platformio中新建一…

音视频开发7 音视频转换格式流程

先看条转换视频文件的命令 我们的目的是将 源文件 source_1920x1080.mp4 转换成 目标文件 dest_1280x720.flv ffmpeg -i source_1920x1080.mp4 -acodec copy -vcodec libx264 -s 1280x720 dest_1280x720.flv -acodec copy 的意思是,目标的 音频格式 使用和 源文…

vue 引入 emoji 表情包

vue 引入 emoji 表情包 一、安装二、组件内使用 一、安装 npm install --save emoji-mart-vue二、组件内使用 import { Picker } from "emoji-mart-vue"; //引入组件<picker :include"[people,Smileys]" :showSearch"false" :showPreview&q…

操作系统中的内存管理

虚拟内存 操作系统会提供一种机制&#xff0c;将不同进程的虚拟地址和不同内存的物理地址映射起来。如果程序要访问虚拟地址的时候&#xff0c;由操作系统转换成不同的物理地址&#xff0c;这样不同的进程运行的时候&#xff0c;写入的是不同的物理地址&#xff0c;这样就不会冲…

【JavaEE进阶】——Spring Web MVC (响应)

目录 &#x1f6a9;学习Spring MVC &#x1f388;返回静态网页 &#x1f388;返回数据ResponseBody &#x1f388;返回html代码片段 &#x1f388;返回JSON &#x1f388;设置状态码 &#x1f388;设置Header &#x1f6a9;学习Spring MVC 既然是 Web 框架, 那么当⽤⼾在…

ORA-01012: not logged on

问题描述 明明已经shutdown immediate一致性关库&#xff0c;但是查进程时发现oracle进程依然存在。sqlplus / as sysdba登录提示ORA-01012: not logged on报错&#xff0c;着重强调&#xff0c;服务器上就一个实例。 分析过程 查看进程 我通常会在shutdown immediate之后查…

黄石首家Pearson VUE国际认证考试中心落户湖北理工学院

Pearson VUE 作为 Pearson 集团的专门从事计算机化考试服务的公司&#xff0c;到目前为止&#xff0c;已在全世界165 个国家授权了 4400 多个考试中心以及超过 230 家 PVUE 自有考试中心&#xff0c;其中在中国的有三百多个授权考点和 4 个自有考试中心。Pearson VUE 以其技术和…

Python模块、包和异常处理

大家好&#xff0c;在当今软件开发领域&#xff0c;Python作为一种简洁、易读且功能强大的编程语言&#xff0c;被广泛应用于各种领域。作为一名测试开发工程师&#xff0c;熟练掌握Python的模块、包和异常处理是提高代码可维护性和错误处理能力的关键。本文将和大家一起探讨Py…

QT--将编译程序打包成可安装执行文件方法记录

QT–将编译程序打包成可安装执行文件 文章目录 QT--将编译程序打包成可安装执行文件前言一、下载inno setup compiler工具并安装&#xff0c;然后&#xff0c;打开打包工具执行流程二、设置中文语言三、流程结束后需要修改脚本&#xff0c;否则&#xff0c;创建的快捷方式不是编…

web前端项目已有阿里巴巴图标基础上,再次导入阿里巴巴图标的方法

如果是第一次导入阿里巴巴图标请参考: vue项目引入阿里云图标_vue引用阿里云图标fontclass-CSDN博客 本文主要想讲在项目原有阿里巴巴图标基础上,再次导入阿里巴巴图标的解决办法: 1.iconfont.json对应修改就行,这个简单一看就明白; 2.iconfont.js主要改动<symbol><…

SpringBoot基础详解

文章目录 SpringBoot简介入门案例入门案例搭建基于SpringBoot官网创建项目SpringBoot项目快速启动 SpringBoot概述起步依赖默认配置 基础配置配置文件格式修改服务器端口SpringBoot配置文件加载顺序 yamlyaml语法规则yaml数组数据yaml数据读取 多环境开发配置多环境启动配置多环…

Python01:初入Python(Mac)

Python环境准备 下载Python&#xff1a;官网https://www.python.org/ 下载PyCharm&#xff1a;官网https://www.jetbrains.com/pycharm/download Python与PyCharm的关系 Python&#xff08;解释器&#xff09;&#xff1a;机器语言—>翻译人员–>翻译成电脑能读懂的 PyC…

//TODO 注释的作用

// TODO 用来标记某处&#xff0c;表示该处含有待办事项&#xff08;尚未解决&#xff09;。其设计本意只是提醒开发者注意&#xff0c;除了代码高亮之外&#xff0c;还可以借助编辑器实现快速定位。 如何使用&#xff1f; 直接在双斜杠后面加 TODO 或者 todo 即可&#xff0c…

opencv cuda win10

首先需要安装CUDA和cuDNN&#xff0c;不再赘述 下载对应的opencv和opencv_contrib 打开CMakeGUI&#xff0c;填入下载的路径和生成的路径 再点config configure完后会出现 在search栏修改以下&#xff1a; 1.modules路径 2.cuda 3. opencv_world 4.nonfree 5.取消勾选tes…

石油化工巡检机器人:应对挑战的创新力量

在石油化工领域&#xff0c;安全始终是高悬的达摩克利斯之剑。人工巡检面临诸多痛点&#xff0c;如高危环境对人身安全的巨大威胁&#xff0c;复杂工况下难以做到全面细致监测&#xff0c;对有害气体检测存在滞后性&#xff0c;还有恶劣天气对巡检工作的严重干扰。而这些痛点&a…

探索生态农业,守护绿色家园

在繁忙的都市生活中&#xff0c;我们往往忽略了与自然和谐相处的重要性。而生态农业&#xff0c;正是让我们重拾与大自然亲密关系的桥梁。通过采用生态友好的耕作方式&#xff0c;生态农业不仅能够提供健康、营养的农产品&#xff0c;还能够保护生态环境&#xff0c;实现人与自…

Cesium 开发大屏数据可视化模板 开箱即用 无偿贡献

下载地址&#xff1a;李鑫/cesium大屏数据可视化https://gitee.com/bujieqingfeng/cesium_data_visual 项目预览&#xff1a; 对您有用的话受累点个 ‘Star’

安卓数据存储(键值对、数据库、存储卡、应用组件Application、共享数据)

键值对 此小节介绍Android的键值对存储方式的使用方法&#xff0c;其中包括&#xff1a;如何将数据保存到共享参数&#xff0c;如何从共享参数读取数据&#xff0c;如何使用共享参数实现登陆页面的记住密码功能&#xff0c;如何使用Jetpack集成的数据仓库。 共享参数的用法 …

ESP-IDF使用Button组件实现按键检测的功能

ESP32使用Button组件实现按键检测的功能 ESP-IDF 组件管理LED 组件简介测试button组件写在最后 ESP-IDF 组件管理 IDF 组件管理器工具用于下载 ESP-IDF CMake 项目的依赖项&#xff0c;该下载在 CMake 运行期间自动完成。IDF 组件管理器可以从自动从组件注册表 或 Git 仓库获取…