我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql中如何使用左链接查询

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mysql中如何使用左链接查询

mysql中如何使用左链接查询,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

  我这里所说的主表是指在连接查询里MySQL以哪个表为主进行查询。比如说在MySQL左连接查询里,一般来说左表就是主表,但这只是经验之谈,很多时候经验主义是靠不住的,为了说明问题,先来个例子,建两个演示用的表categories和posts:

CREATE TABLE IF NOT EXISTS `categories` (    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,    `name` varchar(15) NOT NULL,    `created` datetime NOT NULL,    PRIMARY KEY (`id`),    KEY `name` (`name`)    );       CREATE TABLE IF NOT EXISTS `posts` (    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,    `category_id` int(10) unsigned NOT NULL,    `title` varchar(100) NOT NULL,    `content` varchar(200) NOT NULL,    `created` datetime NOT NULL,    PRIMARY KEY (`id`),    KEY `category_id` (`category_id`),    KEY `created` (`created`),    KEY `category_id_created` (`category_id`, `created`)    );

  先注意一下每个表的索引情况,以后会用到,记得随便插入一点测试数据,不用太多,但怎么也得两行以上,然后执行以下

SQL:       EXPLAIN SELECT *    FROM posts    LEFT JOIN categories ON posts.category_id = categories.id    WHERE categories.name LIKE foobar%    ORDER BY posts.created DESC

  结果如下所示:

table      key         Extra    categories name        Using where; Using temporary; Using filesort    posts      category_id

  在join查询的explain的结果中,第一行表示的表就是主表。所以说在此查询里categories是主表,而在我们的经验里,LEFT JOIN查询里,左表(posts表)才应该是主表,这产生一个根本的矛盾,MySQL之所以这样处理,是因为在我们的WHERE部分,查询条件是按照categories表的字段来进行筛选的,且categories表刚好存在合适的索引,所以在查询时把categories表作为主表更有利于缩小结果集。

  那explain结果中的Using temporary; Using filesort又是为什么呢,为什么created或category_id_created索引无效呢?这是因为主表是categories表,从表是posts表,而我们使用从表的字段去ORDER BY,这通常不是一个好选择,最好改成主表字段。不过很多时候改不了,那就没招了。

  再看一个比较怪异的例子:

EXPLAIN SELECT *    FROM posts    LEFT JOIN categories ON posts.category_id = categories.id    WHERE categories.id = ‘一个已经存在的ID’    ORDER BY posts.created DESC

  这个例子里posts表仍然是从表,但是按照从表排序的结果却没有出现文件排序和临时表,这是因为已经确定了categories.id,所以主表相当于一个只有一行数据的常量表了,从表根据category_id_created索引在连接的同时自然就得到排序后的结果。但换个角度看,既然categories.id都是确定的了,那类似这样的需求,我们一般就不会再使用LEFT JOIN查询了,而会分成两个独立的查询去检索categories和posts才对。

  主观上一旦搞错了主表,可能怎么调整索引都得不到高效的SQL,所以在写SQL时,比如说在写MySQL左连接查询时,如果希望左表是主表,那么就要保证在WHERE语句里的查询条件尽可能多的使用左表字段,进而,一旦确定了主表,也最好只通过主表字段去ORDER BY。

关于mysql中如何使用左链接查询问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mysql中如何使用左链接查询

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL如何在查询中使用子查询

MySQL中可以在查询中使用子查询来实现更复杂的查询逻辑。子查询是一个嵌套在主查询中的查询语句,通常用于获取主查询中某些条件的结果,然后再根据这些结果进行主查询的筛选或其他操作。以下是一个简单的例子,演示如何在MySQL中使用子查询:假
MySQL如何在查询中使用子查询
2024-03-06

Mysql中如何使用时间查询

这篇文章主要介绍了Mysql中如何使用时间查询的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Mysql中如何使用时间查询文章都会有所收获,下面我们一起来看看吧。一、使用等号查询可以像普通查询使用等号进行查询,但
2023-03-20

thinkphp如何进行多表链接查询

本篇内容主要讲解“thinkphp如何进行多表链接查询”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“thinkphp如何进行多表链接查询”吧!首先,我们需要了解ThinkPHP中多表链接查询语句
2023-07-05

如何在mysql中使用关联查询

本篇文章为大家展示了如何在mysql中使用关联查询,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、确保ON和USING字句中的列上有索引。在创建索引的时候就要考虑到关联的顺序。当表A和表B用列c关
2023-06-15

mysql如何让左模糊查询也能走索引

目录让左模糊查询也能走索引测试表USER_INFO表数据以及结构如下有一个USER_NAME字段的索引模糊查询(like、instr)1. like2. instr3. A>=’’ and A<’&rsq
2022-11-21

MySQL如何在查询中使用通配符

MySQL中可以使用通配符来进行模糊查询,常用的通配符有%和_。%匹配任意多个字符,可以出现在字符串的任意位置。_匹配单个字符,可以出现在字符串的任意位置。例如,如果要查找所有以A开头的记录,可以使用以下SQL语句:SELECT * F
MySQL如何在查询中使用通配符
2024-03-06

MySQL如何在查询中使用CASE语句

在MySQL中,可以使用CASE语句在查询中根据条件进行判断并返回不同的值。语法如下:SELECT CASEWHEN condition1 THEN value1WHEN condition2 THEN value2ELSE defaul
MySQL如何在查询中使用CASE语句
2024-04-09

如何在 Golang 中使用关联查询连接表?

关联查询连接表通过 sql 查询结合多个表中的数据。在 golang 中,使用 sql.db.query() 函数,指定查询字符串和参数。可以使用不同的关联类型,如 inner join、left join、right join 和 ful
如何在 Golang 中使用关联查询连接表?
2024-05-14

Ubuntu中如何使用VNC链接GNOME

本文小编为大家详细介绍“Ubuntu中如何使用VNC链接GNOME”,内容详细,步骤清晰,细节处理妥当,希望这篇“Ubuntu中如何使用VNC链接GNOME”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。VNC是虚
2023-06-27

编程热搜

目录