SQL - 左连接与右连接:初学者的全面指南
你好,有抱负的SQL爱好者们!我很高兴能成为你们在这个激动人心的SQL连接世界中的向导。作为一个教计算机科学多年的老师,我可以向你保证,掌握连接就像在数据库领域解锁了超能力。那么,让我们一起深入探讨左连接(Left Join)和右连接(Right Join)的奥秘吧!
理解连接:基础知识
在我们深入了解左连接和右连接的具体内容之前,让我们先快速回顾一下SQL中的连接是什么。想象你正在计划一个派对,有两份名单:一份是宾客的名字,另一份是他们喜欢的饮料。连接就像魔杖,帮助你以各种方式结合这些名单,以获取你需要的信息。
左连接的工作原理
什么是左连接?
左连接就像邀请名单上的每个人参加派对,不管你是否知道他们喜欢的饮料。它会返回左表(查询中首先提到的表)的所有记录以及右表的匹配记录。
左连接的语法
SELECT 列名(s)
FROM 表1
LEFT JOIN 表2
ON 表1.列名 = 表2.列名;
左连接示例
让我们创建两个简单的表来说明这一点:
CREATE TABLE 宾客 (
宾客ID INT PRIMARY KEY,
宾客姓名 VARCHAR(50)
);
CREATE TABLE 饮料 (
饮料ID INT PRIMARY KEY,
宾客ID INT,
喜爱的饮料 VARCHAR(50)
);
INSERT INTO 宾客 (宾客ID, 宾客姓名) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie'),
(4, 'David');
INSERT INTO 饮料 (饮料ID, 宾客ID, 喜爱的饮料) VALUES
(1, 1, 'Mojito'),
(2, 2, '啤酒'),
(3, 3, '葡萄酒');
现在,让我们使用左连接来获取所有宾客和他们的喜爱饮料(如果有的话):
SELECT 宾客.宾客姓名, 饮料.喜爱的饮料
FROM 宾客
LEFT JOIN 饮料 ON 宾客.宾客ID = 饮料.宾客ID;
结果:
宾客姓名 | 喜爱的饮料 |
---|---|
Alice | Mojito |
Bob | 啤酒 |
Charlie | 葡萄酒 |
David | NULL |
正如你所看到的,David 出现在结果中,尽管我们不知道他喜欢的饮料。这就是左连接的魔法!
右连接的工作原理
什么是右连接?
右连接就像专注于饮料名单,看看哪些宾客喜欢每种饮料。它会返回右表的所有记录以及左表的匹配记录。
右连接的语法
SELECT 列名(s)
FROM 表1
RIGHT JOIN 表2
ON 表1.列名 = 表2.列名;
右连接示例
使用我们之前的表,让我们执行一个右连接:
SELECT 宾客.宾客姓名, 饮料.喜爱的饮料
FROM 宾客
RIGHT JOIN 饮料 ON 宾客.宾客ID = 饮料.宾客ID;
结果:
宾客姓名 | 喜爱的饮料 |
---|---|
Alice | Mojito |
Bob | 啤酒 |
Charlie | 葡萄酒 |
注意David没有出现在这个结果中,因为他没有列出喜欢的饮料。
左连接与右连接
现在我们已经看到了两种连接的实际应用,让我们将它们并排比较:
方面 | 左连接 | 右连接 |
---|---|---|
关注点 | 左表(第一个)的所有记录 | 右表(第二个)的所有记录 |
NULL值 | 在右表列中为不匹配的记录 | 在左表列中为不匹配的记录 |
使用场景 | 当你想要主表的所有记录 | 当你想要连接表的所有记录 |
结果集大小 | 总是包括所有左表记录 | 总是包括所有右表记录 |
何时使用左连接与右连接
- 使用左连接当:
- 你想要保留主表(左表)的所有记录。
- 你对右表不匹配的记录中有NULL值没问题。
- 使用右连接当:
- 你想要保留次表(右表)的所有记录。
- 你对左表不匹配的记录中有NULL值没问题。
技巧
在我多年的教学过程中,我注意到许多开发人员更喜欢使用左连接而不是右连接。为什么?通常来说,左连接更容易阅读和理解。你可以总是通过交换表顺序将右连接重写为左连接。所以,如果你发现右连接令人困惑,可以随意坚持使用左连接!
实践练习
让我们通过一个有趣的练习来巩固我们的理解。想象你正在组织一个读书俱乐部。你有两个表:成员
和书籍
。
CREATE TABLE 成员 (
成员ID INT PRIMARY KEY,
成员姓名 VARCHAR(50)
);
CREATE TABLE 书籍 (
书籍ID INT PRIMARY KEY,
成员ID INT,
书名 VARCHAR(100)
);
INSERT INTO 成员 (成员ID, 成员姓名) VALUES
(1, 'Emma'),
(2, 'James'),
(3, 'Sophia'),
(4, 'Oliver');
INSERT INTO 书籍 (书籍ID, 成员ID, 书名) VALUES
(1, 1, '傲慢与偏见'),
(2, 2, '1984'),
(3, 2, '杀死一只知更鸟'),
(4, 3, '了不起的盖茨比');
现在,尝试以下查询:
- 左连接来获取所有成员和他们的书籍(如果有的话):
SELECT 成员.成员姓名, 书籍.书名
FROM 成员
LEFT JOIN 书籍 ON 成员.成员ID = 书籍.成员ID;
- 右连接来获取所有书籍和它们的主人(如果有的话):
SELECT 成员.成员姓名, 书籍.书名
FROM 成员
RIGHT JOIN 书籍 ON 成员.成员ID = 书籍.成员ID;
比较结果。你能发现不同之处吗?
结论
恭喜你!你刚刚掌握了SQL中的左连接和右连接的艺术。记住,熟能生巧,所以不要犹豫,用不同的场景尝试这些连接。
作为临别忠告,我总是告诉我的学生:“SQL连接就像拼图块。你玩得越多,就越擅长拼凑出数据的完整画面!”
愉快地查询,愿你的连接总是准确无误!
Credits: Image by storyset