关键字的右边称为右表
发布时间:2025-06-24 17:41:13 作者:北方职教升学中心 阅读量:938
全表从而分为:
左连接/左外连接。 如果两个表中有同名的列,但是列中的值不相等,那么这一行不会出现在结果集中。 因为自然连接的特点,我们无法指定连接列,这种写法给给我们带来了不确定性。如果左表中没有匹配的记录,则左表字段使用 NULL
填充
通常情况下,右连接会被习惯性的改写成左连接。
关键字的右边称为右表。 自然连接会删除重复的列,只保留一个同名的列。SELECT * FROM A表 , B表 WHERE A表. id = B表. id; 如果两个表中有同名的列,但是至少有一个列是空的,那么这一行也不会出现在结果集中。从驱动表中选取数据作为循环的基础数据,然后以这些数据作为 查询条件 到下一个表中进行循环遍历查询。SELECT * FROM A表 LEFT JOIN B表 ON A表. id = B表. id;
驱动表 驱动表: 在使用多表嵌套连接时,首先,会全表扫描该一个表作为查询条件,这个表叫做驱动表。疑惑 ,欢迎【评论】指正探讨,我会尽可能第一时间回复的,谢谢支持
employees
表:
+--------+------+-------------+--------+| emp_id | name | department | salary |+--------+------+-------------+--------+| 1 | John | Sales | 50000 || 2 | Mary | Engineering | 60000 || 3 | Bob | Sales | 40000 |+--------+------+-------------+--------+
departments
表:
+---------+-------------+| dept_id | department |+---------+-------------+| 1 | Sales || 2 | Engineering || 3 | Accounting |+---------+-------------+
如果我们想要找到所有员工及其部门的信息,我们可以使用自然连接来联接这两个表:
SELECT * FROM employeesNATURAL JOIN departments;
这将返回两个表中同名的列 department 的值相等的那些行,因此结果集将是:
+--------+------+-------------+--------+---------+-------------+| emp_id | name | department | salary | dept_id | department |+--------+------+-------------+--------+---------+-------------+| 1 | John | Sales | 50000 | 1 | Sales || 2 | Mary | Engineering | 60000 | 2 | Engineering |+--------+------+-------------+--------+---------+-------------+
注意,在这个例子中,emp_id 和 dept_id 是自然连接过程中被删除的重复列。
自然连接特点:
如果两个表中有同名的非空列,并且列中的值相等,那么这一行会出现在结果集中。 全连接/全外连接。SELECT * FROM A表 LEFT JOIN B表 ON A表. id = B表. idUNION SELECT * FROM A表 RIGHT JOIN B表 ON A表. id = B表. id
【注意】:FULL OUTER JOIN 关键字异常讨论 网上部分教程出现的 FULL OUTER JOIN
关键词,但是MySQL并不直接支持全外连接,所以可能很多版本 无法直接使用 FULL OUTER JOIN
关键词,至少我测试的版本是这样。不需要我们指定连接条件。SELECT * FROM A表 INNER JOIN B表 ON A表. id = B表. id;
左表、RIGHT JOIN
、 右连接会返回右表中的所有记录。效果是一样的,左连接的可读性更好点。
内连接 —— 等值连接 SQL 代码形式如下:
SELECT * FROM A表 INNER JOIN B表 ON A表. id = B表. idINNER JOIN C表 ON B表. id = C表. id;
内连接 —— 自然连接(NATURAL JOIN) 自然连接会在两个表中寻找那些名称相同的列,并且以这些列的值作为联接的条件。如果右表中没有匹配的记录,则右表字段使用 NULL
填充。所以通常情况下,不推荐使用自然连接 。
SELECT * FROM A表 JOIN B表; SELECT * FROM A表, B表;
我是一名立志把细节都说清楚的博主,欢迎【关注】🎉 ~
原创不易, 如果有帮助 ,记得【点赞】【收藏】 哦~ ❥(^_-)~
如有错误、这种算法机制简单的理解可以类比为for循环遍历一样。右表、右连接/右外连接。SELECT * FROM A表 JOIN B表 ON A表. id = B表. id;
SELECT * FROM A表 RIGHT JOIN B表 ON A表. id = B表. id;
Employees
表:
+----+----------+| id | name |+----+----------+| 1 | Alice || 7 | Bob || 11 | Meir || 90 | Winston || 3 | Jonathan |+----+----------+
EmployeeUNI
表:
+----+-----------+| id | unique_id |+----+-----------+| 3 | 1 || 11 | 2 || 90 | 3 |+----+-----------+
左连接SQL样例:
SELECT unique_id, nameFROM EmployeesLEFT JOIN EmployeeUNION Employees. id = EmployeeUNI. id;
结果:
+-----------+----------+| unique_id | name |+-----------+----------+| null | Alice || null | Bob || 2 | Meir || 3 | Winston || 1 | Jonathan |+-----------+----------+
拓展:左连接不包含内连接
模版样式:
SELECT * FROM A表 LEFT JOIN B表 ON A表. id = B表. idWHERE B表. id IS NULL ;
外连接 —— 右连接(RIGHT JOIN) / 右外连接(RIGHT OUTER JOIN) 与左连接同理。
保留表可以根据保留左表、
对应的处理方法是: 我们在设计查询时,尽可能减少连接表的个数。
内连接的驱动表:通常是数据量较少的表作为驱动表。—— 性能优化。循环往复。
文章目录 连接查询 内连接(INNER JOIN) 内连接 —— 等值连接 内连接 —— 自然连接(NATURAL JOIN) 内连接 —— 交叉连接 / 笛卡尔积(CROSS JOIN) 外连接(OUTER JOIN) 外连接 —— 左连接(LEFT JOIN) / 左外连接(LEFT OUTER JOIN) 外连接 —— 右连接(RIGHT JOIN) / 右外连接(RIGHT OUTER JOIN) 外连接 —— 全连接 / 全外连接 【注意】:FULL OUTER JOIN 关键字异常讨论 拓展:全连接不包括内连接
我是一名立志把细节都说清楚的博主,欢迎【关注】🎉 ~
原创不易, 如果有帮助 ,记得【点赞】【收藏】 哦~ ❥(^_-)~
如有错误、疑惑 ,欢迎【评论】指正探讨,我会尽可能第一时间回复的,谢谢支持
外连接(OUTER JOIN) 外连接可以保留连接表所有的记录,包括这条记录没有匹配的记录也可以保留(以NULL形式出现)。