SQL语句中两个表的连接

select*fromA,BwhereA.ID=B.IDselect*fromAJOINBONA.ID=B.ID这两句没区别把?where...and和join....o... select * from A,B whereA.ID=B.ID
select * from A JOIN B ON A.ID=B.ID这两句没区别把?where ...and和join....on什么区别
展开
 我来答
游戏你我他
高粉答主

推荐于2019-11-06 · 说的都是干货,快来关注
知道答主
回答量:278
采纳率:100%
帮助的人:18.5万
展开全部

where ...and和join....on的区别

1、where 是在两个表join完成后,再附上where条件

2、而 and 则是在表连接前过滤A表或B表里面哪些记录符合连接条件,同时会兼顾是left join还是right join。即 

假如是左连接的话,如果左边表的某条记录不符合连接条件,那么它不进行连接,但是仍然留在结果集中(此时右边部分的连接结果为NULL)。on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

3、建议尽量用where来过滤条件

比较:

1、用AND后的SQL和结果集。还是有383这条结果集

2、用where后的SQL和结果集。没有了这条记录

扩展资料

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

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

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

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

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

关键字: on

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

在使用left jion时,on和where条件的区别如下:

1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

刺友互
高粉答主

2019-07-17 · 每个回答都超有意思的
知道答主
回答量:3979
采纳率:100%
帮助的人:70.8万
展开全部

1、打开数据库管理工具,在数据库中新建两个表用于测试,这里,两个表的表结构要一样,分别建立TEST 和 TEST1。

2、开启新的SQL查询窗口,创建一个存储过程。意思是将insert到TEST中的数据插入到TEST1中。

3、单击‘执行’,一个名字为‘T’的触发就新建完成了。

4、展开表结构,我们也能看见刚才新建的触发器‘T’。

5、现在先在TEST表中插入一条数据做测试。INSERT INTO dbo.TEST VALUES('1','Simon','25')。

6、提示插入数据成功两次,那么,我们再来看看TEST1中的数据是否有及时更新过来。SELECT * FROM dbo.TEST1经测,数据成功写入。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友fa03731
推荐于2019-11-13 · TA获得超过191个赞
知道答主
回答量:5
采纳率:0%
帮助的人:1230
展开全部

一、外连接

1.左连接  left join 或 left outer join

SQL语句:select * from student left join score on student.Num=score.Stu_id;

2.右连接  right join 或 right outer join

SQL语句:select * from student right join score on student.Num=score.Stu_id;

3.完全外连接  full join 或 full outer join

SQL语句:select * from student full join score on student.Num=score.Stu_id;

通过上面这三种方法就可以把不同的表连接到一起,变成一张大表,之后的查询操作就简单一些了。

而对于select * from student,score;则尽量不使用此语句,产生的结果过于繁琐。

二、内连接 

join 或 inner join

SQL语句:select * from student inner join score on student.Num=score.Stu_id;

此时的语句就相当于:select * from student,score where student.ID=course.ID;

三、交叉连接

cross join,没有where指定查询条件的子句的交叉联接将产生两表的笛卡尔积。

SQL语句:select * from student cross join score;

四、结构不同的表连接

当两表为多对多关系的时候,我们需要建立一个中间表student_score,中间表至少要有两表的主键。

SQL语句:select s.Name,C.Cname from student_score as sc left join student as s on s.Sno=sc.Sno left join score as c on c.Cno=sc.Cno

select C_name,grade from student left join score on student.Num=score.Stu_id where name='李五一';

红色部分即中间表,是集合两表所有内容的一张总表。

五、UNION操作符用于合并两个或多个select语句的结果集。

UNION内部的SELECT语句必须拥有相同数量的列,每个列也必须拥有相似的数据类型,每条SELECT语句中的列的顺序必须相同。

select Num from student union select Stu_id from score;

union操作符是默认查重的,如果允许重复的值,就可以使用union all 。对于两张结构相同的表,union也可以把他们合并成一张表:

select * from student1 union select *from student2;

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
blademaster717
推荐于2017-09-25 · TA获得超过1456个赞
知道小有建树答主
回答量:882
采纳率:97%
帮助的人:366万
展开全部
(inner) join on 内链接 与 where 子查询 是一样的。
主要有区别是 left join right join 以及 full join,功能和性能跟where有差异

inner join
(等值连接)
只返回两个表中联结字段相等的行
WHERE 和INNER JOIN产生的连接关系,本质区别不详,结果一样。
(1)在效率上,Where可能具有和Inner join一样的效率。但基本可以肯定的(通过SQLServer帮助和其它资料,以及本测试)是Join的效率不比Where差。
(2)使用Join可以帮助检查语句中的无效或者误写的关联条件。
(3)从可读性角度来看,Where更直观。
left join
left outer join
(左联接)
返回包括左表中的所有记录和右表中联结字段相等的记录
左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
right join
right outer join
(右联接)
返回包括右表中的所有记录和左表中联结字段相等的记录
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
full join
full outer join
(全连接)
完整外部联接返回左表和右表中的所有行
当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。
如果表之间有匹配行,则整个结果集行包含基表的数据值。
Join & where总结:
where是两个表中的数据满足共同条件才会显示。
Jion on是相同条件匹配。

因此,除了inner join结果通常不一样。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式