MySQL中多表连接的示例分析
这篇文章主要介绍MySQL中多表连接的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
连接可用于查询,更新,建立事实外键(指人为建立的两张表的对应关系,相对的,FORGIEN KEY也称物理外键)
表的连接实质就是外键的逆向约束
连接条件
使用ON设定连接条件,也可以用WHERE代替.
一般情况下
ON:设定连接条件
WHERE:进行结果集记录的过滤
没有条件的JOIN内连接实质就是笛卡尔积
[INNER] JOIN 内连接
在MySQL中,JOIN, CROSS JOIN 和 INNER JOIN 是等价的。
内连接表示交集,仅显示A、B两表符合连接条件的记录。不符合连接条件的记录不显示。
SELECTgoods_id,goods_name,cate_nameFROMtdb_goodsINNERJOINtdb_goods_cateONtdb_goods.cate_id=tdb_goods_cate.cate_id;
使用内连接进行多表更新操作:
--将tdb_goods表中用中文存储的goods_cate修改为tdb_goods_cates表中对应的cate_id,以节省空间UPDATEtdb_goodsINNERJOINtdb_goods_catesONgoods_cate=cate_nameSETgoods_cate=cate_id;--tdb_goods想要更改的表名--tdb_goods_cates关联的附表--goods_cate=cate_name两个表对应列的关系--goods_cate=cate_id;设置值
外连接
内连接比外连接用的多一些.
若某字段只存在某一表,则另一表的里字段返回 NULL
LEFT [OUTER] JOIN 左外连接
显示左表的全部记录及右表符合连接条件的记录。
如果使用LEFT JOIN,左表中存在一条记录A,在右表中没有找到相应的记录,则返回结果会出现一条只有记录A中的相应字段内容,其他字段都为NULL的记录(RIGHT JOIN类似).
RIGHT [OUTER] JOIN 右外连接
显示右表的全部记录及左表符合连接条件的记录。
多表连接
跟两张表的连接类似
如三张表的连接:
SELECTgoods_id,goods_name,b.cate_name,c.brand_name,goods_priceFROMproductsASaINNERJOINproducts_cateASbONa.goods_cate=b.cate_idINNERJOINproducts_brandAScONa.brand_name=c.brand_id;
自连接
设计无限分类数据表
在同一张表中既有父类,又有子类,本质上是一棵树:
可以通过对同一张数据表的自身连接来进行查询:
--查找显示父类id对应的名称SELECTs.type_id,s.type_name,p.type_nameASparent_nameFROMtdb_goods_typesASsLEFTJOINtdb_goods_typesASpONs.parent_id=p.type_id;--查找子类id对应的名称SELECTp.type_id,p.type_name,s.type_nameASchild_nameFROMtdb_goods_typesASpLEFTJOINtdb_goods_typesASsONp.type_id=s.parent_id;--查找有多少子级SELECTp.type_id,p.type_name,COUNT(s.type_name)ASchild_countFROMtdb_goods_typesASpLEFTJOINtdb_goods_typesASsONp.type_id=s.parent_idGROUPBYp.type_nameORDERBYp.type_id;
多表查询并删除
这里用自连接模拟两张表,删除该表中的重复项,保留goods_id 较小的记录.
DELETEt1FROMtdb_goodsASt1LEFTJOIN(--选出goods_name重复的记录SELECTgoods_id,goods_nameFROMtdb_goodsGROUPBYgoods_name--MySQL5.7.5以上版本启用了only_full_group_bySQL模式,select的列都要在group中,或者本身是聚合列(SUM,AVG,MAX,MIN)才行,这里没有启用HAVINGCOUNT(goods_name)>=2)ASt2--将t1与t2进行左连接,其实这里内连接和右连接也行ONt1.goods_name=t2.goods_name--t1和t2的连接条件WHEREt1.goods_id>t2.goods_id;--在LEFTJOIN结果集中,选出满足t1.goods_id>t2.goods_id的记录
以上是“MySQL中多表连接的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。