连表查询

外连接

外连接分为两种,左(外)连接右(外)连接

基本语法如下:

SELECT 字段列表
FROM 表1
LEFT JOIN 表2
ON 条件;

这是左连接,因此以表1中的 [字段列表] 为基础,拿着这些字段去表2一条一条的找,看看有没有符合 [条件] 的,没有找到符合条件的用null代替,然后把表1与表2中的满足条件的和不满足条件的(null)拼在一起,返回结果

右连接也类似

SELECT 字段列表
FROM 表1
RIGHT JOIN 表2
ON 条件;

这是右连接,因此以表2中的 [字段列表] 为基础,拿着这些字段去表1一条一条的找,看看有没有符合 [条件] 的,没有找到符合条件的用null代替,然后把表1与表2中的满足条件的和不满足条件的(null)拼在一起,返回结果

说白了就是基于某个表的数据去另一个表查找满足条件的数据,如果查到就返回值,查不到就用null代替返回值

下面是例子

先看左连接,我们使用表1去表2中查询

酸菜在表2中没有对应,好,酸菜对应null;

肉末在表2中uid与茄子对应,肉末对应茄子;

可乐在表2中uid与鸡翅对应,可乐对应鸡翅;(拼在一起返回结果)

注意,左连接时以表1为基础,表1遍历完之后就结束了,因此不会存在"null-猪蹄"的情况

再看右连接,这里使用表2去表1中查询

茄子在表1中uid与对应肉末,茄子对应肉末;

鸡翅在表1中uid与对应可乐,鸡翅对应可乐;

猪蹄的uid在表1中无对应,那么其uid对应null,其aname也对应null;

因为是右连接,以表2为基础,所以不会有酸菜出现

内连接

简单来说,内连接就是使用关键字INNER JOIN将两个表连接起来,查询出所有的结果

例如:

SELECT *
FROM 表1
INNER JOIN 表2;

如果此时就输出,那么mysql会使用笛卡尔积将两张表进行组合并返回结果

笛卡尔积是指将第一个表的每一行与第二个表的每一行都进行组合,生成一个新的结果集。

假设我们有两个表:Customers(客户表)和 Orders(订单表)。每个表都有几行记录。

Customers 表:

| CustomerID | CustomerName |
|------------|--------------|
| 1 | Alice |
| 2 | Bob |

Orders 表:

| OrderID | OrderDate   |
|---------|-------------|
| 101 | 2022-01-01 |
| 102 | 2022-02-01 |

如果我们执行下面的查询语句而没有指定连接条件:(这里隐式的写了内连接

SELECT Customers.CustomerName, Orders.OrderID, Orders.OrderDate
FROM Customers, Orders;

则会得到如下结果:

| CustomerName | OrderID | OrderDate   |
|--------------|---------|-------------|
| Alice | 101 | 2022-01-01 |
| Alice | 102 | 2022-02-01 |
| Bob | 101 | 2022-01-01 |
| Bob | 102 | 2022-02-01 |

这个结果是通过将 Customers 表中的每一行都与 Orders 表中的每一行进行组合得到的。结果集中的每一行都包含了 Customers 表和 Orders 表中的所有列值。

但是,笛卡尔积会导致结果集的大小呈指数级增长,并且可能会产生大量冗余数据。因此,在实际应用中,我们通常会根据特定的连接条件来执行连接操作,以避免不必要的笛卡尔积。

于是就有:

SELECT *
FROM 表1
INNER JOIN 表2
ON 条件;

这样我们就可以根据两张表里共同有的一些字段,来过滤想要的数据,从而得到最终结果

注意,如果是隐式的写法,要用WHERE来过滤

先组合,再过滤

【SQL】所谓的连表查询的更多相关文章

  1. SQL数据库的多表查询

    多表查询分为 内.外连接 外连接分为左连接(left join 或left outer join).右连接(right join 或者 right outer join).和完整外部连接 (full ...

  2. Oracle总结【SQL细节、多表查询、分组查询、分页】

    前言 在之前已经大概了解过Mysql数据库和学过相关的Oracle知识点,但是太久没用过Oracle了,就基本忘了...印象中就只有基本的SQL语句和相关一些概念....写下本博文的原因就是记载着Or ...

  3. 2.2 Oracle之DML的SQL语句之多表查询以及组函数

    一.SQL的多表查询: 1.左连接和右连接(不重要一方加(+)) SELECT e.empno,e.ename,d.deptno,d.dname,d.loc FROM emp e,dept d WHE ...

  4. SQL语句 自连表查询。inner join用法,partition by ,列转行查询

    use mydb1 go -- 表T_Employee2 -- Id Name Position Dept -- 1 张三 员工 市场部 -- 2 李四 经理 销售部 -- 3 王五 经理 市场部 - ...

  5. 你的 SQL 还在回表查询吗?快给它安排覆盖索引

    什么是回表查询 小伙伴们可以先看这篇文章了解下什么是聚集索引和辅助索引:Are You OK?主键.聚集索引.辅助索引,简单回顾下,聚集索引的叶子节点包含完整的行数据,而非聚集索引的叶子节点存储的是每 ...

  6. python之路50 ORM执行SQL语句 操作多表查询 双下线方法

    ORM执行查询SQL语句 有时候ORM的操作效率可能偏低 我们是可以自己编写SQL的 方式1: models.User.objects.raw('select * from app01_user;') ...

  7. SQL Merge 语法 单表查询

    --项目中需要用到Merg语法,于是去网上查了资料,发现竟然都是多表查询,问题是我只有一张表,于是我纳闷了,后来我灵机一动,就搞定了!--表名:t_login(登录表)--字段:f_userName( ...

  8. 【SQL基础】多表查询:子查询、连接查询(JOIN)、组合查询(UNION集合运算)

    〇.概述 1.内容 JOIN表连接(内连接INNER JOIN/JOIN)(外连接LEFT/RIGHT (OUTER) JOIN) 集合运算-UNION联合 2.建表语句 drop table if ...

  9. SQL 一对多联表查询最大值

    有两个数据表City表和Price表,CIty表的结构如下: Price表的结构如下: 查询每个城市最大的销售价格,并以最大价格进行降序排列,选取前5条记录,SQL语句的代码如下: * from (s ...

  10. 2.1 Oracle之DML的SQL语句之单表查询以及函数

    1.SQL简介 对于不同的数据库来说,SQL语句是相通的,关系型数据库都以SQL语句为操作的标准,只是相应的数据库对应的函数不相同. SQL(Structured Query Language,结构化 ...

随机推荐

  1. Python获取当前时间、获取当月第一天、最后一天日期等方法

    ```python先导入包: import calendarimport datetimefrom datetime import timedelta获取今天日期: #返回datetime格式:eg: ...

  2. django 与 vue 的完美结合

    django 与 vue 的完美结合   最近接到一个任务,就是用 django 后端,前段用 vue,做一个普通的简单系统,我就是一搞后端的,听到 vue 也是比较震惊,之前压根没接触过 vue.看 ...

  3. 在DevExpress中使用BandedGridView表格实现多行表头的处理

    在之前较早随笔中介绍过实现多行表头的处理,通过手工创建字段以及映射数据源字段属性的方式实现,有些客户反映是否可以通过代码方式更方便的创建对应的处理操作,因此本篇随笔继续探讨这个多行表头的处理的操作,使 ...

  4. Intellij IDEA最新激活码,适合2022,2023和所有版本,永久更新

    分享一下 IntelliJ IDEA 2023.1 最新激活注册码,破解教程如下,可免费永久激活,亲测有效,下面是详细文档哦~ 申明:本教程 IntelliJ IDEA 破解补丁.激活码均收集于网络, ...

  5. Kubernetes(k8s)一次性任务:Job

    目录 一.系统环境 二.前言 三.Kubernetes Job简介 四.创建一次性任务job 4.1 创建一个简单任务的job 4.2 创建需要执行多次的job任务 五.测试job失败重试次数 六.j ...

  6. 为 Windows 系统替换优雅的苹果字体

    使用 Windows 的童鞋,大家估计都用惯了默认的微软雅黑字体,字体本身也很不错,但使用久了也该换个别的字体了,换个字体换个心情嘛. 今天给大家推荐一款非常棒的一键更换 Windows 系统字体的软 ...

  7. 深入理解注解驱动配置与XML配置的融合与区别

    摘要:本文旨在深入探讨Spring框架的注解驱动配置与XML配置,揭示两者之间的相似性与差异. 本文分享自华为云社区<Spring高手之路2--深入理解注解驱动配置与XML配置的融合与区别> ...

  8. CKS 考试题整理 (13)-使用 sysdig 检查容器里里的异常进程

    Task 使用运行时检测工具来检测 Pod tomcat 单个容器中频发生成和执行的异常进程 有两种工具可供使用: sysdig falco 注: 这些工具只预装在cluster的工作节点,不在 ma ...

  9. JVM监控工具jstat使用介绍

    jstat 是 Java 自带的一个命令行工具,用于监控 JVM 运行时的状态信息.它可以通过以下格式的命令来调用: jstat [option] <vmid> [<interval ...

  10. 【了解LLM】—— LLM&& SD 基本概念

    本文地址:https://www.cnblogs.com/wanger-sjtu/p/17417312.html Causual LM 这里以llama模型为例,通常在执行用户输入之前会有一个[[文章 ...