Файл: 02. 09. 2010 1 басылым 03. 09. 2013 2 басылым.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 09.11.2023

Просмотров: 74

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


СІЗДІҢ СҰРАНЫС НӘТИЖЕСІНДЕ МӘТІННІҢ ОРНАЛАСУЫ

'A' символы өзінен-өзі ештеңе білдірмегенде тұрақты болып табылады. Мысалы, 1 саны. Сіз SELECT сұранысының ұсынысында мәтінді қоса тұрақтыларды да қоя аласыз. Алайда, символды тұрақтылар санды тұрақтыларға қарағанда өрнектерде қолданыла алмайды.

Вы можете иметь выражение 1 + 2 в вашем предложении Сіз SELECT ұсынысында 1+2 өрнегін ала аласыз, ал 'A' + 'B' тәрізді өрнектерді қорлдана алмайсыз ; бұл егер де біз 'A' және 'B' айнымалы емес, символ емес тек қана әріптер деп санасақ.

Дегенмен, сіздің сұранысыңыздың нәтижесіне мәтінді енгізу өте қолайлы нәрсе.

Сіз жоғарыдағы мысалдан комиссиондықтарды пайыздық мөлшермен пайыз белгісімен (%) көру мүмкіндігін аласыз. Бұл сізге нәтижеге мынадай нәрселерді символдар мен ескертпелерді төмендегі мысал сияқты енгізе алүға жағдай жасайды. ( Нәтижесі 7.2 –суретінде бейнеленген.)

SELECT snum, sname, city, ' % ', comm * 100 FROM Salespeople;

=============== SQL Execution Log ============

| SELECT snum, sname, city, '%' comm * 100 |

| FROM Salespeople; |

| ==============================================|

| snum sname city |

| ------ -------- ----------- ---- --------- |

| 1001 Peel London % 12.000000 |

| 1002 Serres San Jose % 13.000000 |

| 1004 Motika London % 11.000000 |

| 1007 Rifkin Barcelona % 15.000000 |

| 1003 Axelrod New York % 10.000000 |

===============================================

Сурет 7.2: Сіздің нәтижеңізге символдардың қойылуы

Назар аударыңыз, пайыз белгісі алдындағы бос орын жолдың бір бөлігі сияқты қойылады. Осы ерекшелік нәтижені қойылған ескертпелермен бірге маркалау үшін қолданылуы мүмкін. Сіз осы ескертпе бүкіл кестеге бір рет емес, нәтиженің әрбір жолына шығатынын ұмытпауыңыз керек. Сіз күнбе-күн алынған сандар ретін көрсететін қорытынды етептеу үшін нәтижені өрнектейсіз деп ұйғарайық. Сіз сұранысыңызды форматтау үшін нәтижені келесідегідей маркалай аласыз: ( Сурет 7.3 қараңыз )

SELECT ' For ', odate, ', there are ' COUNT ( DISTINCT onum ), 'orders.'

FROM Orders GROUP BY odate;

Нәтиженің грамматикалық корректсіздігінен 5 Қазанға бұдан да күрделі сұраныс құрмай құтыла алмайсыз. ( Сіз UNION-мен бірге екі сұраныс қолдана аласыз )

=============== SQL Execution Log ==============

| SELECT 'For', odate, ', ' there are '

| COUNT (DISTINCT onum), ' orders ' |

| FROM Orders GROUP BY odate; |

| =============================================== |

| odate |

| ------ ---------- --------- ------ ------- |

| For 10/03/1990 , there are 5 orders. |

| For 10/04/1990 , there are 2 orders. |

| For 10/05/1990 , there are 1 orders. |

| For 10/06/1990 , there are 2 orders. |

================================================

Cурет 7.3: мәтін комбинациясы , өріс мәндері және агрегаттар

Біз 14 Тарауда сипаттаймыз Сіз кестенің әрбір жолына негізделген біртекті өзгеріссіз ескерпенің пайдалы , бірақ шектеулері бар екендігін көре аласыз. Кей кезде бүкіл нәтижеге бір ғана ескертпе жазу немесе өзіңіздің меншікті ескерпеңізді әрбір жолға жазу әлдеқайда үнемді және пайдалы. SQL-ды қолданатын әр түрлі программалар есептеу генераторы тәріздес ( мысалы, Report Writer), олар нәтижені форматтау және кемелдендіру үшін өңделген.


Орнатылған SQL өзі қойылған тілдің мүмкіндіктерін эксплуациялайды. SQL мәліметтер операциясымен өзінен-өзі қызықты келеді. Негізінен, нәтиже, бұл мәлімет және SQL-ды қолданатын программа осы мәліметті қолдана алады және оны бұдан да жақсырақ формаға орналастыра алады.

Алайда, бұл SQL-дың аймағына енбейді.

======= ӨРІС НӘТИЖЕСІНІҢ РЕТТЕЛУІ ========

Біз көрсеткендей, кестелер – бұл мәліметтерден шығатын қандай да бір ретпен реттелмеген мәліметтердің ретсіз жиынтығы. SQL ORDER BY командасын сіздің нәтижеңізді реттеу үшін қолданады. Бұл команда сұраныс нәтижесін таңдалған бағандардың сол және басқадай мөлшерінің мәндерін реттейді. Көпсанды бағандар, бірінің ішінде екіншісі, сонымен қатар, өспелі ( ASC ) немесе кемімелілер ( DESC ) әрбір бағанға реттеледі. Өздігінен өспелілер орнатылған. Тапсырыс берушінің көмегімен ретке келтірілген реттеу кестесін қарастырайық. ( cnum бағанындағы мәндерге назар аударыңыз):

SELECT * FROM Orders ORDER BY cnum DESC;

Сурет 7.4. нәтижесі көрсетілген

=============== SQL Execution Log ==============

| SELECT * |

| FROM Orders |

| ORDER BY cnum DESC; |

| =============================================== |

| onum amt odate cnum snum |

| ------ -------- ---------- ----- ----- |

| 3001 18.69 10/03/1990 2008 1007 |

| 3006 1098.16 10/03/1990 2008 1007 |

| 3002 1900.10 10/03/1990 2007 1004 |

| 3008 4723.00 10/05/1990 2006 1001 |

| 3011 9891.88 10/06/1990 2006 1001 |

| 3007 75.75 10/04/1990 2004 1002 |

| 3010 1309.95 10/06/1990 2004 1002 |

| 3005 5160.45 10/03/1990 2003 1002 |

| 3009 1713.23 10/04/1990 2002 1003 |

| 3003 767.19 10/03/1990 2001 1001 |

================================================

Сурет 7. 4: Өрістің кемуінің көмегімен нәтиженің реттелуі

КӨП САНДЫ БАҒАНДАРДЫҢ КӨМЕГІМЕН РЕТТЕЛУ

Сондай-ақ біз кестені басқа да бағанның көмегімен, мысалы, cnum өрістің ішінде реттелген amt өріс көмегімен реттей аламыз. ( нәтиже 7.5 суретте кескінделген ):

SELECT * FROM Orders ORDER BY cnum DESC, amt DESC;

=============== SQL Execution Log ==============

| SELECT * FROM Orders |

| ORDER BY cnum DESC, amt DESC; |

| =============================================== |

| onum amt odate cnum snum |

| ------ -------- ---------- ----- ----- |

| 3006 1098.16 10/03/1990 2008 1007 |

| 3001 18.69 10/03/1990 2008 1007 |

| 3002 1900.10 10/03/1990 2007 1004 |

| 3011 9891.88 10/06/1990 2006 1001 |

| 3008 4723.00 10/05/1990 2006 1001 |

| 3010 1309.95 10/06/1990 2004 1002 |

| 3007 75.75 10/04/1990 2004 1002 |

| 3005 5160.45 10/03/1990 2003 1002 |

| 3009 1713.23 10/04/1990 2002 1003 |

| 3003 767.19 10/03/1990 2001 1001 |

================================================

Сурет 7.5: Көпмәнді өрістің көмегімен нәтиженің реттелуі

Сіз ORDER BY командасын осы әдіс арқылы бағанның кез-келген санымен қолдана аласыз. Назар аударыңыз, реттелетін бағандар барлық жағдайда SELECT таңдағанда көрсетілуі тиіс. Бұл – ANSI талабы, көпшілік жағдайда бірақ үнемі емес жүйеде жазылады. Келесі команда рұқсат етілмейді, мысалы:



SELECT cname, city FROM Customers GROUP BY cnum;

Сnum өрісі таңдаулы өріс болмағандықтан, GROUP BY оны нәтижені реттеуге қолдануға таба алмайды. Сіздің жүйеңіз бұны істей алса да, нәтижеден реттелудің мәні жақсармайды, сондықтан ORDER BY ұсынысында қолданылған барлық бағандарды қосу (SELECT ұсынысындағы) негізінен қолайлы.

АГРЕГАТТЫ ТОПТАРДЫҢ РЕТТЕЛУІ

ORDER BY сонымен қатар GROUP BY-мен бірге топтарды реттеу үшін қолданыла алады. Егер де солай болса, ORDER BY әрдайым соңғы болып келеді. Міне, соңғы тараудан алынған ORDER BY ұсынысымен толықтырылған мысал. Нәтиже топтастырылудан бұрын топтардың реті еркін болды; енді біз топтарды бір тізбекпен орналастырамыз:

SELECT snum, odate, MAX (amt) FROM Orders

GROUP BY snum, odate GROUP BY snum;

7.6. суретте нәтиже көрсетілген

=============== SQL Execution Log ==============

| SELECT snum, odate, MAX (amt) FROM Orders |

| GROUP BY snum, odate ORDER BY snum ; |

| =============================================== |

| snum odate amt |

| ----- ---------- -------- |

| 1001 10/06/1990 767.19 |

| 1001 10/05/1990 4723.00 |

| 1001 10/05/1990 9891.88 |

| 1002 10/06/1990 5160.45 |

| 1002 10/04/1990 75.75 |

| 1002 10/03/1990 1309.95 |

| 1003 10/04/1990 1713.23 |

| 1004 10/03/1990 1900.10 |

| 1007 10/03/1990 1098.16 |

================================================

7. 6 сурет: Топтардың көмегімен реттелу

Біз өспелі немесе кемімелі ретті көрсетпегендіктен, өспелі реттелу өздігінен қолданылады.

БАҒАН НӨМІРІНЕ СӘЙКЕС НӘТИЖЕНІҢ РЕТТЕЛУІ

Нәтижені реттеуде бағанның атының орнына сіз өрісті көрсету үшін бағанның реттік нөмірін қолдана аласыз. Бұл нөмірлер кесте бағандарының ретіне қарай емес, олардың нәтижесіндегі ретіне жіберілуі мүмкін.

Басқаша айтқанда, SELECT ұсынысында бірінші болып көрсетілген өріс ORDER BY үшін бұл – 1 өріс, мұнда ол кестеде нешінші болып тұрғанына байланысты емес. Мысалы, келесі команданы орындағанда сіз сатушының комиссиондығының ең аз мәні бойынша кему ретімен көрсетілген қандай да бір өрісті көре аласыз.

(Нәтиже 7.7-суретте көрсетілген ):

SELECT sname, comm FROM Salespeople GROUP BY 2 DESC;

=============== SQL Execution Log ============

| (SELECT sname, comm |

| FROM Salespeople |

| ORDER BY 2 DESC; |

| ============================================= |

| sname comm |

| -------- -------- |

| Peel 0.17 |

| Serres 0.13 |

| Rifkin 0.15 |

===============================================

Сурет 7. 7: Қолданбалы нөмірлердің реттелуі

ORDER BY мүмкіндігінің негізгі мақсаттарының бірі – сізге GROUP BY-ды нәтиже бағандарымен, сонымен бірге кесте бағандарымен бірге қолдануға мүмкіндік беру. Агрегатты функция, тұрақтылар немесе өрнектер көмегімен құрылған бағандар SELECT ұсынысының сұранысында GROUP BY-мен бірге қолдануға абсолютті түрде жарамды. Мысалы, 7.8 суретте көрсетілгендей біздің әрбір сатушымыздың ретін санайық және нәтижесін кемімелі ретпен көрсетейік:


SELECT snum, COUNT ( DISTINCT onum ) FROM Orders

GROUP BY snum ORDER BY 2 DESC;

=============== SQL Execution Log ==============

| SELECT snum, odate, MAX (amt) |

| FROM Orders |

| GROUP BY snum |

| ORDER BY 2 DESC; |

| =============================================== |

| snum |

| ----- ---------- |

| 1001 3 |

| 1002 3 |

| 1007 2 |

| 1003 1 |

| 1004 1 |

================================================

Сурет7.8: Нәтиже бағанының көмегімен реттелу

Бұл жағдайда сіз нәтиже бағанының аты болмағандықтан, баған нөмірін қолдануыңыз керек; және сіз агрегатты функцияның өзін қолданбауыңыз керек. Қатаң айтқанда ANSI SQL ережесі бойынша келесі көрсетілгендер іске аспайды, дегенмен кейбір жүйелер бұл талапты орындамайды:

SELECT snum, COUNT ( DISTINCT onum ) FROM Orders

GROUP BY snum GROUP BY COUNTОМ ( DISTINCT onum ) DESC;

Бұл жүйелердің көбімен шеттетілген болады!

NULL ОПЕРАТОРЫ КӨМЕГІМЕН РЕТТЕЛУ

Егер нәтижені реттейтін өрісте бос мәндер (NULL) бар болса, олар өрістің әрбір басқа мәніне не бағынады, не мүлдем сәйкес келмейді. Бұл – ANSI-дің индивидуалды программаларға қалдырған мүмкіндігі. Берілген программа екі форманың бірін пайдаланады.

7 зертханалықу сабағына арналған тапсырмалар :

1.Әрбір сатушының 12% комиссиялығы бар деп есептейік. Рет номерін, сатушы номерін әне сатушы комиссиялығының осы реттегі суммасын шығаратын Реттер кестесіне сұраныс жазыңыз.

2. Әрбір қаладағы жоғарғы бағаны табатын Тапсырушы кестесіне сұраныс жазыңыз. Нәтиже осындай формада болуы қажет:

For the city (city), the highest rating is: (rating).

3. Тапсырушылар ретін кері ретте шығаратын сұраныс жазыңыз. Баға ( rating ) өрісінің нәтижесі тапсырушының атымен немесе оның номерімен белгіленуі керек.

4. Әр күнге жалпы ретті шығаратын және нәтижесін кері ретте орналастыратын сұраныс жазыңыз.

8 зертханалық сабағы (2-сағат).

Тақырыбы: КЕСТЕЛЕРДІҢ ӨЗАРА БІРІГУІ

Әдістемелік нұсқау. Кестелердің өзімен бірігуін қалай жасауға болады?

Кестені өзімен біріктіру үшін,сіз кестенің әрбір жолын, бір уақытта, әрі оның өзімен комбинациясы және кестенің әрбір басқа жолымен комбинациясы етіп алуыңызға болады.

Одан кейін сіз мульти кестелерді біріктірудегі сияқты, әрбір комбинацияны предикат терминімен бағалайсыз. Бұл сізге жалғыз кестелердің ішіндегі әртүрлі позициялар арасындағы белгілі байланыс түрлерін, бірнеше жолды өріс мәнімен анықтау көмегімен, оңай құруға көмектеседі. Мысалы, сіз кестенің өзімен бірігуін бір кестенің екі көшірмесінің бірігуі секілді бейнелеуіңізге болады.Шын мәнінде кестелер көшірілмейді,бірақ SQL бұл мүмкін болатындай команданы орындайды.


Басқаша айтатын болсақ, бұл бірігу-екі кесте арасындағы кез-келген басқа бірігу сияқты, бір ескеретіні бұл жағдайда екі кесте де бірдей.

ПСЕВДОНИМДЕР (бүркеншік аттар)

Кестелердің өзімен бірігуі үшін қолданылатын команда синтаксисі, бір көшірмедегі көптеген кестелердің бірігуі секілді.Сіз кестелерді өзімен біріктіру кезінде, бағанның барлық қайталанатын аттарын, кестенің атының префиксімен толтырасыз. Ішкі сұраныс кезінде осы кестелерге жүгіну үшін, сіз осы кестеге екі әртүрлі ат қоюыңыз керек.

Сіз оны айнымалы диапазоны, корреляция айнымалысы немесе жай ғана псевдонимдер деп аталатын уақыт аттарын анықтау көмегімен істей аласыз.

Сіз оларды сұраныстағы FROM сөйлемінен анықтайсыз. Бұл өте оңай: сіз кесте атын тересіз, бос орын қалтырасыз, содан кейін оған псевдонимді тересіз. Тапсырыс берушілердің, бірдей рейтингқа ие болатын, барлық жұбын табатын бір мысал бар.

(нәтижесі 9.1 суретте көрсетілген ):

SELECT first.cname, second.cname, first.rating FROM Customers first, Customers second

WHERE first.rating = second.rating;

=============== SQL Execution Log ==============

| Giovanni Giovanni 200 |

| Giovanni Liu 200 |

| Liu Giovanni 200 |

| Liu Liu 200 |

| Grass Grass 300 |

| Grass Cisneros 300 |

| Clemens Hoffman 100 |

| Clemens Clemens 100 |

| Clemens Pereira 100 |

| Cisneros Grass 300 |

| Cisneros Cisneros 300 |

| Pereira Hoffman 100 |

| Pereira Clemens 100 |

| Pereira Pereira 100 |

===============================================

9.1 Сурет: Кестенің өзімен бірігуі

(9.1 суретте кейін келтірілетін мысалдардағы сияқты, нәтиже терезесінде толық сұраныс симайды, және сәйкесінше қиылысатынына назар аударыңыздар.)

Жоғарыда көрсетілген команда бойынша SQL "бірінші" және "екінші" деп аталатын екі кестені біріктіретіндей іс-әрекет көрсетеді. Екеуі де –іс жүзінде тапсырыс беруші кестесі болып табылады, бірақ псевдонимдер тәуелсіз қайта өнделуіне рұқсат береді.

Бірінші және екінші псевдонимдер сұраныстың FROM сөйлемінде кесте көшірмесі атынан кейін орналасқан. Назар аударатын болсақ псевдонимдер SELECT сөйлемінде де қолданылуы мүмкін, егер олар FROM сөйлемінде анықталмаса да.

Бұл- өте жақсы. SQL алдымен кез-келген мұндай псевдонимдерді өз үміті бойынша жіберіп отырады, бірақ егер олар ары қарай сұраныстың FROM сөйлемінде анықталмаса команданы орындамайды.

Псевдонимдер тек команда орындалып жатқанда ғана бар болады! Сұраныс аяқталып қалғанда, онда қолданылатын псевдонимдер ешқандай мағынаға ие болмайды.

Енді, тапсырыс берушінің кестесінің екі көшірмесі бар болып тұрған кезде, олармен жұмыс істеу үшін,бұл операцияны SQL дәл басқа бірігулер сияқты- бір псевдонимнің әрбір жолын алып және оны басқа псевдонимнің әрбір жолымен салыстыра отырып өндей алады.