mysql嵌套查询效率低,连接查询代替嵌套查询提高select效率

当数据库中含有大量数据时,而我们所需要的信息不再是仅仅局限于一个表中的数据信息,这时我们需要将对一个表进行信息查询转而变成对多个表进行信息搜索并进行组合。

解决这样的问题我们通常是运用嵌套查询的方法,首先先执行内部的子查询再将子查询的结果作为外层查询的数据源,最后再在其基础之上进行主查询。这样我们就相当于做了两次的查询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

两种方式查询的结果均为:

1344676152_5152.jpg

由上面两种查询方式可以看出嵌套查询相当于执行了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中的所有记录的组合。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值