mysql查询sql总结
连表查询
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 详解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现