sql的表join怎么学?

1.内连接

✅ 目标:理解两个表之间的匹配关系。

sql 复制代码
SELECT u.id, u.name, o.id AS order_id
FROM users u
INNER JOIN orders o ON u.id = o.user_id;

建议练法:

  1. 用最小数据表(5~10 行)

  2. 手画出笛卡尔积(所有组合)

  3. 观察 ON 条件如何过滤结果

💡 你可以自己造几个 CSV 小表,然后用 SQLite 或 MySQL 本地跑。

2.LEFT / RIGHT JOIN

✅ 目标:理解"以谁为主表"的差别。

sql 复制代码
SELECT u.id, u.name, o.id AS order_id
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;

想一想:

  • 如果用户没下单,会不会出现在结果里?

  • order_id 是 NULL 吗?

👉 画图理解最有效。

3.子查询与分步骤查询

✅ 目标:会用子查询当作"中间结果表"。

sql 复制代码
SELECT player_id
FROM Activity
WHERE event_date = (
  SELECT MIN(event_date)
  FROM Activity a2
  WHERE a2.player_id = Activity.player_id
);

练法:

  • 先独立执行子查询

  • 看返回什么

  • 再嵌入主查询看联动效果

4.窗口函数

✅ 目标:在不分组的情况下,对行做排名或累计。

sql 复制代码
SELECT player_id, event_date,
       RANK() OVER (PARTITION BY player_id ORDER BY event_date) AS rank
FROM Activity;

可以用来:

  • 排名(RANK, ROW_NUMBER)

  • 累计求和(SUM() OVER ...)

  • 环比增长(LAG/LEAD)

5.环境

相关推荐
向日的葵00619 分钟前
Redis会话机制vsJWT机制深度解析
数据库·redis·python·缓存·系统架构·jwt
bosins24 分钟前
如何配置SQL Server数据库定时自动备份
数据库
烟雨归来40 分钟前
RAC数据库OS进程消失,GV$SESSION长期残留KILLED僵尸会话处理
数据库·oracle
小龙报1 小时前
【优选算法】1. 水果成蓝 2.找到字符串中所有字母的异位词
java·c语言·数据结构·数据库·c++·redis·算法
宇宙第一小趴菜1 小时前
六、Oracle 目录结构
数据库·oracle
IvorySQL2 小时前
PG 日报|修复高 IO 并发场景,解决预读机制耗尽本地缓冲区缺陷
数据库·人工智能·sql·postgresql·区块链
TiDB 社区干货传送门2 小时前
TiDB 8.5.7 发版|六项实用功能上线
数据库·mysql·tidb
在繁华处2 小时前
MySQL 学习笔记 01:从概念到约束,搭好库表骨架
数据库·oracle
三言老师3 小时前
CentOS7.9:Redis 数据持久化结构化实战教程
数据库·redis·缓存
鸽芷咕3 小时前
KingbaseES 优化器底层逻辑:等价变换如何改写 SQL,条件调度如何驱动运行时
数据库