mysql查询sql总结
连表查询
[一文搞定MySQL多表查询中的表连接(join)]( https://cloud.tencent.com/developer/article/1838507#:~:text=两表连接查询: 使用 ON 条件对两表进行连接形成一张虚拟结果集;然后根据 ,WHERE%20%E6%9D%A1%E4%BB%B6%E8%BF%87%E6%BB%A4%E7%BB%93%E6%9E%9C%E9%9B%86%E4%B8%AD%E7%9A%84%E8%AE%B0%E5%BD%95%EF%BC%8C%E5%86%8D%E6%A0%B9%E6%8D%AE%20SELECT%20%E6%8C%87%E5%AE%9A%E7%9A%84%E5%88%97%E8%BF%94%E5%9B%9E%E6%9F%A5%E8%AF%A2%E7%BB%93%E6%9E%9C%E3%80%82)
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 详解

浙公网安备 33010602011771号