搜尋
首頁資料庫mysql教程mysql技巧-mysql(join)联合查询实例精讲_web开发网_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
图文详解mysql架构原理图文详解mysql架构原理May 17, 2022 pm 05:54 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,希望对大家有帮助。

mysql怎么替换换行符mysql怎么替换换行符Apr 18, 2022 pm 03:14 PM

在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

mysql的msi与zip版本有什么区别mysql的msi与zip版本有什么区别May 16, 2022 pm 04:33 PM

mysql的msi与zip版本的区别:1、zip包含的安装程序是一种主动安装,而msi包含的是被installer所用的安装文件以提交请求的方式安装;2、zip是一种数据压缩和文档存储的文件格式,msi是微软格式的安装包。

mysql怎么去掉第一个字符mysql怎么去掉第一个字符May 19, 2022 am 10:21 AM

方法:1、利用right函数,语法为“update 表名 set 指定字段 = right(指定字段, length(指定字段)-1)...”;2、利用substring函数,语法为“select substring(指定字段,2)..”。

mysql怎么将varchar转换为int类型mysql怎么将varchar转换为int类型May 12, 2022 pm 04:51 PM

转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

MySQL复制技术之异步复制和半同步复制MySQL复制技术之异步复制和半同步复制Apr 25, 2022 pm 07:21 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于MySQL复制技术的相关问题,包括了异步复制、半同步复制等等内容,下面一起来看一下,希望对大家有帮助。

带你把MySQL索引吃透了带你把MySQL索引吃透了Apr 22, 2022 am 11:48 AM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql高级篇的一些问题,包括了索引是什么、索引底层实现等等问题,下面一起来看一下,希望对大家有帮助。

mysql怎么判断是否是数字类型mysql怎么判断是否是数字类型May 16, 2022 am 10:09 AM

在mysql中,可以利用REGEXP运算符判断数据是否是数字类型,语法为“String REGEXP '[^0-9.]'”;该运算符是正则表达式的缩写,若数据字符中含有数字时,返回的结果是true,反之返回的结果是false。

See all articles

熱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尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具