قەدەم >> ئەزا مەركىزى | تېما يوللاڭ | يۇمشاق دېتال يوللاڭ | سەھىپىلەر | ياردەم >> بېكەت ئىشلىتىش قوللانمىسى | ئەزا مەركىزى قوللانمىسى | بېكەت خەرىتىسى | RSS

تور نامى، بوشلۇق تور سودىسى تور ساۋاتلىرى پروگرامما بىلىملىرى كومپيۇتېر ساۋاتلىرى ئۆگىتىش دېتاللىرى باش بەت
بىلەرمەن تەۋسىيەلىك بېكەتلەر تور تېخنىكىلىرى قاتتىق دېتال بىلىملىرى مەشغۇلات سىستېمىسى يۇمشاق دېتال بازىرى بېكەت خەۋەرلىرى
ئەقلىي يانفون WordPress DedeCMS ماقالە-مۇلاھىزىلەر كومپيۇتېر تېخنىكىلىرى قاتتىق دېتال بازىرى خەۋەرلىرى IT

باش بەت

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

ۋاقتى: 03-08-2011 | مەنبە: XJCFAN.com | ئاپتورى: قىسمەت | تەھرىر: قىسمەت | كۆرۈلۈشى: قېتىم | ئىنكاس: 0 پارچە


  •  

    Excel2007 گە يېڭى قوشۇلغان ئىقتىدارلار  

     

    ئاپتورى: ئەنۋەرجان ئۆمەر

        

          ئەمەلىي قوللىنىشتا، سانداندىكى ئۇچۇرلار ناھايىتى كۆپ بولۇپ، ئادەتتە بىر جەدۋەلدىكى ئۇچۇر نەچچە مىڭ قۇر، نەچچە تۈمەن ھەتتا ئۇنىڭدىنمۇ كۆپ بولۇپ كېتىدۇ، ئەگەر بۇنداق جەدۋەلدىن ئۇچۇر ئىزدەشكە توغرا كەلسە، سىستېمىنى ئەلالاشتۇرۇپ، سانداننىڭ ئىنكاس قايتۇرۇش سۈرئىتىنى يۇقىرى كۆتۈرۈشىمىز زۆرۈر. سانداننىڭ ئىجرا قىلىش ئۈنۈمىنى يۇقىرى كۆتۈرۈش ۋە سانداننىڭ ئىقتىدارىنى ياخشىلاش ئارقىلىق سانداننى ئەلالاشتۇرۇشقا بولىدۇ. سانداننى ئەلالاشتۇرۇش، ئىچكى ساقلىغۇچنىڭ تەقسىملىنىشى، ساندان قۇرۇلمىسىنىڭ باشقۇرۇلۇشى، جەدۋەلنىڭ لايىھىلىنىشى قاتارلىقلارنى ئۆز ئىچىگە ئالىدۇ. سانداننى ئەلالاشتۇرۇشتىن سىرت 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 جۈملىلىرىنى ئەلالاشتۇرۇش ناھايىتى مۇھىم.
     

          Select (1)جۈملىسىدە «*» بەلگىسىنى ئىشلىتىشتىن ساقلىنىش
          ئەگەر مەلۇم بىر جەدۋەلنىڭ بارلىق ئىستونلىرىنى سۈرۈشتۈرمەكچى بولغاندا select نىڭ كەينىگە «*» نى قوشۇپ ئىشلىتىدىغانلىقىمىزنى ھەممىمىز بىلىمىز. بۇنداق بولغاندا جەدۋەلدىكى بارلىق ئىستونلارنىڭ نامىنى بىرمۇ-بىر يېزىپ چىقىشىمىزنىڭ زۆرۈرىيىتى يوق، ھالبۇكى بۇ يۇقىرى ئۈنۈملۈك ئىزدەش ئۇسۇلى ئەمەس. «*» نى ئىشلىتىپ جەدۋەلدىكى بارلىق ئىستونلارنى سۈرۈشتۈرسەك، ساندان ئانالىز قىلىش جەريانىدا، ئۆزىنىڭ ئۇچۇر لۇغىتىنى ئاقتۇرۇپ، «*» بەلگىسىنى نۆۋەت بىلەن، جەدۋەلدىكى ئىستونلارنىڭ نامىغا ئالماشتۇرۇپ چىقىدۇ، بۇنداق بولغاندا ۋاقىت ئىسراپچىلىقى كېلىپ چىقىپ، ئىزدەش ئۈنۈمىگە زور تەسىر كۆرسىتىدۇ.
          شۇنداق بولغاچقا، select جۈملىسىنى ئىشلىتىپ سۈرۈشتۈرگەندە، جەدۋەلدىكى بارلىق ئىستونلارنىڭ نامىنى بىرمۇ-بىر يېزىپ چىقىڭ، مۇنداقچە ئېيتقاندا «*» بەلگىسىنى ئىشلەتمەڭ، بۇنداق بولغاندا ئىزدەش ئۈنۈمى يۇقىرى بولۇپلا قالماي، پروگراممىنىڭ چۈشىنىشچانلىقىمۇ يۇقىرى بولىدۇ (يەنى سىز يازغان پروگراممىنى بىر كۆرۈپلا بىلگىلى بولىدۇ).
          (2) Where تارماق جۈملىسىدىكى ئۇلاش شەرتىنىڭ تەرتىپىنى مۇۋاپىق تەڭشەش
          SQL ئىزدەش جۈملىسىدە ئىشلىتىلىدىغىنى ئەڭ كۆپ بولغىنى where جۈملىسىدۇر. كۆپ مىقداردىكى ئۇچۇرنى سۈرۈشتۈرىدىغان جەدۋەلگە نىسبەتەن ئېيتقاندا، where جۈملىسىنىڭ كەينىدىكى ئۇلاش شەرتىنىڭ تەرتىپى، ئىزدەش ئۈنۈمىگە زور تەسىر كۆرسىتىدۇ. ئۇلاش شەرتىنىڭ تەرتىپىنى ياخشى تاللاش ئىنتايىن مۇھىم. تۆۋەندە بىر مىسال ئارقىلىق، ئۇلاش شەرتىنىڭ تەرتىپى ئوخشاش بولماسلىقى كەلتۈرۈپ چىقارغان تەسىرنى كۆرۈپ باقايلى.
          تۆۋەندىكى مىسالدا، خىزمەتچى ئۇچۇرى جەدۋىلىدىكى مائاشى 1000 دىن 3000 غىچە بولغان خىزمەتچىنىڭ ئۇچۇرىنى كۆرسىتىپ بېرىش تەلەپ قىلىنىدۇ. بىز ئاۋۋال خىزمەتچى ئۇچۇرى جەدۋىلىنى قۇرايلى:
     

    1. CREATE TABLE employee(  
    2. empno INT PRIMARY KEY,  
    3. eName VARCHAR(20),  
    4. salary INT,  
    5. eptno INT  

     

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

    1. SELECT empno,eName,salary,eptno  
    2. FROM employee  
    3. WHERE salary>1000  
    4. AND salary<3000 

     

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


     

    1. SELECT empno,eName,salary,eptno  
    2. FROM employee  
    3. WHERE salary<3000 
    4. AND salary>1000 

     

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

     

    1. SELECTR.stuID,C.curID,C.curName,R.result  
    2. FROM T_result R,T_curriculum C  
    3. WHERE R.curID=c.curID  
    4. 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 نى ئىشلەتسەك، جۈملە مۇنداق يېزىلىدۇ:

     

    1. SELECT empno, eName,   
    2. FROM employee  
    3. WHERE eptno=10 
    4. OR eptno=15 

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

     

    1. SELECT empno, eName,   
    2. FROM employee  
    3. WHERE eptno IN(10,15) 

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

     

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

     

    1. SELECT teaID, teaName, salary   
    2. FROM T_teacher  
    3. WHERE salary<>3000 

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

     

    1. SELECT teaID, teaName, salary   
    2. FROM T_teacher  
    3. WHERE salary<3000 
    4. OR salary>3000 

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

     

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

    1. SELECT S.stuID, S.stuName, S.age, S.sex   
    2. FROM T_student S  
    3. WHERE Exists  
    4. (SELECT *   
    5. FROM T_result T  
    6. WHERE  
    7. S.stuID=T.stuID  
    8. AND  
    9. T.curID=’105’ 

     

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

     

    1. SELECT S.stuID, S.stuName, S.age, S.sex   
    2. FROM T_student S  
    3. WHERE IN  
    4. (SELECT *   
    5. FROM T_result T  
    6. WHERE  
    7. S.stuID=T.stuID  
    8. AND  
    9. 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 ھالقىلىق سۆزى بىلەن ئورتاق بەلگىلەرنى بىرلىكتە ئىشلىتىش ئارقىلىق ئەمەلگە ئاشۇرىمىز، تۆۋەندە بۇنى ئەمەلگە ئاشۇرۇشنىڭ ئىككى خىل ئۇسۇلى كۆرسىتىلىدۇ.

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

    1. SELECT stuID, stuName, age, sex, brith  
    2. FROM T_student  
    3. WHERE stuID LIKE ‘%100%’ 

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

    1. SELECT stuID, stuName, age, sex, brith  
    2. FROM T_student  
    3. WHERE stuID LIKE ‘s100%’ 

     

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

     

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


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

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

    1. SELECT T_result.stuID, T_student.stuName, T_curriculum.curID, 
    2. T_curriculum.curName, T_result,result FROM T_result,T_curriculum,
    3.  T_student WHERE T_result.surID=T_curriculum.curID AND 
    4. T_result.stuID=T_student.stuID AND T_result.stuID=T_student.stuID AND
    5.  T_student.stuName=’Emet’ ORDER BY T_result.result 

     

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

     

    1. SELECT R.stuID, --学生编号  
    2. S.stuName, --学生姓名  
    3. C.curID, --课程编号  
    4. C.curName, --课程名称  
    5. R.result, --课程成绩  
    6. FROM T_result R, --成绩信息表  
    7. T_curriculum C, --课程信息表  
    8. T_student S --学生信息表  
    9. WHERE R.curID=C.curID --课程编号连接条件  
    10. AND R.stuID=S.stuDI --学生编号连接条件  
    11. AND S.stuName = ‘Emet’ --学生姓名  
    12. ORDER BY R.result --课程成绩 

     

          بۇ ئىككى جۈملىنىڭ نەتىجىسى پۈتۈنلەي ئوخشاش، لېكىن بىرىنچى جۈملىدە زادى نېمىنى تاپماقچى بولغانلىقىنى بىلىش خېلىلا تەس، ئىككىنچى جۈملىنى بىر قاراپلا بىلەلەيمىز. بۇ ئىككى جۈملىدىن ياخشى بولغان SQL جۈملىسى يېزىش ئۇسلۇبىنى يىغىنچاقلاپ چىقالايمىز. 
          (1) SQL دا ھەر بىر تارماق جۈملە يازغاندا بىر قۇر ئالماشتۇرۇشىمىز زۆرۈر. مەسىلەن، SELECT تارماق جۈملىسى، FROM تارماق جۈملىسى، WHERE تارماق جۈملىسى، ORDER BY تارماق جۈملىسى قاتارلىقلار؛
          (2) ئەگەر SELECT تارماق جۈملىسىدە كۆپ ئىستون بولسا ھەمدە ھەر بىر ئىستون ئوخشاش بولمىغان جەدۋەلدىن كەلگەن بولسا، ھەر بىر ئىستوننىڭ ئالدىغا جەدۋەل نامىنى ئالدى قوشۇلغۇچى شەكلىدە يېزىشىمىز ھەمدە ھەر بىرىنى بىر قۇرغا يېزىشىمىز زۆرۈر؛
          (3) ئەگەر FROM تارماق جۈملىسىدە، كۆپ جەدۋەلنى ئۇلاش زۆرۈر بولسا، ھەر بىر جەدۋەلگە قوشۇمچە نام قويۇشىمىز، ھەمدە ئايرىم قۇرغا يېزىشىمىز زۆرۈر؛
          (4) ئەگەر WHERE تارماق جۈملىسىدە كۆپ ئۇلانما شەرت بولسا، ھەربىر شەرتنى ئايرىم قۇرغا يېزىشىمىز زۆرۈر؛
          (5) SQL جۈملىسى ئۈچۈن مۇۋاپىق ئىزاھات يېزىپ مېڭىشىمىز زۆرۈر؛
     

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




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

    ياخشىكەن
    (2)
    50%
    ناچاركەن
    (2)
    50%
    ------分隔线----------------------------

    
    ئىنكاس يېزىش كۆزنىكى
    دۆلەتنىڭ ئالاقىدار تور قانۇنلىرىغا ئاڭلىق رېئايە قىلىپ، شەھۋانىي، ئەكسىيەتچىل، زوراۋانلىق خاراكتېرىدىكى ئۇچۇرلارنى قەتئىي چەكلەيلى! شۇ ئارقىلىق مەدەنىي جەمئىيەت قۇرۇشقا تېگىشلىك تۆھپە قوشايلى!
    باھا بېرىڭ:
    تەستىق كودى: چەكسىڭىز ئالمىشىدۇ
    ئەڭ يېڭى ئىنكاسلار
    سەھىپىلەر
    يوللىغۇچىنىڭ ئارخىپى
    قىسمەت تەپسىلىي ئۇچۇرنى كۆرۈش سۆز قالدۇرۇش دوستلىشىش ئەزا دەرىجىسى: Xjcfan خادىمى تىزىملاتقان ۋاقتى: 08:02 10-02-2010 كىرگەن ۋاقتى: 20:02 10-02-2012
    مەن زىيارەت قىلغان تېمىلار

    تەۋسىيە تېمىلار