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
兩種方式查詢的結果均為:
由上面兩種查詢方式可以看出嵌套查詢相當于執行了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效率的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2012服务器系统密钥,WINDOWS
- 下一篇: sql镶嵌查询_SQL 嵌套查询