MySQL 三种关联查询的方式: ON vs USING vs 传统风格

VS2010 MFC连接MySQL数据库实现数据插入完整教程 在现代企业级应用开发中,将可视化界面框架与高效数据库系统进行深度融合已成为主流趋势。Visual Studio 2010中的MFC(Microsoft Foundation Classes)作为Windows平台下经典的C++开发框架,具备强大的GUI构建能力;而MySQL作为一种广泛使用的开源关系型数据库,以其稳定性、灵活性和高性能著称。 阅读详情
看看下面三个关联查询的 SQL 语句有何区别?

SELECT * FROM film JOIN film_actor ON (film.film_id = film_actor.film_id)
SELECT * FROM film JOIN film_actor USING (film_id)
SELECT * FROM film, film_actor WHERE film.film_id = film_actor.film_id
最大的不同更多是语法糖,但有一些有意思的东西值得关注。

为了方便区别,我们将前两种写法称作是 ANSI 风格,第三种称为 Theta 风格。

Theta 风格
在 FROM 短语中列出了关联的表名,而 WHERE 短语则指定如何关联。

这种写法被认为是古老的方式,有些时候比较难以理解,请看下面查询:

SELECT * FROM film, film_actor WHERE film.film_id = film_actor.film_id AND actor_id = 17 AND film.length > 120
上述查询列出片长超过 120 分钟的电影,其中包括演员编号是 17 的条件。别在意查询结果,查询本身如何呢?WHERE 表达式中包含三个条件,要看出哪个条件是关联,哪个条件是过滤还是稍费点事的。不过还是相对简单的,但如果是 5 个表,20 多个条件呢?

ANSI 风格: ON
使用 JOIN ... ON 可以将表关联的条件和记录过滤条件分开,将上面的语句重写后的结果如下:

SELECT * FROM film JOIN film_actor ON (film.film_id = film_actor.film_id) WHERE actor_id = 17 AND film.length > 120
看起来清晰许多。

注意: ON 语句中的括号不是必须的,我个人喜欢这样写而已。

ANSI 风格: USING
有一种特殊情况,当两个要关联表的字段名是一样的,我们可以使用  USING ,可减少 SQL 语句的长度:

SELECT * FROM film JOIN film_actor USING (film_id) WHERE actor_id = 17 AND film.length > 120
这个时候括号就是必须的了。这种写法很好,输入更少的单词,查询的性能也非常棒,但还需要注意一些差异。

USING 和 ON
下面语句是可行的:

SELECT film.title, film_id FROM film JOIN film_actor USING (film_id) WHERE actor_id = 17 AND film.length > 120;
但下面这个就不行:

SELECT film.title, film_id FROM film JOIN film_actor ON (film.film_id = film_actor.film_id) WHERE actor_id = 17 AND film.length > 120;ERROR 1052 (23000): Column 'film_id' in field list is ambiguous
因为 USING "知道" film_id 字段在两个表中都有,所以没有指定确切的表都没关系,两个值必须一致就是。

ON 就没那么智能,你必须指明要关联的表和字段名。

上面两个实际的结果是比较有趣的,当使用 USING 时,字段只在结果中出现一次:

SELECT * FROM film JOIN film_actor USING (film_id) WHERE actor_id = 17 AND film.length > 120 LIMIT 1\G
*************************** 1. row ***************************
             film_id: 96
               title: BREAKING HOME
         description: A Beautiful Display of a Secret Agent And a Monkey who must Battle a Sumo Wrestler in An Abandoned Mine Shaft
        release_year: 2006
         language_id: 1
original_language_id: NULL
     rental_duration: 4
         rental_rate: 2.99
              length: 169
    replacement_cost: 21.99
              rating: PG-13
    special_features: Trailers,Commentaries
         last_update: 2006-02-15 05:03:42
            actor_id: 17
         last_update: 2006-02-15 05:05:03
而使用 ON 时,字段就会出现两次:

SELECT * FROM film JOIN film_actor ON film.film_id = film_actor.film_id WHERE actor_id = 17 AND film.length > 120 LIMIT 1\G
*************************** 1. row ***************************
             film_id: 96
               title: BREAKING HOME
         description: A Beautiful Display of a Secret Agent And a Monkey who must Battle a Sumo Wrestler in An Abandoned Mine Shaft
        release_year: 2006
         language_id: 1
original_language_id: NULL
     rental_duration: 4
         rental_rate: 2.99
              length: 169
    replacement_cost: 21.99
              rating: PG-13
    special_features: Trailers,Commentaries
         last_update: 2006-02-15 05:03:42
            actor_id: 17
             film_id: 96
         last_update: 2006-02-15 05:05:03
幕后
MySQL 对两者的处理方式是相同的,使用 EXPLAIN EXTENDED 我们可以看到:

EXPLAIN EXTENDED SELECT film.title, film_id FROM film JOIN film_actor USING (film_id) WHERE actor_id = 17 AND film.length > 120\G
*************************** 1. row ***************************
...
2 rows in set, 1 warning (0.00 sec)

root@mysql-5.1.51> SHOW WARNINGS\G
*************************** 1. row ***************************
  Level: Note
   Code: 1003
Message: select `sakila`.`film`.`title` AS `title`,`sakila`.`film`.`film_id` AS `film_id` 
         from `sakila`.`film` join `sakila`.`film_actor` 
         where (
                 (`sakila`.`film`.`film_id` = `sakila`.`film_actor`.`film_id`) 
                 and (`sakila`.`film_actor`.`actor_id` = 17) 
                 and (`sakila`.`film`.`length` > 120)
               )
最终所有的查询都被转成了 Theta 风格。

译者:就是说这三种方式除了写法不同外,没什么区别。
Python爬虫实战:利用最新技术爬取抖音话题挑战视频 本文将详细介绍如何使用Python最新技术栈构建一个高效的抖音话题挑战视频爬虫。我们将从环境配置开始,逐步讲解请求模拟、数据解析、反反爬策略、数据存储等关键环节,并提供完整的代码实现。本文适合有一定Python基础的开发者学习高级网络爬虫技术。关键词:Python爬虫、抖音API、话题挑战、视频爬取、反反爬本文详细介绍了如何使用Python最新技术栈构建抖音话题挑战视频爬虫。我们从基础请求开始,逐步实现了数据解析、反反爬策略、数据存储等核心功能,并探讨了分布式和增量爬取等高级主题。更智能的反反爬策略。 阅读详情

相关推荐

微信小程序后台定位与实时位置更新的实战指南

本文提供了微信小程序实现后台定位与实时位置更新的完整实战指南。针对小程序退到后台后位置更新中断的痛点,详细解析了基于`startLocationUpdateBackground`API的后台定位解决方案。内容涵盖从隐私协议配置、项目权限声明,到授权、启动、监听、停止的核心代码流程,并分享了真机调试、性能优化及权限引导等关键避坑经验,帮助开发者构建稳定可靠的后台位置服务。

weixin_29008055的博客 468

mysql中on用法_详解mysql中的Using与On的用法

多用才可以体会各个关键字的用法啊。。。在用Join进行多表联合查询时,我们通常使用On来建立两个表的关系。其实还有一个更方便的关键字,那就是Using。那么这两个关键字在使用上有啥区别呢?往下看。假设有如下两张表:mysql> select * from pets;+---------+---------+--------+-----------+| pets_id | animal| ...

weixin_32746239的博客 3706

避坑指南:Qt无边框窗口拖动+阴影效果这些细节要注意

本文深入探讨了Qt无边框窗口开发中实现流畅拖动与阴影效果的关键细节与常见陷阱。针对高DPI屏幕适配、阴影闪烁、拖动卡顿及多显示器兼容性等核心难题,提供了从QGraphicsDropShadowEffect原理剖析到手动绘制优化、坐标系统精准处理及平台原生事件拦截的实战解决方案,帮助开发者构建稳定、美观的商业级应用界面。

weixin_27943395的博客 479

MySQL-几种关联

左表t1: DROP TABLE IF EXISTS t1; CREATE TABLE t1 (id INT NOT NULL,NAME VARCHAR(20)); INSERT INTO t1 VALUES (1,'t1a'); INSERT INTO t1 VALUES (2,'t1b'); INSERT INTO t1 VALUES (3,'t1c'); INSERT INT...

weixin_33840661的博客 1474

Hypermesh到Abaqus CEL网格转换全攻略:解决欧拉体导入难题

本文详细解析了Hypermesh到Abaqus CEL网格转换的全流程,重点解决欧拉体导入难题。通过单元类型转换、INP文件编辑和多组件合并技术,实现流固耦合仿真的高效前处理。文章包含实用脚本和工程案例,帮助工程师突破ABAQUS CEL分析中的网格转换瓶颈。

weixin_30832143的博客 191

机器学习算法 —— LightGBM

本次我们选择英雄联盟数据集进行LightGBM的场景体验。英雄联盟是2009年美国拳头游戏开发的MOBA竞技网游,在每局比赛中蓝队与红队在同一个地图进行作战,游戏的目标是破坏敌方队伍的防御塔,进而摧毁敌方的水晶枢纽,拿下比赛的胜利。现在共有9881场英雄联盟韩服钻石段位以上的排位比赛数据,数据提供了在十分钟时的游戏状态,包括击杀数、死亡数、金币数量、经验值、等级……参考项目:机器学习系列入门系列[七]:基于英雄联盟数据集的LightGBM的分类预测。

ZShiJ的博客 708

详解mysql中的Using与On的用法

多用才可以体会各个关键字的用法啊。。。 原文来自【http://bbs.php100.com/read-htm-tid-148469.html】 在用Join进行多表联合查询时,我们通常使用On来建立两个表的关系。其实还有一个更方便的关键字,那就是Using。那么这两个关键字在使用上有啥区别呢?往下看。假设有如下两张表: mysql> sel...

weixin_34029949的博客 817

YOLOv11改进,YOLOv11添加DCNv4可变性卷积(windows系统成功编译),二次创新C3k2结构,全网最详细教程

引入了可变形卷积 v4 (DCNv4),这是一种为广泛视觉应用设计的高效且有效的操作算子。DCNv4通过两项关键增强解决了其前身DCNv3的局限性:1. 移除空间聚合中的softmax归一化,以增强其动态特性和表达能力;2. 优化内存访问以最小化冗余操作,从而加速计算。这些改进使得DCNv4相比DCNv3显著加快了收敛速度,并且处理速度大幅提升,前向传播速度超过三倍。DCNv4在多个任务中表现出色,包括图像分类、实例和语义分割,特别是在图像生成方面表现突出。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2665

mysql using与on_详解mysql中的Using与On的用法

多用才可以体会各个关键字的用法啊。。。在用Join进行多表联合查询时,我们通常使用On来建立两个表的关系。其实还有一个更方便的关键字,那就是Using。那么这两个关键字在使用上有啥区别呢?往下看。假设有如下两张表:mysql> select * from pets;+---------+---------+--------+-----------+| pets_id | animal| ...

weixin_39939601的博客 469

【软考高项论文】论信息系统项目管理的干系人绩效域

例如,在处理与电信运营商合作铺设光纤网络的问题时,考虑到其在通信设施建设和运维方面的专业性和重要性,我们将之定位为高权力高利益的干系人,给予了高度关注和优先沟通。项目全程,我们对干系人绩效域的执行效果进行了定期检查和评估,通过定量与定性的数据收集,确认了项目在干系人管理上的成效,具体表现为:建立了稳固的工作关系网络,使干系人普遍认可项目目标;鉴于本项目牵涉到政府各级部门、企事业单位、市民团体、技术研发伙伴等多种类型的干系人,且干系人的诉求和影响力各异,因此,有序且持续的干系人参与管理显得尤为关键。

Programming Talk 1681

【原创教程】AB上位机FactoryTalk View的使用教程

条形图主要的作用就是根据绑定的变量中数字大小的变化来反映到图形中,随着数字的增加填充的颜色不断上升或随着数字的减小填充的颜色不断下降。绘图功能中常用的功能主要是:数字输入,数字输出,字符输入,字符输出,各种类型的的按钮,条状图,各类控件,系统自带的图形库。颜色指的是根据PLC变量的变化来改变图形的颜色,可以绑定BOOL量来显示两种颜色,也可以绑定字节,字,双字等来显示多种颜色。打开软件后右键点击画面选项然后点击新建则新建出一个画面,画面画好后点击保存并更改标题后新建的画面则会出现在画面选项的文件夹下。

Qinmingyue13的博客 4676

MySQL关联查询不加using_MySQL 三种关联查询的方式: ON vs USING vs 传统风格

看看下面三个关联查询的 SQL 语句有何区别?SELECT * FROM film JOIN film_actor ON (film.film_id = film_actor.film_id)SELECT * FROM film JOIN film_actor USING (film_id)SELECT * FROM film, film_actor WHERE film.film_id = fi...

weixin_29322553的博客 147

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

mysql关联查询不带on_MySQL 三种关联查询的方式: ON vs USING vs 传统风格

看看下面三个关联查询的 SQL 语句有何区别?1SELECT*FROMfilmJOINfilm_actorON(film.film_id = film_actor.film_id)2SELECT*FROMfilmJOINfilm_actor USING (film_id)3SELECT*FROMfilm, film_actorWHEREfilm.film_id =...

weixin_42612405的博客 820

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

mysql 原理

MySQL 三种关联查询的方式: ON vs USING vs 传统风格 [url]http://www.oschina.net/question/12_60726[/url] MySQL索引背后的数据结构及算法原理 [url]http://blog.jobbole.com/24006/[/url] MySQL索引背后的数据结构及算法原理 [url]http://www....

... 202

Chroma vs 传统数据库:向量搜索如何重塑数据查询体验

本文对比了Chroma向量数据库与传统数据库在技术架构、查询范式和性能表现上的差异,揭示了向量搜索如何通过语义理解和大规模数据处理能力重塑数据查询体验。Chroma凭借其高效的近似最近邻搜索算法和智能分层存储策略,在电商推荐、知识管理等场景中展现出显著优势。

7z8x2c4v6b9的博客 175

Wiki.js vs 传统Wiki:AI重构知识管理新范式

的AI辅助,不仅能一键部署完整的Wiki.js环境,更获得了传统开发难以实现的智能功能。但传统Wiki系统的搭建过程往往让人望而却步——直到我最近尝试用Wiki.js配合AI生成代码,才发现知识管理的效率可以提升这么多。生成的代码量仅有传统方式的1/5,且自动配置好了优化过的数据库索引。:相同服务器配置下,AI生成的Wiki.js在100并发请求时,平均响应时间比传统方案快3倍,内存占用减少60%。:为不同部门设置编辑权限时,需要手动维护用户-角色-文档的关联关系,每次变更都要修改代码并重启服务。

BlackStone33的博客 370

Python中SQLAlchemy的全面学习:增删改查与表关联应用详解

定义与文章表的关联关系(反向关系)user_id = Column(Integer, ForeignKey('users.id')) # 外键关联到 User 表# 定义与用户表的关联关系(正向关系)SQLAlchemy 提供了强大而灵活的 ORM 功能,使我们能够以简洁、直观的方式进行数据库操作。如何定义模型类并创建数据库表;如何执行基本的 CRUD 操作;如何处理一对一、一对多、多对多等复杂的表关联关系;一些高级技巧,如事务管理、上下文管理器、复杂查询等。

Capricious1的博客 775

【GEO】向量数据库 vs. 传统数据库:互联网时代与AI时代的数据对决​

→ 只能找到标题含关键词的SKU,漏掉“夏装”“度假风长裙”等语义相近商品。→ 返回“碎花长裙”“海边度假装”等语义相关商品,转化率提升30%现在:优化商品描述的语义丰富度(如“法式慵懒风+咖啡厅拍照神器”)现在:基于行为向量自动发现“凌晨刷测评的理性购买者”等隐藏群体。​:AI时代需要理解图片、文本语义,向量数据库成新基建。向量相似度搜索(如“找与这张图风格相似的商品”)——从“精确匹配”到“语义理解”的范式迁移。关键词精确匹配(如“订单号=12345”)向量数据库并非要取代传统数据库,而是​。

Baixue5209的博客 1874

【MySql】杂记

1.mysqldump常用于MySQL数据库逻辑备份。 二进制日志文件 中提供了执行mysqldump之后对数据库的更改进行复制所需要的信息。2.要显示存储过程传出的值,需要使用show关键字3.MySQL数据类型-decimal 对于精度比较高的东西,比如money,我会用decimal类型,不会考虑float,double,因为他们容易产生误差,numeric和decimal同义,numer

qq523786283的博客 523

Jimmer vs 传统ORM:开发效率对比实验

这次对比验证了Jimmer在开发效率上的显著优势,特别适合需要快速迭代的业务系统。虽然它可能不适合所有场景,但在我们的电商案例中确实节省了近60%的开发时间。顺便提一下,这个实验的测试环境是在InsCode(快马)平台上搭建的,一键部署的功能让不同框架的对比测试变得非常便捷,省去了配置本地环境的麻烦。平台内置的Java模板和在线编辑器也让代码编写和测试过程流畅了许多。

GoldEagle19的博客 316

APIJSON终极教程:零代码打造全功能RESTful接口的完整指南

🚀 **APIJSON** 是腾讯开源的一款革命性 JSON 网络传输协议和 ORM 库,能够实现**后端接口和文档零代码**,让前端可以**定制任何数据、任何结构**。这是一个真正意义上的"所见即所得"的API开发框架!✨ 在传统的API开发中,前后端需要不断沟通接口规范、编写文档、调试接口...而 APIJSON 彻底改变了这一切!它提供了完全自动化的万能通用接口,零代码实时满足千变万化的

gitblog_00767的博客 917
上一篇: 一直处于网页中间的滚动广告
下一篇: mysql各种查询包括连接查询
HackProgramer
博客等级 码龄12年 255粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值