№1 басылым 03. 09. 2013 №2 басылым



бет5/5
Дата31.01.2018
өлшемі1,89 Mb.
#36376
1   2   3   4   5

COUNT-тың мәндер емес, бағандармен бірге қолданылуы

Кесте жолдарының жалпы санын есептеу үшін өріс атының орнына COUNT-ты жұлдызшамен бірге қолданыңыз, нәтижесі 6.4 суретте көрсетілген келесі мысалдағыдай

SELECT COUNT (*) FROM Customers

COUNT жұлдызшамен бірге NULL-ді де, дубликаттарды да қосады, осы себептен DISTINCT қолданылмайды. DISTINCT COUNT-қа қарағанда ерекше өрісте барлығын өшіретін жоғарғы мәнді нөмірлерді енгізе алады.

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

| SELECT COUNT (*) FROM Customers; |

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

| ------- |

| 7 |

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



Сурет 6. 4: Шамалардың орнына жолдардың саналуы.

Осы өрісте NULL берілгендері бар немесе аз қалатын жолдар.

DISTINCT COUNT (*)-мен қолданыла бермейді, өйткені берілгендер базасында жақсы өңделген және ұсталатындармен ешқандай әрекетте болмайды. Бұндай берілгендер базасында толығымен бос болатын ешқандай жолдар немесе дубликаттар болмауы керек. (біріншісі ешқандай мәліметтерге ие болмайды, ал соңғылары толығымен алынатындар) Егер де екінші жағынан бәрі бір толығымен бос жолдар болатын болса, онда сіз COUNT-тың бұл мәліметті сізден жасырғанын қаламайсыз.
АГРЕГАТТЫҚ ФУНКЦИЯЛАРҒА ДУБЛИКАТТАРДЫҢ ҚОСЫЛУЫ

Агрегаттық функциялар DISTINCT-қа қарағанда өрістің атының алдына қойылатын ALL аргументін қолдана алады, бірақ та ол қарама-қарсылықты білдіреді: дубликаттарды қосу. ANSI техникалық жағынын бұны COUNT-қа рұқсат етпейді, бірақ та көптеген реализациялар бұл шектеуді жұмсартады.

COUNT-пен қолданылғанда ALL мен *-ның бір-бірінен айырмашылығы -

* ALL өрістің атын аргумент ретінде қолданады.

* ALL NULL - дің мәндерін санай алмайды.

Әзірше * NULL мәндерін қосатын жалғыз аргумент және ол тек қана COUNT-пен бірге қолданылады; COUNT-тан өзгеше функциялар NULL мәндерін барлық жағдайда ескермейді (*игнорируют*). Келесі команда (COUNT) Тапсырыс беруші кестесінде rating өрістегі NULL мәндерін емес сандарды санайды. ( қайталауларды қоса алғанда)

SELECT COUNT ( ALL rating ) FROM Customers;

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



Тақырыбы: СКАЛЯРЛЫ ӨРНЕКТЕ САЛЫНҒАН АГРЕГАТТАР

Әдістемелік нұсқау.

Осыған дейін сіз агрегатттық функцияларды жалғыз өрістермен бірге аргумент ретінде қолдандыңыз. Енді сіз агрегатттық функцияларды бір немесе бірнеше өрістерден тұратын скалярлы өрнектерден құралған аргументтермен қолдан аласыз.

( Егер де сіз бұны істесеңіз, DISTINCT рұқсат етілмейді. ) Реттелу кестесінде әрбір тапсырыс берушіге алдыңғы төленбеген баланс (поле blnc) сақтайтын тағы бір жолға ие болады деп есептейік. Сіз осы қосымша суммаға ие болып, алдыңғы балансқа қосылатын ағынды балансты табуыңыз керек.

Сіз ең үлкен төленбеген балансты келесі түрде таба аласыз:

SELECT MAX ( blnc + (amt) ) FROM Orders;

Кестенің әрбір жолына тапсырыс беруші үшін бұл сұраныс blnc және amt –ға салынып отырады және ол табылатын ең үлкен мәнді таңдау керек. Әрине, әзірге тапсырыс берушілер көп мәнді реттер ала алады, олардың төленбеген баланстары әр ретке бөлек бағаланып отырады. Кейінгі мерзімді рет ең үлкен төленбеген балансқа ие болуы мүмкін. Онда, ескі баланс жоғарыдағы сұраныстағыдай таңдалуы керек.

GROUP BY ҰСЫНЫСЫ

GROUP BY Ұсынысы басқа өріс терминіндегі ерекше өрісте мәндердің ішкі жиынын анықтауға және агрегаттың функциясын ішкі жиынға қолдануға мүмкіндік береді.

Бұл сізге бір ғана SELECT ұсынысында өрістер мен агрегатты функцияларды біріктіруге мүмкіндік береді.Мысалы, сізге әрбір сатушыдан алынған ең көп сумманы табу керек болсын.

Сіз snum өрісінің әрбір мәніне Реттелу кестесінен MAX (amt) таңдай отырып бөлек-бөлек сұраныс жасай аласыз.

Алайда, GROUP BY Сізге олардың барлығын бір-ақ командаға орналастыруға мүмкіндік береді:

SELECT snum, MAX (amt) FROM Orders GROUP BY snum;

Бұл сұраныстың нәтижесі 6.5. суретте көрсетілген.

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

| SELECT snum, MAX (amt) |

| FROM Orders |

| GROUP BY snum; |

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

| snum |

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

| 1001 767.19 |

| 1002 1713.23 |

| 1003 75.75 |

| 1014 1309.95 |

| 1007 1098.16 |

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

Сурет 6.5: Әрбір сатушыдан максималды сумманың табылуы.

GROUP BY толықтай өріс мәні арқылы табылатын агрегаттық функцияның барлық сериясы қолданылады. Бұл кезде, әрбір топтағы барлық жол сол snum өріс мәнінен тұрады, және MAX функциясы әрбір топқа жекелей қолданылады. Бұл GROUP BY қолданылатын өріс мәні, ол еңгізу тобында бір ғана мән қабылдайды, агрегаттық функцияға ұқсас. Нәтижесінде агрегат пен өрістерді біріктіреді.

Сол сияқты көпсандық GROUP BY өрісін қолдануға болады.

Мысалы, егер сіз әрбір сатушының күніне алатын жалақысын есептеу керек болсын. Ол үшін сіз сатушының әр күнде алатын жалақысын біріктіріп, осылардың әрбіріне MAX функциясын қолданамыз.(төмендегідей):

SELECT snum, odate, MAX ((amt)) FROM Orders GROUP BY snum, odate;

Шыққан нәтиже 6.6 суретте көрсетілген.

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

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

| GROUP BY snum, odate; |

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

| snum odate |

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

| 1001 10/03/1990 767.19 |

| 1001 10/05/1990 4723.00 |

| 1001 10/06/1990 9891.88 |

| 1002 10/03/1990 5160.45 |

| 1002 10/04/1990 75.75 |

| 1002 10/06/1990 1309.95 |

| 1003 10/04/1990 1713.23 |

| 1014 10/03/1990 1900.10 |

| 1007 10/03/1990 1098.16 |

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

Сурет 6.6: Әрбір күнде алынғанжоғарғы қосынды

Әрине, бос топтар өйткені сатушы күніне тізім бойынша жасамаған, сондықтан нәтиже көрінбейді.

HAVING қосымшасы.

Айталық, алдыңғы мысалда, сіз $3000.00 аспайтын максималды сумманы алдық . Сіз агрегаттық функцияны WHERE қосымшасында қолдана алмаймыз ( егер сіз келесі сұранысты қолдансаңыз), өйткені предикаттар бір жолдық терминде бағаланады, агрегаттық функция жолдық топ терминімен бағаланады. Бұл дегеніміз сіз төмендегіге ештеңе істей алмайсыз:

SELECT snum, odate, MAX (amt) FROM Oreders WHERE MAX ((amt)) > 3000.00

GROUP BY snum, odate;

Бұл қолайсыз интерпретация ANSI-дан ауытқу болы табылады. $3000.00 асқан максималдық бағасын көру үшін, сіз HAVING қосымшасын қолданамыз.

HAVING қосымшасы қолданылатын енгізілген топты жою үшін критерииді қолданады.

Төмендегі дұрыс команда болып табылады:

SELECT snum, odate, MAX ((amt)) FROM Orders GROUP BY snum, odate

HAVING MAX ((amt)) > 3000.00;

Осы сұраныстың нәтижесі 6.7 суретте көрсетілген.


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

| SELECT snum, odate, MAX (amt) |

| FROM Orders |

| GROUP BY snum, odate |

| HAVING MAX (amt) > 3000.00; |

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

| snum odate |

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

| 1001 10/05/1990 4723.00 |

| 1001 10/06/1990 9891.88 |

| 1002 10/03/1990 5160.45 |

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

Сурет 6. 7: Агрегаттық мән тобын жою

HAVING сөйлеміндегі аргументтер GROUP BY командасында қолданылатын SELECT сөйлеміндегі ережелермен бағынады.Олар шығару тобына бір мағына беру керек.Келесі командаға тыйым салынады.

SELECT snum, MAX (amt) FROM Orders GROUP BY snum

HAVING odate = 10/03/1988;

HAVING сөйлемі бір топқа бір мәннен көп мән беретіндіктен, HAVING сөйлемі арқылы оdate өрісін шақыру мүмкін емес.Мұндай жағдайға тап болмас үшін HAVING сөйлемі таңдап алынған GROUP BY өріс және агрегаттарына сілтеме жасауы тиіс.Жоғарғыда айтылған сұраныс жасаудың дұрыс әдісі бар.( шығарылуы 6.8 суретінде көрсетілген ):

SELECT snum, MAX (amt) FROM Orders WHEREodate = 10/03/1990

GROUP BY snum;

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

| SELECT snum, odate, MAX (amt) |

| FROM Orders |

| GROUP BY snum, odate; |

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

| snum |

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

| 1001 767.19 |

| 1002 5160.45 |

| 1014 1900.10 |

| 1007 1098.16 |

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

6.8 сурет: Әр сатушының 3 қазанға ең жоғарғы табысының соммасы.

odate өрісі жоқ болғандықтан, бұл мәліметтердің мәні басқа мысалдарға қарағанда төмен,сондықтан таңдалған өрістер де болмауы керек.Қорытынды «бұл-3 қазандағы ең үлкен рет» - деген сияқты сөйлемдер қосу керек.7 тарауда қорытындыңызға мәтінді қалай қою керек екендігін көрсетеміз. Жоғарыда айтылғандай, HAVING шығару тобында бір мәнді қамтитын аргументтер қолданылады. Тәжірибе жүзінде агрегаттық функцияларға сілтемелер – ортақ,бірақ GROUP BY көмегімен таңдап алынған өріс мүмкін.Мысалы,біз Serres және Rifkin ретін көргіміз келеді:

SELECT snum, MAX (amt) FROM Orders GROUP BY snum

HAVING snum B (1002,1007);

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

| SELECT snum, MAX (amt) |

| FROM Orders |

| GROUP BY snum |

| HAVING snum IN ( 1002, 1007 ); |

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

| snum |


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

| 1002 5160.45 |

| 1007 1098.16 |

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

6. 9 сурет: HAVING GROUP BY өрісімен қолданылуы

КІРІСТІРІЛГЕН АГРЕГАТТАР ЖАСАМАҢДАР

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

SELECT odate, MAX ( SUM (amt) ) FROM Orders

GROUP BY odate;

Командасының ықтималдығы ауытқиды. ( Қолайлы болып табылатын кейбір іске асырулар, тіпті олар қиын болса да, салынған (вложенные) агрегаттар өте пайдалы болуы мүмкін,бұл шектеуді жазбайды).Жоғарғыдағы командада,мысалы, SUM odate өрісіндегі әрбір топта қолданылуы керек, ал MAX барлық топқа жалғыз мән тудыратын, барлық топта қолданылуы керек.Бірақ GROUP BY сөйлемі odate өрісінің әрбір тобы үшін жалғыз шығару жолы болу керектігін түсіндіреді.


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

1. 3 қазандағы барлық табыс соммасын санайтын сұраныс жазыңыз.

2. Тапсырушы кестесінде city өрісіндегі мән NULL әртүрлі санын санайтын сұраныс құрыңыз.

3. Әрбір тапсырушы үшін ең төмен сомманы таңдайтын сұраныс құрыңыз.

4. Тапсырушының аты-жөні G әріпінен басталатындай етіп алфавиттік ретпен таңдайтын сұраныс құрыңыз.

5. Әр қаланың жоғарғы бағасын таңдайтын сұраныс құрыңыз.

6. Әр күн сайын өз ретімен тапсырушы санын тіркейтін сұраныс құрыңыз.(Егер сатушы сол күні бірден көп ретті қамтыса, онда ол бір рет қана есепке алынуы керек).
7 зертханалық сабағы (2-сағат).

Тақырыбы: СҰРАНЫСТЫҢ НӘТИЖЕСІН ҚАЛЫПТАСТЫРУ

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

=========== ЖОЛДАР ЖӘНЕ ӨРНЕКТЕР============

Сіздің сұраныстарыңыздың нәтижесін кемелдендіре алатындарды SQL берілгендер базасында негізделгендер ұсынып отыр. Әрине, олар бір бағдарламадан екінші бағдарламаға өзгеріске төзеді және олардың ұсыныстары біздің есебімізге кірмейді, алайда, SQL стандартында пайда болғанбес ерекшелік сізге өріс мәндерінің жай ғана нәтижесін және агрегатты берілгендерді емес, одан да көп мүмкіндіктерді ұсынады.

ӨРІС КӨМЕГІМЕН ТАҢДАЛҒАН СКАЛЯР ӨРНЕК.

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

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

Бұл сұраныстың нәтижесі 7.1.-суретінде көрсетілген.

НӘТИЖЕ БАҒАНДАРЫ

Жоғарыдағы мысалдың соңғы бағаны белгісіз ( яғни атсыз), өйткені бұл нәтиже бағаны.Нәтиже бағандары – бұл олардың кестеден жай ғана алынбай, басқаша әдіспен сұраныста пайда болған берілгендер бағаны. Сіз оларды агрегаттарды қолданғанда әрдәйім пайдаланасыз.

=============== 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.1: Сіздің сұранысыңыздағы өрнектердің орналасуы:

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

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

'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 дәл басқа бірігулер сияқты- бір псевдонимнің әрбір жолын алып және оны басқа псевдонимнің әрбір жолымен салыстыра отырып өндей алады.

(УСТРАНЕНИЕ ИЗБЫТОЧНОСТИ) Назар аударатын болсақ біз жасаған қорытынды әрбір комбинация үшін екі түрлі мағынаға ие болады, сондай-ақ екіншісінде кері ретпен болады. Бұлай болудың себебі әрбір мағына әррбір псевдонимде бірінші рет көрсетілген, және екінші рет ( сим-

метриялы) предикатта көрсетілген. Осылайша, псевдонимде А мағынасы алдымен В мағынасымен бір комбинацияда таңдап алынады, ал содан кейін екінші псевдонимде А мағынасы бірінші псевдонимдегі В мағынасының кңомбинациясымен таңдап алынады.Біздің мысалда бірінші Hoffman Clemens-пен бірге таңдап алынды,ал содан кейін Clemens Hoffman-мен бірге таңдап алынды.Дәл осы жағдай Cisneros және Grass, Liu және Giovanni-мен орындалды және т.с.с.Сонымен қатар Liu және Liu жолын шығару үшін, әрбір жол өз-өзімен салыстырылды. Бұндайдан аулақ болудың қарапайым тәсілі екі мағынаға, біреуі екіншісіне қарағанда кем немесе оған әліпбилік тәртіппен қайталанып отыратындай, тәртіп орнату болып табылады. Бұл предикатты ассиметриялық қылады, сондықтан да дәл сол мағыналар керісінше ретте қайталанып алынбайды, мысалы:

SELECT tirst.cname, second.cname, first.rating

FROM Customers first, Customers second

WHERE first.rating = second.rating AND first.cname < second.cname;

Бұл сұраныстың нәтижесі 9.2 суретте көрсетілген.

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

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

| SELECT first.cname, second.cname, first.rating |

| FROM Customers first, Customers second |

| WHERE first.rating = second.rating |

| AND first.cname < second.cname |

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

| cname cname rating |

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

| Hoffman Pereira 100 |

| Giovanni Liu 200 |

| Clemens Hoffman 100 |

| Pereira Pereira 100 |

| Gisneros Grass 300 |

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

9.2 сурет:

Егер сіз сұраныста жолдарды өзімен салыстыруды енгізгіңіз келсе <орнына < = қолдануыңызға болады.

ҚАТЕЛЕРДІ ТҮЗЕТУ

Осылайша біз SQL-дің бұндай ерекшелігін қателердің белгілі бір түрін тексеру үшін қолданамыз.Кестелер ретін қарап отырған кезде, сіз cnum және snum өрістері тұрақы бір байланыста болатынын көресіздер.Әрбір тапсырыс беруші тек бір сатушыға ғана белгіленуі керек, әр қашан тапсырыс берушінің номері тәртіп кестесінде шығып тұруы керек, ол сатушының номерімен сәйкес келуі керек. Келесі команда осы облыстағы кез-келген келіспеушілікті анықтайды:

SELECT first.onum, tirst.cnum, first.snum,

second.onum, second.cnum,second.snum

FROM Orders first, Orders second

WHERE first.cnum = second.cnum

AND first.snum < > second.snum;

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

КӨПТЕГЕН БҮРКЕНІШ АТТАР

Командадағы кестенің альтернативті атын құру кезінде кез –келген уақытта бүркеніш ат қолдана аласыз. Мысалы , егер сіздің кестеңіздің аты өте ұзақ және күрделі болса , онда сіз олардың орнына a немесе b сияқты символдардан тұратын қарапайым бүркеніш ат қолдануыңызға болады, және олар SELECT және предикат сөйлемдерінде кестенің аты орнына қолданылады. Олар сұранысқа қатысты қолданылады ( 11 бөлімде талқыланған ).
ОДАН ДА КӨП КОМПЛЕКСТІК БІРІГУЛЕР

Сіз сұраныстағы бір кестеге кез-келген бүркеніш ат санын қолдана аласыз. Бірақ берілген SELECT* сөйлемінде екіден көп бүркеніш ат қолдануға болмайды.

Айталық, сіз сатушыңызға тапсырыс берушіңізді тағайындаған жоқсыз. Әр компания әрбір сатушысынна бастапқыда әрқайсысы бір рейтингтік мәннен тұратын үш тапсырыс берушіден тағайындау керек. Қай сатушыға қай тапсырыс берушіні сіз өзіңіз білесіз, бірақ сіз тағайындайтын тапсырыс берушілеріңіздің мүмкін комбинациясын көру үшін келесі сұранысты қолданасыз. ( Қорытынды 9.3 суретте көрсетілген ):

SELECT a.cnum, b.cnum, c.cnum

FROM Customers a, Customers b, Customers c

WHERE a.rating = 100 AND b.rating = 200 AND c.rating = 300;

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

| AND c.rating = 300; |

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

| cnum cnum cnum |

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

| 2001 2002 2004 |

| 2001 2002 2008 |

| 2001 2003 2004 |

| 2001 2003 2008 |

| 2006 2002 2004 |

| 2006 2002 2008 |

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

9.3 Сурет Әр түрлі рейтингтегі қолданушылар комбинациясы

Көріп тұрғандай бұл сұраныс үш мәнді бағадан тұратын тапсырыс берушілер комбинациясынан тұрады, сондықтан бірінші баған 100 деген бағадан тұратын тапсырыс берушілерден, екіншісі 200 және соңғысы 300 деген бағадан тапсырыс берушілерден тұрады. Олар барлық мүмкін болатын комбинацияларда қайталанады. Бұл- бір бағанда мәндерді салыстыратындықтан, GROUP BY немесе ORDER BY- мен қатар орындалмайтын топтамалардың сұрыпталуы.

SELECT сөлеміндегі FROM сұраныс сөйлемінде кездесетін әрбір бүркеніш атты немесе кестені әрдайым қолдану қажет емес. Кейде , сұраныс предикатында шақырылғандықтан, сөйлем немесе кесте сұранысқа ие болады. Мысалы, келесі сұраныс сатушысы Serres ( snum 1002 ) болған барлық қалалардың тапсырыс берушілерін табады.( Қорытынды 9.4 суретте көрсетілген ):

SELECT b.cnum, b.cname FROM Customers a, Customers b

WHERE a.snum = 1002 AND b.city = a.city;

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

| SELECT b.cnum, b.cname |

| FROM Customers a, Customers b |

| WHERE a.snum = 1002 |

| AND b.city = a.city; |

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

| cnum cname |

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

| 2003 Liu |

| 2008 Cisneros |

| 2004 Grass |

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

9.4 Сурет Serres –ке қатысты барлық қалалардағы тапсырыс берушілерді табу .

a бүркеніш аты бағанның мәні snum = 1002 болмаған жағдайда предикатты қате етеді. Осындай жағдайда бүркеншік ат Serres сатушысының тапсырыс берушісінен басқасының барлығын жібереді. в бүркеншік аты сол а-ға арналған қаланың ағымдағы атының мәніне сәйкес келетін барлық жолдарға дұрыс деп саналады; егер қаланың мәні а-да берілсе, сұраныс кезінде а бүркеншік атының жолы 1 рет дұрыс болады. в бүркеншік атының осы жолдарын табу – а бүркеншік атының жалғыз мақсаты, сондықтан да біз барлық бағандарды бірге таңдамаймыз. Көріп тұрғанымыздай, Serres меншік тапсырушылары өзі табылып тұрған қаланың өзінен табылады, сондықтан олардың а бүркеншік атынан таңдалуы міндетті болады. Қысқасы, бүркеніш ат Serres, Liu, және Grass тапсырушыларының жолдарын табады. в бүркеншік аты кез келген тапсырушыларды табады (San Jose және Berlin сәйкесінше), Liu, және Grass- тың өзін қосқанда.

Сіз сондай – ақ әр түрлі кестелер және жалғыз кестенің бүркеншік аты болатын біріктіру құра ласыз. Келесі сұраныс Тұтынушылардың кестесін өз-өзімен ьіріктіреді:бір сатушының қызметін пайдаланатын тапсырушылардың барлық жұптарын табу үшін. Дәл сол уақытта бұл сұраныс тапсырыс берушіні Сатушылар кестесімен (сол сатушы атымен) байланыстырады (қорытындысы 9.5 суретінде көрсетілген):

SELECT sname, Salespeople.snum, first.cname second.cname

FROM Customers first, Customers second, Salespeople

WHERE first.snum = second.snum AND Salespeople.snum = first.snum

AND first.cnum < second.cnum;

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

| SELECT cname, Salespeople.snum, first.cname |

| second.cname |

| FROM Customers first, Customers second, Salespeople |

| WHERE first.snum = second.snum |

| AND Salespeople.snum = first.snum |

| AND first.cnum < second.cnum; |

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

| cname snum cname cname |

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

| Serres 1002 Liu Grass |

| Peel 1001 Hoffman Clemens |

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

Сурет-9.5: Кестенің өз-өзімен және басқа кестелермен бірігуі



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

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

2. Тапсырыс берушілердің мәліметі, олардың аттары бойынша реттелген жұптардың барлығын шығаратын сұраныс құр. Алдыңғыдағыдай қорытындыдан шығатын көшірмелерді алып тастау қажет.

3. Барлық тапсырыс берушілердің атын (name) мен қаласын (city) Hoffman-дағыдай бағамен шығатын сұраныс жаз. Hoffman-ның бағасын емес, оның cnum өрісін пайдаланатын сұраныс құр, және де сол өріс бағаның күрт өзгеруіне байланысты қолданылатын болсын.


4. студенттің өздік жұмысы
Өздік жұмысты ұйымдастыру бойынша әдістемелік нұсқаулар: студенттің өздік жұмысы (СӨЖ) реферат түрінде орындалады және студенттердің өздік жұмысын қойлатын талаптарға сәйкес тапсырылады.

Өздік жұмысты бақылау келесі формада өтуі мүмкін:

– жасалған жұмысты көрсету;

– өздік меңгерген тақырып бойынша баяндама;

– аудиториялық сабақтарды немесе ОБСӨЖ-де ауызша сұрау;

– жазбаша орындалған тапсырмаларды қорғау.

Өздік жұмысының нәтижелерін тапсырмаған студент қорытынды аттестацияға жіберілмейді.

Өз бетімен меңгерген материал оқытушумен бірге меңгерілген материалмен қоса қорытынды бақылауға шығарылады.



4.1. Студенттердің оқытушы басшылығымен орындайтын өздік жұмыстары(СОӨЖ)

СОӨЖ №1

SQL – МЕН ЖҰМЫС

1. Тапсырыс берушілер кестесіндегі қай өріс алғашқы кілт болып табылады?

2. Тапсырыс берушілер кестесіндегі 4-ші баған нені білдіреді?

3. Жол басқаша қалай аталады? Баған?

4. Кестенің алғашқы бес жолды көру үшін сұраныс жасамауға болады. Неге?



СОӨЖ №2

SQL-мен ЖҰМЫС

1. SQL-да берілген типтердің арасындағы негізгі айырмашылықтары қандай?

2. ANSI типі DATA мәліметтерін оқи ма(Распознает) ?

3. SQL-дің қай ішкі бөлімі кестеге мәліметтер орналастыру үшін қолданылады?

4. Кілтті сөз дегеніміз не?



СОӨЖ 3

SQL – МЕН ЖҰМЫС

1. Реттер кестесідегі рет нөмірді, соманы және күнді шығаратын SELECT командасын жазыңыз.

2. Реттер кестесіндегі нөмірі 1001-ге тең болатын сатушылардың барлық жолдарын шығаратын сұраныс жазыңыз.

3. Кестені бағандарын мына ретпен city, sname, snum, comm шығаратын сұраныс жазыңыз.

4. San Jose-дегі әрбір тапсырушының атымен бірге оның бағасын(rating) шығаратын SELECT командасын жазыңыз.

5. Реттер кестесінен барлық сатушылардың snum өрісінің мәндерін ағымдағы ретпен қайталаусыз шығаратын сұраныс жазыңыз.
СОӨЖ №4

SQL – МЕН ЖҰМЫС

1.$1,000-дан аспайтын мәннен тұратын барлық реттерді бере алатын сұраныс жаса.

2.Лондондағы барлық сатушыларға 10-нан артық комиссиялық sname және city өрісін беретін сұраныс жаса.

3. Нәтижесі барлық тапсырыс берушілердің бағасы =< 100 болатын Тапсырыс беруші кестесіне сұраныс жаса, егер олар Римде болмаса.

4. Сұраныстың нәтижесі қандай?

SELECT * FROM Orders

WHERE (amt < 1000 OR NOT (odate = 10/03/1990 AND cnum > 2003 ));

5. Келесі сұраныстың нәтижесі қандай?

SELECT * FROM Orders

WHERE NOT ((odate = 10/03/1990 OR snum > 1006) AND amt > = 1500 );

6. Сұранысты оңайлатып қалай жазуға болады?

SELECT snum, sname, city, comm. FROM Salespeople

WHERE ( comm > + .12 OR comm < .14 );



СОӨЖ 5

SQL – МЕН ЖҰМЫС

1. 3 қазандағы барлық табыс соммасын санайтын сұраныс жазыңыз.

2. Тапсырушы кестесінде city өрісіндегі мән NULL әртүрлі санын санайтын сұраныс құрыңыз.

3. Әрбір тапсырушы үшін ең төмен сомманы таңдайтын сұраныс құрыңыз.

4. Тапсырушының аты-жөні G әріпінен басталатындай етіп алфавиттік ретпен таңдайтын сұраныс құрыңыз.

5. Әр қаланың жоғарғы бағасын таңдайтын сұраныс құрыңыз.

6. Әр күн сайын өз ретімен тапсырушы санын тіркейтін сұраныс құрыңыз.(Егер сатушы сол күні бірден көп ретті қамтыса, онда ол бір рет қана есепке алынуы керек).



СОӨЖ №6

SQL – МЕН ЖҰМЫС

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

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

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

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

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

СОӨЖ №7

SQL – МЕН ЖҰМЫС

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

2. Тапсырыс берушілердің мәліметі, олардың аттары бойынша реттелген жұптардың барлығын шығаратын сұраныс құр. Алдыңғыдағыдай қорытындыдан шығатын көшірмелерді алып тастау қажет.



3. Барлық тапсырыс берушілердің атын (name) мен қаласын (city) Hoffman-дағыдай бағамен шығатын сұраныс жаз. Hoffman-ның бағасын емес, оның cnum өрісін пайдаланатын сұраныс құр, және де сол өріс бағаның күрт өзгеруіне байланысты қолданылатын болсын.

СОӨЖ-ні жүргізу түрі: Зертханалық сабақтың тақырыбы бойынша тапсырмаларды орындау керек.

4.2.Өздік жұмыс тақырыптары:


  1. ДҚ түсінігі. Терминдердің мағынасы: кесте, біріншілік кілт.

  2. Деректерді ұсынудың моделдері

  3. Деректер қорының обектілерін басқару.

  4. Кестелер арасында байланыстар. Кесте құруда қолданылатын типтер.

  5. SELECT таңдау операторы. Кестеден жазбаларды таңдау. WHERE және ORDER BY операторларының элементтері, олардың тағайындалулары.

  6. SQL- сұранысы көмегімен кестелерді біріктіру. Ішкі біріктірулер.

  7. Кестелер арасындағы байланыс. Сұранымдар.

  8. Сұраным көмегiмен белгілі-бір өрістер бойынша кестедегі жазбаларды сұрыптау.

  9. Реляциялық деректер базасы. SQL . Мәліметтердің әртүрлі типтері

  10. SQL -ді кестеден ақпаратты шығаруда қолдану. Қосымшаларды пайдалануда таңдау жасау

  11. Реляциялық және бульдік операторларды одан да көп предикаттарды шығаруда пайдалану

  12. Шарттарға арнайы операторларды қолдану.

  13. Агрегаттық функциялар.

  14. Кестелердің өзара бірігуі

  15. Деректер қорының қауіпсіздігін басқару.

СӨЖ-н жүргізу түрі: Тақырыптар бойынша сұрақтарға ауызша және жазбаша жауаптар берілуі керек.

Достарыңызбен бөлісу:
1   2   3   4   5




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет