SQL JOIN 写法:把多表关联条件写清楚
2026-08-16 07:26 AlfredZhao 阅读(0) 评论(0) 收藏 举报多表查询时,笔者习惯把关联关系放在 JOIN ... ON ... 中,把筛选条件放在 WHERE 中。这样阅读 SQL 时,表与表如何关联、最终筛选什么数据会更直观。
01 | 基础查询字段
SELECT u.username,ai.ai_score,ai.ai_remark,TO_CHAR(ai.update_time, 'YYYY-MM-DD HH24:MI:SS') AS update_time
这里从用户表获取用户名,从 AI 内容表获取分数、备注和更新时间。TO_CHAR 将时间格式化为便于展示的字符串。
02 | 使用 JOIN 关联用户表
FROM t_ai_content ai
JOIN tk_users uON u.user_id = ai.user_id
t_ai_content 使用别名 ai,tk_users 使用别名 u。两张表通过 user_id 关联,因此可以在结果中同时查询用户名和 AI 内容信息。
03 | 多字段关联历史表
JOIN t_history tON t.user_id = ai.user_idAND t.type = ai.typeAND t.week = ai.weekAND t.day = ai.dayAND t.learn_level = ai.learn_level
关联 t_history 时,不能只看用户 ID,还要同时匹配类型、周、天和学习等级。多个条件都写在 ON 后,明确表示这些字段共同决定两条记录是否对应。
04 | 用 WHERE 做时间筛选
WHERE update_time > sysdate - 1/24/4
该条件筛选最近一段时间更新的数据。完整 SQL 如下:
SELECT u.username,ai.ai_score,ai.ai_remark,TO_CHAR(ai.update_time, 'YYYY-MM-DD HH24:MI:SS') AS update_time
FROM t_ai_content ai
JOIN tk_users uON u.user_id = ai.user_id
JOIN t_history tON t.user_id = ai.user_idAND t.type = ai.typeAND t.week = ai.weekAND t.day = ai.dayAND t.learn_level = ai.learn_level
where update_time > sysdate - 1/24/4
关注我,和AI一起成长~
AlfredZhao©版权所有「从Oracle起航,领略精彩的IT技术。」
转载请注明原文链接:https://www.cnblogs.com/jyzhao/p/22502288
转载请注明原文链接:https://www.cnblogs.com/jyzhao/p/22502288
👋 感谢阅读,欢迎关注我的公众号 「赵靖宇」