首页 数据库 mysql教程 mysql技巧-mysql(join)联合查询实例精讲_web开发网_MySQL

mysql技巧-mysql(join)联合查询实例精讲_web开发网_MySQL

Jun 01, 2016 pm 01:48 PM
mysql 技巧 查询 知识 资料

bitsCN.com

 

  今天遇到mysql联合多表查询 无从下手 有些知识好久没用了忘记了 所以就边网上找mysql联合查询的相关资料 然后总结出以下内容 希望web开发网的行为能能大家进行php学习带来帮助 在讲MySQL的J

  今天遇到mysql联合多表查询 无从下手 有些知识好久没用了忘记了 所以就边网上找mysql联合查询的相关资料 然后总结出以下内容

  希望web开发网的行为能能大家进行php学习带来帮助

  在讲MySQL的Join语法前还是先回顾一下联结的语法

  在MYSQL标准中规划的(Join)联结大致分为下面四种:

  1. 内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结。

  2. 外联结:分为外左联结和外右联结。

  左联结A、B表的意思就是将表A中的全部记录和表B中联结的字段与表A的联结字段符合联结条件的那些记录形成的记录集的联结,这里注意的是最后出来的记录集会包括表A的全部记录。

  右联结A、B表的结果和左联结B、A的结果是一样的,也就是说:

  Select A.name B.name From A Left Join B On A.id=B.id

  和Select A.name B.name From B Right Join A onB.id=A.id执行后的结果是一样的。

  3.全联结:将两个表中存在联结关系的字段的所有记录取出形成记录集的联结(这个不需要记忆,只要是查询中提到了的表的字段都会取出,无论是否符合联结条件,因此意义不大)。

  实例讲解MySQL联合查询.那下面就具体讲讲简单的JOIN的用法了。首先我们假设有2个表A和B,他们的表结构和字段分别为:

  表A:

  ID Name

  1 Tim

  2 Jimmy

  3 John

  4 Tom

  表B:

  ID Hobby

  1 Football

  2 Basketball

  2 Tennis

  4 Soccer

  ======www.iiwnet.com=========

  1. 内联结:

  Select A.Name B.Hobby from A, B where A.id = B.id,这是隐式的内联结,查询的结果是:

  Name Hobby

  Tim Football

  Jimmy Basketball

  Jimmy Tennis

  Tom Soccer

  它的作用和 Select A.Name from A INNER JOIN B ON A.id =B.id是一样的。这里的INNER JOIN换成CROSS JOIN也是可以的。

  2. 外左联结

  Select A.Name from A Left JOIN B ON A.id =B.id,典型的外左联结,这样查询得到的结果将会是保留所有A表中联结字段的记录,若无与其相对应的B表中的字段记录则留空,结果如下:

  Name Hobby

  Tim Football

  Jimmy Basketball,Tennis

  John

  Tom Soccer

  所以从上面结果看出,因为A表中的John记录的ID没有在B表中有对应ID,因此为空,但Name栏仍有John记录。

  3. 外右联结

  如果把上面查询改成外右联结:Select A.Name from A Right JOIN B ON A.id =B.id,则结果将会是:

  Name Hobby

  Tim Football

  Jimmy Basketball

  Jimmy Tennis

  Tom Soccer

  ======www.iiwnet.com=========

  这样的结果都是我们可以从外左联结的结果中猜到的了。

  说到这里大家是否对联结查询了解多了?这个原本看来高深的概念一下子就理解了,恍然大悟了吧(呵呵,开玩笑了)?最后给大家讲讲MySQL联结查询中的某些参数的作用:

  1.USING(column_list):其作用是为了方便书写联结的多对应关系,大部分情况下USING语句可以用ON语句来代替,如下面例子:

  a LEFT JOIN b USING (c1,c2,c3),其作用相当于下面语句

  a LEFT JOIN b ON a.c1=b.c1 AND a.c2=b.c2 AND a.c3=b.c3

  只是用ON来代替会书写比较麻烦而已。

  2.NATURAL [LEFT] JOIN:这个句子的作用相当于INNERJOIN,或者是在USING子句中包含了联结的表中所有字段的Left JOIN(左联结)。

  3.STRAIGHT_JOIN:由于默认情况下MySQL在进行表的联结的时候会先读入左表,当使用了这个参数后MySQL将会先读入右表,这是个MySQL的内置优化参数,大家应该在特定情况下使用,譬如已经确认右表中的记录数量少,在筛选后能大大提高查询速度。

  最后要说的就是,在MySQL5.0以后,运算顺序得到了重视,所以对多表的联结查询可能会错误以子联结查询的方式进行。譬如你需要进行多表联结,因此你输入了下面的联结查询:

  SELECT t1.id,t2.id,t3.id

  FROM t1,t2

  LEFT JOIN t3ON (t3.id=t1.id)

  WHEREt1.id=t2.id;

  但是MySQL并不是这样执行的,其后台的真正执行方式是下面的语句:

  SELECT t1.id,t2.id,t3.id

  FROMt1,( t2 LEFT JOIN t3 ON(t3.id=t1.id) )

  WHEREt1.id=t2.id;

  这并不是我们想要的效果,所以我们需要这样输入:

  SELECT t1.id,t2.id,t3.id

  FROM(t1,t2)

  LEFT JOIN t3ON (t3.id=t1.id)

  WHEREt1.id=t2.id;

  在这里括号是相当重要的,因此以后在写这样的查询的时候我们不要忘记了多写几个括号,至少这样能避免很多错误(因为这样的错误是很难被开发人员发现的)。

bitsCN.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
2 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PHP 的大数据结构处理技巧 PHP 的大数据结构处理技巧 May 08, 2024 am 10:24 AM

大数据结构处理技巧:分块:分解数据集并分块处理,减少内存消耗。生成器:逐个产生数据项,无需加载整个数据集,适用于无限数据集。流:逐行读取文件或查询结果,适用于大文件或远程数据。外部存储:对于超大数据集,将数据存储在数据库或NoSQL中。

如何在 PHP 中使用 MySQL 备份和还原? 如何在 PHP 中使用 MySQL 备份和还原? Jun 03, 2024 pm 12:19 PM

在PHP中备份和还原MySQL数据库可通过以下步骤实现:备份数据库:使用mysqldump命令转储数据库为SQL文件。还原数据库:使用mysql命令从SQL文件还原数据库。

如何优化 PHP 中的 MySQL 查询性能? 如何优化 PHP 中的 MySQL 查询性能? Jun 03, 2024 pm 08:11 PM

可以通过以下方式优化MySQL查询性能:建立索引,将查找时间从线性复杂度降至对数复杂度。使用PreparedStatements,防止SQL注入并提高查询性能。限制查询结果,减少服务器处理的数据量。优化连接查询,包括使用适当的连接类型、创建索引和考虑使用子查询。分析查询,识别瓶颈;使用缓存,减少数据库负载;优化PHP代码,尽量减少开销。

如何使用 PHP 插入数据到 MySQL 表中? 如何使用 PHP 插入数据到 MySQL 表中? Jun 02, 2024 pm 02:26 PM

如何将数据插入MySQL表中?连接到数据库:使用mysqli建立与数据库的连接。准备SQL查询:编写一个INSERT语句以指定要插入的列和值。执行查询:使用query()方法执行插入查询,如果成功,将输出一条确认消息。

如何在 PHP 中使用 MySQL 存储过程? 如何在 PHP 中使用 MySQL 存储过程? Jun 02, 2024 pm 02:13 PM

要在PHP中使用MySQL存储过程:使用PDO或MySQLi扩展连接到MySQL数据库。准备调用存储过程的语句。执行存储过程。处理结果集(如果存储过程返回结果)。关闭数据库连接。

如何使用 PHP 创建 MySQL 表? 如何使用 PHP 创建 MySQL 表? Jun 04, 2024 pm 01:57 PM

使用PHP创建MySQL表需要以下步骤:连接到数据库。创建数据库(如果不存在)。选择数据库。创建表。执行查询。关闭连接。

如何修复 MySQL 8.4 上的 mysql_native_password 未加载错误 如何修复 MySQL 8.4 上的 mysql_native_password 未加载错误 Dec 09, 2024 am 11:42 AM

MySQL 8.4(截至 2024 年的最新 LTS 版本)中引入的主要变化之一是默认情况下不再启用“MySQL 本机密码”插件。此外,MySQL 9.0完全删除了这个插件。 此更改会影响 PHP 和其他应用程序

oracle数据库和mysql的区别 oracle数据库和mysql的区别 May 10, 2024 am 01:54 AM

Oracle数据库和MySQL都是基于关系模型的数据库,但Oracle在兼容性、可扩展性、数据类型和安全性方面更胜一筹;而MySQL则侧重速度和灵活性,更适合小到中等规模的数据集。①Oracle提供广泛的数据类型,②提供高级安全功能,③适合企业级应用程序;①MySQL支持NoSQL数据类型,②安全性措施较少,③适合小型到中等规模应用程序。

See all articles