多表查询

来源:百度知道 编辑:UC知道 时间:2024/05/15 14:53:55
insert into newtable2
select teachername,sex,acadname from t_teacher inner join t_academy on t_teacher.acadcode=t_academy.acadcode
where teachername like ('王%') or teachername like ('杨%')

insert into newtable2
select teachername,sex,acadname from t_teacher,t_academy
where teachername like ('王%') or teachername like ('杨%') and t_teacher.acadcode=t_academy.acadcode
有什么区别,为什么第二个会出现笛卡儿乘积重复?
t_teacher.acadcode=t_academy.acadcode
第二个不是也定义这个连接了吗?

insert into newtable2
select teachername,sex,acadname from t_teacher,t_academy
where (teachername like ('王%') or teachername like ('杨%')) and t_teacher.acadcode=t_academy.acadcode

加上group by 就不会出现重复了

insert into newtable2
select teachername,sex,acadname from t_teacher,t_academy
where teachername like ('王%') or teachername like ('杨%') and t_teacher.acadcode=t_academy.acadcode
group by teachername,sex,acadname

第一个是表连接,根据前表的数据来检索后表满足条件的记录
第二个是联合查询,也就是把表全部组合起来后,再根据条件来筛选记录。

第一个效率高,第二个效率低
按理说二者达到的效果是相同的,在结果上应该没有区别。

第一个是表连接后查询,像表A的1的表B的1 只读出一次
而二个是直接查询 读出A的1和B的1

这应该就是自然连接和等值连接的差别吧