连表查询

外连接

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

基本语法如下:

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. vscode运行java输出至指定文件夹

    一.前言 最近呢,需要用vscode编写一点小的java程序,也就是单java文件,但是呢,我发现coderunner运行java,一个java文件编译出一个class文件,这也太乱了!不符合我简约的 ...

  2. Midjourney|文心一格prompt教程[进阶篇]:Midjourney Prompt 高级参数、各版本差异、官方提供常见问题

    Midjourney|文心一格prompt教程[进阶篇]:Midjourney Prompt 高级参数.各版本差异.官方提供常见问题 1.Midjourney Prompt 高级参数 Quality ...

  3. .cur 图片加载提示 You may need an appropriate loader to handle this file type

    最近一个gis 项目需要加载一个.cur的图标,但是编译时提示 You may need an appropriate loader to handle this file type, current ...

  4. 【原创】浅谈EtherCAT主站EOE(上)-EOE网络

    这篇文章的标题虽然是关于EtherCAT EOE,但其实主要内容是关于整个EOE网络结构,属于计算机网络原理.而EtherCAT EoE只是简单介绍,并不是文章的重点.需要注意的是,我们的描述主要基于 ...

  5. 在SQL中将特定的数据始终排在第一行

    将特定的数据始终排在第一行 第一种方式: select * from ( select Id,1 num from InquiryPurchaseProduct where Id = 50 union ...

  6. Python潮流周刊#5:并发一百万个任务要用多少内存?

    你好,我是猫哥.这里记录每周值得分享的 Python 及通用技术内容,部分为英文,已在小标题注明.(标题取自其中一则分享,不代表全部内容都是该主题,特此声明.) 博客原文:https://python ...

  7. React后台管理系统05 引入UI组件库

    使用命令引入UI组件库 npm install antd --save 使用命令安装ant的图标库 npm install --save @ant-design/icons ,注意这里的@后面是一个a ...

  8. 组合数学知识整理_USTC-IAT期末复习版(已完结)

    组合数学知识整理_USTC-IAT期末复习版(已完结) 第一章 排列与组合 第二章 递推关系与母函数 第三章 容斥原理与鸽巢原理 第四章 polya定理

  9. HCL实验:5.单臂路由实现不同vlan通信

    使用单臂路由实现不同vlan 互通 拓扑图 网关均为所在网段的第一个地址 交换机配置 创建vlan 划分端口 配置端口类型 显示简要信息 路由器配置 路由器的端口默认关闭,需要手动开启 进行子端口的划 ...

  10. Blazor前后端框架Known-V1.2.4

    V1.2.4 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行. Gitee: https://gitee.com/known/Known Gith ...