GoodLuck يوللانغان ۋاقتى 2011-11-24 22:10:42

SQL جۈمىلىسىنىڭ ئىقتىدارىنى ئەلالاشتۇرۇش[تېخنىكا]

بۇ ماقالىنى "كومپيۇتېر ۋە تۇرمۇش" ژورنىلىدا ئېلان قىلغان، بۈگۈن كومپيۇتېرىمدىكى ماتېرىياللارنى رەتلەۋېتىپ قايتا ئۇچىرىتىپ قالدىم، لازىملىقلار پايدىلانغاي.


كۆچۈرمىكەشلەر سەل ئىنساپ قىلارسىلار





ئەمەلى قوللىنىشتا، سانداندىكى
ئۇچۇرلار ناھايتى كۆپ بولۇپ، ئادەتتە بىر جەدۋەلدىكى ئۇچۇر نەچچە مىڭ قۇر، نەچچە
تۈمەن ھەتتا ئۇنىڭدىنمۇ كۆ بولۇپ كېتىدۇ، ئەگەر بۇنداق جەدۋەلدىن ئۇچۇر تەكشۈرۈشكە
توغرا كەلسە، سېستېمىنى ئەلالاشتۇرۇپ، سانداننىڭ ئىنكاس قايتۇرۇش سۈرىتىنى يۇقىرى
كۆتۈرىشىمىز زۆرۆر. سانداننىڭ ئىجرا قىلىش ئۈنىمىنى يۇقىرى كۆتۈرۈش، سانداننىڭ
ئىقتىدارىنى ياخشىلاش سانداننى ئەلالاشتۇرۇشقا بولىدۇ. سانداننى ئەلالاشتۇرۇش،
ئىچكى ساقلىغۇچنىڭ تەقسىلمىنىشى، ساندان قۇرۇلمىسىنىڭ باشقۇرۇلىشى، جەدۋەلنىڭ
لاھىيىلىنىشى قاتارلىقلارنى ئۆز ئىچىگە ئالىدۇ. سانداننى ئەلالاشتۇرۇشتىن سىرىت
SQL جۈمىلىسىنى ئەلالاشتۇرۇشمۇ سىستېما ئەلالاشتۇرۇشنىڭ بىر مۇھىم
تەرىپىدۇر.


       SQL جۈمىلىسى ئادەتتە %70 ساندان بايلىق مەنبەسىنى سەرىپ قىلىدۇ.
ئوخشاش بولغان سۈرۈشتۈرۈش نەتىجىسىدە، ئەلالاشتۇرۇلغان
SQL جۈملىسىنى ئىشلىتىش بىلەن ئەلالاشتۇرۇلمىغان SQL جۈمىلىسىنى ئىشلىتىش ئارىسىدىكى پەرق ناھايتى چوڭ بولىدۇ، بەزىدە نەچچە يۈز
ھەسسىدىن ئېشىپ كېتىشى مۇمكىن. شۇڭا
SQL جۈمىلىسى يازغاندا توغرىلىقىغىلا قارىماي، جۈمىلىنىڭ سۈپىتىگىمۇ دېققەت قىلىشىمىز
كېرەك. بۇ ماقالىمىزدە
SQL جۈمىلىسىنىڭ ئەلالاشتۇرۇشنىڭ بىر قانچە خىل ئۇسۇللىرىنى
تونۇشتۇرماقچىمىز.


ئىندېكىس (索引) ئىشلىتىش


Where جۈمىلىسىدە ئۇلىنىش شەرىتىنىڭ تەرتىپىنى مۇۋاپىق تەڭشەش


ھالقىلىق سۆز ئەلالاشتۇرۇش


ساقلاش جەريانى (存储过程) ئىشلىتىش


SQL تىلىنىڭ يېزىلىش شەكلىنى ئۆلچەم قىلىش



1.     مۇۋاپىق ھالەتتە ئىندېكىس قۇرۇپ
مېڭىش


ئادەتتە جەدۋەلگە مۇۋاپىق ئىندېكىس
قۇرۇلسا، سۈرۈشتۈرۈش تىزلىكىنى يۇقىرى كۆتۈرۈپ، سانداننىڭ زىيارەت قىلىش
ئىقتىدارىنى ئۆستۈرىدۇ.


ئالدىنقى
قېتىم مەن بىر مېلىيون قۇر ئۇچۇر بار بىر جەدىۋەلگە قارىتا سۈرۈشتۈرۈش مەشغۇلاتى
ئېلىپ بېرىپ، ئىندېكىس قۇرۇلمىغان ئەھۋالدا 20 مىنۇتتىن ئارتۇق ساقلىغان بولساممۇ
سۈرۈشتۈرۈش نەتىجىسىنى كۆرسىتىپ بەرمەي، ئىزچىل ئىزدەش ھالىتىدە تۇرىۋەردى،
ئىندېكىس قوشقاندىن كېيىن، ئىككى مىنۇتقا يەتمىگەن ۋاقىت ئىچىدە ئىزدەش نەتىجىلىرى
كۆرۈلۈشكە باشلىدى.


بىراق ئۇ ئۇچۇرلارنى يېڭىلاش مەشغۇلاتىنىڭ
(مەسىلەن قىستۇرۇش، ئۆزگەرتىش، ئۆچۈرۈش) سۈرىتىگە تەسىر كۆرسىتىدۇ. شۇ سەۋەبتىن
ئىندېكىس قانچە كۆپ بولسا شۇنچە ياخشى بولىۋەرمەيدۇ. ئىندېكىس قۇرغاندا ئەمەلى
ئەھۋالغا قاراپ، جەدۋەلدىكى مۇۋاپىق بولغان ستونغا ئىندېكىس قۇرۇپ قويساق بولىدۇ.


       1)
ئەگەر
where جۈمىلىسىدە جەدۋەلدىكى مەلۇم بىر قۇر ياكى مەلۇم بىر قانچە قۇرغا
قارىتا دائىم سۈرۈشتۈرۈش ئېلىپ بارساق، سۈرۈشتۈرۈش ئۈنىمىنى يۇقىرى كۆتۈرۈش ئۈچۈن
بۇ قۇرلارغا ئىندېكىس قۇرۇپ قويساق بولىدۇ.


       2)
ئەگەر جەدۋەلدىكى بىر ستون ياكى بىر قانچە ستون ئۈستىدە، كۆپلەپ رەتلەش مەشغۇلاتى
ئېلىپ بارساق، رەتلەش سۈرىتىنى يۇقىرى كۆتۈرۈش ئۈچۈن بۇ ستونلارغا ئىندېكىس قوشۇپ
قويىشىمىز زۆرۆر.


       3)
كۆپ جەدىۋەللەر ئۆز ئارا ئۇلانغاندا، جەدىۋەللەرنىڭ ئۆز ئارا ئۇلىنىدىغان
ستونلىرىغا ئىندېكىس قوشۇپ قويىشىمىز زۆرۆر.


       4)
كۆپ مىقداردا ئۇچۇر يېڭىلاش مەشغۇلاتى (ئۆچۈرۈش، ئۆزگەرتىش، قوشۇش) ئېلىپ
بېرىلىدىغان ستونلارغا قارىتا، ئىندېكىس قوشۇش تەۋسىيە قىلىنمايدۇ.


       گەرچە
جەدۋەلدىكى مۇۋاپىق ستونلارغا ئىندېكىس قۇرۇش ئارقىلىق، ئۇچۇر سۈرۈشتۈرۈش سۈرىتىنى
يۇقىرى كۆتۈرگىلى بولسىمۇ، ئەگەردە
where جۈمىلىسىدە يېزىلغان SQL جۈمىلىسى مۇۋاپىق بولمىسا، يەنىلا SQL جۈمىلىسىنىڭ تەكشۈرۈش ئىقتىدارىغا تەسىر كۆرسىتىدۇ.  تۆۋەندە where جۈمىلىسىگە قارىتا ئەلالاشتۇرۇش چۈشەنچىسى بېرىپ ئۆتىمىز.



2.     سۈرۈشتۈرۈش جۈمىلىسىنى ئەلالاشتۇرۇش


SQL جۈمىلىسىدە ئادەتتە where   تارماق جۈمىلىسىنى ئىشلىتىپ سۈرۈشتۈرۈش
مەشغۇلاتى ئېلىپ بارىمىز،
where جۈمىلىسىدە كۆپىنچە بىر قاتار ھالقىلىق سۆز
ۋە تارماق سۈرۈشتۈرۈشنى ئىجرا قىلىشقا مۇناسىۋەتلىك سۈرۈشتۈرۈش مەشغۇلاتلىرىنى
قىلىشقا ئىھتىياجلىق بولىمىز، شۇڭا
where تارماق جۈمىللىرى ئىچىدە ، سۈرۈشتۈرۈشكە
ئىشلىتىلىدىغان
SQL جۈمىلىلىرىنى ئەلالاشتۇرۇش ناھايتى مۇھىم.


1.   Select جۈمىلىسىدە «*» بەلگىسىنى ئىشلىتىشتىن ساقلىنىش


ئەگەر مەلۇم بىر جەدۋەلنىڭ بارلىق
ستونلىرىنى سۈرۈشتۈرمەكچى بولغاندا
select نىڭ كەينىگە «*» نى قوشۇپ ئىىشلىتىدىغانلىقىمىزنى ھەممىمىز
بىلىمىز. بۇنداق بولغاندا جەدۋەلدىكى بارلىق ستونلارنىڭ نامىنى بىرمۇ-بىر يېزىپ
چىقىشىمىزنىڭ زۆرۆرىيىتى يوق، ھالبۇكى بۇ يۇقىرى ئۈنۈملۈك سۈرۈشتۈرۈش ئۇسۇلى
ئەمەس. «
*» نى ئىشلىتىپ جەدۋەلدىكى بارلىق ستونلارنى
سۈرۈشتۈرسەك، ساندان ئانالىز قىلىش جەريانىدا، ئۆزىنىڭ ئۇچۇر لۇغىتىنى ئاقتۇرۇپ،
«*» بەلگىسىنى نۆۋەت بىلەن، جەدۋەلدىكى ستونلارنىڭ نامىغا ئالماشتۇرۇپ چىقىدۇ،
بۇنداق بولغاندا ۋاقىت ئىسراپچىلىقى كېلىپ چىقىپ، سۈرۈشتۈرۈش ئۈنىمىگە زور تەسىر
كۆرسىتىدۇ.


شۇنداق بولغاچقا، select جۈمىلىسىنى ئىشلىتىپ سۈرۈشتۈرگەندە، جەدۋەلدىكى بارلىق ستونلارنىڭ نامىنى
بىرمۇ-بىر يېزىپ چىقىڭ، مۇنداقچە ئېيىتقاندا «*» بەلگىسىنى ئىشلەتمەڭ، بۇنداق
بولغاندا سۈرۈشتۈرۈش ئۈنىمى يۇقىرى بولۇپلا قالماي، پروگراممىنىڭ چۈشىنىشچانلىقىمۇ
يۇقىرى بولىدۇ(يەنى سىز يازغان پروگراممىنى بىر كۆرۈپلا بىلگىلى بولىدۇ).


2.   Where تارماق جۈمىلىسىدىكى ئۇلاش شەرتىنىڭ تەرتىپىنى مۇۋاپىق تەڭشەش


SQL سۈرۈشتۈرۈش جۈمىلىسىدە ئىشلىتىلىدىغىنى ئەڭ كۆپ بولغىنى where جۈمىلىسىدۇر. كۆ مىقداردىكى ئۇچۇرنى سۈرۈشتۈرىدىغان جەدۋەلگە
نىسبەتەن ئېيىتقاندا،
where جۈمىلىسىنىڭ كەينىدىكى ئۇلاش شەرتىنىڭ تەرتىپى، سۈرۈشتۈرۈش
ئۈنۈمىگە زور تەسىر كۆرسىتىدۇ. ئۇلاش شەرتىنىڭ تەرتىپىنى ياخشى تاللاش ئىنتايىن
مۇھىم. تۆۋەندە بىر مىسال ئارقىلىق، ئۇلاش شەرتىنىڭ تەرتىپى ئوخشاش بولماسلىقى
كەلتۈرۈپ چىقارغان تەسىرنى كۆرۈپ باقايلى.


تۆۋەندىكى مىسالدا، خىزمەتچى ئۇچۇرى
جەدۋېلىدىكى مائاشى 1000 دىن 3000 غىچە بولغان خىزمەتچىنىڭ ئۇچۇرىنى كۆرسىتىپ
بېرىش تەلەپ قىلىنىدۇ. بىز ئاۋال خىزمەتچى ئۇچۇرى جەدۋېلىنى قۇرايلى:


CREATE TABLE employee(


empno INT PRIMARY KEY,


eName VARCHAR(20),


salary INT,


eptno INT


)



employee جەدۋېلىدە جەمئى empno، eName، salary ۋە eptno قاتارلىق 4 ستون بولۇپ، خىزمەتچى نومۇرى، خىزمەتچى نامى، خىزمەتچى
مائاشى ۋە تەۋە بۆلۈم قاتارلىقلارنى كۆرسىتىدۇ. بۇ جەدۋەلدە 100 مىڭ قۇر ئۇچۇر
بار، بۇنىڭ ئىچىدە
empno باش كونۇپكا (主键) .


       employee دىن مائاشى 1000 دىن 3000 غىچە
بولغان خىزمەتچى ئۇچۇرىنى چىقىرىپ بېرىشنى تەلەپ قىلسا، بۇنى ھەل قىلىشنىڭ مۇنداق
ئىككى خىل ئۇسۇلى بار.


       بىرىنچى
خىل ئۇسۇل:


SELECT empno, eName, salary, eptno


FROM employee


WHERE salary>1000


AND salary<3000


       ئىككىنچى
خىل ئۇسۇل:


SELECT empno, eName, salary, eptno


FROM employee


WHERE salary<3000


AND salary>1000


       بۇ
ئىككى
SQL جۈمىلىسىنىڭ سۈرۈشتۈرۈش نەتىجىسى پۈتۈنلەي ئوخشاش، لىكىن
سۈرۈشتۈرۈش ئۈنۈمىدە پەرق بار. ئەگەر
employee دىكى خادىملارنىڭ مائاشى ھەممىسى 1000 دىن
يۇقىرى بولسا، بىرىنچى خىل ئۇسۇلدىكى بىرىنچى سۈرۈشتۈرۈش شەرتى ، كۆپ مىقداردىكى
سىستېما بايلىق مەنبەسىنى ئېگەللەيدۇ. نىسبەتەن ئېيىتقاندا ئىككىچنى خىل ئۇسۇلدىكى
بىرىنچى سۈرۈشتۈرۈش شەرتى سۈرۈشتۈرۈش دائىرسىنى زور دەرىجىدە كىچىكلىتىدۇ.
مۇنداقچە ئېيىتقاندا خادىملارنىڭ مائاشى ھەممىسى 1000 دىن يۇقىرى بولغان ئەھۋالدا
ئىككىچنى خىل سۈرۈشتۈرۈش ئۇسۇلىنىڭ ئۈنۈمى بىرىنچى خىلغا قارىغاندا يۇقىرى بولىدۇ.


چۈشەنچە:where تارماق جۈمىلىسىنى ئىشلىتىپ سۈرۈشتۈرگەندە،
چەكلەشچانلىقى ئەڭ يۇقىرى بولغان ئىزدەش شەرتىنى ئەڭ ئالدىغا قويۇش كېرەك.


       ئەگەر where تارماق جۈمىلىسىدە جەدۋەللەرنى ئۇلاپ سۈرۈشتۈرۈش مەشغۇلاتى بولسا،
جەدۋەللەرنى ئۇلىغان ۋاقىتتا، جەدۋەللەر ئارا ئالاقە ئورنىتىدىغان بۆلىكىنى
ئالدىغا، ماس بولغان سۈزۈش شەرتىنى كەينىگە قويىشىمىز زۆرۆر. مەسىلەن، ئوقوغۇچى
نومۇرى
s102203 بولغان ئوقوغۇچىنىڭ دەرس تاللاش نەتىجىسىنى سۈرۈشتۈرمەكچى بولساق،
بۇنىڭ
SQL جۈمىلىسى تۆۋەندىكىچە بولىدۇ:


SELECT R.stuID,C.curID,C.curName,R.result


FROM T_result
R,T_curriculum  C


WHERE R.curID=c.curID


AND   R.stuID="s102203"


بۇ SQL جۈمىلىسىدە، where تارماق جۈمىلىسىدىكى R.curID=c.curID ئۇلاش
شەرتىنى،
R.stuID="s102203" سۈزۈش شەرتىنى
ئىپادىلەيدۇ.


چۈشەنچە:
كۆپ جەدۋەللەر ئارا ئۇلاش ئارقىلىق سۈرۈشتۈرگەندە،
where جۈمىلىسىكى ئۇلاش شەرىتى ئالدىغا، سۈزۈش شەرتى كەينىگە قويۇلىشى كېرەك.


3.   OR ھالقىلىق سۆزىنى
ئىشلىتىشتىن ساقلىنىش


ئەگەر سىز ستون ماسلاشتۇرۇلغان ھالدا
سۈرۈشتۈرمەكچى بولسىڭىز، بۇنىڭ ئىككى خىل ئۇسۇلى بار، بىر خىلى
OR ھالقىلىق سۆزىنى ئىشلىتىش، يەنە بىر خىلى IN ھالقىلىق سۆزىنى ئىشلىتىش. بىراق، SQL جۈمىلىسىدە OR نىڭ ئورنىغا IN نى ئىشلىتىشىمىز زۆرۆر. چۈنكى OR ھالقىلىق سۆزى ئىندېكىس ئىشلەتمەيدۇ، شۇنداق بولغاچقا IN نى ئىشلەتسەك سۈرۈشتۈرۈش سۈرىتىنى يۇقىرى كۆتۈرگىلى بولىدۇ.


مەسىلەن، خادىم ئۇچۇرىنى
كۆرسىتىدىغان
employee جەدۋېلىدە (eptno ستونىغا ئىندېكىس قۇرۇلغان)، تەۋە بۆلۈمنىڭ
تەرتىپ نومۇرى 10 ۋە 15 بولغان خادىمنىڭ ئۇچۇرىنى سۈرۈشتۈرمەكچى. ئەگەر
OR نى ئىشلەتسەك، جۈمىلە مۇنداق يېزىلىدۇ:


SELECT empno, eName,


FROM employee


WHERE eptno=10


OR  eptno=15


يۇقارقى SQL جۈملىسى تەۋە بۆلۈمنىڭ تەرتىپ نومۇرى 10 ۋە 15 بولغان خادىمنىڭ
ئۇچۇرىنى تېپىپ چىقىرىپ بېرىدۇ، ئىجرا قىلىش سۈرىتى تەخمىنەن
0.1729s  . ئەگەر IN نى ئىشلەتسەك، جۈمىلە مۇنداق بولىدۇ:


SELECT empno, eName,


FROM employee


WHERE eptno IN(10,15)


يۇقارقى SQL جۈمىلىسىنىڭ ئىجرا قىلىش سۈرىتى 0.1410s . بۇ ئىككى جۈمىلىنىڭ كۆرسىتىش نەتىجىسى گەرچە ئوخشاش بولسىمۇ، OR نى ئىشلەتكەندە ئىندېكىس ئىشلىتىلمەيدىغان بولغاچقا ئىجرا قىلىش
سۈرىتىدە پەرق كۆرۈلگەن، ئەلۋەتتە ، ئۇچۇر مىقدارىنىڭ كۆپ بولىشىغا قاراپ، بۇ
ۋاقىت پەرىقىمۇ چوڭىيىپ بارىدۇ.


4.   <> ۋە != مەشغۇلات بەلگىلىرىنى ئىشلىتىشتىن ساقلىنىش


ئالدىدا بىز Where تارماق جۈمىلىسىدە
ئارفىمىتىكىلىق سېلىشتۇرۇش بەلگىلىرى (
算数比较运算符) نى ئىشلىتىشنى بىلىمىز. ئەگەر
ئوقۇتقۇچى ئۇچۇرى جەدۋېلىدىن مائاشى 3000 بولمىغان ئوقۇتقۇچىنىڭ ئۇچۇرىنى
سۈرۈشتۈرۈش تەلەپ قىلىنسا، ناھايتى ئاسانلا
<> ياكى != بەلگىسىنى ئىشلىتىپ ۋەزىپىنى
تاماملايمىز، جۈمىلە مۇنداق بولىدۇ:


SELECT teaID, teaName, salary


FROM T_teacher


WHERE salary<>3000


بۇ ئۇسۇل ئارقىلىق لازىم بولغان نەتىجىگە ئېرشەلەيمىز، لىكىن بۇ خىل
ئۇسۇلدا يەنىلا ئىندېكىس ئىشلىتىلمەيدۇ، شۇنداق بولغاچقا كۆپ مىقداردىكى ئۇچۇرغا
نىسبەتەن بۇ خىل ئۇسۇلنىڭ ئۈنۈمى ئانچە يۇقىرى بولمايدۇ. شۇڭا ئۈنۈمنى يۇقىرى
كۆتۈرۈش ئۈچۈن تۆۋەندىكى ئۇسۇلنى قوللىنىمىز:


SELECT teaID, teaName, salary


FROM T_teacher


WHERE salary<3000


OR salary>3000


بۇ ئىككى خىل ئۇسۇلنىڭ چىقىرىپ بېرىدىغان نەتىجىسى ئوخشاش، لېكىن ئاستىدىكى
ئۇسۇلنىڭ ئۈنۈمى ئۈستىدىكىسىگە قارىغاندا كۆپ ياخشى. ئەلۋەتتە، بۇ پەرق ئۇچۇرنىڭ
مىقدارى ناھايتى كۆ بولغاندا ئاندىن ئىپادىلىنىپ چىقىدۇ. شۇڭا ئامال بار
< , > , <= قاتارلىق
بەلگىلەرنى ئىشلىتىشكە ئادەتلىنىشىمىز، ھەرگىزمۇ
<> ياكى != قاتارلىق بەلگىلەرنى
ئىشلىتىشكە ئادەتلىنىپ قالماسلىقىمىز زۆرۆر.


5.    مۇناسىۋەتلەشكەن
تارماق سۈرۈشتۈرۈشتە
IN نىڭ ئورنىغا EXIST ئىشلىتىش


ئەمەلى قوللىنىش جەريانىدا ، كۆرسىتىلگەن ئىپادىنىڭ ھەر قانداق بىر
قىممىتىنى ئالماقچى بولساق،
where جۈملىسىدىن كېيىن، مۇناسىۋەتلەشكەن تارماق
سۈرۈشتۈرۈش (
相关子查询) ئىشلەتسەك
بولىدۇ.
Where تارماق
جۈمىلىسىدە ئىككى خىل مۇناسىۋەتلەشكەن تارماق سۈرۈشتۈرۈش ئۇسۇلى تەمىنلەنگەن، بىر
خىلى
Exists ھالقىلىق
سۆزى ، يەنە بىر خىلى بولسا
IN ھالقىلىق سۆزى. مەسىلەن، رەت نومۇرى 105
بولغان دەرسنى تاللىغان ئوقوغۇچىلارنىڭ ئۇچۇرىنى سۈرۈشتۈرمەكچى بولساق،
Exists ھالقىلىق
سۆزىنى ئىشلەتكەن جۈمىلە مۇنداق بولىدۇ:


SELECT S.stuID, S.stuName, S.age, S.sex


FROM T_student
S


WHERE Exists


(SELECT *


FROM T_result  T


WHERE


S.stuID=T.stuID


AND


T.curID="105"


ئەگەر IN ھالقىلىق
سۆزىنى ئىشلەتسەك، جۈمىلە مۇنداق بولىدۇ:


SELECT S.stuID, S.stuName, S.age, S.sex


FROM T_student
S


WHERE IN


(SELECT *


FROM T_result  T


WHERE


S.stuID=T.stuID


AND


T.curID="105"


يۇقارقى ئىككى جۈمىلىنىڭ نەتىجىسى ئوخشاش بولۇپ، ھەر ئىككىلىسى رەت نومۇرى
105 بولغان دەرسنى تاللىغان ئوقوغۇچىنىڭ ئۇچۇرلىرىنى چىقىرىپ بېرىدۇ. كۆرۈشكە
بولىدۇكى
IN ھالقىلىق
سۆزىنى ئىشلىتىپ يازغان جۈمىلە
Exists ھالقىلىق سۆزىنى ئىشلەتكەنگە قارىغاندا
چۈشىنىش قولاي، بىراق
Exists ھالقىلىق
سۆزىنى ئىشلەتكەن جۈمىلىنىڭ ئىقتىدارى ،
IN نى ئىشلەتكەننىڭكىدىن يۇقىرى.


         چۈنكى، IN نى
ئىشلەتكەن جۈمىلىنى ئىجرا قىلغاندا ، ساندان ئالدى بىلەن تارماق سۈرۈشتۈرۈشتىكى
SQL جۈمىلىسىنى
ئىجرا قىلىدۇ، ئاندىن سۈرۈشتۈرۈش نەتىجىسىنى بىر ۋاقىتلىق جەدۋەلگە قويىۋالىدۇ.
ئاساسى سۈرۈشتۈرۈش بۆلىكى، تارماق بۆلەك ئىجرا قىلىنىپ بولغاندىن كېيىن
(سۈرۈشتۈرۈش نەتىجىسى ۋاقىتلىق جەدۋەلگە قويۇلۇپ بولغاندىن كېيىن) ئىجرا قىلىنىدۇ.
Exists نى
ئىشلەتكەن
SQL جۈمىلىسىدە بولسا ئاۋال ئاساسى سۈرۈشتۈرۈش
بۆلىكىنىڭ بىرىنچى قۇرىنى تەكشۈرىدۇ، ئاندىن تارماق سۈرۈشتۈرۈش بۆلىكى ئارقىلىق
ماس كېلىدىغان ئۇچۇرنى ئىزدەيدۇ، ئەگەر تاپالىسا، سىرىتقى قاتلامدىكى
Where تارماق
جۈمىلىسى
True قايتۇرىدۇ،
ھەمدە بۇ بىر قۇر ئۇچۇرنى يوللايدۇ. ئەگەر تاپالمىسا بۇنىڭ ئەكىسىچە بولىدۇ، بۇ
جەريان تەكرار ئىجرا بولۇپ، تاكى تەكشۈرۈش تۈگىگىچە داۋاملىشىدۇ. بۇنداق بولغاندا
IN نى
ئىشلەتكەنگە قارىغاندا ۋاقىت تېجىلىدۇ، بۇ
Exists نىڭ ئۈنۈمى IN غا
قارىغاندا يۇقىرى بولۇشنىڭ سەۋەبى.


         ئوخشاش
پىكىر يولىمىز بويىچە  
NOT EXISTS نىڭ
ئىشلەتكەننىڭ ئۈنۈمى
NOT IN نى ئىشلەتكەنگە قارىغاندا يۇقىرى بولىدۇ.  شۇڭلاشقا ئەمەلى قوللىنىشتا IN نىڭ ئورنىغا EXISTS نى ئىشلىتىشنى تەۋسىيە
قىلىمىز.


6.    LIKE ھالقىلىق
سۆزىنى ئىشلىتىش


LIKE ھالقىلىق سۆزى ئارقىلىق غۇۋا ئىزدەش ئەمەلگە
ئاشۇرۇلىدۇ ، كۆپىنچە ئۇنى "
% " ۋە "_" بەلگىلىرى بىلەن
ماسلاشتۇرۇپ ئىشلىتىمىز.
LIKE   بىلەن ئورتاق بەلگىلەر (通配符) نى بېرىكتۈرۈپ ئىشلىتىش
ئارقىلىق، لازىم بولغان ھەر قانداق ئۇچۇرنى ئالغىلى بولىدىغاندەك كۆرۈنىدۇ. لېكىن
ئورتاق بەلگىلەرنىڭ ئىشلىتىلىشى مۇۋاپىق بولمىغاندا،  سۈرۈشتۈرۈشنىڭ ئۈنىمىگە تەسىر كۆرسىتىدۇ.


مەسىلەن، ئوقوغۇچىلىق رەت نومۇرىنىڭ تەركىبىدە 100 بولغان ئوقوغۇچىلارنىڭ
ئۇچۇرىنى كۆرسىتىش تەلەپ قىلىندى. بۇنى
LIKE ھالقىلىق سۆزى بىلەن ئورتاق
بەلگىلەرنى بىرلىكتە ئىشلىتىش ئارقىلىق ئەمەلگە ئاشۇرىمىز، تۆۋەندە بۇنى ئەمەلگە
ئاشۇرۇشنىڭ ئىككى خىل ئۇسۇلى كۆرسىتىلىدۇ.


بىرىنچى خىل ئۇسۇل:


SELECT stuID, stuName, age, sex, brith


FROM  T_student


WHERE stuID LIKE "%100%"


ئىككىنچى خىل ئۇسۇل:


SELECT stuID, stuName, age, sex, brith


FROM  T_student


WHERE stuID LIKE "s100%"


بۇ ئىككى خىل ئۇسۇلنىڭ نەتىجىسىمۇ ئوخشاش، بىراق سۈرۈشتۈرۈش ئۈنۈمى
ئوخشىمايدۇ. بىرىنچى خىل ئۇسۇلدا ئورتاق بەلگە
% باشتىلا ئۇچىرىغاچقا، ساندان
ستون
stuID غا ئىندېكىس
ئىشلەتمەيدۇ، ئىككىنچى خىل ئۇسۇلدا بولسا ئىشلىتىدۇ.


       بۇ يەردە تەكىتلەپ
قويىدىغىنىمىز، ئەمەلى قوللىنىش جەريانىدا بىرىنچى خىل ئۇسۇلنى ئىشلەتكەندىلا
ئاندىن كۆزلىگەن مەقسەتكە يەتكىلى بولىدىغان تەلەپلەرگە يولىقىشىمىز مۇمكىن، لىكىن
بىرىنچى خىل ئۇسۇلنىڭ ئۈنۈمىنىڭ تۆۋەن بولىدىغانلىقىنى بىلىشىمىز كېرەك.


7.    HAVING تارماق
جۈمىلىسىنى ئىشلىتىشتىن ساقلىنىش


HAVING تارماق جۈمىلىسى گۇرۇپىغا ئايرىلغاندىن
كېيىنكى نەتىجىنى سۈزۈشكە ئىشلىتىپ، گۇرۇپپىغا ئايرىغاندىن كېيىنكى سۈرۈشتۈرۈش
نەتىجىسىگە چەك قويۇلىدۇ.
HAVING تارماق جۈمىلىسى ئادەتتە بارلىق خاتىرىنى
تەكشۈرۈپ بولغاندىن كېيىن، سۈزۈش ئېلىپ بارىدۇ، ئۇنىڭ ئۈستىگە
HAVING تارماق
جۈمىلىسىنى ئىشلەتكەندە كۆپىنچە رەتلەش، سىتاتىستىكىلاش مەشغۇلاتلىرى ئېلىپ
بېرىلىدۇ. بۇ مەشغۇلاتلارنى
SQL ئەلالاشتۇرغۇچىسى بىر قاتار ئارتۇقچە
خىزمەتلەرنى قىلىدۇ، بۇنىڭغا ئارتۇقچە ۋاقىت ئىسراپ بولىدۇ. شۇڭا ئەگەر
WHERE تارماق جۈمىلىسىدىلا نەتىجىگە چەك قويۇشقا بولساHAVING تارماق
جۈمىلىسىنى ئىشلەتمەسلىنى تەۋسىيە قىلىمىز، يەنى
SQL ئەلالاشتۇرغۇچىسىنىڭ ئارتۇقچە خىزمەت قىلىشىنىڭ
ئالدىنى ئېلىپ ، سۈرۈشتۈرۈش ئۈنىمىنى يۇقىرى كۆتۈرىمىز.


8.    SQL جۈمىلىسىنىڭ
يېزىلىشىنى ئۆلچەملەشتۈرۈش


SQL جۈمىلىسى يازغاندا، جۈمىلىنىڭ ئوقۇشچانلىقىنى
(
可读性)
ئويلىشىشىمىز زۆرۆر. گەرچە
SQL جۈملىسىنىڭ رەتلىك يېزىلىشى، ئىجرا بولۇش
ئۈنىمىگە تەسىر كۆرسەتمىسىمۇ، جۈمىلىنى ئوقۇشچانلىقى ياخشى بولغان ھالەتتە يېزىش
بەكمۇ مۇھىم. ئەمەلىيەت جەريانىدا، ئەگەر بىر ئادەم يازغان
SQL جۈمىلىسىنى
باشقىلار چۈشىنەلمىسە، پروگراممىنى تەڭشەش جەريانىدا قېيىنچىلىق كۆپىيىدۇ. تۆۋەندە
ئىككى
SQL جۈمىلىسىنىڭ
يېزىلىش شەكلىنى سېلىشتۇرىمىز.


ئوقۇشچانلىقى ناچار بولغان جۈمىلە:


SELECT T_result.stuID, T_student.stuName,
T_curriculum.curID, T_curriculum.curName, T_result,result      FROM         T_result,
T_curriculum, T_student         WHERE   T_result.surID=T_curriculum.curID                   AND  T_result.stuID=T_student.stuID                AND  T_result.stuID=T_student.stuID                AND  T_student.stuName=
"Emet"       ORDER BY T_result.result


ئوقۇشچانلىقى ياخشى بولغان جۈمىلە:


SELECT R.stuID,                                                 --学生编号


                              S.stuName,                                            --学生姓名


                              C.curID                                                 --课程编号


                              C.curName,                                           --课程名称


                              R.result,                                                --课程成绩


FROM T_result  R,                                          --成绩信息表


                              T_curriculum  C,                                   --课程信息表


                              T_student  S                                         --学生信息表


WHERE        R.curID=C.curID                                     --课程编号连接条件


AND             R.stuID=S.stuDI                                      --学生编号连接条件


AND             S.stuName
=
"Emet"                  
--
学生姓名


ORDER BY   R.result                           --课程成绩


بۇ ئىككى جۈمىلىنىڭ نەتىجىسى پۈتۈنلەي ئوخشاش،
لىكىن بىرىنچى جۈمىلىدە زادى نېمىنى تاپماقچى بولغانلىقىنى بىلىش خېلىلا تەس،
ئىككىنچى جۈمىلىنى بىر قاراپلا بىلەلەيمىز. بۇ ئىككى جۈمىلىدىن ياخشى بولغان
SQL جۈمىلىسى
يېزىش ئۇسلۇبىنى يېغىنچاقلاپ چىقالايمىز.


1.     SQL دا ھەر بىر تارماق جۈمىلە
يازغاندا بىر قۇر ئالماشتۇرىشىمىز زۆرۆر. مەسىلەن،
SELECT تارماق جۈمىلىسى، FROM تارماق
جۈمىلىسى،
WHERE تارماق
جۈمىلىسى،
ORDER BY تارماق
جۈمىلىسى قاتارلىقلار؛


2.     ئەگەر SELECT تارماق جۈمىلىسىدە كۆپ ستون
بولسا ھەمدە ھەر بىر ستون ئوخشاش بولمىغان جەدۋەلدىن كەلگەن بولسا، ھەر بىر
ستوننىڭ ئالدىغا جەدۋەل نامىنى ئالدى قوشۇلغۇچى شەكلىدە يېزىشىمىز ھەمدە ھەر بىرىنى
بىر قۇرغا يېزىشىمىز زۆرۆر؛


3.     ئەگەر FROM تارماق جۈمىلىسىدە، كۆپ
جەدۋەلنى ئۇلاش زۆرۆر بولسا، ھەر بىر جەدۋەلگە قوشۇمچە نام قويۇشىمىز، ھەمدە
ئايرىم قۇرغا يېزىشىمىز زۆرۆر؛


4.     ئەگەر WHERE تارماق جۈمىلىسىدە كۆپ ئۇلانما
شەرت بولسا، ھەربىر شەرتنى ئايرىم قۇرغا يېزىشىمىز زۆرۆر؛


5.     SQL جۈمىلىسى ئۈچۈن مۇۋاپىق
ئىزاھات يېزىپ مېڭىشىمىز زۆرۆر؛


bluewolf يوللانغان ۋاقتى 2011-11-24 23:16:08

كۆچۈرمىكەشلەر  مەنبەسى ئاپتورىنى ئەسكەرتىپ قويۇپ كۆچۈرسەكمۇ بولمامدا؟  {:92:}

kokkaptar يوللانغان ۋاقتى 2011-11-25 11:27:51

ما تىمىنى ساقلاپ قوياي، جۈملىنى قالايمىقان يىزىپ تاس قالىمەن مۇلازىمىتىرنى قاتۇرۇپ قويغىلى.   {:92:}

GoodLuck يوللانغان ۋاقتى 2011-11-25 15:07:00

SQL جۈمىلىلىرىنىڭ بەزى جايلىرى بەك قالايمىقان بولاپ كېتىپتۇ، مەن كەچ تەرەپلەردە بىر ۋاقىت چىقىرىپ، Word نۇسخىسىنى يوللاپ قوياي. لازىملار چۈشۈرۋېلىلار، يا بولمىسا مۇشۇ تېمىغا ئې-خەت ئادرېسىنى قالدۇرساڭلار يوللاپ بەرسەممۇ بولىدۇ.

tumaq يوللانغان ۋاقتى 2011-11-26 22:16:45

ئوبدان ماقالە بوپتۇ، ئاتالغۇلارنى چۈشىنىشلىك ئاپسىلە، 通配符 غا باشقا گەپ تاپساڭلا بولغۇدەك. 相关子查询 نى «مۇناسىۋەتلەشكەن تارماق سۈرۈشتۈرۈش» دېمەي «ئالاقىدار قىسمىي سۈرۈشتۈرمە» دىسەك بولا.

GoodLuck يوللانغان ۋاقتى 2011-11-26 22:33:55

http://ishare.iask.sina.com.cn/f/21465037.html  

لازىم قىلىدىغانلار Word نۇسخىسىنى بۇ يەردىن چۈشۈرۋالغايسىلەر .
بەت: [1]
: SQL جۈمىلىسىنىڭ ئىقتىدارىنى ئەلالاشتۇرۇش[تېخنىكا]