暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql技能-mysqljoin结合查询实例精讲_web开发网_MySQL

原创 百分 2023-12-01
158

mysql技能-mysqljoin结合查询实例精讲_web开发网_MySQL

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

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

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

        讲MySQLJoin语法前还是先回顾一下联结的语法

        MYSQL规范中规划的Join联结大致分为下面四种:

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

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

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

        右联结AB表的结果和左联结BA结果是一样的也就是说:

        SelectA.nameB.nameFromALeftJoinBOnA.id=B.id

        和SelectA.nameB.nameFromBRightJoinAonB.id=A .id执行后的结果是一样的

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

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

        表A

        IDName

        1Tim

        2Jimmy

        3John

        4Tom

        表B

        IDHobby

        1Football

        2Basketball

        2Tennis

        4Soccer

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

        1.内联结:

        SelectA.NameB.HobbifromA,BwhereA.id=B.id这是隐式的内联结,查询的结果是

        NameHobby

        TimFootball

        JimmiBasketball

        JimmiTennis

        TomSoccer

        作用和 SelectA.NamefromAINNERJOINBONA.id=B.id一样的这里的INNERJOIN换成CROSSJOIN也是可以的

        2.外左联结

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

        NameHobby

        TimFootball

        JimmiBasketbalTennis

        John

        TomSoccer

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

        3.外右联结

        如果把上面查询改成外右联结:SelectA.NamefromARightJOINBONA.id=B.id则结果将会是

        NameHobby

        TimFootball

        JimmiBasketball

        JimmiTennis

        TomSoccer

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

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

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

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

        aLEFTJOINbUSINGc1,c2,c3其作用相当于下面语句

        aLEFTJOINbONa.c1=b.c1ANDa.c2=b.c2ANDa.c3=b.c3

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

        2.NA TURA L[LEFT]JOIN这个句子的作用相当于INNERJOIN或者是USING子句中包含了联结的表中所有字段的LeftJOIN左联结)

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

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

        SELECTt1.id,t2.id,t3.id

        FROMt1,t2

        LEFTJOINt3ONt3.id=t1.id

        WHEREt1.id=t2.id;

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

        SELECTt1.id,t2.id,t3.id

        FROMt1,t2LEFTJOINt3ONt3.id=t1.id

        WHEREt1.id=t2.id;

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

        SELECTt1.id,t2.id,t3.id

        FROMt1,t2

        LEFTJOINt3ONt3.id=t1.id

        WHEREt1.id=t2.id;

        这里括号是相当重要的因此以后在写这样的查询的时候我不要忘记了多写几个括号,至少这样能防止很多过失(因为这样的过失是很难被开发人员发现的

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论