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.环境

相关推荐
TiAmo zhang3 小时前
调查问卷管理系统开发 │ 系统功能概述
数据库·sqlserver
为什么我不是源代码3 小时前
JPA读取数据库离谱问题-No property ‘selectClassByName‘ found-Not a managed type
java·sql
problc3 小时前
PostgreSQL pg_trgm中文模糊匹配优化技巧
数据库·postgresql
我真的是大笨蛋3 小时前
Redis的String详解
java·数据库·spring boot·redis·spring·缓存
lwprain3 小时前
图数据库neo4j desktop2.0初探
数据库·neo4j
先鱼鲨生3 小时前
【MySQL】认识数据库以及MySQL安装
数据库·mysql
周杰伦_Jay4 小时前
【终端使用MySQL】MySQL 数据库核心操作全解析:从入门到性能优化
数据库·mysql·性能优化
刘一哥GIS4 小时前
Windows环境搭建:PostGreSQL+PostGIS安装教程
数据库·python·arcgis·postgresql·postgis
云和数据.ChenGuang5 小时前
uri: mongodb://jack:123456@localhost://27017 数据库访问其他的写法
数据库·mongodb·oracle