概述
当数据库中含有大量数据时,而我们所需要的信息不再是仅仅局限于一个表中的数据信息,这时我们需要将对一个表进行信息查询转而变成对多个表进行信息搜索并进行组合。
解决这样的问题我们通常是运用嵌套查询的方法,首先先执行内部的子查询再将子查询的结果作为外层查询的数据源,最后再在其基础之上进行主查询。这样我们就相当于做了两次的查询select语句的效率也有所降低。而引入连接之后SQL Server将要执行的仅仅是一个查询。
假如有学生表和课程表、选课三个表,查询选修了化学的学生姓名。
T_student
student_ID
student_Name
student_Age
1
李明
11
2
张三
12
T_course
course_ID
course_Name
1001
化学
1002
生物
T_selecet
student_ID
course_ID
grade
1
1001
80
2
1002
85
嵌套查询:
select student_name from T_student where T_student.student_id in
(select T_select.student_id from T_select where T_select.course_id in
(select T_course.course_id from T_course where course_name='化学' ) )
Go
连接查询
select T_student.student_Name from T_student join T_select
on T_student.student_Id=T_select.student_id join T_course
on T_course.course_id=T_select.course_id
where T_course.course_name='化学'
go
两种方式查询的结果均为:
由上面两种查询方式可以看出嵌套查询相当于执行了3次查询而连接查询却仅仅是执行了一次就达到了目的
连接查询结果是由多表组成的查询结果所以查询的结果跟连接的方式有很大的关系,故连接可以分为内连接、左向外联接、右向外连接、完整外连接、交叉连接几种连接方式。几种连接方式完全可以取代嵌套查询可能查询到的结果,就如同上例一样,所以如果想要在查询上提高select语句的查询效率完全可以用连接查询方式来代替嵌套查询。
内连接即表1 inner join(join)表2on其结果返回两个表中所有匹配的行
左向外联接 表1 leftouter join(left join)表2on 返回结果集中将包括数据表1中所有的记录,而不仅仅是连接字段所匹配的记录。如果数据表1的某条记录在数据表2中没有匹配的记录,则结果集相应记录的有关数据表2的所有字段将为空值。
右向外连接表1 right outer join(rightjoin)表2 on 返回结果集中将包括数据表2中所有的记录,而不仅仅是联接字段所匹配的记录。如果数据表2的某条记录在数据表1中没有匹配的记录,则结果集相应记录的有关数据表1的所有字段将为空值
完整外连接表1 full outer join (full join) 表2on 结果集将包含两个数据表中的所有记录,当某条记录在另一个数据表中没有匹配记录时,则将另一个数据表的选择列表字段指定为空值
交叉连接 表1 cross join 表2 on 如果在select语句中没有使用where子句,则交叉联接将返回数据表1和数据表2中记录的笛卡儿乘积,即交叉联接返回数据表1中的所有记录,以及数据表1中的每一条记录与数据表2中的所有记录的组合。
最后
以上就是健忘雨为你收集整理的mysql嵌套查询效率低,连接查询代替嵌套查询提高select效率的全部内容,希望文章能够帮你解决mysql嵌套查询效率低,连接查询代替嵌套查询提高select效率所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复