【SQL】外连接 LEFT JOIN

news2024/11/18 3:37:54

目录

一.内连接与外连接

   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子句来实现。

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git回退到指定版本,同时提交记录也会删除

第一步&#xff1a; git reset --hard xxx (需要恢复版本的 commit id)第二步&#xff1a;branch_name就是远程分支的名称 git push origin <branch_name> --force

解决GoLand无法Debug

goland 调试的的时候提示如下错误 WARNING: undefined behavior - version of Delve is too old for Go version 1.22.3 (maximum supported v 其实个原因是因为正在使用的Delve调试器版本太旧&#xff0c;无法兼容当前的Go语言版本1.22.3。Delve是Go语言的一个调试工具&#…

Java使用apache.poi生成excel插入word中

加油&#xff0c;新时代打工人&#xff01; 工作需求&#xff0c;上个文章我们生成好的word&#xff0c;这次将生成好的excel表格数据&#xff0c;插入word中。需要准备好excle数据&#xff0c;然后插入到word中。 最后个需要&#xff0c;就是把这些生成好的word文档转成pdf进行…

STL题单总结

下周争取全部刷掉 牛客 知乎推荐的题 收藏的文章1 收藏的文章2 收藏的文章3 洛谷题单

Python爬虫:爬取B站视频(最新、能用且讲解详细)【01】

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️如遇文章付费&#xff0c;可先看…

spring cache(三)demo

一、入门demo 1、pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.o…

java读取shp文件,获取点位

Testvoid contextLoads() {System.out.println(System.currentTimeMillis());//1716516228057 1716516228798String zipFilePath "C:\\code\\risk\\risk_management_backend\\edatope-app\\src\\main\\resources\\新中心范围SHP导入模板.zip";String destDir &quo…

React 中的jsx 的语法使用

react 中是使用 JSX 编写标签的 它是可选的&#xff0c;但大多数 React 项目会使用 JSX&#xff0c;主要是它很方便。所有 我们推荐的本地开发工具 都开箱即用地支持 JSX。 JSX 比 HTML 更加严格。你必须闭合标签&#xff0c;如 <br />。你的组件也不能返回多个 JSX 标…

LeetCode题练习与总结:从中序与后序遍历序列构造二叉树--106

一、题目描述 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7], postorder [9,15,7,20,3] 输出…

Home Credit - Credit Risk Model Stability

本篇是对Kaggle上Home Credit - Credit Risk Model Stability竞赛中的开源代码VotingClassifier Home Credit的解读。原链接在VotingClassifier Home Credit (kaggle.com)。 %%writefile script.py import sys from pathlib import Path import subprocess import os import g…

MySQL数据库的数据文件保存在哪?MySQL数据存在哪里

在安装好MySQL数据库使用一段时间后&#xff0c;会产生许多的数据库和数据。那这些数据库的数据文件存放在本地文件夹的什么位置呢 一、默认位置 一般来说MySQL数据库的数据文件都是存放在data文件夹之中&#xff0c;但是根据使用的存储引擎不同&#xff0c;产生的一些文件也…

【MATLAB源码-第213期】基于matlab的16QAM调制解调系统软硬判决对比仿真,输出误码率曲线对比图。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 一、16QAM调制原理 在16QAM&#xff08;16 Quadrature Amplitude Modulation&#xff09;调制中&#xff0c;一个符号表示4个比特的数据。这种调制方式结合了幅度调制和相位调制&#xff0c;能够在相同的频谱资源下传输更多…

智慧环保一体化平台哪家好?(已解答)

在环保行业数字化转型的大潮中&#xff0c;朗观视觉智慧环保一体化平台应运而生&#xff0c;成为推动环境治理现代化的重要手段。选择一个合适的智慧环保一体化平台对于提升环境管理效率、实现精细化监管具有重要意义。本文将从多个维度为您提供一份深度分析与选择指南&#xf…

python数据类型之元组、集合和字典

目录 0.三者主要作用 1.元组 元组特点 创建元组 元组解包 可变和不可变元素元组 2.集合 集合特点 创建集合 集合元素要求 集合方法 访问与修改 子集和超集 相等性判断 集合运算 不可变集合 3.字典 字典特点 字典创建和常见操作 字典内置方法 pprin模块 0.…

在线改图片怎么做更简单?快速修改图片尺寸的方法

现在一般拍摄出的图片尺寸都会比较大&#xff0c;想要上传大网上的一些平台展示时&#xff0c;经常会受到平台的限制&#xff0c;无法将图片正常上传到平台&#xff0c;那么如何将图片尺寸快速调整呢&#xff1f;比较简单的一种方式&#xff0c;可以通过在线改图片的工具来实现…

【数据结构】线性表习题 |顺序表 |链表 |栈和队列

&#x1f4d6;专栏文章&#xff1a;数据结构学习笔记 &#x1faaa;作者主页&#xff1a;格乐斯 前言 线性表习题 |顺序表 |链表 |栈和队列 顺序表和链表 1、 选B 1002(5-1)108* 第i个元素地址X&#xff0c;元素长度Len&#xff0c;第j个元素地址Y 公式&#xff1a;YXL…

Ardupilot开源代码之Rover上路 - 后续3

Ardupilot开源代码之Rover上路 - 后续3 1. 源由2. 深度配置2.1 编码器2.2 WS2812B LED灯带2.3 4GLTE超视距2.3.1 摄像头2.3.2 QGC OSD虚拟遥控2.3.3 QGC外接JoyStick遥控 2.4 伴机电脑供电 3. 实测效果4. 遗留&后续4.1 设置倒车按钮4.2 MP无法连接ESP82664.3 高精度编码器问…

水泥超低排平台哪家好?

随着环保政策的加强和绿色发展理念的深入人心&#xff0c;水泥行业的超低排放改造已成为行业发展的新趋势。选择一个合适的水泥超低排平台对于确保改造效果和实现企业的可持续发展至关重要。朗观视觉小编将从多个角度出发&#xff0c;为您提供一份综合评估与选择攻略&#xff0…

解释JAVA语言中关于方法的重载

在JAVA语言中&#xff0c;方法的重载指的是在同一个类中可以存在多个同名方法&#xff0c;但它们的参数列表不同。具体来说&#xff0c;重载的方法必须满足以下至少一条条件: 1. 参数个数不同。 2. 参数类型不同。 3. 参数顺序不同。 当调用一个重载方法时&#xff0c;编译器…

C——日常练习题(宏)

题目&#xff1a;写一个宏&#xff0c;可以将一个整数的二进制位的奇数位和偶数位交换。 1.如何交换奇偶位&#xff08;涉及基础知识位运算&#xff09; 举例&#xff1a;如1001 奇偶位互换之后是0110;&#xff08;先搞懂这个简单举例&#xff09; (1).将奇数位保留&#…