sql左连接查询多出记录的问题

sql左连接查询多出记录的问题,第1张

可以这样简单来理解左连接:连接左边的表(即left join关键词前边的表)中符合连接条件(即on后面的条件表达式)的数据都会出现在结果集中,如果右边的表中有符合条件的数据则一起形成结果行,否则的话只取左边表的数据形成结果行。与内连接的区别在于:内连接的结果集中必须左右两个表的数据都符合连接的条件。

在示例SQL中,left join左边的表a1中的数据都符合条件,故a1表中的数据都出现在结果中,而右边的表a2中仅有第一条数据符合条件,故与左边的表结果形成两个结果行,而没有与第三条记录匹配的a2表的数据,故结果集中第三条数据的对应a2表的列都为空。

如果要排程掉第三条记录,则使用inner join来连接。

表连接方式

left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录。

right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录。

inner join: 内连接,又叫等值连接,只返回两个表中连接字段相等的行。

full join:外连接,返回两个表中的行:left join + right join。

cross join:结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。

左外连接还返回左表中不符合连接条件单符合查询条件的数据行。

右外连接还返回右表中不符合连接条件单符合查询条件的数据行。

全外连接还返回左表中不符合连接条件单符合查询条件的数据行,并且还返回右表中不符合连接条件单符合查询条件的数据行。

全外连接实际是上左外连接和右外连接的数学合集(去掉重复),即“全外=左外 union 右外”。

只要是两张以上的表关联查询的时候,就会返回一个笛卡尔乘积,数据库会去掉那些冗余的数据,只返回有用的数据。我们用左连接和右连接查询的时候就会把那些冗余的数据也查询出来,还有双向连接也是。比如有一个学生表,students(s_id,

s_name,

s_class)

,一张班级表

classes(c_id,

c_name)。分别有如下数据:

学生表:

班级表:

s_id

s_name

s_class

c_id

c_name

1

张三

1班

1

1班

2

李四

3班

2

2班

如果学生表为左表,普通查询为:select

s_name

,c_name

from

students

s,classes

c

where

ss_class=cc_name;

返回的结果为

张三

1班。

而当你把学生表当左表的时候,右连接查询的时候,返回的结果为:张三

1班

,李四

3班。

求采纳

以上就是关于sql左连接查询多出记录的问题全部的内容,包括:sql左连接查询多出记录的问题、数据库的连表查询怎么弄、如何提高SQL语句的左连接查询效率等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10130993.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存