• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MySQL多表连接的入门实例教程

    连接可用于查询,更新,建立事实外键(指人为建立的两张表的对应关系,相对的,FORGIEN KEY也称物理外键)

    表的连接实质就是外键的逆向约束

    连接条件

    使用ON设定连接条件,也可以用WHERE代替.

    一般情况下

    没有条件的JOIN内连接实质就是笛卡尔积

    [INNER] JOIN 内连接

    在MySQL中,JOIN, CROSS JOIN 和 INNER JOIN 是等价的。

    内连接表示交集,仅显示A、B两表符合连接条件的记录。不符合连接条件的记录不显示。

    SELECT goods_id,goods_name,cate_name 
    FROM tdb_goods 
    INNER JOIN tdb_goods_cate 
    ON tdb_goods.cate_id = tdb_goods_cate.cate_id;

    使用内连接进行多表更新操作:

    --将tdb_goods表中用中文存储的goods_cate修改为tdb_goods_cates表中对应的cate_id,以节省空间
    UPDATE tdb_goods 
    INNER JOIN tdb_goods_cates
    ON goods_cate=cate_name 
    SET goods_cate=cate_id;
    --tdb_goods 想要更改的表名
    --tdb_goods_cates 关联的附表
    --goods_cate=cate_name 两个表对应列的关系
    --goods_cate=cate_id; 设置 值

    外连接

    内连接比外连接用的多一些.

    若某字段只存在某一表,则另一表的里字段返回 NULL

    LEFT [OUTER] JOIN 左外连接

    显示左表的全部记录及右表符合连接条件的记录。

    RIGHT [OUTER] JOIN 右外连接

    显示右表的全部记录及左表符合连接条件的记录。

    多表连接

    跟两张表的连接类似

    如三张表的连接:

    SELECT goods_id,goods_name,b.cate_name,c.brand_name,goods_price
    FROM products AS a 
    INNER JOIN products_cate AS b 
    ON a.goods_cate = b.cate_id
    INNER JOIN products_brand AS c 
    ON a.brand_name = c.brand_id;

    自连接

    设计无限分类数据表

    在同一张表中既有父类,又有子类,本质上是一棵树:

    可以通过对同一张数据表的自身连接来进行查询:

    --查找显示父类id对应的名称
    SELECT s.type_id,s.type_name,p.type_name AS parent_name
    FROM tdb_goods_types AS s 
    LEFT JOIN tdb_goods_types AS p 
    ON s.parent_id=p.type_id;
    
    --查找子类id对应的名称
    SELECT p.type_id,p.type_name,s.type_name AS child_name
    FROM tdb_goods_types AS p
    LEFT JOIN tdb_goods_types AS s
    ON p.type_id=s.parent_id;
    
    --查找有多少子级
    SELECT p.type_id,p.type_name,COUNT(s.type_name) AS child_count
    FROM tdb_goods_types AS p
    LEFT JOIN tdb_goods_types AS s
    ON p.type_id=s.parent_id 
    GROUP BY p.type_name
    ORDER BY p.type_id;

    多表查询并删除

    这里用自连接模拟两张表,删除该表中的重复项,保留goods_id 较小的记录.

    DELETE t1 
    FROM tdb_goods AS t1 
    LEFT JOIN( --选出goods_name重复的记录
     SELECT goods_id,goods_name 
     FROM tdb_goods 
     GROUP BY goods_name --MySQL 5.7.5以上版本启用了only_full_group_by SQL模式,select的列都要在group中,或者本身是聚合列(SUM,AVG,MAX,MIN)才行,这里没有启用
     HAVING COUNT(goods_name)>=2) 
    AS t2 --将t1与t2进行左连接,其实这里内连接和右连接也行
    ON t1.goods_name=t2.goods_name --t1和t2的连接条件
    WHERE t1.goods_id>t2.goods_id; --在LEFT JOIN结果集中,选出满足t1.goods_id>t2.goods_id的记录

    为帮助理解,LEFT JOIN的结果为:

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

    您可能感兴趣的文章:
    • 浅谈Mysql多表连接查询的执行细节
    • mysql多表连接查询实例讲解
    • mysql delete 多表连接删除功能
    • MySQL中基本的多表连接查询教程
    • MySQL多表连接查询详解
    上一篇:MySql5.x升级MySql8.x的方法步骤
    下一篇:mysql存储过程之游标(DECLARE)原理与用法详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MySQL多表连接的入门实例教程 MySQL,多表,连接,的,入门,