mysql嵌套查询效率低,连接查询代替嵌套查询提高select效率
當(dāng)數(shù)據(jù)庫中含有大量數(shù)據(jù)時(shí),而我們所需要的信息不再是僅僅局限于一個(gè)表中的數(shù)據(jù)信息,這時(shí)我們需要將對(duì)一個(gè)表進(jìn)行信息查詢轉(zhuǎn)而變成對(duì)多個(gè)表進(jìn)行信息搜索并進(jìn)行組合。
解決這樣的問題我們通常是運(yùn)用嵌套查詢的方法,首先先執(zhí)行內(nèi)部的子查詢?cè)賹⒆硬樵兊慕Y(jié)果作為外層查詢的數(shù)據(jù)源,最后再在其基礎(chǔ)之上進(jìn)行主查詢。這樣我們就相當(dāng)于做了兩次的查詢select語句的效率也有所降低。而引入連接之后SQL Server將要執(zhí)行的僅僅是一個(gè)查詢。
假如有學(xué)生表和課程表、選課三個(gè)表,查詢選修了化學(xué)的學(xué)生姓名。
T_student
student_ID
student_Name
student_Age
1
李明
11
2
張三
12
T_course
course_ID
course_Name
1001
化學(xué)
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='化學(xué)' ) )
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='化學(xué)'
go
兩種方式查詢的結(jié)果均為:
由上面兩種查詢方式可以看出嵌套查詢相當(dāng)于執(zhí)行了3次查詢而連接查詢卻僅僅是執(zhí)行了一次就達(dá)到了目的
連接查詢結(jié)果是由多表組成的查詢結(jié)果所以查詢的結(jié)果跟連接的方式有很大的關(guān)系,故連接可以分為內(nèi)連接、左向外聯(lián)接、右向外連接、完整外連接、交叉連接幾種連接方式。幾種連接方式完全可以取代嵌套查詢可能查詢到的結(jié)果,就如同上例一樣,所以如果想要在查詢上提高select語句的查詢效率完全可以用連接查詢方式來代替嵌套查詢。
內(nèi)連接即表1 inner join(join)表2on其結(jié)果返回兩個(gè)表中所有匹配的行
左向外聯(lián)接 ?表1 leftouter join(left join)表2on 返回結(jié)果集中將包括數(shù)據(jù)表1中所有的記錄,而不僅僅是連接字段所匹配的記錄。如果數(shù)據(jù)表1的某條記錄在數(shù)據(jù)表2中沒有匹配的記錄,則結(jié)果集相應(yīng)記錄的有關(guān)數(shù)據(jù)表2的所有字段將為空值。
右向外連接表1 right outer join(rightjoin)表2 on 返回結(jié)果集中將包括數(shù)據(jù)表2中所有的記錄,而不僅僅是聯(lián)接字段所匹配的記錄。如果數(shù)據(jù)表2的某條記錄在數(shù)據(jù)表1中沒有匹配的記錄,則結(jié)果集相應(yīng)記錄的有關(guān)數(shù)據(jù)表1的所有字段將為空值
完整外連接表1 full outer join (full join) 表2on 結(jié)果集將包含兩個(gè)數(shù)據(jù)表中的所有記錄,當(dāng)某條記錄在另一個(gè)數(shù)據(jù)表中沒有匹配記錄時(shí),則將另一個(gè)數(shù)據(jù)表的選擇列表字段指定為空值
交叉連接? 表1 cross join 表2 on 如果在select語句中沒有使用where子句,則交叉聯(lián)接將返回?cái)?shù)據(jù)表1和數(shù)據(jù)表2中記錄的笛卡兒乘積,即交叉聯(lián)接返回?cái)?shù)據(jù)表1中的所有記錄,以及數(shù)據(jù)表1中的每一條記錄與數(shù)據(jù)表2中的所有記錄的組合。
總結(jié)
以上是生活随笔為你收集整理的mysql嵌套查询效率低,连接查询代替嵌套查询提高select效率的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 2012服务器系统密钥,WINDOWS
- 下一篇: python实现诺基亚双人贪吃蛇小游戏
