mysql查询sql总结

连表查询

一文搞定MySQL多表查询中的表连接(join)

SELECT
	a.id ,
	b.server_id 
from
	release_record as a
	JOIN release_details as b
	on a.id =b.release_id 

解析:
连表查询的意思是,from后跟的表a为左表,join后面跟的表b为右表,on是条件,选择一张表作为驱动表去对比另外一张表,把满足条件的内容查出来,select字段表示要展示的字段。

  • 内连接
    [inner] join,选择一张表作为驱动表(具体选择哪张表会根据on和where的条件根据最优索引去选择)去对比另外一张表,假设在b表中有满足条件的数据就将连表查出来。select字段表示要展示的字段。假设select的字段和on where的字段都是索引,在查询的时候就不会回表,直接从索引里面吧数据查出来。

  • 左连接
    left join 以左表为驱动表。去对比另外一张表,假设在b表中有满足条件的数据就将连表查出来 再加上 b表中不满足条件的已null展示。

  • 右连接
    right join理论同左连接

  • 加上where条件
    把连表查询之后的数据再过滤一遍。

但是在实际执行当中,where的条件也会作为条件来选择驱动表 和 最佳索引。不仅仅是先连表查询再根据where条件过滤,表面上的现象是可以这么理解的。

MySQL中将多行查询结果合并为一行展示SQL语句书写

  • CONCAT()

  • CONCAT_WS()

  • GROUP_CONCAT()

    比如release_id等于5在b表中有两条记录,GROUP_CONCAT()将b.name合并展示。

    这里要用group by 将aaa字段分组,即以aaa字段为依据,将aaa的值相同的合并为一个,剩下的字段通过GROUP_CONCAT()合并展示。
    理解可参考看一遍就理解:group by 详解

posted @ 2023-01-31 16:25  清哥哥  阅读(83)  评论(0编辑  收藏  举报