【SQL】所谓的连表查询
连表查询
外连接
外连接分为两种,左(外)连接和右(外)连接
基本语法如下:
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】所谓的连表查询的更多相关文章
- SQL数据库的多表查询
多表查询分为 内.外连接 外连接分为左连接(left join 或left outer join).右连接(right join 或者 right outer join).和完整外部连接 (full ...
- Oracle总结【SQL细节、多表查询、分组查询、分页】
前言 在之前已经大概了解过Mysql数据库和学过相关的Oracle知识点,但是太久没用过Oracle了,就基本忘了...印象中就只有基本的SQL语句和相关一些概念....写下本博文的原因就是记载着Or ...
- 2.2 Oracle之DML的SQL语句之多表查询以及组函数
一.SQL的多表查询: 1.左连接和右连接(不重要一方加(+)) SELECT e.empno,e.ename,d.deptno,d.dname,d.loc FROM emp e,dept d WHE ...
- SQL语句 自连表查询。inner join用法,partition by ,列转行查询
use mydb1 go -- 表T_Employee2 -- Id Name Position Dept -- 1 张三 员工 市场部 -- 2 李四 经理 销售部 -- 3 王五 经理 市场部 - ...
- 你的 SQL 还在回表查询吗?快给它安排覆盖索引
什么是回表查询 小伙伴们可以先看这篇文章了解下什么是聚集索引和辅助索引:Are You OK?主键.聚集索引.辅助索引,简单回顾下,聚集索引的叶子节点包含完整的行数据,而非聚集索引的叶子节点存储的是每 ...
- python之路50 ORM执行SQL语句 操作多表查询 双下线方法
ORM执行查询SQL语句 有时候ORM的操作效率可能偏低 我们是可以自己编写SQL的 方式1: models.User.objects.raw('select * from app01_user;') ...
- SQL Merge 语法 单表查询
--项目中需要用到Merg语法,于是去网上查了资料,发现竟然都是多表查询,问题是我只有一张表,于是我纳闷了,后来我灵机一动,就搞定了!--表名:t_login(登录表)--字段:f_userName( ...
- 【SQL基础】多表查询:子查询、连接查询(JOIN)、组合查询(UNION集合运算)
〇.概述 1.内容 JOIN表连接(内连接INNER JOIN/JOIN)(外连接LEFT/RIGHT (OUTER) JOIN) 集合运算-UNION联合 2.建表语句 drop table if ...
- SQL 一对多联表查询最大值
有两个数据表City表和Price表,CIty表的结构如下: Price表的结构如下: 查询每个城市最大的销售价格,并以最大价格进行降序排列,选取前5条记录,SQL语句的代码如下: * from (s ...
- 2.1 Oracle之DML的SQL语句之单表查询以及函数
1.SQL简介 对于不同的数据库来说,SQL语句是相通的,关系型数据库都以SQL语句为操作的标准,只是相应的数据库对应的函数不相同. SQL(Structured Query Language,结构化 ...
随机推荐
- < Python全景系列-2 > Python数据类型大盘点
<Python全景系列-2> Python数据类型大盘点 欢迎来到我们的系列博客<Python全景系列>!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高 ...
- uni-app 运行项目
运行-运行到浏览器-选择浏览器 运行新项目:真机测试需要打开真机的开发者选项usb安装调试功能
- ArcGIS如何自动获得随机采样点?
本文介绍基于ArcMap软件,实现在指定区域自动生成随机点的方法. 在GIS应用中,我们时常需要在研究区域内进行地理数据的随机采样:而采样点的位置往往需要在结合实际情况的前提下,用计算机随机生 ...
- Spring Cloud开发实践(五): Consul - 服务注册的另一个选择
目录 Spring Cloud开发实践(一): 简介和根模块 Spring Cloud开发实践(二): Eureka服务和接口定义 Spring Cloud开发实践(三): 接口实现和下游调用 Spr ...
- shrio QuickStart
Shrio三大对象: springboot整合shrio 登录拦截认证 创建项目时勾选web,导入依赖: <dependency> <groupId>org.apache.s ...
- web自动化05-鼠标操作
鼠标操作方法 1.常见的鼠标操作 点击.右击.双击.悬停.拖拽等 2.selenium中的封装鼠标操作 说明:在Selenium中将操作鼠标的方法封装在ActionChains类中 ...
- 【操作日志】如何在一个SpringBoot+Mybatis的项目中设计一个自定义ChangeLog记录?
设计一个业务改动信息时的自定义记录,例如新增.修改.删除数据等.并且记录的规则可以通过配置的方式控制.大家需要根据各自业务场景参考,欢迎讨论.伪代码如下: 实体类: @TableName(" ...
- 图解三代测序(SMRT Sequencing)
目前主流三代测序平台除了Oxford 家的 Nanopore,还有 Pacific Biosciences(简称 PacBio)公司的 Single Molecule Real-Time(SMRT)S ...
- 如何洞察 C# 程序的 GDI 句柄泄露
一:背景 1. 讲故事 前段时间有位朋友找到我,说他的程序界面操作起来很慢并且卡顿等一些不正常现象,从任务管理器看了下 GDI句柄 已经到 1w 了,一时也找不出什么代码中哪里有问题,让我帮忙看下,其 ...
- C++ 核心指南之资源管理(中)
C++ 核心指南(C++ Core Guidelines)是由 Bjarne Stroustrup.Herb Sutter 等顶尖 C++ 专家创建的一份 C++ 指南.规则及最佳实践.旨在帮助大家正 ...