此外,如何适应左外加入,右外加入和全外加入?
当前回答
最简单的定义
内部加入:从两个表中返回相匹配的记录。
Full Outer 加入:从两个表中返回相匹配和未相匹配的记录,从两个表中返回未相匹配的记录为零。
左外加入:只从左侧的桌子上返回匹配和不匹配的记录。
右外加入:只从右侧的桌子上返回相匹配和不相匹配的记录。
短短
相匹配 + 左不相匹配 + 右不相匹配 = 全外加入
相匹配 + 左不相匹配 = 左外加入
相匹配 + 相匹配不相匹配 = 相匹配不相匹配
相匹配 = 内部加入
其他回答
您使用 INNER JOIN 返回两个表中的所有行,即在结果表中,所有行和列都将有值。
在 OUTER JOIN 中,结果表可能有空列,外部加入可能是左或右。
LEFT OUTER JOIN 从第一张桌子中返回所有行,即使在第二张桌子中没有比赛。
RIGHT OUTER JOIN 从第二张桌子返回所有行,即使在第一张桌子上没有比赛。
内部加入 - 使用相同的查询中的任何一个内部加入将交叉两个表,即它们有两个行,左外加入 - 左外加入将提供所有行在A,加上任何常见行在B。
下面看两张桌子:
EMP
empid name dept_id salary
1 Rob 1 100
2 Mark 1 300
3 John 2 100
4 Mary 2 300
5 Bill 3 700
6 Jose 6 400
部門
deptid name
1 IT
2 Accounts
3 Security
4 HR
5 R&D
内部加入:
大多数写作只是在 sql 查询中加入,它只返回表之间的匹配记录。
查找所有员工及其部门名称:
Select a.empid, a.name, b.name as dept_name
FROM emp a
JOIN department b
ON a.dept_id = b.deptid
;
empid name dept_name
1 Rob IT
2 Mark IT
3 John Accounts
4 Mary Accounts
5 Bill Security
正如你上面看到的那样,Jose 不是从 EMP 在输出中打印,因为它是 dept_id 6 在部门桌上找不到比赛。
因此,加入或只是加入,只返回匹配行。
左边加入:
这将从左表中返回所有记录,仅从右表中匹配记录。
Select a.empid, a.name, b.name as dept_name
FROM emp a
LEFT JOIN department b
ON a.dept_id = b.deptid
;
empid name dept_name
1 Rob IT
2 Mark IT
3 John Accounts
4 Mary Accounts
5 Bill Security
6 Jose
HR 和 R&D 行不从部门桌上打印,因为他们没有在 dept_id 上的 Emp 桌上找到比赛。
因此,LEFT JOIN从左桌返回所有行,仅从右桌匹配行。
您也可以在这里查看Demo。
1.内部加入:也称为加入. 它返回在左表中的两行,右表只有如果有比赛。
例子:
SELECT
e1.emp_name,
e2.emp_salary
FROM emp1 e1
INNER JOIN emp2 e2
ON e1.emp_id = e2.emp_id
此分類上一篇
2.Full Outer 加入: 也称为Full 加入. 它返回所有的行在左表和右表。
例子:
SELECT
e1.emp_name,
e2.emp_salary
FROM emp1 e1
FULL OUTER JOIN emp2 e2
ON e1.emp_id = e2.emp_id
此分類上一篇
3.Left Outer 加入: 或者简单地称为Left 加入. 它返回左表中的所有行,并从右表中匹配行(如有)。
右外加入:也称为右加入. 返回相匹配的行从桌面左(如果有),并所有行在桌面右。
此分類上一篇
加入的好处
更快的执行
加入更容易用一个例子来解释:
此分類上一篇
模拟在单独的表中存储的人和电子邮件,
表 A 和表 B 由表_A.id = 表_B.name_id 添加
内部加入
此分類上一篇
只显示相匹配的IDS行。
外面加入
此分類上一篇
表 A 的匹配 ID 和不匹配行显示。
此分類上一篇
显示表 B 的匹配 ID 和不匹配行。
相匹配的ID和不相匹配的行从两个表显示。
注意:在 MySQL 上不存在完整的外部加入
推荐文章
- 如何在Ruby On Rails中使用NuoDB手动执行SQL命令
- 查询JSON类型内的数组元素
- 确定记录是否存在的最快方法
- 获得PostgreSQL数据库中当前连接数的正确查询
- 在SQL选择语句Order By 1的目的是什么?
- 我如何循环通过一组记录在SQL Server?
- 如何从命令行通过mysql运行一个查询?
- 外键约束可能导致循环或多条级联路径?
- 使用LIMIT/OFFSET运行查询,还可以获得总行数
- 当恢复sql时,psql无效命令\N
- 货币应该使用哪种数据类型?
- 如何选择每一行的列值不是独特的
- 如何改变字符集(和排序)在整个数据库?
- mySQL:: insert到表,数据从另一个表?
- 如何在Postgres中获得两个字段的MIN() ?