join后 on , and ,where 实例测试

2023-11-12

目录

一,join实现方式

(一),原理

二,join 后用 on  ,and 还是 where 区别

(一),原理

(二),on , where实例

1,创建表和数据

2,测试语句和结果

(三),on  , and实例

1,添加数据

2,测试语句和结果


一,join实现方式

(一),原理

嵌套循环
A B
一行一行匹配,A1匹配B表全部,A2匹配B表全部。

索引
B表上必须有索引,匹配到索引后才会进行回表查询,
如果B表的关联键是主键的话,性能会非常高。
如果不是,需要进行多次回表查询,先关联索引,然后根据二级索引的主键ID进行回表操作,性能上比索引是主键要慢。

如果有索引,会采用上面的方式进行join,但如果join列没有索引,会采用Block Nesated-Loop Join .中间会有一个缓冲区
join buffer,将驱动表的表所有JOIN相关的列都缓存到join buffer中,,然后批量与匹配表进行匹配,将第一种多次比较合并为一次,降低了费驱动表的访问频率,默认情况下 joinbuffersize =256k。在查找时会将所有需要的额列换粗到join buffer中,,包括select的列,而不是仅仅是只缓存关联列。在一个由N个JOIN关联的SQL当中会执行的时候分配N-1个join buffer.
show variables like '%join_buffer%';

当使用内连接的时候,两种方式一样
当使用左外连接时,会把左表的数据全部查出;
当使用右外连接时,会把右边的数据全部查出;

二,join 后用 on  ,and 还是 where 区别

(一),原理

当使用内连接的时候,两种方式一样

当使用左外连接时,会把左表的数据全部查出;
当使用右外连接时,会把右边的数据全部查出;

and则是通过在表连接前过来A表或者B表里面那些记录符合连接诶条件,同时会兼顾left join 还是 right join . 即假如是左连接的话,如果左边表的某个记录不符合连接条件,那么它不进行连接,但是仍然留在结果集中(此时右边部分的连接结果为null)。

on条件是在生成临时表示使用的条件,他不管on中的条件是否为真,都会返回左表中的记录。

(二),on , where实例

下面以mysql为例:

1,创建表和数据

CREATE TABLE `test1` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(30) CHARACTER SET utf8mb4 DEFAULT NULL,
  KEY `idx_test1_id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `test2` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(30) CHARACTER SET utf8mb4 DEFAULT NULL,
  KEY `idx_test2_id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `test1` VALUES ('1', 'test1一');
INSERT INTO `test1` VALUES ('3', 'test1三');
INSERT INTO `test2` VALUES ('1', 'test2一');
INSERT INTO `test2` VALUES ('4', 'test2四');

2,测试语句和结果

SELECT * FROM test1 LEFT  JOIN  test2 ON test1.id = test2.id;
SELECT * FROM test1 LEFT  JOIN  test2 ON test1.id = test2.id WHERE test1.id = test2.id;

SELECT * FROM test1 RIGHT JOIN  test2 ON test1.id = test2.id;
SELECT * FROM test1 RIGHT JOIN  test2 ON test1.id = test2.id WHERE test1.id = test2.id;

SELECT * FROM test1 INNER JOIN  test2 ON test1.id = test2.id;
SELECT * FROM test1 INNER JOIN  test2 ON test1.id = test2.id WHERE test1.id = test2.id;

 

 

 

 

(三),on  , and实例

1,添加数据

INSERT INTO `test2` VALUES ('88', '恭喜发财');

INSERT INTO `test1` VALUES ('88', '恭喜发财');

2,测试语句和结果

SELECT * FROM test1 LEFT  JOIN  test2 ON test1.id = test2.id;
SELECT * FROM test1 LEFT  JOIN  test2 ON test1.id = test2.id and test1.name = test2.name;

SELECT * FROM test1 RIGHT JOIN  test2 ON test1.id = test2.id;
SELECT * FROM test1 RIGHT JOIN  test2 ON test1.id = test2.id and test1.name = test2.name;

SELECT * FROM test1 INNER JOIN  test2 ON test1.id = test2.id;
SELECT * FROM test1 INNER JOIN  test2 ON test1.id = test2.id and test1.name = test2.name;

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

join后 on , and ,where 实例测试 的相关文章

  • Mysql 时间匹配连接

    我有两个表cpuinfo和jobinfo 我想使用这两种数据创建报告 tabes CREATE TABLE cpuinfo id int 11 NOT NULL AUTO INCREMENT usagetime datetime DEFAU
  • 如何在mysql中选择具有相同值集的列?

    我的桌子是 patients pid name city disease did dname has disease did pid 我想列出具有相同疾病组的患者 pid 和 did 分别是患者和疾病表中的主键 并且是 has diseas
  • 删除连接到另一表 SQL 的一个表中的记录

    我有两个表 一个包含 212 000 条记录 已弃用的记录 另一个包含 10 500 000 条记录 我想在 id 和 version number 字段上连接两个表 因为两个表都有这些字段 我希望从连接表中删除匹配的记录 来自连接表 即从
  • SQL 错误:“没有这样的表”

    我试图解决为什么我的代码为所有查询返回 null 的原因 最后发现 sql 查询什么也没有返回 我使用简约代码创建了一个新的 AIR 文档 s WindowedApplication
  • 给定“java.sql.SQLIntegrityConstraintViolationException”是否可以确定错误的列

    鉴于我有一个类型为 java sql SQLIntegrityConstraintViolationException 的异常 是否可以以编程方式确定错误的列 或多列 我问这个问题是因为我想将错误映射回客户端的数据模型以指示错误的字段 例如
  • SQL 查询用于计算每个客户的订单数量和总金额

    我有两张桌子Order与列 OrderID OrderDate CID EmployeeID And OrderItem与列 OrderID ItemID Quantity SalePrice 我需要返回客户 ID CID 每个客户的订单数
  • Oracle:如何获取刚刚插入的行的序列号?

    如何获取刚刚插入的行的序列号 插入 返回 declare s2 number begin insert into seqtest2 x values aaa returning seq into s2 dbms output put lin
  • 根据日期顺序排名

    我的数据如下 Heading Date A 2009 02 01 B 2009 02 03 c 2009 02 05 d 2009 02 06 e 2009 02 08 我需要如下排名 Heading Date Rank A 2009 02
  • 实现软删除的最佳方法是什么?

    目前在做一个项目 我们要对大部分用户 用户角色 实现软删除 我们决定添加一个is deleted 0 数据库中每个表的字段并将其设置为 1 如果特定用户角色点击特定记录上的删除按钮 现在为了将来的维护 每个SELECT查询需要确保它们不包含
  • 在存储过程中验证用户的最简单方法?

    我需要一个存储过程 可以通过发送以下内容来检查登录尝试时他们是否是有效用户login and password查看它们在数据库中是否匹配 有没有一种简单的方法可以做到这一点 如果没有更多信息 我目前能提供的最好信息是 CREATE STOR
  • 快速查询最新记录的方法?

    我有一张这样的表 USER PLAN START DATE END DATE 1 A 20110101 NULL 1 B 20100101 20101231 2 A 20100101 20100505 在某种程度上 如果END DATE i
  • 内置函数将每个单词的第一个字母大写

    如果 SQL Server 中已存在此类函数 我不想为此创建自定义函数 输入字符串 This is my string to convert预期输出 This Is My String To Convert SET ANSI NULLS O
  • 使用子查询 select 创建新表

    我试图从子查询选择创建一个新表 但出现以下错误 附近的语法不正确 SELECT INTO foo FROM SELECT DATEPART MONTH a InvoiceDate as CalMonth DATEPART YEAR a In
  • SQL 连接两个没有关系的表

    我有具有相同结构的不同表 我想通过其中一列将它们连接起来 问题是他们不共享该专栏中的信息 Table 1 Type A Name Value Table 2 Type B Name Value 结果表 在单列中 nameFromA name
  • mysql自动存储记录创建时间戳

    mysql 有什么方法可以在创建记录时自动将时间戳存储在记录行中 我试图使用时间戳 数据类型 和 current timestamp 作为默认值 但后来意识到每次更新记录时都会更新 我只需要一些可以存储创建时间戳的东西 Thanks Set
  • 快速将列的副本添加到 MySQL 表

    我需要一种快速的方法来复制表中的 DATETIME 列并为其指定一个新名称 我的表中有一个名为 myDate 的列 名为 myResults 我需要一个查询来在名为 newDate 的表中创建一个新列 该列的数据与 myDate 列完全相同
  • 如何在 SQL Server 中连接

    我的数据库没有特定的列 因此我通过开关在查询中创建了一个列 我需要的是将此列与数据库中的另一列连接起来 select certificateDuration DurationType case when certificateDuratio
  • 使用加权行概率从 PostgreSQL 表中选择随机行

    输入示例 SELECT FROM test id percent 1 50 2 35 3 15 3 rows 你会如何编写这样的查询 平均 50 的时间我可以获得 id 1 的行 35 的时间 id 2 的行 15 的时间 id 3 的行
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • 是否可以引用同一个表中的不同列?

    如果博客有一个 类别 表 如下所示 CREATE TABLE categories id INTEGER PRIMARY KEY AUTO INCREMENT parent id INTEGER NOT NULL name VARCHAR

随机推荐

  • 分词工具使用系列——sentencepiece使用

    分词工具使用系列 第一章 sentencepiece使用 第二章 jieba工具使用 文章目录 分词工具使用系列 前言 细说分词 一 sentencepiece是什么 二 sentencepiece使用步骤 准备文本 训练模型 使用模型 前
  • JavaScript简单实现拼图小游戏(附源码和资源)

    JavaScript简单实现拼图小游戏 附源码及资源 JavaScript代码68行 是3年前刚学JavaScript的时候写的 思想很简单 分享一下 拼图是4 4的 共三张图 按照命名规则添加其他图片也可以 资源已上传 下载地址 http
  • Hystrix实现断路器、服务降级、线程隔离

    了解Hystrix之前首先需要明白几个概念 雪崩效应 断路器 熔断机制 服务降级 线程隔离 雪崩效应 默认情况下 tomacat只有一个线程池去处理请求 这样在高并发的情况下大量的请求访问同一个服务器接口 线程池中所有的线程都用来处理访问这
  • Linux下某内网主机无法连接,通过添加路由表解决;路由表等网络知识学习

    1 问题描述与解决 这里要记录一个很奇怪的问题 当然是对我这种新手来说的 问题描述如下 当前一台Ubuntu 18 04主机在校园网环境中 同济大学 上海嘉定 上海电信 在apt安装软件的时候经常出现无法连接或者哈希值不匹配的问题 如图 这
  • 又一版A+B问题(注意细节)

    题目描述 输入两个不超过整型定义的非负10进制整数A和B lt 231 1 输出A B的m 1 lt m lt 10 进制数 输入 输入格式 测试输入包含若干测试用例 每个测试用例占一行 给出m和A B的值 当m为0时输入结束 输出 输出格
  • HCIE-Cloud Computing v2.0 lab机考全讲解

    阅读说明 中的内容是 考生的经验 建议 理解 五星表示为 必须背下来 文章目录 一 准备 题型介绍 考试环境 考试地址和密码 必知流程 二 实战 2 1 宏观方面 整体讲解 2 1 1 拓扑 类型接口 2 1 2 简述 2 2 微操 分题型
  • python画正方形的代码_python绘制正方形螺旋线的代码分享

    python绘制正方形螺旋线的代码分享 发布时间 2020 04 28 09 56 56 来源 亿速云 阅读 219 作者 小新 这篇文章主要为大家详细介绍了python绘制正方形螺旋线的代码分享 文中示例代码介绍的非常详细 具有一定的参考
  • Vite和Webpack如何使用CDN包

    为了精简打包输出的dist目录大小 我们可以引入CDN外部包的方式 来缩小打包的体积 加快打包速度 这里介绍Vite和Webpack中如何引入React CDN外部包 一 Vite引入CDN包 1 安装插件 npm i vitejs plu
  • Go实现两个Goroutine通信

    实现两个goroutine通信 要求如下 实现pingpong效果 保证程序能任意时长执行 且收到ctrl c信号之后 全身而退 即保证各个goroutine完整退出 在第三个goroutine中 可随时查找前两个goroutine各自发送
  • ASN.1编码方式详解

    ASN ASN 1 Abstract Syntax Notation dot one 抽象记法1 数字1被ISO加在ASN的后边 是为了保持ASN的开放性 可以让以后功能更加强大的ASN被命名为ASN 2等 但至今也没有出现 描述了一种对数
  • react学习记录-状态提升

    文章目录 前端应用状态管理 状态提升 课后习题 前端应用状态管理 状态提升 我们在使用state存放数据的时候 应当倾向于把数据放在父组件上 这是为了在父组件下的兄弟组件都在依赖或者影响这个数据的时候 能够进行共享 避免让两个子孙组件分别取
  • c语言求斐波那契数列n项以及前n项和

    斐波那契数列的定义 f n f n 1 f n 2 n gt 1 n 0 f 0 0 n 1 f 1 1 自定义函数 递归写法 fbi 此函数求x项的斐波那契数 int fbi int x 斐波那契 if x lt 0 return 0 e
  • 支付场景的测试用例

    功能测试 1 是否可以正常支付 2 支付金钱的最大值 最小值 错误金额 3 支付中断继续支付是否成功 4 支付中断后结束支付 5 支付中断结束后再一次支付 兼容性 1 pc端 手机端 平板电脑 安全性 1 姓名会不会显示给对方 2 对方账户
  • 信息系统项目管理师第七章-----项目管理一般知识

    考察知识点 项目管理概述 项目的属性 项目管理的特征 项目管理的知识体系 项目生命周期 项目生命周期的特点 阶段的划分 产品生命周期与项目生命周期的关系 项目的组织方式 职能型 项目型 矩阵式 总结 相关术语解析 项目干系人stakehol
  • 光猫改桥接,手机如何访问光猫后台,只要一根网线就可以了

    光猫改桥接之后一般有四种方法可以访问光猫后台 一 电脑用网线直连光猫的LAN口 然后设置好对应IP 二 光猫自带WiFi功能的 就直接开启WiFi 连接对应的WiFi 三 路由器的WAN口支持双模式 即可以进行PPPOE拨号 同时支持DHC
  • django根据已有数据库表生成model类。Django生成迁移文件,将迁移文件迁移到数据库

    根据已有的数据库表生成Django框架的APP中的models py代码 生成模型文件命令 python manage py inspectdb 将模型导入APP python manage py inspectdb gt app mode
  • 华三vlan配置

    基于MAC地址划分vlan 配置思路 创建VLAN 100 VLAN 200 配置Device A和Device C的上行端口为Trunk端口 并允许VLAN 100和VLAN 200的报文通过 配置 Device B 的下行端口为Trun
  • FindWinow

    1 MFC中的Caption属性就是windowName属性
  • 初始TypeScript

    来自刚接触TypeScript的小菜鸡 养生青年阿贺 一 什么是TypeScript 1 TypeScript 是一款编程式语言 微软开发的 2 typescript式Javascript的超集 遵循了最新的ES6 ES5的规范 types
  • join后 on , and ,where 实例测试

    目录 一 join实现方式 一 原理 二 join 后用 on and 还是 where 区别 一 原理 二 on where实例 1 创建表和数据 2 测试语句和结果 三 on and实例 1 添加数据 2 测试语句和结果 一 join实