关于数据库的左外连接 右外连接的意思是啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于数据库的左外连接 右外连接的意思是啥相关的知识,希望对你有一定的参考价值。

代码SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM Student LEFT OUTER JOIN SC
ON Student.Sno=SC.Sno; 的显示结果和一般查找有什么差别?

  1、左外连接:
用左外连接,指查询出来的是在右表中没有对应左表中的记录以及符合条件(c.id=o.customer_id)的数据,比如:
customers为左表,orders为右表
select c.id,o.customer_id,c.name,o.id order_id,order_number from customers c left outer join orders o on c.id=o.customer_id;

  2、右外连接:
正好和左外连接相反,查询出来的结果是在左表中没有对应的项和以及符合条件(c.id=o.customer_id)的数据.
参考技术A FROM Student LEFT OUTER JOIN SC
ON Student.Sno=SC.Sno;
无论学生的sno是否对应得到sc的sno,都会选出该学生

FROM Student a,
SC b
where a.Sno=b.Sno;
如果某个学生的sno在sc里没有,那么就不会选出该学生本回答被提问者采纳
参考技术B SQL中连接可分为以下几类:
1. 内连接:inner join。内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,
a表 b表
id name id job parent_id
1 张3 1 23 1
2 李四 2 34 2
3 王武 3 34 4
a.id同parent_id 存在关系
内连接
select a.*,b.* from a inner join b on a.id=b.parent_id
结果是
1 张3 1 23 1
2 李四 2 34 2

2.外连接。外连接可以是左向外连接、右向外连接或完整外部连接。
左向外连接:LEFT JOIN 或 LEFT OUTER JOIN。结果集包括LEFT OUTER子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。例如:
select a.*,b.* from a left join b on a.id=b.parent_id
结果是
1 张3 1 23 1
2 李四 2 34 2
3 王武 null null null

右向外连接:RIGHT JOIN 或 RIGHT OUTER JOIN。是左向外连接的反向连接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。例如:
select a.*,b.* from a right join b on a.id=b.parent_id
结果是
1 张3 1 23 1
2 李四 2 34 2
null null 3 34 4

完整外部连接(全连接):FULL JOIN或FULL OUTER JOIN。返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。例如:
select a.*,b.* from a full join b on a.id=b.parent_id
结果是
1 张3 1 23 1
2 李四 2 34 2
null null 3 34 4
3 王武 null null null

mysql数据库的左连接,右连接,内链接。有何区别

一般所说的左连接,外连接是指左外连接,右外连接。做个简单的测试你看吧。
先说左外连接和右外连接:
[TEST1@orcl#16-12月-11] SQL>select * from t1;

ID NAME
---------- --------------------
1 aaa
2 bbb

[TEST1@orcl#16-12月-11] SQL>select * from t2;

ID AGE
---------- ----------
1 20
3 30
左外连接:
[TEST1@orcl#16-12月-11] SQL>select * from t1 left join t2 on t1.id=t2.id;

ID NAME ID AGE
---------- -------------------- ---------- ----------
1 aaa 1 20
2 bbb
右外连接:
[TEST1@orcl#16-12月-11] SQL>select * from t1 right join t2 on t1.id=t2.id;

ID NAME ID AGE
---------- -------------------- ---------- ----------
1 aaa 1 20
3 30

从上面的显示你可以看出:左外连接是以左边的表为基准。通俗的讲,先将左边的表全部显示出来,然后右边的表id与左边表id相同的记录就“拼接”上去,比如说id为1的记录。如果没有匹配的id,比如说t1中id为2的t2中就没有。那边就以null显示。
右外连接过程正好相反。

再看内连接:
[TEST1@orcl#16-12月-11] SQL>select * from t1 inner join t2 on t1.id=t2.id;

ID NAME ID AGE
---------- -------------------- ---------- ----------
1 aaa 1 20

看到没有? 只有一条记录。内连接就是只取出符合过滤条件的记录 也就是t1.id=t2.id 那么符合t1.id=t2.id的记录只有id=1这一条,所以只显示一条。 不像外连接,是将你作为基准的表(左外连接就是左边表为基准,右外连接就是右边表为基准)的所有行都显示出来。

综上所述,你应该能明白了吧?如果不明白请留言。
参考技术A 合并结果集
1.作用:合并结果集就是把两个select语句的查询结果合并到一起!
2.合并结果集有两种方式:
UNION:去除重复记录,例如:SELECT * FROM t1 UNION SELECT * FROM t2;
UNION ALL:不去除重复记录,例如:SELECT * FROM t1 UNION ALL SELECT * FROM t2。
内连接
上面的连接语句就是内连接,但它不是SQL标准中的查询方式,可以理解为方言!SQL标准的内连接为:
SELECT *
FROM emp e
INNER [INNER可以省略,MySQL默认的连接方式就是内连接]JOIN dept d
ON [不使用WHERE,而是使用ON]e.deptno=d.deptno;
左连接
外连接(左连接、右连接)
外连接的特点:查询出的结果存在不满足条件的可能。
左连接:
SELECT * FROM emp e
LEFT OUTER [OUTER可以省略]JOIN dept d
ON e.deptno=d.deptno;
右连接
右连接就是先把右表中所有记录都查询出来,然后左表满足条件的显示,不满足显示NULL。例如在dept表中的40部门并不存在员工,但在右连接中,如果dept表为右表,那么还是会查出40部门,但相应的员工信息为NULL。
SELECT * FROM emp e
RIGHT OUTER JOIN dept d
ON e.deptno=d.deptno;
自然链接
自然连接
大家也都知道,连接查询会产生无用笛卡尔积,我们通常使用主外键关系等式来去除它。而自然连接无需你去给出主外键等式,它会自动找到这一等式:
两张连接的表中名称和类型完成一致的列作为条件,例如emp和dept表都存在deptno列,并且类型一致,所以会被自然连接找到!
当然自然连接还有其他的查找条件的方式,但其他方式都可能存在问题!
SELECT * FROM emp NATURAL JOIN dept;[内连接]
SELECT * FROM emp NATURAL LEFT JOIN dept;[左连接]
SELECT * FROM emp NATURAL RIGHT JOIN dept;[右连接]
参考技术B 比如关系R和S,合并以后保留R本来要舍弃的左连接,保留S要舍弃的叫右连接。都保留叫外连接。好像没内连接吧

以上是关于关于数据库的左外连接 右外连接的意思是啥的主要内容,如果未能解决你的问题,请参考以下文章

SQL中的左连接与右连接,内连接有啥区别

左外连接和右外连接的区别

mysql数据库的左连接,右连接,内链接。

sql 内连接和外连接的是啥意思?

mysql数据库的左连接,右连接,内链接。有何区别

使用 LINQ 查询语法 EF Core C# 的左外连接