浅学MySQL
本文最后更新于245 天前,其中的信息可能已经过时,如有错误请发送邮件到2067863254@qq.com

快速过一遍MySQL的核心知识。


第一部分:核心概念 – 连接(JOIN)

想象一下,我们有两张Excel表格:

​表1:员工表 (employees)​

idnamedepartment_id
1张三1
2李四2
3王五1
4赵六(NULL)

​表2:部门表 (departments)​

iddepartment_name
1技术部
2销售部
3行政部

现在,我们想把两个表的信息合并起来看,这就需要“连接”。

1. 内连接 (INNER JOIN)

​通俗理解:取两个表的“交集”。只返回两个表中能完全匹配上的行。​

​场景:​​ 我想知道每个员工属于哪个部门,​​但只关心那些已经分配了部门的员工​​。

SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;

​结果:​

namedepartment_name
张三技术部
李四销售部
王五技术部

​你发现了什么?​

  • 员工“赵六”不见了,因为他的department_id是NULL,在部门表里找不到匹配项。
  • 部门“行政部”也不见,因为员工表里没人属于部门3。

​INNER JOIN 就像一次严格的相亲大会,必须男女双方都看对眼(匹配上)才会成功。​


2. 左外连接 (LEFT OUTER JOIN 或 LEFT JOIN)

​通俗理解:以左表为主。返回左表的所有记录,以及右表中能匹配上的记录。右表匹配不上的地方就用NULL填充。​

​场景:​​ 我想列出​​所有员工​​,并显示他们的部门信息。就算他没部门(比如新员工),我也要看到他的名字。

SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;

​结果:​

namedepartment_name
张三技术部
李四销售部
王五技术部
赵六(NULL)

​你发现了什么?​

  • ​左表(员工表)​​ 的所有记录都出来了。
  • 赵六虽然没部门,但他的名字依然在。
  • 部门“行政部”还是没出现,因为它是右表独有的。

​LEFT JOIN 就像保护左表的“护犊子”家长:“我左表的人一个都不能少!右表你看着配,配不上就空着。”​


3. 右外连接 (RIGHT OUTER JOIN 或 RIGHT JOIN)

​通俗理解:以右表为主。返回右表的所有记录,以及左表中能匹配上的记录。左表匹配不上的地方就用NULL填充。​

​场景:​​ 我想列出​​所有部门​​,并看看每个部门有哪些员工。就算某个部门一个人都没有(比如刚成立的部门),我也要看到这个部门。

SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;

​结果:​

namedepartment_name
张三技术部
李四销售部
(NULL)行政部
王五技术部

​你发现了什么?​

  • ​右表(部门表)​​ 的所有记录都出来了。
  • “行政部”虽然没员工,但部门名显示出来了。
  • 员工“赵六”不见了,因为他是左表独有的。

​RIGHT JOIN 和 LEFT JOIN 反过来,是“护着”右表的家长。​


4. 外连接 (FULL OUTER JOIN)

​通俗理解:取两个表的“并集”。返回左右两表的所有记录,匹配不上的地方都用NULL填充。​

​场景:​​ 我想做一个全量的核对清单,既要看到所有员工(包括没部门的),也要看到所有部门(包括没员工的)。

-- 注意:MySQL不直接支持FULL OUTER JOIN,但可以用LEFT JOIN和RIGHT JOIN的UNION来实现
SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id
UNION
SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;

​结果:​

namedepartment_name
张三技术部
李四销售部
王五技术部
赵六(NULL)
(NULL)行政部

​你发现了什么?​

  • 两个表的数据全都出来了!一个都没少。

​FULL OUTER JOIN 就像一个大团圆,谁都不能少。​


快速记忆口诀

  • ​INNER JOIN​​: 俩都有的才要 → ​​交集​
  • ​LEFT JOIN​​: 左表全要,右表看着配 → ​​保左​
  • ​RIGHT JOIN​​: 右表全要,左表看着配 → ​​保右​
  • ​FULL JOIN​​: 我全都要! → ​​并集​

第二部分:MySQL 快速入门知识树

光会连接还不够,我们来搭建一个MySQL的知识框架。

1. 数据库是啥?

就是一个高级的、多用户的Excel文件,能安全、高效地存储和管理大量数据。

2. SQL是啥?

是跟数据库“说话”的语言。你下命令,它去执行。

3. 必须掌握的四大核心操作(CRUD)

  • ​C (Create – 增)​​: 往表里插新数据。 INSERT INTO employees (name, department_id) VALUES ('钱七', 2);
  • ​R (Read – 查)​​: 从表里读数据。这是你最常用的操作! SELECT name, department_id FROM employees WHERE department_id = 1; -- 查找技术部所有人
  • ​U (Update – 改)​​: 修改表里已有的数据。 UPDATE employees SET department_id = 3 WHERE name = '赵六'; -- 给赵六分配到行政部
  • ​D (Delete – 删)​​: 从表里删除数据。(​​慎用!​​) DELETE FROM employees WHERE name = '钱七'; -- 开除钱七

4. 关键子句(让查询更精准)

  • WHERE: 过滤条件,像Excel的筛选功能。WHERE age > 18
  • ORDER BY: 排序。ORDER BY score DESC(按分数降序排)
  • GROUP BY: 分组,常和统计函数一起用。 -- 统计每个部门有多少人 SELECT department_id, COUNT(*) as employee_count FROM employees GROUP BY department_id;
  • HAVING: 对分组后的结果进行过滤,和WHERE类似,但用在GROUP BY之后。

5. 给小白的学习路径建议

  1. ​第一步:安装MySQL​​ 去MySQL官网下载MySQL Community Server,或者安装XAMPP/MAMP这类集成环境,更简单。
  2. ​第二步:练熟CRUD​​ 自己创建一张表,比如学生表(id, 姓名, 成绩),疯狂练习增、删、改、查。
  3. ​第三步:理解“关系”​​ 再创建一张课程表,然后用学生ID把两张表关联起来。这时你就可以练习今天学的各种JOIN了。
  4. ​第四步:实战小项目​​ 尝试设计一个“个人博客系统”的数据库:
    • 用户表:存用户信息。
    • 文章表:存文章,里面有一个用户ID字段指向是谁写的。 然后你就可以用JOIN查询出“某用户写的所有文章”了。

总结

  • ​连接(JOIN)​​ 是SQL的核心,用于合并多个相关联的表的数据。
  • ​内连接​​ 最常用,​​左连接​​ 也非常常见,务必掌握。
  • 学习MySQL不要怕,就从最基础的CREATE DATABASE, CREATE TABLE, INSERT, SELECT开始动手敲代码。
  • 遇到报错是正常的,那是电脑在教你正确的语法,仔细读错误信息。

你已经迈出了非常重要的一步!理解了连接,就等于打开了关系型数据库的大门。接下来就是多练习,把知识变成你的本能。加油!如果还有任何问题,随时可以再问我。

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇