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解释更新

    作为我大学复习的一部分 我试图回答以下问题 至少在表的一个属性上创建索引 employees 数据库 您可以在其中使用 MySQL EXPLAIN 工具 清楚地显示好处 在条款或检索方面 和负面 在 更新条款 创建相关索引的信息 对于第一部
  • SQL Like 带有子查询

    我怎样才能做到这一点 SELECT FROM item WHERE item name LIKE SELECT equipment type FROM equipment type GROUP BY equipment type 内部子查询
  • Solr 增量导入不起作用

    我使用的是solr 4 2 请注意 完全导入有效 但增量导入却无效 增量导入不会给出任何错误 但不会获取任何更改 这是数据配置文件
  • jDBI中如何进行内查询?

    我怎样才能在 jDBI 中执行这样的事情 SqlQuery select id from foo where name in
  • ActiveRecord 查询,按关联排序,最后一个 has_many

    我试图列出所有Users by the created at最近创建的关联记录 通讯 列 到目前为止我所拥有的 User includes communications order communications created at IS
  • 结果集未打开。验证自动提交已关闭。阿帕奇·德布里

    我的数据库使用 apache derby 我能够对数据库执行插入操作 以下是尝试显示我唯一的表 MAINTAB 的内容的代码摘录 java sql Connection 的实例是 dbconn ResultSet word Statemen
  • 将子查询的结果插入表中并带有常量

    相关表格的概要如下 我有一个表 我们称之为联接 它有两列 都是其他表的外键 我们将这两列称为 userid 和buildingid 因此 join 看起来像 join userid buildingid 我基本上需要在这个表中插入一堆行 通
  • 从两个表中搜索然后删除

    我有两个包含成员数据的表 与 member id 列链接 我需要搜索所有记录email列以 pl 结尾 然后 我需要为此删除两个表中的所有记录 基于 member id 是否可以通过一条 SQL 语句完成此操作 SELECT member
  • MySQL如何根据字段是否存在来插入新记录或更新字段?

    我正在尝试实现一个评级系统 在数据库表中保留以下两个字段 评级 当前评级 num rates 迄今为止提交的评分数量 UPDATE mytable SET rating rating num rates theRating num rate
  • 标记个体内事件发生后发生的日期

    我有一组长格式的数据 每人几行 人 id 其中事件 事件 1 应该只发生一次 事件发生后 该人不应再有任何数据 如果事件发生后出现任何记录 我想使用名为 flag flag 1 的新变量创建一个查询 例如 下面标记了 id 5 因为在该人的
  • SQL Server 之间

    我有一个表 其中有年 月和一些数字列 Year Month Total 2011 10 100 2011 11 150 2011 12 100 2012 01 50 2012 02 200 现在 我想要SELECT2011 年 11 月至
  • SQL 用新值替换旧值

    我有一个名为tbl Products 其中有一列名为articlenumber并且充满了像这样的数字s401 s402 etc 我生成了一个包含新商品编号的列表 它将替换旧的商品编号 s401 I00010 s402 I00020 s403
  • 我不确定在 SQL 中声明这些变量时出了什么问题

    我有以下代码 USE pricingdb go CREATE TABLE dbo Events 060107 2012 Date Time varchar 20 COLLATE SQL Latin1 General CP1 CI AS NU
  • Oracle:如何查找模式中上次更新(任何表)的时间戳?

    有一个Oracle数据库模式 数据很小 但仍然有10 15个表左右 它包含一种配置 路由表 有一个应用程序必须不时轮询此架构 不得使用通知 如果架构中没有数据更新 应用程序应使用其当前的内存版本 如果任何表有任何更新 应用程序应将所有表重新
  • Oracle 获取列值发生变化的行

    假设我有一张桌子 比如 ID CCTR DATE 1 2C 8 1 2018 2 2C 7 2 2018 3 2C 5 4 2017 4 2B 3 2 2017 5 2B 1 1 2017 6 UC 11 23 2016 还有其他字段 但我
  • 基于列顺序的查询速度

    数据库中列类型的顺序对查询时间有影响吗 例如 具有混合排序 INT TEXT VARCHAR INT TEXT 的表的查询速度是否会比具有连续类型 INT INT VARCHAR TEXT TEXT 的表慢 答案是肯定的 这确实很重要 而且
  • (SQL) 识别字段中字符串格式多次出现的位置

    我需要将叙述字段 自由文本 拆分为多行 目前的格式如下 Case Reference Narrative XXXX XX 123456 Endless Text up to 50k characters 在作为文本的叙述字段中 各个条目 当
  • 是否可以使用“WHERE”子句来选择SQL语句中的所有记录?

    晚上好 我很好奇是否可以在 SQL 语句中创建一个 WHERE 子句来显示所有记录 下面一些解释 随机 SQL 语句 Java JSP示例 正常情况 String SqlStatement SELECT FROM table example
  • 获取查询的行号

    我有一个查询将返回一行 当表排序时 有什么方法可以找到我正在查询的行的行索引吗 我试过了rowid但当我期待第 7 行时却得到了 582 Eg CategoryID Name I9GDS720K4 CatA LPQTOR25XR CatB
  • SQL 大表中的随机行(使用 where 子句)

    我有一个网站 人们可以在其中对汽车进行投票 向用户展示 4 辆汽车 他 她可以投票选出他们最喜欢的汽车 桌子cars有重要的列 car id int 10 not auto increment so has gaps views int 7

随机推荐

  • 分词工具使用系列——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实