此外,如何适应左外加入,右外加入和全外加入?
当前回答
在内部加入中,我们可以在不同表中获取相同/相关数据的数据。
我们有三种类型的外部加入:
左加入,右加入,全加入
我们还将从左(第一)表中获取不相关的数据。
SELECT Sname, Tname FROM student s LEFT JOIN 教师 t ON s.id = t.id;
右外加入,我们还从正确的表中获取与此无关的数据(第二表)
SELECT Sname, Tname FROM student s RIGHT JOIN 教师 t ON s.id = t.id;
我们可以使用 FULL OUTER JOIN 当我们想要从两个表中获取所有 / 完整的数据时,丢失的数据将以 NULL 填写。
SELECT Sname, Tname FROM student s FULL JOIN 教师 t ON s.id = t.id;
其他回答
简单的说法:
左边“加入”
1.Take All records from left Table
2.for(each record in right table,) {
if(Records from left & right table matching on primary & foreign key){
use their values as it is as result of join at the right side for 2nd table.
} else {
put value NULL values in that particular record as result of join at the right side for 2nd table.
}
}
右加入 : 正反对左加入. 在右加入中的左加入中输入表名称,您将获得与左加入相同的输出。
外部加入: 显示两张表中的所有记录 不管是什么. 如果左表中的记录不符合基于首要, 前进密钥的右表,则使用加入结果的 NULL 值。
例子:
1. 工人, 2.phone_numbers_工人
employees : id , name
phone_numbers_employees : id , phone_num , emp_id
在这里,员工表是主表,电话_数字_员工是儿童表(它包含 emp_id 作为外国密钥,连接员工.id 因此其儿童表)。
内部加入
问答会是:
SELECT e.id , e.name , p.phone_num FROM employees AS e INNER JOIN phone_numbers_employees AS p ON e.id = p.emp_id;
在这里只采取相匹配的行在主键 = 外国键如上所述。在这里不相匹配的行在主键 = 外国键因加入而被排除。
左联盟保留左桌的所有行,无论是否有一个行在右桌上相匹配。
SELECT e.id , e.name , p.phone_num FROM employees AS e LEFT JOIN phone_numbers_employees AS p ON e.id = p.emp_id;
外面加入:
SELECT e.id , e.name , p.phone_num FROM employees AS e OUTER JOIN phone_numbers_employees AS p ON e.id = p.emp_id;
格式上看起来如下:
您使用 INNER JOIN 返回两个表中的所有行,即在结果表中,所有行和列都将有值。
在 OUTER JOIN 中,结果表可能有空列,外部加入可能是左或右。
LEFT OUTER JOIN 从第一张桌子中返回所有行,即使在第二张桌子中没有比赛。
RIGHT OUTER JOIN 从第二张桌子返回所有行,即使在第一张桌子上没有比赛。
此分類上一篇
INNER JOIN 最典型的加入为两个或多个表. 它返回数据匹配在两个表上 ON primarykey 和 forignkey 关系. OUTER JOIN 与 INNER JOIN 相同,但它还包含结果设置上的 NULL 数据. LEFT JOIN = INNER JOIN + 未匹配的左表数据与右表上的 Null 匹配. RIGHT JOIN = INNER JOIN + 未匹配的右表数据与左表上的 Null 匹配. FULL JOIN = INNER J
例如:
SELECT *
FROM tablea a
INNER JOIN tableb b
ON a.primary_key = b.foreign_key
INNER JOIN tablec c
ON b.primary_key = c.foreign_key
一个内部合并只显示行,如果在合并的另一边(右)有一个匹配记录。
一(左)外部连接显示在左侧的每个记录的行列,即使连接的另一(右)侧没有匹配行列,如果没有匹配行列,对另一(右)侧的列将显示零。
内部加入 - 使用相同的查询中的任何一个内部加入将交叉两个表,即它们有两个行,左外加入 - 左外加入将提供所有行在A,加上任何常见行在B。
推荐文章
- 如何在Ruby On Rails中使用NuoDB手动执行SQL命令
- 查询JSON类型内的数组元素
- 确定记录是否存在的最快方法
- 获得PostgreSQL数据库中当前连接数的正确查询
- 在SQL选择语句Order By 1的目的是什么?
- 我如何循环通过一组记录在SQL Server?
- 如何从命令行通过mysql运行一个查询?
- 外键约束可能导致循环或多条级联路径?
- 使用LIMIT/OFFSET运行查询,还可以获得总行数
- 当恢复sql时,psql无效命令\N
- 货币应该使用哪种数据类型?
- 如何选择每一行的列值不是独特的
- 如何改变字符集(和排序)在整个数据库?
- mySQL:: insert到表,数据从另一个表?
- 如何在Postgres中获得两个字段的MIN() ?