Файл қосу

SQL мәліметтерінің типі




|ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ                             |
|СЕМЕЙ қаласының ШӘКӘРІМ АТЫНДАҒЫ СЕМЕЙ МЕМЛЕКЕТТІК УНИВЕРСИТЕТІ                 |
|3 деңгейлі СМК құжаты     |ОӘК                 |ПОӘК                            |
|                          |                    |042-14.2.07.1.20.5/03-2013      |
|«Деректер базасының       |02.09.2010 ж        |                                |
|теориясы»  пәнінің        |№1 басылым          |                                |
|оқу-әдістемелік кешені    |орнына              |                                |
|                          |03.09.2013          |                                |
|                          |№2 басылым          |                                |












                        «ДЕРЕКТЕР БАЗАСЫНЫҢ ТЕОРИЯСЫ»

                        пәнінен оқу-әдістемелік кешен


              «5В060200» - « Информатика » мамандығына арналған







                         ОҚУ-ӘДІСТЕМЕЛІК МАТЕРИАЛДАР

















                                    Семей
                                    2013



                                   мазмұны





1. Глоссарий


2. Дәрістер

3. Зертханалықу сабақтары

4. Студенттің өздік жұмысы




      глоссарий




    Бұл ОӘМ-да келесі терминдер және оларға түсініктемелер қолданылған:
   1.1. Деректер базасы (ДБ) –  бұл  қандайда  бір  пәндік  облысқа  жататын
құрылымдық деректердің аталынған жиынтығы.
   1.2. Деректер базасын басқару жүйесі (ДББЖ) – бұл деректер  базасын  құру
үшін,   оларды  актуалды  жағдайда  қолдау  мен  қажетті  ақпаратты  іздеуді
ұйымдастыру үшін қажет программалық және тілдік әдістер кешені.
   1.3. Өріс – ақпараттық бөлінбейтін өлшемі – реквизиттерге сәйкес  келетін
деректерді логикалық ұйымдастырудың элементарлық бірлігі.
   1.4.  Жазба  -  өрістердің  логикалық  байланысқан   жиынтығы.   Жазбаның
көшірмесі – оның өрістерінің нақты мәндері құрамына кіретін жазбаларды  жеке
өңдеу.
   1.5. Файл (кесте) – бір құрылымның жазбалар көшірмесінің жиынтығы.
   1.6. Деректер моделі – деректер құрылымы мен  оларды  өңдеу  операциялары
жиынтығы.
   1.7. Торап – қандайда бір объектіні сипаттайтын деректер атрибуттарынының
жиынтығы.
   1.8. Концепция  жалпы  мағынада  процестер  мен  құбылыстарды  зерттеудің
қандай да бір жүйесін көрсетеді. Концепцияның құрама бөліктеріне  принциптер
мен әдістемелер жиынтығы жатады.
   1.9. Әдістеме –мәселелерді шешу әдістерінің жиынтығы.






















































































    2. Дәрістер

    Дәріс сабағының құрылымы:

                                  Дәріс №1.

   Дәріс тақырыбы:     Деректер базасының архитектурасы

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

      Қажетті  деректер  базасын  жылдам  жасауға  рұқсат   ететін   әртүрлі
программалар жиыны бар: Microsoft Access, Microsoft FoxPro, Paradox,  dBase,
InterBase, Oracle. Олардың  ішінде  Paradox  пен  dBase-да  деректер  базасы
папкалар сияқты, ал әрбір кесте жеке  файл  сияқты  анықталады,  ал  Access,
InterBase және SQL-серверлерінің көпшілігі деректер  базасынан  тұратын  бір
үлкен файлды қолданады.

      Деректер базасы – белгілі бір пәндік аумаққа жататын  құрылымдық  түрі
бар деректердің атауы бар жинақ.

      Деректер  базасы  үшін  ақпаратты  өңдеу  және  рұқсат  алу  тәсілдері
бойынша,  сонымен  қатар  деректер   базасының   орналасқан   орны   бойынша
қосымшалар архитектурасы бірнеше түрлерге бөлінеді.
 • Жергілікті архитектура – программа және деректер базасы  бір  компьютерде
   орналасқан.
 • Файл-серверлік архитектура – деректер базасы сервер деп аталатын желідегі
   негізгі (орталық) болып бөлінген  компьютерде  орналасады.  Ал  клиенттік
   программалар орнатылған дербес компьютерлер оған жергілікті желі  бойынша
   қосылған. Бұл архитектура бірнеше пайдаланушыларға бір деректер базасымен
   бір уақытта жұмыс істеу мүмкіндігін береді.
 • Клиент-серверлік архитектура – деректер базасы  серверде  сақталады  және
   мұнда  пайдаланушылар  сұраныстарын  өңдейтін  деректер  базасын  басқару
   жүйесі (ДББЖ) жұмыс істейді. Бұл  архитектурада  пайдаланушылар  деректер
   базасымен  қойылған  тапсырмаларды  орындайтын  және   алынған   нәтижені
   қайтаратын ДББЖ арқылы жұмыс істейді.  Табылған  деректер  клиентке  желі
   бойынша  серверден   клиентке   қарай   жіберіледі.   Клиент   –   сервер
   архитектурасының ерекшелігі SQL – құрылымдық сұраныстар  тілін  пайдалану
   болып табылады. Бұл архитектура бірнеше пайдаланушыларға бір уақытта  бір
   деректер базасымен жұмыс істеуге рұқсат етеді.
 • Таратылған архитектура – деректер базасы  бірнеше  серверлерде  сақталады
   және олардың   әрбіреуінде  ДББЖ  көшірмелері  болады.  Сонымен  деректер
   базасы  және  клиенттік  қосымшаларға  ұқсас   архитектурада   қосымшалар
   серверлері   және   компоненттер   қолданылады.   Қосымшалар   серверлері
   пайдаланушылар сұраныстарын өңдеуге және желідегі компьютерлер арасындағы
   жүктемені біркелкі бөлуге  рұқсат  етеді.  Компоненттер  –  бұл  бөлінген
   серверде күрделі есептеулерді орындау үшін қолданылатын программалар.
 •  Интернет-архитектура  –  деректер  базасы  және  ДББЖ  бір   компьютерде
   орналасады, ал оларға  рұқсат  алу  желілік  протокол  стандарты  бойынша
   броузерлер арқылы жүзеге асады.

   «Файл-сервер» және «Клиент  сервер»  архитектураларының  сұлбасы  төменде
көрсетілген.














































         1.1-сурет.   «Файл-сервер»                                     1.2-
      сурет.                                                 «Клиент-сервер»



                                                               архитектурасы
          архитектурасы

                                  Дәріс №2.

   Дәріс тақырыбы:    Деректерді ұсынудың модельдері

      70-80 жылдардың  соңында  деректер  базасын  басқару  жүйесінің  дамуы
негізінде  деректерді  ұсынудың  әртүрлі  модельдері  пайда   болды.   Әрбір
модельдің өзінің ерекшеліктері мен жетіспеушіліктері болды.

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

   Мәліметтер моделі екі класқа бөлінеді:
      - Мықты типтендірілген моделі, мұнда барлық мәліметтер қандай да  бір
        категорияға қатысты болады.
      -  Әлсіз  типтендірілген   моделі,   категорияға   қатысты   ешқандай
        болжамдармен  байланысты емес.

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


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

      Деректер  моделінің  үш  негізгі  типін   қарастырайық:   иерархиялық,
желілік, реляциялық.

      Иерархиялық деректерді моделдеу . Иерархиялық құрылым бір-бірімен
    белгілі бір ережелер бойынша байланысқан элменеттер жиынтығын береді.
   Иерархиялық байланыстағы объектілер бағытталған граф (төңкерілген ағаш)
                   құрады. Оның түрі суретте бейнеленген.

      Иерархиялық құрылымның  негізгі  ұғымдарына  мыналар  жатады:  деңгей,
элемент  (түйін),  байланыс.   Түйін   дегеніміз   белгілі   бір   объектіні
сипаттайтын деректер атрибуттарының жиынтығы.  Сұлбада  иерархиялық  ағаштың
түйіндері граф төбелері ретінде бейнеленген. Төменгі  деңгейдегі  әр  түйін,
жоғары  деңгейдегі  әр  түйінмен  ғана  байланысқан.   Иерархиялық   ағаштың
ешқандай төбеге бағынбаған, ең жоғарғы деңгейде орналасқан  бір  түйіні  бар
(ағаш  түбірі).  Бағыныңқы  түйіндер   екінші,   үшінші   т.б.   деңгейлерде
орналасады.  Деректер  базасындағы  ағаштар  саны  түбір  жазбалары  санымен
анықталады. Деректер базасы әрбір жазбаға түбір жазбадан тек бір жол  болады
(иерархиялық).  Мысалы:   2.6.1-суретінде  көрсетілгендей  С4  жазбасы  үшін
өтетін жол А және В3 жазбалары арқылы өтеді.






















    1-сурет.Иерархиялық құрылымды деректер базасының графикалық бейнеленуі

  Желілік деректерді моделдеу.   Желілік құрылымда алдыңғы аталған негізгі
      ұғымдардағы (деңгей, түйін, байланыс) әр элемент кез-келген басқа
  элементпен байланыста бола алады. Иерархиялық модельдің жақсартылған түрі
  болып табылатын желілік модель көп қолданушылық режимде құрылатын модель.
   Деректерді желілік ұсыну элементарлы мәліметтер және олардың арасындағы
   қатынастар бағытталған желі түрінде көрсетіледі (төбелері – мәліметтер,
  доғалар - қатынастар). Мысалы, деректер базасында тапсырыстарды сақтауға
         арналған бір тапсырыс әртүрлі үш байланысқа қатынаса алады.

























   2-сурет. Желілік құрылымды деректер базасының бейнеленуі

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

      Реляциялық  деген  ұғым  (ағыл.relation  -  қатынас)  деректер  базасы
жүйелерінің  маманы  белгілі   американдық   ғалым   Е.Коддонның    есімімен
байланысты.

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

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

      Қатынастар кесте түрінде беріледі. Кестедегі жолдар мен кортеж  немесе
жазба деп,  ал  бағандар  қатынастар  атрибуты  немесе  домен,  өрістер  деп
аталады. Бір мәні жазбаны анықтайтын өрісті – қарапайым кілт (кілттік  өріс)
деп  атайды.  Егер  жазбалар  бірнеше  өрістермен  анықталса,  онда   мұндай
кестенің  құрамды  кілті  бар  деп  есептеледі.   Екі   реляциялық   кестені
ұйымдастыру үшін бірінші кестенің кілтін екінші кестенің  кілтінің  құрамына
енгізу керек (кілттер бір-бірін қайталуы  мүмкін).  Басқа  жағдайда  бірінші
кестенің құрылымына сыртқы кілтті енгізу қажет. Сыртқы кілт екінші  кестенің
кілті болады.

                                  Дәріс №3.

   Дәріс тақырыбы:      Ақпараттық жүйелер және оның негізгі ұғымдары

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

      Ақпараттық жүйе (АЖ) – ақпараттарды сақтауға, өңдеуге  және  көрсетуге
қолданылатын,  бір  –   бірімен   байланысқан   құралдардың,   әдістер   мен
персоналдардың жиыны.

      Мұндай жүйелер көлемі  үлкен  ақпараттармен  жұмыс  істейді  және  бұл
ақпараттың құрылымы күрделі болып келеді.

      Ақпараттық жүйенің классикалық мысалы ретінде  банк  жүйесін,  авиация
және теміржол билетін, қонақ үйде орынды алдын – ала сатып алу  және  т.с.с.
автоматтандырылған жүйелерді қарастыруға болады.

      Ақпараттық жүйе (АЖ) – ақпараттарды сақтауға, өңдеуге  және  көрсетуге
қолданылатын,   бір-бірімен    байланысқан    құралдардың,    әдістер    мен
персоналдардың  жиыны.  Мұндай  жүйелер  көлемі  үлкен  ақпараттармен  жұмыс
істейді және бұл ақпараттың құрылымы күрделі болып келеді.




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

      АЖ – ні екі класқа бөлуге болады.
    ➢ Ақпаратты  іздеу  жүйесі  –  берілген  іздеу  критериі  бойынша  жалпы
      жиыннан мәліметтерді іздеуге  бағытталған.  Қолданушыға  мәліметтердің
      өңдеу технологиясы емес, тек  алынатын  ақпарат  ғана  керек.  Мысалы,
      қаладағы анықтау қызметіне телефон шалғанда, қолданушыға нақты ақпарат
      ғана керек.
    ➢ Мәліметтерді өңдеу жүйесі  –  мәліметтерді  өңдеуге  бағытталған.  Бұл
      жүйеде  өңдеуден  шығатын  ақпарат  болмауы   немесе   жүйе   өңделген
      ақпараттың нәтижесін ғана беруі мүмкін. Мұндай жүйенің мысалы  ретінде
      барлық  региондардан  мәліметтер  жинайтын   метереология   қызметінің
      ақпарат жүйесін алуға болады. Қолданушыға  бастапқы  мәліметтер  емес,
      олардың нәтижесі, яғни ауа – райы болжамы керек.




                                  Дәріс №4.

   Дәріс тақырыбы:   Ақпараттық жүйенің түрлері

      Ақпараттық жүйелер келесі түрлерге бөлінеді: фактографиялық, құжаттық,
құжаттық – фактографиялық.
        1. Фактографиялық жүйеде нақты өмірдегі объект жайлы  мәліметтердің
           (атрибуттардың)  дәл  мәндері  тіркеледі.  Бұл  жүйенің  негізгі
           идеясы – объект жайлы барлық деректер (адамдардың аты –  жөндері
           және заттардың  атаулары,  сандар,  мерзім  КК.АА.ЖЖЖЖ  түрінде)
           беріледі. Фактографиялық АЖ – дегі ақпараттар  қатаң  құрылыммен
           беріледі, өйткені бұл компьютерге  мәліметтерді  бір  –  бірінен
           айыруға  мүмкіндік  туғызады.  Сондықтан   фактографиялық   жүйе
           қойылған сұрақтарға бірмәнді жауап береді.
        2. Құжаттық ақпараттық жүйесінде қандай да бір  формалданған  іздеу
           аппараты  бар  құжаттық  жүйе  мәтіндік   құжаттар   (статьялар,
           кітаптар, рефераттар, заң мәтіндері және  т.б.)  мен  графикалық
           объектілерден құралады, бірақ қойылған сұрақтарға бірмәнді жауап
           бермейді.  Жүйенің  мақсаты  –  қолданушының  сұранысына   жауап
           ретінде сұраныстағы шартты қанағаттандыратын құжаттардың тізімін
           беру болып  табылады.  Мысалы,  «синергетика»  сөзі  бар  барлық
           статьялардың тізімін беру.
        3. Құжат – фактографиялық жүйеде аралас жүйенің  мәліметтері  бөлек
           мәліметтерден, сонымен қатар, бүтін құжаттардан тұрады.

      Сонымен, ақпараттық жүйенің мақсаты нақты өмірдегі объектілердің өзара
байланысын ескере отырып, объектілер жайлы деректерді өңдеу болып  табылады.
Мәліметтер  қоры  теориясында  мәліметтерді  атрибуттар,   ал   объектілерді
маңыздылықтар деп атайды. Объект, атрибут және байланыс – АЖ  –  нің  іргелі
түсініктері болып табылады.
    ➢ Объект (маңыздылық) –  бұл  нақты  өмірде  бар  және  бір  –  бірінен
      айыруға болатын «нәрсе», яғни аталуы және өзіне ұқсастардан  айыратын
      тәсілдерден тұратын «нәрсені» объект деп атауымызға  болады.  Мысалы,
      әрбір мектеп бұл объект. Объект ретінде сондай – ақ адам,  мектептегі
      сынып, фирма, химиялық қосындылар   және  т.с.с.  бола  алады.  Нақты
      өмірді бейнелейтін  абстрактілі  түсініктер  де  объект  бола  алады.
      Мысалы, оқиға, өнер шығармасы, театр қойылымы, кітаптар, кинофильмдер
      және т.с.с.
    ➢  Атрибут  (мәліметтер)  –  бұл   объектіні   сипаттайтын   анықталған
      көрсеткіш және бұл объектнің нақты  экземпляры  үшін  санды,  мәтінді
      немесе басқа мәндерді қабылдайды. Мысалы, фирма шығаратын өнім объект
      болсын. Бұл өнімнің мәліметі ретінде оның аталуы, түсі, салмағы  және
      т.с.с. бола алады.

      Объект жайлы  ақпарат  құрылымды  болуы  тиісті,  өйткені  компьютерде
құрылымды ақпаратты  өңдеу  оңай.  Құрылымды  ақпарат  –  бұл  мәліметтердің
көрініс тәсілдеріне қандайда бір келісімді енгізу  болып  табылады.  Мысалы,
мәтіндік  файлдар  компьютердің  ұтымды  өңдеуіне  жарамсыз  болып   келетін
«құрылымсыз» немесе «әлсіз құрылымды» ақпараттардан тұрады.

                                  Дәріс №5.

   Дәріс тақырыбы: Мәліметтердің реляциялық, моделінің элементтері

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

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























  Мысалы, Student (ҒІО, Special, Datard) кестесінде кілт ретіңде ҒІО немесе
Special немесе Datard жеке жиектерін қолдануға болмайтыны түсінікті:
1. FIO жиегінің кілт болмайтын себебі — кестеде аты-жөндері бірдей
   студенттер болуы мүмкін;
2. Special жиегінің кілт болмау себебі — бір мамандықга бірнеше
   студентгердің дәріс алатыны;

     Datard  жиегінің  кілт  болмайтын  себебі  —  туған   күндері   бірдей
студенттер болуы мүмкін.

  Бұл кестенің кілті ретінде FIO, Special жөне Datard жиектерінің жиынын да
алуға болмайтыны анық: жоғары оку орнында бір мамандық  бойынша  бір  күнде
туылған  аты-жөндері  бірдей  бірнеше  білімгерлердің  кездеспейтініне  кім
кепіл? Мұндай жағдайда кестеге әрбір жазбадағы мәні ерекше  болатын  арнайы
жиек енгізген дұрыс; мысалы  натурал  сандарды  кабылдайтын  білімгерлердің
коды — Kodstud атрибуты: Student(Kod_stud,  FIO,  Special,  Datard)  (кілт-
жиектің асты сызылған). Әдетте мұндай жиектің мәні  қолданбалы  программада
программалық  жолмен  немесе  мәліметгер  қорында   автоматтандыру   арқылы
беріледі.

     Кесте кілтінің атқаратын қызметі:

      І.Жазбалардың қайталануын болдырмау

   2.Кортеждерді  кілт  жиектің  (жиектердің)  мөндерінің  өсу  немесе  кему
ретімен реттеу

      3. Кестедегі жазбаларды окуды тездету

      4.Кестелерді өзара байланыстыру.

 Реляциялық моделде кестелердің байланысы сыртқы кілттер (Foreign Key — FK)
арқылы ұйымдастырылады. Сыртқы кілт — мәңдері басқа бір кестенің  жазбалары
арқылы көрсетілген, яғни басқа бір  кестенің  негізгі  кілтінің  мәндерінен
тұратын атрибут. Сыртқы кілті анықталған қатыс (кесте) оған сәйкес атрибуты
(жиегі) негізгі кілті болып табылатын екінші бір қатысқа (кестеге)  сілтеме
жасайды деп айтады, мысалы, Customer  және  Order  (Клиент  жене  Тапсырыс)
кестелерін қарастырайық (1-сурет), мүңцағы Customer — басты
1. (негізгі, аналық)   кесте, Order – қосымша  (бағыныңқы,  балалық)  кесте.
   Мазмұндауды
2. жеңілдету үшін MS Access пакетінің құрамыңдағы  Борей  немесе   NorthWind
   мәліметтер қорына сүйенейік:

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













   1- cypem. Customer және Order кестелерінің байланысы  үйлесімділік  болып
екі түрден  тұрады.  Категориялық  бүтіндік  шектеуінің  мағынасы:  катыстың
кортеждері МҚ-ның нақты  объектісінің  элементтерін,  реляциялық  мәліметтер
қорын басқару жүйелерінің  типіне  сәйкес  категориясын  анықгайды.  Мысалы,
Кітап кестесінің кезкелген жолындағы  жазба  нақгы  бір  кітапты  көрсетеді.
Кестенің кілті әртүрлі  бір  кортежді,  яғни  категорияның  әрбір  элементін
анықгайды. Демек, кестенің бір жолыңдағы мәліметгі оку немесе  өзгерту  үшін
бұл жазбадағы кілттің мәнін білу керек.
  Жазбаны   кесте   кілтінің   құрамындағы   барлық    атрибутгары    толық
анықгалмағанша МҚ-на жазу, енгізу  мүмкін  емес.  Бұл  тәртіп  категориялық
бүтіндік тәртібі деп аталады  және  қысқаша  былайша  тұжырымдалады:  кесте
кілтінің ешбір атрибуты анықгалмаған болуы мүмкін емес.

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

  Егер  сыртьды  кілттің  мәндерінің  растығын  МҚБЖ   бақыламайтын   болса
мәліметтердің сілтеме үйлесімділігі  бұзылады,  мұны  келесі  мысал  арқылы
түсіндіруге болады: егер Customer кестесінен Order кестесінің  кемінде  бір
жазбасымен байланысы бар кезкелген бір клиентгі өшірсек, мысалы 3-жазбаны -
Айжанды, онда Order кестесінде Customer-де тіркелмеген   жоқ   клиенттердің
жасаған































   тапсырыстары туралы мәліметтердің болуына әкеп  соқтырады.  Тура  осындай
қате Order кестесінің сыртқы  кілті  Customer  жиегіне  Customer  кестесінде
тіркелмеген клиенттің кодын енгізген жағдайда, мысалы,  4,  5,  т.с.с,  орын
алады.

   Категориялық және сілтеме  үйлесімділік  шарттарын  МҚБЖ  бақылауы  тиіс.
Категориялық  бүтіндікті  қамтамасыз  ету  үшін  жазбаларда  кесте  кілтінің
бірдей мәндері болмаса жеткілікті, ал сілтеме үйлесімділікті камтамасыз  ету
күрделірек: басқа бір  қатысқа  сілтеме  жасайтын  қатысты  өзгерткенде  осы
қатыстағы сыртқы кілтке  мүмкін  мәндерін  енгізсе  жеткілікті.  Ал  сілтеме
жасалып   тұрған   негізгі   қатыстан   бір   кортежді   өшіргенде   сілтеме
үйлесімділікті қамтамасыз  ететін  келесі  үш  жағдайдың  біреуін  қолдануға
балады:

   -негізгі кестеде қосымша кестеден сілтеме жасалып тұрган  ешбір  кортежді
өшіруге болмайды; ягни алдымен қосымша кестедегі  мұндай  жазбаларды  өшіріп
тастау немесе жазбадағы сыртқы кілттің мәнін  қажетіне  қарай  өзгертіп  aлy
керек;

   -қосымша кестеден  сілтеме  жасалган  сәйкес  кортежді  негізгі  кестеден
өшіргенде қосымша кестедегі онымен байланыстағы барлық  жазбалардағы  сыртқы
кілттің мәні анықталмамаған мәнге ие болады;

   -әсерлі өшіру (Cascade Delete): негізгі кестеден  бір  жазбаны  өшіргенде
қосымша кестедегі онымен байланыстағы барлык жазбалар жаппай өшіріледі.

                                  Дәріс №6.

   Дәріс тақырыбы:   Кестелердің арасындағы байланыс түрлері.

  Көп жағдайда бір кесте (қатыс) жеке бір файлда сақталады. Жалпы  МҚ  алға
қойылған мақсатқа сәйкес анықталған бір немесе  өзара  байланыстағы  бірнеше
кестелердің  жиынынан  тұрады,  мысалы,  MS  Access  МҚБЖ-де   МҚ   файлында
кестелермен  қатар  сұрыптамалар,  қорытындылар,  үлгілер,  макростар   және
модульдер  сияқты  басқа  да  МҚ-ның  барлық  объектілері  бірге  сақгалады.
Реляциялық  МҚБЖ-де  кестелердің  байланысын  көрсету  үшін   оларды   әзара
байланыстыру  амалын   қолданады,   бұл   МҚ-на   енгізілген   мәліметтердің
толықтығын,   үйлесімділігін,   МҚ-ның   біртұтастығын   кадағалауға    және
мәліметтер қорын өңдеу  барысында  қажетті  деректерді  тез  табуға,  жылдам
оқуға,  көруге,  өзгертуге,  теріп  алуға  және  қорытынды  құжаттарды  оңай
дайындауға мүмкіндік береді.

  Жоғарыда айтылғандай МҚ-ның екі кестесінің арасында бір-біріне тәуелділік
қатысы болуы мүмкін; өзара байланыстағы екі кестенің біреуі master— басыңқы
(негізгі, аналық), екіншісі detail —  бағыныңқы  (қосымша,  балалык)  кесте
болып табылады. Реляциялық МҚ-да қатыстардың байланысының негізгі  үш  түрі
кездеседі (2-кесте):

     - "бірге-бір " (1:1) — one-to-one relationship;

   -"бірге-көп" (1:М) — one-to-many relationship немесе "көпке-бір"(М:1);

   -"көпке-көп" (М:М немесе M:N) —many-to-many relationship.

   Егер Customer кестесіндегі әрбір клиенттің ешқандай немесе тек  қана  бір
тапсырыс жасау мүмкіндігі болса, онда Customer және Order кестелері "бірге-
бір" қатысымен байланыста болады. Ал егер  әрбір  клиент  нөл,  бір  немесе
бірнеше тапсырыс жасай алатын болса, онда бұл кестелер  "бірге-көп"  немесе
master- detail катыста, Customer — master кесте, Order — detail  кесте  (2-
сурет).
   "Бірге-бір" байланысы  (1:1)  екі  кестенің  де  байланыстырушы  жиектері
олардың кілті болған жағдайда орын алады, сондықган бұл  кестелердің  өзара
дәрежелері бірдей. Бұл байланыс  МҚ-да  сирек  қолданылады,  себебі  мұндай
кестелердегі мәліметтерді ЭЕМ жадын тиімді пайдалану мақсатында бір кестеге
біріктіруге болады.

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

   "Көпке-бір"  байланысы    (М:1)  негізгі  және  қосымша  кестені  анықгау
барысына байланысты МҚ-нда кеңінен қодданылатын "бірге-көп  "  байланысының
(1:М) бір түрі болып табылады.

   [pic]

  "Бірге-көп" байланысына (1:М) қоймадан тұтынушыларға жіберілген  заттарды
есепке  алу  тарифі  бойынша  Tovar  және  Rashod  кестелерінің   байланысын
көрсетуге  болады  (3,4—суретгер),  мұңцағы  Tovar—  заттың  аты,  Edjzm   —
тауардың  өлшем  бірлігі,  Сепа  —  тауардың  бір  бірлігінің  сату  бағасы,
Dataras— тауардың жібірілген күні, Kolras  —  жіберілген  заттың  саны.  Бұл
мысалдағы 14.05.04 -не дейінгі  мәліметтер  бойынша  күріш  әлі  сатылмаған,
соңдықган Rashod кестесіңце күрішке  сәйкес  жазба  жок,  Rashod  кестесінің
кілті Tovar және  Rashod жиектерінен тұрады.



















  МҚ құрылымының кең тараған IDEF1X нотациясында "бірге-көп"  қатысы  "көп"
жағында дөңгелекпен аяқталған сызық арқылы көрсетіледі (2,4-суреттер)
   "Көпке-көп" байланысы (М:М) негізгі кестенің  бірнеше  жазбасьша  қосымша
кестенің бірнеше жазбасы  сәйкес  болған  жағдайда  орын  алады.  5-суретге
"көпке-көп"  байланыстағы  оку  топтарындағы  пәндер  мен   сабақжүргізетін
окзытушылар арасындағы катыстар көрсетілген:  әрбір  топка  бірнеше  окщушы
сабақбереді;
















   әрбір оқытушы біріншіден, бірнеше пәндерді, екіншіден,  әртүрлі  топтарда
сабақ беруі мүмкін.

   Grpred кестесінің бірінші және үшінші  жазбаларына  Pred_prep  кестесінің
бірінші  жазбасы, ал төртінші  жазбасына—  екінші  және  төртінші  жазбалары
сәйкес келеді. Бұл кестелерді Pred  жиектері  бойынша  біріктіру  арқылы  әр
топтағы  пәндерді  жүргізетін  оқытушылар   туралы   мәліметгерден   тұратьш
Gr_pred_prep кестесін алуға болады (6-сурет).













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

                                  Дәріс №7.

   Дәріс тақырыбы:   Деректер базасының стандартты SQL тілі

      Қазіргі заманғы компьютерлік өнеркәсіпте SQL тілі ең маңызды тенденция
болып отыр. Соңғы жылдары SQL тілі деректер  базасының  жалғыз  тілі  болды.
Бүгінгі таңда SQL  дербес  компьютерлерде  жұмыс  істейтін  ДББЖ-нің  жүзден
астамын  қолдайды.   SQL   тілі   деректер   базасын   басқару   жүйелерінің
архитектурасындағы маңызды буын болып табылады.
      SQL (Structured Query Language) - бұл  құрылымдық  сұраныстар  тілінің
қысқартылған атауы. Ол реляциялық деректер базасында мәліметтерді құру  және
өңдеу  құралдарын  береді.   Компьютерлік   технологиялардан   ерекшелігінен
тәуелсіздігі  және  SQL-ді  реляциялық  мәліметтер  базасының   технологиясы
облысындағы  өндіріс   жетекшілерімен   қолдауы   оны   деректер   базасының
стандартты  тіліне  айландырды.  SQL  тілі  деректер  базасының   реляциялық
типімен ғана жұмыс  істейді.  Төменде  SQL  жұмысының  сұлбасы  бейнеленген.
Есептегіш жүйеде маңызды ақпарат  сақталған  деректер  базасы  болады.  Егер
есептегіш жүйе кәсіпорынның кадрлар бөліміне қатысты  болса,  онда  деректер
базасында кәсіпорында қызмет ететін адамдар жайлы ақпарат  (аты-жөні,  туған
жылы, телефоны, қызметі және т.б.) сақталуы мүмкін.


































      Деректер базасын басқаратын компьютерлік  программа  деректер  базасын
басқару жүйесі (ДББЖ) деп аталады.  Егер  қолданушыға  деректер  базасындағы
мәліметтерді оқу қажет болса, онда  оларды   SQL  көмегімен  ДББЖ-нен  сұрау
керек. ДББЖ сұраныстарды өңдейді, қажет  болған  мәліметтерді  тауып  оларды
қолданушыға жібереді. Мәліметтерді сұрау және нәтиже  алу  процесі  деректер
базасында  сұраныстар деп аталады, яғни сұраныстардың құрылымдық тілі.
      Реляциялық ДБ пайда болғанға дейін көптеген ДББЖ үшін  құрылған барлық
мәліметтерді  басқару  тілдері,  файлдардың   логикалық   жазулары   түрінде
берілген мәліметтермен жүргізілетін операцияларға  бағытталған.  Әрине,  бұл
қолданушыдан мәліметтердің сақталуын, қандай мәліметтер қажеттігін,  олардың
қайда орналасқанын және қалай алу жолдарын білуді талап  етеді.
      Деректер базасында қолданылатын SQL тілі логикалық байланысқан  кесте-
қатынастар жиынтығы түрінде  берілген  мәліметтермен  операциялар  жүргізуге
бағытталған. Осы тілдің құрылымының  ерекшелігі  өңдеу  процедурасына  емес,
мәліметтерді   өңдеудің   соңғы   нәтижесіне   бағытталуында.    SQL    тілі
мәліметтердің,  индекстердің   қайда  орналасқанын,  және  нәтиже  алу  үшін
қандай операциялар тізбегін пайдалану керектігін  өзі  анықтайды,  сондықтан
бұларды ДБ сұраныстарында көрсетудің қажеті жоқ.
      Реляциялы ДБ-сы теориясының пайда болуы екі кластарға бөлуге  болатын,
сұраныстар тілінің қатарын өндіруге түрткі болды:
      -  Қатынастарға  қолданылатын,  сұраныстарды   арнайы   операторлармен
бейнелеуге мүмкіндік беретін алгебралық тілдер;
      - Предикаттарды санау тілдері, берілген  қатынастар  жиынтығынан  жаңа
қатынасты  анықтайтын,  ережелер  жиынтығы.  Яғни,  ДБ-ғы  сұранысқа   жауап
ретінде алынатын қатынастарды анықтау әдісі.
            Қазір бұл тіл ДББЖ-сі қолданушыға ұсынатын барлық  функциональды
мүмкіндіктерді іске асыру үшін қолданылады. Атап айтқанда:
      •  Деректерді  ұйымдастыру.  SQL   қолданушыға   мәліметтерді   ұсыну
        құрылымын өзгерту, сонымен  қатар  деректер  базасының  элементтері
        арасындағы қатынастарды орнату мүмкіндігін береді.
      • Деректерді оқу. SQL қолданушыға немесе қосымшаға деректер базасынан
        онда сақталған мәліметтерді оқу  және  оларды  қолдану  мүмкіндігін
        береді.
      • Деректерді өңдеу. SQL қолданушыға немесе қосымшаға деректер базасын
        өзгерту, яғни оған жаңа мәліметтерді қосу, сонымен қатар  онда  бар
        мәліметтерді жаңарту немесе өшіру мүмкіндігін береді.
      • Рұқсат алуды басқару. SQL көмегімен қолданушыға   мәліметтерді  оқу
        және  өзгерту  мүмкіндіктерін  шектеуге  және  оларды  бекітілмеген
        рұқсаттан қорғауға болады.
      • Деректерді біріктіріп қолдану. SQL бір-біріне кедергі жасамас  үшін
        қарама-қарсы жұмыс істеп отырған  қолданушыға деректерді біріктіріп
        қолдануды үйлестіреді.
      •  Деректердің  бүтіндігі.  SQL  келісілмеген  өзгертулерден   немесе
        жүйенің  қабыл  алмауын  бұзғандардан   қорғай   отырып,   деректер
        базасының бүтіндігін қамтамасыз етуге рұқсат етеді.
      Сондықтан SQL ДББЖ-мен әрекеттесу үшін жеткілікті түрдегі  қуатты  тіл
болып табылады.  Сонымен қатар, SQL тілі бүгінгі таңда  реляциялық  деректер
базасымен жұмыс істеуге арналған жалғыз стандартты тіл болып отыр.

     SQL тілінің жетістіктері.      SQL – деректерді басқаруға арналған
       әмбебап программалық құрал. SQL тілінің жетістіктерінің негізгі
                         ерекшеліктерін атап өтейік:
      - нақты ДББЖ-нен тәуелсіздігі;
      - бір есептеуіш жүйеден басқасына ауысатындығы;
      - стандарттардың барысы;
      - IBM компаниясымен мақұлдау;
      - Microsoft компаниясы жағынан қолдау;
      - реляциялық негіз;
      - ағылшын тілін еске түсіретін жоғарғы деңгейлі құрылым;
      - арнайы интерактивті сұраныстарды орындау мүмкіндігі;
      - деректер базасына программалық рұқсат алуды қамсыздандыру;
      - деректерді әртүрлі ұсыну мүмкіндігі;
      - деректер базасымен жұмыс істеуге арналған толық құнды тіл;
      - деректерді динамикалық анықтау мүмкіндігі;
      - клиент-сервер архитектурасын қолдау.

      Жоғарыда аталған факторлардың барлығы дербес компьютерлерде деректерді
басқаруға арналған SQL тілінің стандартты  құрал  болуының  себептері  болып
табылады.





                                    Дәріс №8.
      Дәріс тақырыбы:    SQL -командаларының типтері

   SQL -тілінің командалары бірнеше топқа  бөлінеді.  Командалардың  негізгі
типтері келесідей:
 □ DDL(Data Definition Language )- мәліметтердің  анықталу тілі. Бұл
   топтың командалары мәліметтер қорының объектілерінің құрылымын құру және
   өзгерту(мысалы, кестелерді құру және жою үшін) үшін пайдаланылады.
 □ DML(Data Manipulation Language)- мәліметтердә басқару (манипуляция)
   тілі. DMLкомандалары мәліметтер қоры объектілеріндегі ақпараттарды
   басқару үшін пайдаланылады.
 □ DCL (Data Control Language)-мәліметтерді басқару тілі. Сәйкес
   командалар мәліметтер қорында сақталған ақпаратқа кіруді басқаруға
   арналған.
 □ DQL (Data Query Language)-тілі. Бұл жиі қолданылатын командалар,
   мәліиеттер қорына сұранымды құруға арналған.(Сұраным дегеніміз сәйкес
   ақпаратты алу мақсатында мәліметтер қорына хабарласу.
 □ Мәліметтер қорын администрациялау командалары әрекеттердің орындалуына
   бақылауды жүзеге асыру және өндірілетін операцияларыды анализдеуге
   арналған.

      SQL  мәліметтерінің типі.

   Стандартты SQL- де пайдаланылатын  мәліметтер  типтерін  келесі  топтарға
бөлуге болады:
 □ Жолдық типтер;
 □ Сандық типтер;
 □ Дата мен уақытты көрсетуге арналған типтар.
      Бұл типтердің нақтырақ сипаттамасы.

   Жолдық типтер.

   SQL-де екі жолдық типтер анықталған:
 □ Белгіленген ұзындықты символдық жолдар;
 □ Айнымалы ұзындықты символдық жолдар.

   Белгіленген ұзындықты символдық жолдар.

      Белгіленген ұзындықты символдық жолдар түрінде  сақталған  мәліметтер,
өріске енгізілгенжолдың нақты өлшемінен тәуелсіз, жадының бір  ғана  көлемін
алады.  ANSI-SQL-92-ге  сәйкес  белгіленген  ұзындықты  символдық   жолдарды
хабарлау түрі келесідей:

   Character(n)

   Мұндағы n бұл хабарлау қатысты болатын  өріс  өлшемін  анықтайтын
жол ұзындығы.
      Белгіленген ұзындықты жолдарды  пайдаланғанда  ,  әдетте,  бос  жолдар
пробелдармен толтырылады. Мысалы, егер өлшемі    10  тең  өріс  беріліп,  ал
оған  3  символдан  тұратын  жол  енгізілсе,  онда  7  символ   пробелдармен
толтырылады.

   Айнымалы ұзындықты символдық жолдар.

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

   Varchar(n)

   n-максималды мүмкіндікті жолды анықтайтын сан.

   Character типінен айырмашылығы  Varchar  пайдалану  дискідегі  кеңістікті
үнемді шығындауды қамтамасыз етеді. Хабарландыруда көрсетілген жол  өлшеміне
қарамастан, өріс, енгізілген ақпаратты  сақтауға  қанша  орын  қажет  болса,
сонша  алады.  Мысалы,  егер  Varchar(10)  өрісі  хабарланып  және  оған   3
символдан тұратын жол енгізілсе, онда  бұл  жолды  сақтау  үшін  белгіленген
ұзындықты жол жағдайындағы сияқты 10 емес, 3 байт қана пайдаланылады.

                               Сандық типтер.

   Сандық типтер былай бөлінеді:
 □ Бүтін санды типтер;
 □ Белгіленген нүктелі заттық типтер;
 □ Жүзуші нүктелі заттық типтер;
 □ Белгіленген және айнымалы ұзындықты екілік жолдар;

   Бүтін санды типтер.

   ANSI SQL стандартымен екі бүтін санды типтер орнатылады:
 □ INTEGER-4 байтты пайдаланатын таңбалы бүтін сан. 2147483648-ден
   2147483647-ге дейінгі диапазондағы сандарды бере алады;
 □ SMALLINT–2 байтты пайдалантын таңбалы қысқа бүтін сан. 32768-ден 32647-
   ге дейінгі диапазондағы бүтін сандарды бере алады.

   Белгіленген нүктелі заттық типтер.

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

   Белгіленген үтірлі типті хабарлау синтаксисі келесідей:

   DECIMAL (n.m)

   Мұндағы n-дәлділік; m-масштаб

   Дәлділік -ол сандық мәннің жалпы ұзындығы, масштаб-ол ондық  нүктеден  оң
жақта орналасқан белгілер саны.

   Жүзгімелі нүктелі заттық типтер.

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

   Көп жағдайда екі жүзгімелі нүктелі заттық типтер пайдаланылады:
  □ FLOAT-бірлік дәлділікті сандар;
  □ DOUBLE-екілік дәлділікті сандар.

    Екілік жолдар.

    Екілік  жолдар  салыстырмалы  сирек  қолданылады.  Әдетте  мұндай  типті
 өрістер жалаулар немесе екілік маскалар ретінде қолданылады.

    Символдық  жолдар  сияқты,  екілік  жолдар  белгіленген  және   айнымалы
 ұзындықты  болады.  Белгіленген  ұзындықты  екілік  жолдар  келесі   жолмен
 хабарланады:

    BIT (n)-

    Мұндағы n-байтпен берілген жол ұзындығы.

    Айнымалы ұзындықты жолды хабарлау түрі мынадай:

    BIT VARYING (n)

    Мұндағы n- байтпен берілген жолдың максималды ұзындығы.

                      Дата мен уақытты берілген типтер.

    Аты айтып  тұрғандай бұл типтер дата мен  уақытқа  қатысты  ақпараттарды
 сақтау үшін пайдаланылады.

    SQL-стандартында дата  мен  уақыт  туралы  ақпаратты  сақтауға  арналған
 келесі мәліметтер типтері анықталған:
  □ DATE-датаны сақтау үшін пайдаланылады;
  □ TIME-уақытты сақтау үшін пайдаланылады;
  □ TIME STAMP-дата мен уақытты сақтайды;
  □ INTERVAL-екі дата мен уақыт моментіндегі уақыт аралығын сақтайды.

                                  Дәріс №9.

   Дәріс тақырыбы:    Мәліметтер қорының объектілерін басқару.

    Мәліметтер қорының объектісі  дегеніміз  мәліметтер  қорында  анықталған
және ақпаратты сақтауда немесе  ақпаратқа  хабарласуда  пайдаланылатын  кез-
келген объект. Мәліметтер қорының объектісінің мысалдары  ретінде  кестелер,
ұсыныстар мен индекстер қызмет етеді.

   Мәліметтер   қорының   объектілерін   басқару   үшін   SQLтілінің     DDL
командаларының жиындары пайдаланылады.

   Кестелерді құру, түрлендіру және жою.

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

   Шектік  шарттар-  мәліметтер  қорының  кестесінің  өрісінде  шама   мәнін
шектейтін ереже.

   Үндемей қабылданатын мәндер- жаңа жазу  қосқанда,  егер  пайдаланушы  осы
өрістің мәнін көрсетпесе, мәліметтер қорының  кестесінің  өрісіне  автоматты
түрде енгізілетін шама.

   CREATE TABLE операторы.

      Кестені  құру  үшін  CREATE   TABLE   операторы   пайдаланылады.   Бұл
оператордың синтаксисі келесі түрде болады:

   CREATE TABLE имя_таблицы (

   Имя_поля_1 тип_данных.

   Имя_поля_2 тип_данных.

   имя_поля_N тип_данных)

   Мысал, ФИЗИЧЕСКИЕ ЛИЦА кестесін құру операторы мына түрде болады:

   CREATE TABLE STUDENTS

   SNUM INTEGER.

   SIMA CHAR (25).

   SFAM CHAR (25).

   SOTCH CHAR (25).

   SROZH DATE.

   SADR CHAR (25).

   STEL VARCHAR (25).

   ALTER TRABLE операторы.

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

      Жалпы түрде ALTER TABLE операторының синтаксисі былай болады:

   ALTER TABLE имя_таблицы [MODIFY][имя_поля тип_данных]

   [ADD][имя_поля тип_данных]

   [DROP][имя_поля тип_данных]

   ALTER TABLE операторымен орындалатын әрекет кесте атынан кейін көрсетіоіп
негізгі сөзбен анықталады:
 □ MODIFY- өріс анықтамасын береді;
 □ ADD- кесмтеге жаңа өріс қосады;
 □ DROP-кестеден өрісті жояды.

   Өрістің мәліметтерінің типін өзгерту үшін ALTER TABLE операторының келесі
синтаксисі пайдаланылады:

   ALTER TABLE имя_таблицы ADD (имя_поля тип_данных)

      Мысалы,STUDENTS  кестесінестуденттің  электронды  почтасынан   тұратын
өрісті қосу үшін келесі операторды пайдаланған жөн:

   ALTER TABLE STUDENTS ADD (E-mail CHARACTER (25))

      Егер бар өрістің мәліметтерінің типін өзгерту қажет болса, ALTER TABLE
операторымен бірге MODIFY негізгі сөзін пайдаланған жөн:

   ALTER TABLE имя_таблицы  MODIFY(имя_поля тип_данных)

   Мысалы, STUDENTS кестесіне  E-mail  өрісін  енгізгеннен  кейін  CHARACTER
типінің   пайдаланылуының   тиімсіздігі   анықталады-студенттердің   көбінде
электронды почта жоқ, сондықтан дискілік кеңістіктің  бөлігі  пайдаланылмай,
бос  қалады.  Бұл  өріс  үшін  VARCHAR  мәліметтер  типін  қолданған  дұрыс.
Мәліметтер типін өзгерту үшін ALTER TABLE операторын пайдаланамыз:

   ALTER TABLE  STUDENTS MODIFY(E-mail VARCHAR(25))

      Бар өрісті өшіру үшін ALTER TABLE операторын DROP негізгі сөзбен бірге
шақыруды орындаумен жүзеге асырылады:

   ALTER TABLE имя_таблицы DROP (имя_поля)

   DROP TABLE операторы.

   Кестелерді жою үшін DROP TABLE операторы пайдаланылады.  Бұл  оператордың
синтаксисі мына түрде болады:

   DROP TABLE имя_таблицы [RESTRICT  |CASCADE]

      Егер DROP  TABLE  операторын  шақыру  кезінде  RESTRICT  негізгі  сөзі
пайдаланылып, және жойылатын кестеге қандай  да  бір  ұсыныс  немесе  шектеу
сілтелінсе,  онда  кестені  жою  операторы  орындалуы  кезінде  қате  туралы
хабарлама  шығарылады  (генерацияланады).  Егер  де  CASCADE  негізгі  сөзін
пайдаланса,  онда  кестені  жою  орындалады   және   кестемен   бірге   оған
сілтелінетін ұсыныстар мен шектеулер де жойылады.

                                 Дәріс №10.

    Дәріс тақырыбы:    Индекстарды құру және жою.

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

    CREATE INDEX имя_индекса

    ОN имя_таблицы (имя_поля_1.[имя_поля_2...])

    Қарапайым индекс құру.

      Қарапайым индекс индекстардың өте қарапайым  және  сонымен  қатар  кең
 таралған түрі болып табылады. Қарапайым индекс кестенің бір  ғана  өрісінен
 (бағанынан) түрады. Сондықтан оны көбінде бірбағандық индекс деп атайды.

      Қарапайым индекс құру командасының типтік синтаксисі келесідей:

    CREATE INDEX имя_индекса

    ОN имя_таблицы (имя_столбца)

    Мысалы, СТУДЕНТЫ кестесі  үшін  келесі  оператор  көмегімен,  студенттер
 фамилиясынан тұратын өріс бойынша индекс құруға болар еді:

     CREATE INDEX NAME_IDX

    ОN Физические_лица (Фамилия)

    Керемет инлекстер (уникальные).

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

      Керемет индекстерді құру операторының типтік синтаксисі  келесі  түрде
 болады:

    CREATE UNIQUE INDEX  имя_индекса

    ON имя_таблицы (имя_поля)

    Мысалы, ДОЛЖНОСТЬ кестесі үшін келесі команданың  көмегімен  "Должность"
 өрісі бойынша керемет индекс құруға болады:

    CREATE UNIQUE INDEX  POST_IDX

    ON Lдолжности (Должность)

    Құрамдас индекстер. Құрамдас деп екі немесе одан да көп өрістер  бойынша
 құрылған индекстерді айтады. Құрылған индексті қарағанда, құрылған индексте
 өрістердің тізбектелу  реті  мәліметті  іздеу  жылдамдығына  әсер  ететінін
 ескеру қажет. Жалпы жағдайда  индексте  өрістерді  шектеу  мәндерінің  азаю
 ретімен орналастырған жөн.

      Құрылған индексті беру синтаксисі жалпы түрде келесідей:

    CREATE INDEX имя_индекса

    ОN имя_таблицы (имя_поля_1.имя_поля_2...)

    Біздің мысалымызда СТУДЕНТЫ кестесінің  "Фамилия"  және  "Имя"  өрістері
 үшін  құрылған  индекстарды  құрудың  мағынасы  бар.  Мұндай  индекс   құру
 операторының түрі келесідей:

    CREATE INDEX FULLNAME_IDX

    ON Физические_лица (фамилия,имя)

    Индекстарды жою.

      Индекстарды жою ешқандай қиындық туғызбайды.Жою үшін индекс атын  білу
 қажет. Индексты жою операторының синтаксисі келесі түрде болады:

    DROP INDEX имя_индекса

    Индексті жою индекстелген өрістерге еш әсер етпейді. Жоюдан кейін индекс
 қайтадан құрылуы мүмкін.

                                 Дәріс №11.

    Дәріс тақырыбы:    Ұсыныстармен жұмыс.

      Ұсыныс (VIEW) мәліметтер қорының  объектісі.  Онымен  жұмыс  қарапайым
 кестемен жұмыстан  өзгешеленбейді.  Ұсыныстардың  кестелерден  айырмашылығы
 келесіде. Мәліметтер  қорының  қарапайым  кестелері  мәліметтерден  тұрады.
 Ұсыныстар мәліметтерден тұрмайды,  ал  олардың  мазмұны  басқа  кестелерден
 таңдалынады (немесе басқа ұсыныстардан). Ұсыныстар тұжырымдалатын  кестелер
 (немесе ұсыныстар) базалық кестелер (немесе  базалық  ұсыныстар)  деп  атау
 қабылданған.

      Шындығында ұсыныстар әрбір хабарласқан сайын орындалатын сұраныс болып
 табылады. Әрбір уақыт мезетінде осы  сұраныстың  орындалу  нәтижесі  ұсыныс
 мазмұны  болып  табылады.  Ұсыныстың  базалық   кестесіндегі   мәліметтерді
 өзгертсе ұсыныс мазмұны да өзгереді.

    Ұсыныс мазмұнын өзгертсе, осы  ұсынысты  құруда  негізге  алынған  кесте
 мазмұны да  өзгереді.  Төменде  ұсыныстың  тұжырымдалу  процесінің  схемасы
 берілген:




























                  1.2 сурет. Ұсыныстың тұжырымдалу схемасы.

      Ұсынысты пайдалану кесетені пайдаланудан өзгешеленеді. Ұсыныс-  тардан
мәліметтерді  таңдау  қарапайым  кестедегі  сияқты   орындалады.   Сондай-ақ
ұсыныстың мәліметтермен басқару  операцияларына  рұқсат  етіледі,  бірақ  ол
мұнда кейбір шектеулер болады.

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

   Ұсыныстың қолданылу облыстары.

   Ұсыныстар көбінде екі жағдайда қолданылады:
 □ Мәліметтерді қорғау мақсатында,
 □ Қорытынды мәліметтерді тұжырымдау үшін.
     9.  Бірінші  жағдайда  ұсыныстар  бүкіл  кестеден  емес,   тек   кейбір
        өрістеріндегі ақпараттарды беру үшін қолданылады.

   Келесі мысалды қарастырайық. Мысалы, "СОТРУДНИКИ "  кестесінің  "Рейтинг"
өрісінде  сақталатын  қызметкерлердің  рейтингтері  туралы  ақпарат  құпиялы
болып есептелсін,  және  оларға  кіру  хұқы  тек  ұжым  жетекшілерінде  ғана
болсын. Бірақ  осы  кестеде  сақталатын  ақпарат  бөләгә  кадрлар  бөлімінің
жұмысшыларына қажет-қызметкерлердің аты туралы және  жұмысқа  қабылдау  күні
туралы мәліметтер. Бұл жағдайда бір кестеге  кіру  рұқсатын  шексіздеу  үшін
кадрлар бөлімінің қызметкерлерінде кіруге рұқсат  болуға  тиістіақпараттарды
ғана таңдап ұсынысты пайдаланған ыңғайлы. Сонда олар өз  қызметтік  міндетін
толық көлемде орындай алады және құпиялы ақпаратқа кіру рұқсаты болмайды.

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

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

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

   Ұсыныстарды құру.

      Ұсыныстарды құру үшін CREATE VIEW операторы пайдаланылады. Ұсыныс  бір
немесе  бірнеше  ұсыныстар  негізінде  құрылуы  мүмкін.   Ұсынысты   құрудың
операторының типтік синткасисінің түрі келесідей:

   CREATE VIEW имя_представления AS

   {оператор выборки данных}

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

   Ұсыныстарды жою.

      Ұсыныстарды жою  DROP  VIEW  операторының  көмегімен  орындалады,  оны
шақырғанда  RESTRICT  және  CASCADE  параметрлері  көрсетілуі  мүмкін.   Бұл
параметрлер  басқа ұсыныстар және/немесе  шектеулер  сілтелетін  ұсыныстарды
жою кезіндегі әрекеттерді анықтайды. RESTRICT  вариантын  падаланғанда,  бұл
жағдайда қате туралы  хабарлама  шығарылады,  және  жою  орындалмайды.  Егер
CASCADE режимі пайдаланылса, онда DROP VIEW операторының орындалуы,  базалық
ұсыныстардың және шектеулердің жойылуына әкеледі.

      DROP VIEW операторының типтік синтаксисі келесі түрде болады:

   DROP VIEWимя_представления [RESTRICT | CASCADE]

                                 Дәріс №12.

   Дәріс тақырыбы:    Сақталатын процедуралар, оларды құру, орындау және жою

      Сақталатын процедуралар  (Stored  Procedure)-  олар  байланысқан  SQL-
операторларының  топтары.  Сақталатын  процедураларды  пайдалану  мәліметтер
қорымен жұмыстың қосымша икемділігін қамтамасыз  етеді,  өйткені  сақталатын
процедураларды   орындау   SQL   жеке   операторлар   тізбегінен   әлдеқайда
қарапайымдау.

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

      Сақталатын процедураларға  кіретін  параметрлер  ала-алады,  қосымшаға
мәндерді қайтарады және қосымшадан шақырылады.

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

   Сақталатын процедуралардың екі түрін бөледі:
 □ Таңдау процедуралары қосымшалар оларды мәліметтерді таңдау операторында
   кесте немесе ұсыныстар орнына пайдалануы мүмкін;
 □ Орындалатын процедуралар олар арнайы операторлар пайдаланылып
   шақырылады. Орындалатын процедура шақырылатын программаның нәтижелерін
   қайтармауы мүмкін.

   Сақталатын процедураларды құру.

      Сақталатын  процедураларды  құру  үшін  CREATE  PROCEDURE   опрераторы
пайдаланылады.

 CREATE PROCEDURE операторы мәліметтер қорынан жаңа  сақталатын  процедураны
анықтайды. Процедуралар тілі SQL таратуларынан тәуелді, бірақ ереже  бойынша
SQL барлық инструкцияларын және мыналарды қосады:
  □ Шартты операторлар;
  □ Цикл операторларының әртүрлі түрлерін;
  □ Ерекше жағдайларды өңдеу мүмкіндіктерін.

   Сақталатын процедуралар тақырыптан және  денесінен  тұрады.  Процедураның
 тақырыбы:
 □ Мәліметтер қорындағы кесте мен процедура аттарының ішінде ерекше болуы
   тиіс процедура атынан;
 □ Процедура шақырылатын программадан қабылдайтын кіретін параметрлер және
   олардың мәліметтері типтерінің тізімінен;
 □ Шығатын параметрлер және олардың мәліметтері типтерінің тізімінен
   тұрады, егер процедура мәндерді шақырылатын программаға қайтарса.

   Процедура денесі мыналардан тұрады:
 □ Жергілікті айнымалылар және олардың мәліметтері типтерінің тізімінен
   (егер олар процедура кодында пайдаланылса);
 □ BEGIN және END кілттік сөздерінің арасында қорытылған процедуралар және
   триггерлер тіліндегі инструкция блогынан.

   Сақталатын процедураларды орындау.

      Сақталатын  процедураны  орындауға  жіберетін   оператор   процедураға
тәуелді  болады.  Таңдау  процедурасы  оларға  SELECT  -мәліметтерді  таңдау
операторының көмегімен хабарласқанда орындалады.

   Орындалатын процедураны шақыру үшін арнайы EXECUTE операторын пайдаланған
жөн.

   Сақталатын процедураларды жою.

      Сақталатын  процедураларды   жою   үшін   DROP   PROCEDURE   операторы
пайдаланылады. Бұл оператор синтаксисі келесі түрде болады:

   DROP PROCEDUREимя_хранимой_процедуры




                                 Дәріс №13.

   Дәріс тақырыбы:    Триггерлер, құру және жою операторлары

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

   Триггердер қорда мәліметтердің сілтемелік тұтастығын қамтамасыз ету  үшін
пайдаланылады. Олардың келесі мүмкіндіктері бар:
 □ Пайдаланушы кесте өрістеріне рұқсат етілген мәндерді енгізгеніне
   кепілдік беру үшін енгізілетін мәліметтерді бақылау мүмкіндігі;
 □ Триггерлермен байланысқан кестелерді пайдаланатын қосымшаларда
   триггелердегі өзгерту көрінетін бірге жүретін қосымшаларды оңайлату;
 □ Кестелердің өзгертулерін автоматты құжаттау қосымша өзгерістер журналын
   кестеде өзгеріс болған сайын орындалатын триггерлер көмегімен басқару.




   Триггерлерді құру.

      Триггерлерді  құру  үшін   CREATE   TABLE   операторы   пайдаланылады.
Сақталатын процедуралар сияқты триггерлер де тақырып пен  денесінен  тұрады.
Триггер тақырыбы мынадан тұрады:
 □ Триггер аты,мәліметтер қоры ішінде керемет;
 □ Триггер байланысқан кесте аты;
 □ Триггер қашан орындалатынын анықтайтын инструкциялар;

   Триггер денесі мыналардан тұрады:
 □ Жергілікті айнымалылар және мәліметтердің типтерінің тізімінен (егер
   олар триггер кодында пайдаланылмаса);
 □ BEGIN және END кілттік сөздерінің арасында қорытылғагн процедуралар мен
   триггерлер тіліндегі инструкция блогынан. Блоктың ішінде басқа блок болуы
   мүмкін.

   Сонымен триггер мен сақталатын процедураның айырмашылығы тек тақырыбында.


   Триггер кестемен байланысқан. Кестеге бөлінген артықшылықтары  бар  кесте
иесі мен кез-келген пайдаланушы онымен  байланысқан  триггерлерді  автоматты
түрде орындауға хұқы бар.

   Триггерлерді жою.

      Триггерлерді  жою  үшін  DROP  TRIGGER  операторы  пайдаланылды.   Бұл
оператордың жалпы түрдегі синтаксисі төмендегідей:

   DROP TRIGGER имя_триггера

                                 Дәріс №14.

   Дәріс тақырыбы:    Мәліметтерді басқару, кестедегі берілгендерді өзгерту

      Мәліметтер қорында сақталатын мәліметтерді басқару үшін, командалардың
жеке типтері ретінде бөлінетін  және  мәліметтерді  басқару  тілі  (DML-Data
Manipulation  Language  )   деп   аталатын   SQL   операторларының   типтері
пайдаланылады.  DML  операторларының  көмегімен   қолданушы   кестеге   жаңа
мәліметтерді жүктеп, бар мәліметтерді түрлендіруге және жоюға болады:

    SQL тілінде тек қана 3 негізгі DML операторы анықталған:
 ▪ INSERT;
 ▪ UPDATE;
 ▪ DELETE.

      Кестеге жаңа ақпаратты қосу

      Мәліметтер  қорының  кестесіне  жаңа  ақпаратты  қосу  процесі  әдетте
мәліметтерді жүктеу деп аталады. Мәліметтерді жүктеу үшін  INSERT  операторы
пайдаланылады.
      Кестеге жаңа жазу қосу
      Кестеге жаңа жазу қосу үшін INSERT  операторының  келесі  синтаксистік
формасы пайдаланылады:
      INSERT INTO имя_таблицы
      VALUES (значение_1.значение_2….значение_N)
      INSERT операторының бұл формасын пайдаланғанда VALUES тізімінде мәндер
саны кесте өрістерінің санына тең ьболуы керек.  Және  де  VALUES  тізімінде
көрсетілген әдбір мәннің типі,  өріс  мәліметтерінің  типімен  сәйкес  болуы
керек.
      Символдық типтер мен даталарға қатысты мәндер  апостроф  ішінде  тұруы
тиіс. Мәндер тізімінде NULL мәні де пайдаланылуы мүмкін.
      Мысал қарастырайық. СПЕЦИАЛЬНОСТЬ кестесі келесі оператор пайдаланылып
құрылған:
      CREATE TABLE ДОЛЖНОСТИ (
      Код_должности INTEGER NOT NULL PRIMARY KEY
      Должность VAR CHAR (50) NOT NULL UNIQUE.
      Разряд INTEGER NOT NULL).
      Зарплата DECIMAL (7.2) NOT NULL).
      Осы кестеге жаңа жазу қосу үшін келесі INSERT  операторын  пайдаланған
жөн:
      INSERT INTO Должности
      VALUES (12 ‘Ведущий программист’.12.2000.00)
      Кестенің жеке өрістеріне мәліметтер енгізу
      Кестеге мәліметтер қосқанда барлық өрістерін емес, кейбіреулерін  ғана
толтыруға болады.  Бұл  жағдайда  INSERT  операторының  келесі  синтаксистік
формасы пайдаланылады:
      INSERT INTO имя_таблицы (имя_поля_1.имя_поля_2…имя_поля_N)
      VALUES (значение_1.значение_2…значение_ N)
      Мысалы, СТУДЕНТЫ  кестесіне  жаңа  студент  туралы  ақпарат  қосқанда,
студенттің толық аты туралы ақпаратты көрсетсе болғаны. Бұл жағдайда  келесі
операторды пайдалануға болады:
       INSERT INTO Студенты (Номер_зач_книжки.Имя. Фамилия.Отчество)
       VALUES (234.’Абылгазина’.’Айнур’.’Кадыровна’)
      Бұл  оператор  орындалғанда  басқа   барлық   өрістерге   NULL    мәні
енгізіледі. Кесте атынан кейін жақша ішінде  көрсетілмейтін  өрістердің  NOT
NULL шектеуі болмайды, әйтпесе INSERT  операторын  орындау  талабы  табыссыз
аяқталады.
      Басқа кестедегі мәліметтерді кестеге енгізу
      Кейде бір кестедегі ақпаратты екінші кестеге тасымалдау қажет  болады.
Бұл типтегі операцияларды INSERT  опареторымен  SELECT  мәліметтерді  таңдау
операторының комбинациясының көмегімен орындауға болады.
      INSERT  және  SELECT  операторын  біріктіріп,  басқа  кестеге  сұраныс
орындалуы нәтижесінде алынатын  мәліметтерді  кестеге  қогсуға  болады.  Бұл
жағдайда INSERT операторының синтаксисі келесі түрде болады:
       INSERT INTOимя_таблицы(имя_поля_1.имя_поля_2…имя_поля_N)
       FROM имя_таблицы
       WHERE условие.
      Бұл   операторда   VALUES   сөйлемінің   орнына    SELECT    операторы
пайдаланылады. Бұл оператордың синтаксисінің қысқаша  түсініктемесі.  SELECT
сөзінен кейін мәндері таңдамаға қосылатын өрістер тізімі  көрсетіледі  (егер
SELECT кейін * символын көрсетсе, таңдамаға  барлық  өрістер  қосылады).FROM
сөйлемі  мәліметтерді  таңдау  орындалатын  кестенің   атын   көрсету   үшін
пайдаланылады.  WHERE  сөйлемі  міндетті  емес  және   таңдамаға   қосылатын
мәліметтерге шектеулерді қосу үшін пайдаланылады.
      Кесте атынан  кейін  INSERT  операторында  жақша  ішінде  көрсетілетін
өрістердің саны таңдамаға қосылатын өріс санына тең болуы керек.  Өрістердің
сәйкестігі,  олардың  тізбектелу  ретімен  анықталады:  SELECT  операторының
тізіміндегі 1-ші өрісі сәйкес келеді және т.с.с.
      Кестеде сақталатын мәліметтерді өзгерту
      Кестеге енгізіліп қойылған мәліметтерді өзгерту үшін UPDATE  операторы
пайдаланылады. Бұл опаретор кестеге жаңа  жазу  қоспайды,  бар  мәліметтерді
жаңаға ауыстырады. UPDATE операторы бір  өріске  де,  бірнеше  өрістерге  де
қолданылуы мүмкін.  Өзгертілетін  жазулардың  саны  қолданушы  қажеттілігіне
тәуелді- UPDATE көмегімен бір немесе бірнеше жазуларды өзгертуге болады.
      Кестенің бір өрісіндегі мәліметтерді түрлендіру
      Кестенің  бір  ғана  өрісіндегі  мәліметтерді  өзгерту   үшін   UPDATE
операторының қарапайым формасы пайдаланылады:
      UPDATE имя_таблицы
      SET имя_поля=значение
      [WHERE условие]
      UPDATE  операторының  синтаксистік  элементтерінің  мағынасы  мынадай:
UPDATEкілттік  сөзінен  кейін  мәліметтер   түрлендірілетін   кестенің   аты
көрсетіледі, SET  кілттік  сөзінен  кейін  аты  берілген  өріске  жаңа  мәді
меншіктеу орындалады. Міндетті  емес  WHERE  сөйлемінің  көмегімен  берілген
шарт, түрлендірілетін жазулар санын анықтайды .
      Мысалы, СТУДЕНТЫ кестесінде сақталған  факультет  студентінің  телефон
номерін өзгерту қажет болсын. Бұл  жағдайда  UPDATE  операторы  бір  өрістің
және бір жазудың ғана  мәнін  өзгертуі  керек.  Сондықтан  WHERE  сөйлемінде
бізге қажетті жазуды  таңдайтын  шартты  көрсету  керек.  Қарапайым  шешімі.
«Код_физического_лица»  алғашөқы  кілтіің  өрісін  қажетті  жазуды  таңдауға
пайдалану болып табылады. Осы өрісте сақталатын мәнде  қызметкерді  бірмәнді
анықтайды. Онда телефон номерін  өзгертуді  орындайтын  UPDATE  операторының
түрі келесідей болады:
      UPDATE Физические_лица
      SET Телефон=(095)2347890
      WHERE Код_физического_лица=16
      Бұл оператор мәліметтер қорында 146  номерімен  тіркелген  қызметкерге
сәйкес келетін  жазу  үшін  телефон  номерінің  мәнін  өзгертеді.  Егер  біз
жоғарыда келтірілген оператордща шектеулі  шартты  бермесек,  ондла  телефон
номерінің мәні кестенің барлық жазулары үшін өзгерер еді.
      Кестенің бірнеше өрістеріндегі мәндерді өзгерту
      UPDATE операторының көмегімен бір уақытта кестенің бірнеше өрістерінің
мәндерін өзгертуге болады. Ол үшін SET   кілттік  сөзінен  кейін  бір  емес,
бірнеше өрістерді көрсету керек:
      UPDATE имя_таблицы
      SET имя_поля_1=значение_1
              имя_поля_2=значение_2
              …
              имя_поля_N=значение_ N
      [WHERE условие]
      Кестеден мәліметтерді өшіру
      Кестеден мәліметтерді өшіру DELETE операторының  көмегіен  орындалады.
Бұл оператор жеке өрістердегі  мәліметтерді  емес,  бүкіл  жазуды  толығымен
өшіреді. DELETE операторының синтаксисі келесідей:
      DELETE FROM имя_таблицы
      [WHERE условие]
      Өшірілетін жазулар міндетті емес WHERE сөйлемінің  көмегімен  берілген
шартқа  сәйкес  анықталады.  WHERE  сөйлемі  DELETE  операторында   болмаса,
мәліметтер бүкіл кестеден өшіріледі.

                                 Дәріс №15.
      Дәріс тақырыбы:       Мәліметтер қорының қауіпсіздігін басқару
      Мәліметтер қорын басқарудың ең маңызды есептерінің бірі  мәліметтердің
қауіпсіздігін  қамтамасыз  ету,  яғни  мәліметтерді  рұқсатсыз  пайдаланудан
қорғау.
      Қолданушылардың артықшылықтары
      Артықшылықтары  деп  қолданушылардың  өкілеттік  деңгейлерін   айтады.
Мәліметтер  қорында  сақталатын  ақпараттарға  кіру  рұқсатын  шексіздендіру
артықшылықтарының көмегімен реттеледі.
      Артықшылықтардың екі түрін бөледі:
 ▪ Жүйелік артықшылықтар;
 ▪ Объектілік артықшылықтар.
      Жүйелік артықшылықтар
      Жүйелік  артықшылықтар   мәліметтер   қорының   пайдаланушысына,   оны
администрациялаумен  байланысты  әрекеттерді  орындау  мүмкіндігін   береді:
мәліметтер  қорының,  сондай-ақ  жүйелік  артықшылықтар  мәліметтер  қорымен
олардың жеке объектілерінің күйін өзгерту хұқын береді.
   Мүмкін болатын жүйелік артықшылықтар пайдаланылатын МҚБЖ тәуелді  болады.
Бірақ кез-келген жағдайда олар мыналарға хұқы бар анықтамаларды қосады:
 ▪ Кестені құру;
 ▪ Ұсыныстарды құру;
 ▪ Сақталатын процедураларды құру;
 ▪ Кестелерді өшіру;
 ▪ Ұсыныстарды жою;
 ▪ Сақталатын процедураларды жою.
      Бұл тізім одан әр і қарай кеңеюі мүмкін және  де  әрбір  артықшылықтың
әртүрлі МҚБЖ-де өз ерекшеліктері бар.
      Объектілік артықшылықтар.
      Объектілік артықшылықтар дегеніміз  мәліметтер  қорының  объектілеріне
таралатын  пайдаланушының  өкілеттік  деңгейлері.  Ол  дегеніміз  мәліметтер
қорының   объектілерімен   қандай   да   бір   әрекеттерді   орындау    үшін
пайдаланушының сәйкес хұқы болуы керек.


      ANSI стандартымен келесі объектілік артықшылықтар қарастырылған:
 ▪ SELECT–көрсетілген кесьеден мәліметтер таңдамасын жүргізуге рұқсат
   береді;
 ▪ INSERT(имя_поля)-көрсетілген кестенің қандай да бір өрісіне
   мәліметтерді қосуды орындауға рұқсат береді;
 ▪ INSERT-көрсетілген кестенің барлық өрістеріне мәліметтерді қосуға
   рұқсат береді;
 ▪ UPDATE(имя_поля)-көрсетілген кестенің берілген өрісінде мәліметтері
   түрлендіруге рұқсат береді;
 ▪ UPDATE-көрсетілген кестенің барлық өрістерінде түрлендіру жүргізуге
   рұқсат береді;
 ▪ REFERENCE(имя_поля)-көрсетілген кестенің берілген өрісіне сілтелуге
   рұқсат береді (бұл артықшылық кез-келген тұтастық шектеуін орнатқан кезде
   қажет етіледі)
 ▪ REFERENCE- көрсетілген кестенің барлық өрістеріне сілтелуге рұқсат
   береді.


                  Мәліметтер қорының кіру рұқсатын басқару
   Пайдаланушылардың  мәліметтер  қорына  кіру  рұқсатын  басқару  үшін  SQL
тілінде екі оператор бар:
 ▪ GRANT;
 ▪ REVOKE.
      Ереже бойынша бұл  операторлар  мәліметтер  қорының  администраторымен
немесе оның қауіпсіздік бойынша көмекшісімен пайдаланылады.
      GRANT операторы
      GRANT операторы пайдаланушыға жүйелік және объектілік  артықшылықтарды
беру үшін пайдаланылады. Бұл операторының синтаксисі келесідей:
       GRANT привелегия_1[.привелегия_2]
      ON имя_объекта
      TO имя_пользователя [WITH GRANT OPTION]
      USER атты  пайдаланушыға  СОТРУДНИКИ  кестесінен  мәліметтерді  таңдау
хұқын беру келесі оператордың көмегімен орындалады:
      GRANT SELECT
      ON СОТРУДНИКИ
      TO USER
      Бір  GRANT  операторының  көмегімен  бірнеше  артықшылықтарды   беруге
болады. Мысалы, келесі оператор  USER  пайдаланушыға  СОТРУДНИКИ  кестесінің
мәліметтерін қарау және жаңасын қосу хұқын береді:
      GRANT SELECT.INSERT
      ON СОТРУДНИКИ
      TO USER.
      Шақырғанда GRANT операторы міндетті емес WITH GRANT OPTION сөйлемін де
пайдалануы  мүмкін.  Бұл  сөйлем  артықшылық   берілетін   пайдаланушы   осы
объектіге артықшылық хұқын алады дегенді білдіреді.  Мысалы,  егер  жоғарыда
қарастырылған  операторды  шақырса,  онда   USER    атты   пайдаланушы   осы
артықшылықтарды басқа пайдаланушыларға беру хұқын алады:
      GRANT SELECT.INSERT
      ON СОТРУДНИКИ
      TO USER
      WITH GRANT OPTION
      REVOKE операторы
      REVOKE операторы пайдаланушыға берілген артықшылықтарды  тойтару  үшін
пайдаланылады. Бұл оператор екі параметрдің біреуімен  шақырылады  –RESTRICT
немесе CASCADE RESTRICT вариантасын пайдаланғанда REVOKE  операторы  табысты
орындалады,  егер  оның  орындалуы  қалып-қалған  артықшылық  пайда  болуына
әкелмесе.
      CASCADE    режимін    пайдаланғанда    басқа    пайдаланғанда    басқа
пайдаланушыларға қалып-қалған барлық артықшылықтар жойылады.
      REVOKE операторының синтаксисі:
       REVOKE привелегия_1[.привелегия_2]
      On имя_объекта
      FROM имя_пользователя [RESTRICT/ CASCADE]

    Ұсынылатын әдебиеттер:



 1. Избачков. Ю.С., Петров В.Н. Информационные системы: Учебникдля вузов. 2-
    е изд.-СПб.:
 2. Информационные технологии управления: Учебное пособие/Под ред.
    Ю.М.Черкасова.-М.ИНФА-М..2001-216с.
 3. Мейер Д. Теория реляционных баз данных: Пер. С анг. М.:Мир.,1987.-608с.
 4. Миловзоров В.К. Элементы информационных систем..-М.-Высшая школа.,1989.
 5. Морозов В.К. Основы теории информационных систем.-М.:-Высшая школа.1994.
 6. С.В. Назаров, И. Першиков и др. Компьютерные технологиии обработки
    информации: Учебное пособие.- М.:Финансы и статистика.1995.-248с






   3.  Зертханалық сабақтары

   Зертханалық  сабақтарының жоспары

      Зертханалық сабақтарын орындауға арналған  әдістемелік  нұсқаулар:  Әр
   студент  журналдағы  аты-жөні  бойынша  вариант   нөмірін   анықтап,   әр
   тапсырмадан өз вариантын жазып алуы қажет. Берілген тапсырмаларды орындау
   талап етіледі. Алынған нәтижелерді анализдеуі керек. Төменде  әр  тақырып
   бойынша   есептерді   шығарудың   әдістемелік   нұсқаулары   келтірілген.
   Тақырыптар тізімі 2-кестедегі тақырыптық жоспарда  келтірілген.  Нұсқауда
   көрсетілген  рет  бойынша  төменде  келтірілген  тапсырмаларды   орындап,
   мұғалімге тапсыру талап етіледі.

   № 1 зертханалықу сабағы (1-сағат).

   Тақырыбы:  РЕЛЯЦИЯЛЫҚ ДЕРЕКТЕР БАЗАСЫ

   Әдістемелік  нұсқау. SQL ( "СЭКВЭЛ" )-бұл сұраныстардың  құрылымды  тілі.
Бұл   кестелерде   сақталған   байланысқан   ақпараттар    жиынтығы    болып
табылатындықтан,  реляциялық  ДБ-сын  құру  және  жұмыс  істеу   мүмкіндігін
беретін тіл.

    SQL-дің стандарты ANSI (Американским Национальным Институтом Стандартов)-
мен анықталған және қазіргі  уақытта  ISO  (МЕЖДУНАРОДНОЙ   ОРГАНИЗАЦИЕЙ  ПО
СТАНДАРТИЗАЦИИ)-мен қабылданған.

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

          Аты                 Телефон                Адрес

         Gerry   Farish      (   415)365-8775      127   Primrose    Ave.,SF


         Celia   Brock       (   707)874-3553      246    #3rd    St.,Sonoma


       Yves Grillet    ( 762)976-3665    778 Modernas,Barcelona

   Бұл алғанымыз РДБ-ның негізі болып табылады. Бірақ РДБ бірнеше  кестеден
тұрады.

                 ЖОЛДАРДЫ ЕРЕКШЕЛЕНДІРУ ( БАСТАПҚЫ КІЛТТЕР )

   Кестеде әрбір жолды ерекшелендіретін бір баған болуы керек. Негізінде бұл
баған нөмірден тұрғаны  дұрыс.  Әрбір  жолды  ерекшелендіретін  және  барлық
жолдарды жеке сақтауға пайдаланылатын осындар  баған  немесе  бағандар  тобы
кестенің бастапқы кілттері д.а.  Бастапқы  кілттер  ДБ  құрылымында  қажетті
элемент болып табылады. Олар файлға жэазуда жүйенің  негізі;  және  кестеден
қандай да бір жолды табу керек болса, онда осы  бастапқы  кілттерге  сілтеме
жасаймыз. Бағандар аталады және нөмірленеді.  Жолдарға  қарағанда,  кестенің
бағандары ( өрісі деп те аталады) реттеледі және аталады.

                 =========  ТИПТІК МӘЛІМЕТТЕР БАЗАСЫ ==========

                  SQL  –ді  практикада  пайдалану  үшін  мынада  үш  кестені
қарастырайық: 1.1,  1.2 және 1.3  кестелері  реляциялық  мәліметтер  базасын
құрайды.

   Кесте 1.1:     Сатушылар

         -----------------------------------------------------------

             SNUM     SNAME     CITY            COMM

         -----------------------------------------------------------

           1001       Peel      London          .12

           1002       Serres    San Jose        .13

           1004       Motika    London          .11

           1007       Rifkin    Barcelona       .15

           1003       Axelrod   New York        .10

         -----------------------------------------------------------

   Кесте 1.2:     Тапсырыс берушілер(Тапсырушылар)

          ----------------------------------------------

           CNUM  |  CNAME     | CITY    | RATING | SNUM

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

           2001  |  Hoffman   | London  |   100  | 1001

           2002  |  Giovanni  | Rome    |   200  | 1003

           2003  |  Liu       | SanJose |   200  | 1002

           2004  |  Grass     | Berlin  |   300  | 1002

           2006  |  Clemens   | London  |   100  | 1001

           2008  |  Cisneros  | SanJose |   300  | 1007

           2007  |  Pereira   | Rome    |   100  | 1004

         ----------------------------------------------

   Кесте 1.3:   Реттер

         -----------------------------------------------

           ONUM  |    AMT    |    ODATE    | CNUM | SNUM

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

           3001  |    18.69  |  10/03/1990 | 2008 | 1007

           3003  |   767.19  |  10/03/1990 | 2001 | 1001

           3002  |  1900.10  |  10/03/1990 | 2007 | 1004

           3005  |  5160.45  |  10/03/1990 | 2003 | 1002

           3006  |  1098.16  |  10/03/1990 | 2008 | 1007

           3009  |  1713.23  |  10/04/1990 | 2002 | 1003

           3007  |    75.75  |  10/04/1990 | 2004 | 1002

           3008  |  4723.00  |  10/05/1990 | 2006 | 1001

           3010  |  1309.95  |  10/06/1990 | 2004 | 1002

           3011  |  9891.88  |  10/06/1990 | 2006 | 1001

          -----------------------------------------------

     Мысалы, snum өрісі Тапсырыс берушілер кестесіндегі қандай сатушыға осы
тапсырыс беруші белгіленгенін көрсетеді.  Snum  өрісінің  нөмірі  Сатушылар
кестесімен байланысты, ол сатушылар  туралы  ақпарат  береді.  Шынында  да,
тапсырыс берушілер белгіленген  сатушы  бар  болуы  керек,  демек  Тапсырыс
берушілер кестесіндегі snum мәні Сатушылар кестесінде  берілуі  тиіс.  Егер
солай болса, онда «жүйе анықтамалық бүтіндік жағдайында  тұр» деп айтады.

   Кесте 1.1  келесі бағандардан тұрады:

      ӨРІС              МАЗМҰНЫ

     ---------    ----------------------------------------------

      snum        әрбір сатушыға белгіленген номер

                  ( " қызметкердің номері" ).

      sname       сатушының аты

      city           сатушының орналасқан жері ( қала ).

      comm        сатушының комиссиондары ондық формада




   Кесте 1.2  келесі бағандардан тұрады:

      ӨРІС               МАЗМҰНЫ

     --------     ---------------------------------------------------

      cnum       әрбір тапсырыс берушіге белгіленген номер

      cname      тапсырыс берушінің аты

      city       тапсырыс берушінің орналасқан жері ( қала ).

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

                 Жоғары номер жоғарғы деңгейді көрсетеді( рейтинг ).

      snum       тапсырыс берушіге белгіленген сатушының номері

                 ( Сатушылар кестесінен )

    Кесте 1.3  Реттер кестесі мынадай бағандар бар:

       ӨРІС                 МАЗМҰНЫ

       ---------    ---------------------------------------------------

       onum      әрбір тапсырысқа белгіленген номер

       amt        тапсырыстың заттың сомасының мәні

       odate     тапсырыс уақыты

       cnum      тапсырыс жасаушы  Тапсырушының номері

                 ( Тапсырыс берушілер кестесінен ).

       snum      тапсырысты сатқан сатушының номері

                 (Сатушылар кестесінен ).

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

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

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

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

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




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

   Тақырыбы:  SQL.  МӘЛІМЕТТЕРДІҢ ӘР ТҮРЛІ ТИПТЕРІ

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

     1. Кестенің жолын қараңыз.

     2. Тексеру жүргізіңіз – бұл жол сізге қажетті жолдардың бірі ма.

     3. Егер солай болса, кестені толық  тексергенше  дейін  оны  басқа  бір
жерге сақтап қойыңыз.

     4. Кестеде басқа жолдар бар ма соны тексеріңіз.

     5. Егер бар болса, онда 1 қадам арқа жылжыңыз.

     6.  Егер  жолдар  жоқ  болса,  онда  3-ші  қадамда  сақталған  мәндерді
шығарыңыз.

      ИНТЕРАКТИВТІ ЖӘНЕ ЕНГІЗІЛГЕН SQL

      SQL-дің екі түрі бар: Интерактивті және Енгізілген. Екі формада бірдей
жұмыс істейді, бірақ әр түрлі қолданылады. Интерактивті SQL,  сіз  команданы
енгізгенде, ол сол сәтте орындалады және сіз  нәтижені  бірден  көре  аласыз
(егер ол орындалса). Енгізілген SQL жалпы  SQL-дің  программаларының  ішінде
орналасқан командаларынан тұрады, олар жалпы басқа тілде  жазылады  (  КОБОЛ
немесе Паскаль сияқты).

     Бұл осы программаларды бұрынғыдан эффектілі және қуатты жасайды. Бірақ,
бұл  тілдерді  қолдана  отырып,  SQL-дің  структурасымен  және  мәліметтерді
басқару стилімен жұмыс істеуге әкеледі, ал ол  интерактивті  SQL-дің  кейбір
кеңейтілуін қажет етеді.

                            ========    МӘЛІМЕТТЕРДІҢ   ӘР   ТҮРЛІ   ТИПТЕРІ
========

   ANSI SQL стандарты тек қана мәтін және номер типін анықтайды, бұл уақытта
коммерциялық  программалардың  көпшілігі  басқа  арнайы  типтер   қолданады.
DATA(мерзім)  және  TIME(уақыт)  –  іс  жүзінде  стандартты   типтер   болып
табылады(бірақ олардың нақты форматы өзгертіледі). Кейбір  пакеттер  мынадай
типтерді құрайды, мысалы  MONEY(АҚША) және BINARY  (ЕКІЛІК).  (MONEY  –  бұл
компьютермен  қолданылатын   санаудың  арнайы  жүйесі.  Компьютерде   барлық
ақпарат екілік сандармен беріледі және одан кейін біз  оларды  оңай  қолдану
және түсіну үшін олар басқа жүйелерге түрленеді).

     ANSI ,  INTEGER(БҮТІН САН)  және  DECIMAL  (ОНДЫҚ  САН)  (  оларды  INT
және DEC деп қысқартуға болады ) сандарының екі типі біздің мақсатымыз  үшін
адекватты  болады,  сондай-ақ  көптеген  практикалық   іскерлік   қолданбалы
программалардың мақсаты үшін қолданылады. Шын  мәнінде,  БҮТІН  типті  ондық
нүктенін оң жағынан ешқандай  мән  қабылдамайтын  ОНДЫҚ  САН  деп  көрсетуге
болады.Мәтін жолына жататын  - CHAR ( немесе СИМВОЛ ) мәтін үшін  тип.  CHAR
типінің өрісі  бүл  өріске  енгізілуі  мүмкін  сиволдың  максималды  санымен
анықталатын анықталған өрістен тұрады.

    Реализациямен анықталған максимумге дейінгі  (әдетте  254  символ)  кез-
келген   ұзындыққа   ие   бола   алатын   мәтіндік   жол   болып   табылатын
VARCHAR(СИМВОЛОВДЫҢ АЙНЫМАЛЫ САНДАРЫ) деп аталатын стандартты  емес   типтен
бәрінен көп реализацияға ие. CHARACTER  және  VARCHAR  мәндері  «текст»  бір
тырнақшаға алынады.  CHAR мен VARCHAR айырмашылығы мынада:  CHAR  максималды
ұзын жолға жеткілікті  жады  көлемін  резервтеу  керек,  ал  VARCHAR  жадыны
керегінше бөледі.

     Символдық типтер баспа символдарынан, сандардан тұрады. Алайда 1 номері
және "1" символы бірдей емес.  "1" символы – жүйемен 1 сандық  мәні  ретінде
анықталмайтын мәтіннің басқа баспа фрагменті. Мысалы, 1 + 1 = 2,  бірақ  "1"
+ "1" "2"-ге тең емес.

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

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

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

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

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

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

   Тақырыбы:  SQL-ДІ КЕСТЕДЕН АҚПАРАТТЫ ШЫҒАРУ ҮШІН ҚОЛДАНУ

   Әдістемелік  нұсқау.   СҰРАНЫСТЫ ҚҰРАСТЫРУ

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

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

                         СҰРАНЫСТАР ҚАЙДА ҚОЛДАНЫЛАДЫ?

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

    SQL-дағы барлық сұраныстар жалғыз  командадан  тұрады.   Бұл  команданың
құрылымы  алдамшы  қарапайым,  себебі  сіз  оны  жоғары  қиын  бағалау  және
мәліметтерді  өңдеу  үшін  кеңейтіп  отыруыңыз  керек.    Бұл   команда    -
SELECT(ТАҢДАУ).

                              SELECT КОМАНДАСЫ

    Ең жеңіл формада SELECT командасы кестеден ақпарат алу  үшін  мәліметтер
базасын  жай  ғана  бағыттап  отырады.  Мысалы,   сіз   Сатушылар   кестесін
төмендегіні басып шығаруыңызға  болады:         SELECT  snum,  sname,  sity,
comm     FROM  Salespeople;

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

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

             | SELECT snum, sname, sity, comm                |

             | FROM  Salespeople;                            |

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

             |   snum      sname         city         comm   |

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

             |   1001      Peel         London        0.12   |

             |   1002      Serres       San Jose      0.13   |

             |   1004      Motika       London        0.11   |

             |   1007      Rifkin       Barcelona     0.15   |

             |   1003      Axelrod      New York      0.10   |

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

   Сурет 3.1: SELECT командасы

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

     Осы команданың әрбір бөлігінің түсіндірмесі бар.

    SELECT       мәліметтер базасына бұл команда сұраныс  екенін  жеткізетін
кілтті сөз. Барлық  сұраныстар  осы  сөзбен  басталады,  одан  кейін  пробел
қойылады.

   snum, sname    бұл сұраныс таңдап алатын  бағандар  тізімі.  Енгізілмеген
кез келген баған команданың нәтижесінде  қосылмайды.  Ол  осы  көрсетілмеген
бағандардағы ақпарат жойылады деген сөз емес, сұраныс тек мәліметтерді  ғана
көрсетеді.

   FROM          FROM – кілтті сөз,  SELECT  сияқты,  ол  әрбір  Salespeople
сұранысында  көрсетілуі  тиіс.  Ол  пробелдан  кейін  ақпарат  көзі  ретінде
қолданылатын кестенің аты жазылуы тиіс. Дәл осы  жағдайда  бұл  –  Сатушылар
кестесі   (Salespeople).   Үтір-нүкте   SQL    –дің    әрбір    интерактивті
командаларында  қолданылады,  ол  мәліметтер  базасына  команда  толық  және
орындалуға  дайын  деген  ақпарат  жібереді.  Біз   сұранысты   құрастырудың
ыңғайлы жолдарын қарастыруымыз керек, бірнеше жолға ма, әлде  бір  жолға  ма
келесі түрде:

         SELECT snum, sname, city, comm FROM Salespeople;

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

                   ӘРҚАШАН ЖЕҢІЛ ТӘСІЛДІ ТАҢДАҢЫЗДАР

     Егер кестенің әрбір бағанын көргіңіз келсе, онда міндетті емес қысқарту
бар, оны қолдана аласыз.  Жұлдызшаны (*) бағандардың  толық  тізімін  шығару
үшінқолдануға болады. Келесі түрде көрсетілгендей:

         SELECT *     FROM Salespeople;

     Бұл алдынғы нәтижеге әкеледі.

                               SELECT – ТІҢ СИПАТТАМАСЫ

     Жалпы жағдайда,  SELECT  командасы  SELECT  кілтті  сөзінен  басталады.
Осыдан кейін көргіңіз келген  бағандар  тізімі  жазылуы  керек,  бір-бірімен
үтірмен ажыратылған. Егер сіз барлық бағандарды  көргіңіз  келсе,  онда  бұл
тізімді жұлдызшамен  (*)  алмастыруыңызға  болады.   FROM  кілтті  сөзі  бос
орыннан  кейін  сұраныс  жасалынатын  кестенің  атымен  жасалынады.  Срңында
үтірөнүкте ( ;  )  қойылады,  ол  сұранысты  аяқтау  үшін  қолданылады  және
команда орындалуға дайындығын білдіреді.

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

   SELECT командасы қатаң анықталған ақпаратты кестеден шығаруға  мүмкіндігі
бар. Алдымен, біз тек кестенің  анықталған  бағандарын  көрсете  аламыз.  Ол
жеңіл орындалады, ол сіз көргініз келмейтін бағандарды  SELECT  командасының
бөлігінен алып тастау арқылы жүзеге асады. Мысалы, сұраныстан

      SELECT sname, comm   FROM Salespeople;







   Сурет 3.2-де көрсетілген нәтижені аламыз.

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

          | SELECT snum, comm       FROM  Salespeople;

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

           |        sname             comm                 |

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

           |        Peel              0.12                 |

           |        Serres            0.13                 |

           |        Motika            0.11                 |

           |        Rifkin            0.15                 |

           |        Axelrod           0.10                 |

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

   Сурет  3.2: анықталған бағандарды таңдау

                           БАҒАНДАРДЫ ҚАЙТА РЕТТЕУ

     Егер анықтама бойынша кестенің бағандары реттелген болса да, ол  оларды
сол ретте қалпына келтіріп отыру керек деген сөз емес. Әрине,  жұлдызша  (*)
бағандарды  өз  нақты  ретімен  көрсетеді,  бірақ  егер  бағандарды  жекелей
белгілесеңіз, онда  көргіңіз  келген  бағанды  еш  қиындықсыз  көре  аласыз.
Реттер кестесін қарастырайық, ол сатып  алу  уақытынан  (odate),   сатушының
номерінен (snum),  рет  номерінен  (onum),  және  сатып  алу  құнынан  (amt)
тұрады:

      SELECT odate, snum, onum, amt    FROM Orders;

   Сурет 3.3-те осы сұраныстың нәтижесі көрсетілген.

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

       |  SELECT odate, snum, onum, amt    FROM Orders;

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

       |     odate        snum        onum          amt  |

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

       | 10/03/1990       1007        3001         18.69 |

       | 10/03/1990       1001        3003        767.19 |

       | 10/03/1990       1004        3002       1900.10 |

       | 10/03/1990       1002        3005       5160.45 |

       | 10/03/1990       1007        3006       1098.16 |

       | 10/04/1990       1003        3009       1713.23 |

       | 10/04/1990       1002        3007         75.75 |

       | 10/05/1990       1001        3008       4723.00 |

       | 10/06/1990       1002        3010       1309.95 |

       | 10/06/1990       1001        3011       9891.88 |

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

   Сурет 3.3: Бағандардың реконструкциясы

     Сіз көріп отырғаңыздай, кестенің ішіндегі  ақпараттың  құрылымы  –  бұл
SQL-да негізгі активті қайта құрудың негізі.

                        АРТЫҚ ДЕРЕКТЕРДІ ЖОЮ

     DISTINCT (АЙЫРМАШЫЛЫҚ) –сіздің SELECT  сөйлеміңіздегі  бірдей  мәндерді
жою үшін қолданылатын аргумент. Нақты осы уақытта  сіз  сатушылардың  Реттер
кестесінде қандай орын алатынын білгіңіз келеді делік.  Рет  деп  бұл  жерде
Реттер  кестесіндегі  жазуды  айтамыз,  белгілі  бір  уақытта  белгілі   бір
тапсырыс беруші қандай да бір  белгілі  сатушыдан  белгілі  бір  сомаға  зат
сатып алғаны жөніндегі мәліметтер тіркеледі. Сізге әрбіреуі қанша  реті  бар
екенін білу қажет емес,  сізге тек сатушылардың нөмері  ғана  керек  (snum).
Сондықтан төмендегідей сұраныс жасайсыз:

        SELECT snum     FROM Orders;

   Сурет 3.4-те берілген нәтижені алу үшін

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

                | SELECT snum      | FROM  Orders;

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

                 |   snum                                        |

                 | -------                                       |

                 |   1007        |   1001           |    1004              |
1002                                             |                      1007


                 |   1003         ||   1002         ||    1001             |
1002                      |

                 |   1001                                        |

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

   Сурет 3. 4: SELECT сатушылар номерлерінің қайталануымен.




   Көшімесінсіз тізімді алу үшін, жеңіл оқылу үшін төмендегіні теріңіз:

          SELECT DISTINCT snum     FROM Orders;

    Сурет 3.5-те осы сұраныстың нәтижесі көрсетілген.

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

                           DISTINCT-ТІҢ ПАРАМЕТРЛЕРІ

     DISTINCT   SELECT сөйлемін тек бір рет қана көрсете алады. Егер  сөйлем
көптеген жолдардан тұрса,

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

               | SELECT  DISTINCT   snum        FROM  Orders;

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

                 |   snum                                        |

                 | -------                                       |

                 |   1001                                        |

                 |   1002                                        |

                 |   1003                                        |

                 |   1004                                        |

                 |   1007                                        |

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

   Сурет  3.5: SELECT  дубликатсыз

     DISTINCT бірдей мәнді жолдарды жойып отырады. Ал кейбір мәндері  ұқсас,
кейбір мәндері әр түрлі жолдарды сақтап отырады.

                             ALL-ДІҢ ОРНЫНА DISTINCT

     DISTINCT орнына, сіз ALL-ді қоюыңызға болады. Бұл  қарамаөқарсы  эффект
береді, жолдардың дублированиесі сақталып отырады. Бұл  сіз  DISTINCT-ті  де
ALL  –ді  де  қолданбағаңыздағыдай  болады,  бірақ  ALL  түсіндіруші   рөлін
атқарады.

                       ҚОСЫМШАЛАРДЫ ПАЙДАЛАНУДА ТАҢДАУ

    WHERE - SELECT командасының сөйлемі, ол предикаттарды орнатуға мүмкіндік
береді, олардың шарттары дұрыс немесе дұрыс емес  болуы  мүмкін  кез  келген
кестенің бағаны үшін.  Команда  кестедегі  тек  осы  ұйғарым  дұрыс  болатын
бағандарды ғана шығарады.

   Мысалы, сіз Лондондағы  барлық  сатушылардың  аттары  мен  комиссиондарын
көргіңіз келеді. Сіз төмендегі команданы тере аласыз:

         SELECT sname, city   FROM Salespeople  WHERE city = "LONDON";

    WHERE сөйлемі берілген  кезде,  мәліметтер  базасының  программасы  бір-
бірлеп барлық кестенің бағандарын қарап өтеді  және  әрбір  жолды  тексереді
ұйғарымның дұрыстығын тексеру үшін. Демек, Peel жазуы үшін,  программа  city
бағанының ағымды мәнін қарайды, ол "London" екнін анықтайды, және осы  жолға
нәтижесін  шығарады.  Serres  үшін  жазу  енгізілмейді,  және  сола  сияқты.
Жоғарыда айтылған сұраныстың нәтижесі Сурет 3.6-да көрсетілген.

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

                | SELECT sname, city     FROM  Salespeople  | WHERE  city  =
'London'

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

                 |   sname           city                        |

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

                 |   Peel            London                      |

                 |   Motika          London                      |

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

   Сурет 3.6: SELECT  WHERE сөйлемімен.

   WHERE сөйлеміндегі сандық өрісға мысал келтірейік.  rating жолы  Тапсырыс
берушілер  кестесіндегі  тапсырыс  берушілерді  кейбір  критерийлер  бойынша
негізгі топтарға бөлу үшін  қолданылады,  олар  кейіннен  осы  номер  арқылы
алынады. Мүмкін бұл – кредитті бағалау немесе алдыңғы сатып  алынған  заттар
томына бағалау формасы. Мұндай сандық кодтар реляциялық мәліметтер  базалары
үшін  қиын  ақпараттарға  қорытынды  шығаруға  арналған  тәсіл  ретінде  өте
маңызды. Біз рейтингісі  100  болатын  барлық  тапсырыс  берушілерді  келесі
түрдегідей таңдап ала аламыз.

             SELECT *  FROM Customers   WHERE rating = 100;

     Жалғыз жақшалар мұнда қолданылмайды, себебі бағалау – ол  сандық  өріс.
Сұраныс нәтижесі Сурет 3. 7-де көрсетілген.

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

                 | SELECT *                                      |

                 | FROM  Customers                               |

                 | WHERE rating = 100;                           |

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

                 |   сnum     cname    city     rating    snum   |

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

                 |   2001     Hoffman  London     100     1001   |[pic]

                 |   2006     Clemens  London     100     1001   |

                 |   2007     Pereira  Rome       100     1001   |

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

   Сурет 3.7:  SELECT предикаттағы сандық өрісімен

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

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

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

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

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

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




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

   Тақырыбы: РЕЛЯЦИОНДЫ ЖӘНЕ БУЛЕВ ОПЕРАТОРЛАРЫНЫҢ ОДАН ДА КӨП ПРЕДИКАТТАРДЫ
ШЫҒАРУДА ҚОЛДАНУ

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

                 =========   РЕЛЯЦИОНДЫ ОПЕРАТОРЛАР  =======

     Реляционды оператор – бұл екі мәннің арасындағы салыстырудың қандай  да
бір типін көрсететін математикалық символ .   2  +  3  =  5  немесе  city  =
"London" теңдіктері қалай қолданылатыннын сіздер көрдіңіздер.   Бірақ  бұдан
басқа да реляционды операторлар бар. Сіз  барлық  саудагерлердің  анықталған
мөлшерден жоғары коммисионымен көргіңіз келеді деп есептейік .

   Сіз "үлкен" - (>) типтегі салыстыруды  қолдана  аласыз.  SQL   қолданатын
реляционды операторлар:

             =    теңдік,   >    үлкен,  <    кіші,  >=   үлкен не  тең,  <=
кіші не тең,  <>   тең емес

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

   ASCII  және  EBCDIC  ,  түрлендіру  форматына  байланысты  болады.    SQL
символдық мәндерді түрлендіру  форматында  көрсетілгендей  негізгі  нөмірлер
терминінде салыстырады .  Даже значение  символа,   такого  как  "1"  сияқты
,нөмірді көрсететін , символдың мәні өзіне тең болуы қажет емес.  Реляционды
операторды сіз алфавиттік қатар орнату үшін қолдануыңызға болады - мысалы  ,
 "a" < "n"  мұндағы  a алфавиттік  қатарда  бірінші   -   бірақ  бұның  бәрі
түрлендіру форматының параметрімен шектеледі .

     ASCII-  да  және  EBCDIC-  да  да,   символдар  –  мәндері   бойынша  :
алфавиттік қатарда  олардың  алдындағы  басқа  символдардан  кіші  және  бір
вариантты  болады  (  жоғарғы  немесе  төменгі   ).   В  ASCII,  жоғарғы   р
регистрдегі барлық  символдар  -  төменгі  регистрдің  барлық  символдарынан
кіші,  сондықтан "Z" < "a", ал барлық нөмірлер  – барлық символдардан  кіші,
 сондықтан  "1"  <  "Z".  Бұл   EBCDIC  –  ке  де  қатысты.   Бұл  келісімді
қарапайымды ету үшін  сіз ASCII - ді  қолданады  деп  есептейік.   Егер  сіз
қандай  формат  қолданатыныңызды  немесе  оның   қалай   жұмыс   істейтініне
күмандансаңыз өзіңіздің документацияңыздың жүйесімен танысыңыз.

    Бұл жерде салыстырылатын мәндер  - скаляр мәндер деп  аталады  .  Скаляр
мәндер  скаляр өрнектермен қолданылады; 1 + 2 –бұл скаляр  өрнек   3  скаляр
мәнін көрсетеді.  Скаляр мән , арифметикалық  операторлармен   тек  нөмірлер
қолданатыны белгілі болса да , символ немесе сан болуы мүмкін  ,   +  (қосу)
немесе *(жұлдызша) деген сияқты.

     Сіз 200- ден жоғары (rating) бағасын беретін көргігіңізкеледі  делік  .
200  - скаляр мән  болғандықтан  және  бағалау  бағанындағы  мән  де  скаляр
болғандықтан оларды салыстыру үшін реляционды операторды қолданамыз.

       SELECT *       FROM Customers      WHERE rating > 200;

     Негізгі Булевы операторлары  да   SQL  да  қарастырылады.  Буль  өрнегі
Предикаттар  сияқты  не  дұрыс  не  дұрыс   емес   болып   табылады.   Булев
операторларын  бір немесе  бірнеше  дұрыс/дұрыс  емес  мәндер  байланыстырып
тұрады және жаолғыз дұрыс немесе дұрыс емес шешім шығарады.

   SQL де Бульдің стандартты операторлары :

                 AND,  OR, и NOT.

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

                 | SELECT *                                      |

                 | FROM  Customers                               |

                 | WHERE rating > 200;                           |

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

                 |   snum     cname    city     rating    snum   |

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

                 |   2004     Crass    Berlin     300     1002   |

                 |   2008     Cirneros San Jose   300     1007   |

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

    4.1 сурет: үлкен (>) қолданылуы

   Буль операторының бұдан да қиын түрлері кездеседі (  "  алынып  тасталған
немесе " типтегі ), бірақ олар  мына 3 жай операторлардан  -  AND,  OR,  NOT
жасалуы мүмкін.

      Булевтің  дұрыс/  дұрыс  емес  логикасы  –  сандық  компьютер  амалына
негізделгеннін  қалай  түсінесіз;  және  іс  жүзінде  барлық   SQL(   немесе
кезөкелгнбасқа бір тіл)  Булевой логикасының деңгеіне келтірілуі мүмкін.

                      Буль операторлары және олар қалай жұмыс істейді:

   * AND аргумент ретінде екі  Бульді алады (  A AND B түрінде) және  оларды
екеуі де дұрыс па екендігін ақиқатқасай бағалайды.

   * OR  аргумент ретінде екі Бульді алады(   A  OR  B  түрінде)  және  оның
біреуі дұрыс па екендігін бағалайды.

   * NOT аргумент ретінде бірлік  Бульді алады ( NOT A  түрінде)  және  оның
мәнін дұрыс еместен дұрысқа  немесе дұрыстан дұрыс емеске ауыстырады.

     Предикаттарды  Буль   операторымен   байланыстыра   отыра,сіз   олардың
мүмкіндігін айтарлықтай өсіре аласыз. Сіз  барлық  200  –  ден  жоғары  баға
беретін тапсырыс берушілерді

   San Jose те көргіңіз келеді делік:

            SELECT  *    FROM Customers   WHERE city = " San  Jose'      AND
rating > 200;

     Бұл  тапсырыстың  қорытындысы   4.2  суретте  көрсетілген.  Бұл  шартты
қанағаттандыратын бір ғана тапсырыс беруші бар.

      Егер  сіз   OR   ді  қолдансаңыз  San  Jose  болған  барлық   тапсырыс
берушілерді аласыз немесе (OR)  200 – ден жоғары бағаланғандарды аласыз.

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

                 | SELECT *                                      |

                 | FROM  Customers                               |

                 | WHERE city = 'San Jose'                       |

                 | AND rating > 200;                             |

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

                 |   сnum     cname    city     rating    snum   |

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

                 |   2008     Cirneros San Jose   300     1007   |

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

    4.2 сурет:  AND қолданатын SELECT

            SELECT *   FROM Customers    WHERE  city  =  "  San  Jose'    OR
rating > 200;

     Бұл тапсырыстың қорытындысы  4.3 суретте көрсетілген.

     NOT Буль мәнін инвертирлеу  үшін қолданылуы мүмкін. NOT-  пен  берілген
тапсырыс мысалы анықталған:

                       SELECT *  FROM Customers   WHERE city = "  San  Jose'
OR NOT rating > 200;

     Бұл тапсырыстың қорытындысы  4.4 суретте көрсетілген.

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

                | SELECT * FROM  Customers  WHERE city  =  'San  Jose'    OR
rating > 200;

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

                 |   сnum     cname    city     rating    snum   |

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

                 |   2003     Liu      San Jose   200     1002   |

                 |   2004     Grass    Berlin     300     1002   |

                 |   2008     Cirneros San Jose   300     1007   |

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

    4.3 сурет: OR қолданатын SELECT

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

                 | SELECT *                                      |

                 | FROM  Customers                               |

                 | WHERE city = 'San Jose'                       |

                 | OR NOT rating > 200;                          |

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

                 |   cnum     cname    city     rating    snum   |

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

                 |   2001     Hoffman  London     100     1001   |

                 |   2002     Giovanni Rome       200     1003   |

                 |   2003     Liu      San Jose   200     1002   |

                 |   2006     Clemens  London     100     1001   |

                 |   2008     Cirneros San Jose   300     1007   |

                 |   2007     Pereira  Rome       100     1004   |

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

    4.4 сурет: NOT қолданатын  SELECT

     Grass – тан басқа барлық  жазбалар  қолданылды.  Grass   San  JoSe-  де
болған жоқ , және оның бағсы 200- ден үлкен, сондықтан олекі  тексеруден  де
өтпеді.Әрбір басқа жолдарда екі  критерийдің  бірі  кездесіп  отырды  .Назар
аударыңыз NOT операторы Булев операторының алдына түсіп  отыру  керек,  мәні
өзгеретіндей ,  және  реляционды  оператордың  алдына  симау  керек.  Мысалы
предикаттың дұрыс енгізілмеуі:

                    rating NOT > 200

     Ол басқа белгілеуді көрсетеді. SQL келесіні қалай бағалайды екен?

                      SELECT *  FROM Customers  WHERE NOT city = " San Jose'
  OR rating > 200;

     NOT бұл жерде city = 'SanJose' өрнегіне ғана қолданылады, немесе rating
> 200 өрнегіне де ?  Жазылып тұрғандай, жауап баяғыдай болады.  SQL   NOT-ты
Буль өрнегімен өзінен кейін бірден  қолдануы  мүмкін.  Мына  командадан  сіз
басқа жауап алуыңыз мүмкін:

                      SELECT *  FROM Customers    WHERE NOT( city  =  "  San
Jose'   OR rating > 200 );

     Бұнда SQL жай жақшаларды ішіндегі барлығы бірінші бағаланатындай   және
сыртындағылардың  көмегімен  бір  өрнек  секілді  өңделеді(бұл  математикада
стандартты интерпритация  болып  табылады  ).  Басқа  сөзбен  айтқанда,  SQL
city = " San Jose'   теңдігі  немесе  rating  >  200  теңдігі  ақиқатқа  сай
келетіндей  әрбір жолды алады және анықтайды. Егер  кез-келген   шарт  дұрыс
болса,жақша ішіндегі Буль өрнегі де дұрыс. Бірақ , егер жақша ішіндегі  Буль
өрнегі дұрыс болса, онда біртұтас ретінде предикат дұрыс емес, өйткені   NOT
дұрысты дұрыс емеске ауыстырады және керісінше.

     Бұл тапсырыстың қорытындысы 4.5 суретте көрсетілген.

     Мынадай қиын мысал бар.  Сіз  оның  логикасын  қорыта  аласыз  ба  соны
көрейік.(қорытынды 4.6 суретте көрсетілген):

           SELECT * FROM Orders   WHERE NOT ((odate =  10/03/1990  AND  snum
>1002)

                  OR amt > 2000.00);

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

                 | SELECT *                                      |

                 | FROM  Customers                               |

                 | WHERE NOT  (city = 'San Jose'                 |

                 | OR rating > 200);                             |

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

                 |   cnum     cname    city     rating    snum   |

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

                 |   2001     Hoffman  London     100     1001   |

                 |   2002     Giovanni Rome       200     1003   |

                 |   2006     Clemens  London     100     1001   |

                 |   2007     Pereira  Rome       100     1004   |

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

    4.5 сурет: NOT қолданатын SELECT  және кіріспе сөйлем

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

                 |  SELECT  *       FROM   Orders     WHERE  NOT  ((odate  =
10/03/1990 AND snum > 1002) |

                 | OR amt > 2000.00);                              |

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

                 |   onum       amt      odate      cnum     snum  |

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

                 |   3003      767.19  10/03/1990   2001     1001  |

                 |   3009     1713.23  10/04/1990   2002     1003  |

                 |   3007       75.75  10/04/1990   2004     1002  |

                 |   3010     1309.95  10/06/1990   2004     1002  |

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

   4.6 сурет:  Толық (комплексті) тапсырыс

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




     Алдындағы  мысал  қалай  есептелгені  жөнінде  түсініктеме.Предикаттағы
Бульдің анағұрлым тереңірек енгізілген өрнегі  - бұл odate =

   10/03/1990 және snum > 1002  AND  –  тің  көмегімен  біріктірілген  болып
табылады, бұл осы екі  шарт  кездесетін  барлық  жолдар  үшін   Бульдің  бір
өрнегінің дұрыстығы арқылы бағаланады. Бұл құрмалас Булев өрнегі

   ( оны біз нөмір бірінші Булев деп атаймыз,  немесе B1  )  (B2)   (amt)  >
2000.00 өрнегімен  OR арқылы  бірігеді,  үшінші  бір   (B3)  өрнегін  тудыра
отырып, берілген жолдың дұрыс жолы болып табылатын не B1 не B2 – дұрыс  жолы
болып табылады.

     B3 толығымен жақшаға  алынып  NOT  –ты  анықтайды,және  ол  Бульдің(В4)
предикаттың шарты болып табылатын ақырғы өрнегін көрсетеді.

     Осылайша B4, сұраныс предикаты, - В3 бұрыс  болғанда,  әрқашанда  дұрыс
болады,

    B1 мен B2 – дұрыс емес болғанда В3 әрқашанда бұрыс. B1  жол  үшін  бұрыс
егер жолдың реттік мерзімі 10/03/1990 болмаса,  немесе  егер  snum-ның  мәні
1002-ден   аспаса.   B2    әрқашанда    барлық    жолдарға    бұрыс    болып
табылады,қосындының мәні 2000.00-нан аспайды. Кез-келген 2000.00-нан  асатын
жол  B2 -ні дұрыс қылады; нәтижесінде B3 дұрыс болады, ал B4  бұрыс.  Барлық
осы жолдар нәтижеден жойылады.Қалған 3 қазан жолдар snum > 1002  болады,  (3
қазанға snum = 1007 болатын onum 3001) олар дұрыс В3-тің және бұрыс  сұраныс
предикаты көмегімен В1-ді дұрыс қылады. Олар  да  нәтижеден  жойылады.Нәтиже
қалған жол үшін көрсетіледі.

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

           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 зертханалық сабағы  (2-сағат).

   Тақырыбы: ШАРТТАРҒА АРНАЙЫ ОПЕРАТОРЛАРДЫ ҚОЛДАНУ.

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

     4-бөлімдегі қаралған РЕЛЯЦИЯЛЫҚ ЖӘНЕ  БУЛЬДІК  ОПЕРАТОРЛАРҒА  ҚОСЫМШАДА
SQL арнайы IN,  BETWEEN,  LIKE,  және IS

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

                 ============  IN ОПЕРАТОРЫ  ===============

   IN Операторы берілген мәннің қосылу қосылмауын анықтайтын мәндер  жинағын
анықтайды.  Егер  сендер  Barcelona  мен  London-дағы   барлық   сатушыларды
тапқыңыз  келсе,  онда  келесі  сұраныстарды  қолданасыңдар.  Нәтижесі   5.1
суретте көрсетілген

         SELECT *  FROM Salespeople   WHERE city = 'Barcelona'   OR  city  =
'London';

     Сол ақпаратты алудың қарапайым әдісі де бар:

          SELECT *  FROM Salespeople   WHERE city IN ( 'Barcelona', 'London'
);

     Бұл сұраныстың шешімі 5.2 суретте көрсетілген.

     Көріп тұрғандай, IN үтірлермен  ерекшеленген,  жақшаға  алынған  мәндер
жиынын  анықтайды.  Ол  жиындағы  мәндерден  сәйкестік  табу  үшін  берілген
өрістің түрлі мәндерін тексереді. Егер бұл орындалса, предикат-   дұрыс.Жиын
символдардан емес, номерлер мәнінен тұрса, онда тырнақша  алынады.  Snum   =
1001, 1007, және 1004  мәндері  бар  сатушыларға   қатысты  барлық  тапсырыс
берушілерді табайық,.

   Бұл сұраныстың шешімі 5.3 суретте көрсетілген.

        SELECT *     FROM Customers   WHERE cnum IN ( 1001, 1007, 1004 );

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

             | SELECT *   FROM  Salespeople   WHERE city = 'Barcelona'    OR
city = 'London';

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

             |   snum      sname         city         comm   |

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

             |   1001      Peel         London        0.12   |

             |   1004      Motika       London        0.11   |

             |   1007      Rifkin       Barcelona     0.15   |

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

   5.1 сурет. Барселондағы және Лондондағы сатушылардың  табуы.




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

             | SELECT *    FROM  Salespeople  WHERE  city  IN  ('Barcelona',
'London';

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

             |   snum      sname         city         comm   |

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

             |   1001      Peel         London        0.12   |

             |   1004      Motika       London        0.11   |

             |   1007      Rifkin       Barcelona     0.15   |

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

   5.2 сурет. SELECT  IN қолданады.

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

             | SELECT *                                      |

             | FROM  Customers                               |

             | WHERE snum IN ( 1001, 1007, 1004 );           |

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

             |   snum     cname    city     rating    snum   |

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

             |   2001     Hoffman  London     100     1001   |

             |   2006     Clemens  London     100     1001   |

             |   2008     Cisneros San Jose   300     1007   |

             |   2007     Pereira  Rome       100     1004   |

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

   5.3 сурет.  SELECT номерлермен IN – ді қолданады.

                 ===========  ОПЕРАТОР  BETWEEN  ==========

      BETWEEN   IN  операторына  ұқсас.   IN  орындайтын  сияқты,   жиындағы
номерлерді қарастырудан өзгешелігі, BETWEEN предикатты дұрыс ететін  мәндері
кішірейетін диапазонды анықтайды. Сіздер  бастапқы  мәні  бар,  AND  кілттік
сөзі және соңғы мәні бар BETWEEN кілттік сөзін енгізулеріңіз керек.  IN-  ға
қарағанда, BETWEEN реттікке сезімтал болғандықтан, оның сөйлемдегі  бастапқы
мағынасы алфавиттегі немесе  сандық  ретпен  болуы  керек.  Ағылшын  тілінен
қарағанда, SQL  “мән  BETWEEN   мәні  және  мән  арасында  “   айтпайды,  ал
“BETWEEN мәні мән “.(Бұл LIKE  операторына  тән).  Келесі  мысал   Сатушылар
таблицасынан 10 және 12 аралығындағы комиссионды сатушылардан  тұрады.(шешім
5.4 суретте көрсетілген):

             SELECT *   FROM Salespeople

                WHERE comm BETWEEN .10 AND .12;

     BETWEEN  операторы  үшін,  екімәнді  шекарадағы  кез  келгенмен  сәйкес
келетін мән предикаттың дұрыс болуына әкеледі (бұл жағдайда,  .  10  және  .
12) .

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

             | SELECT *       FROM  Salespeople   WHERE comm BETWEEN .10 AND
.12;

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

             |   snum      sname         city         comm   |

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

             |   1001      Peel         London        0.12   |

             |   1004      Motika       London        0.11   |

             |   1003      Axelrod      New York      0.10   |

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

       5.4 сурет: SELECT  BETWEEN қолданады.

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

         SELECT *   FROM Salespeople  WHERE ( comm BETWEEN .10, AND .12 )

               AND NOT comm IN ( .10, .12 );

      Жалпы  көрініс  бойынша,  бұл  жағдай  тиімсіздеу,  бірақ  бұл    қиын
предикаттар  тудыратын  жаңа  операторлардың  Буль   операторымен   алмасуын
береді. Көбінесе, сіз (IN үшін) жиыннан  немесе (BETWEEN  үшін)  диапазоннан
алынатын мәндерді  салыстыру үшін реляционды оператор қолданған  сияқты   IN
және BETWEEN қолданасыз.

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

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

             | SELECT *     FROM  Salespeople WHERE ( comm BETWEEN  .10  AND
.12

             | AND NOT comm IN ( .10 .12;                    |

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

             |   snum      sname         city         comm   |

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

             |   1004      Motika       London        0.11   |

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

    5.5 сурет:  BETWEEN – ді қосылмаған ету.

       Бұл  сұраныс  алфавитті  диапазонға  түскен   тапсырыс  берушілдердің
аттарын таңдайды:

               SELECT *   FROM Customers   WHERE cname BETWEEN 'A' AND 'G';

    Шешім келесі суретте көрсетілген:

     Қосылған BETWEEN өзінде Grass және Giovanni болмайды. Бұл BETWEEN  түзу
емес жолдарды салыстыратынын көрсетеді.. 'G'  жолы  Giovanni-  ға  қарағанда
қысқа, сондықтан BETWEEN-ді  'G'  пробелімен  шығарады.   Пробелдер  алфавит
ретіндегі символдардан  асып  түседі(  реализацияның  көбінде  ),  сондықтан
Giovanni  таңдалмайды. Бұл Grass-қа да қатысты. Мұны алфавиттік  диапазоннан
мәндерді шығару үшін BETWEEN - ді қолданғанда  естен  шығармау  қажет.Әдетте
сіз диапазонды  диапазонның  басталу  және  диапазонның  аяқталу  символымен
көрсетесіз( орнына z-ті қоя салуға болады ).

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

             | SELECT *      FROM  Customers   WHERE cname BETWEEN  'A'  AND
'G';

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

             |   cnum     cname    city     rating    snum   |

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

             |   2006     Clemens  London     100     1001   |

             |   2008     Cisneros San Jose   300     1007   |

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

    5. 6 сурет: BETWEEN алфавиттік ретте қолданылуы

                 ============  LIKE ОПЕРАТОРЫ =============

     Жол астындағыны табу  үшін  LIKE  –  ті  CHAR  немесе  VARCHAR  типтегі
өрістерге қолданамыз. Яғни ол  символ  өрісін  оның  жолының  бөлігі  шартты
қанағаттандыра ма жоқ па соны көру үшін іздейді. Символ  ретінде  ол  топтық
символдарды  қолданады(wildkards)  –  бір  нәрсеге  сәйкес  келетін   арнайы
символдар.

      LIKE – пен қолданылатын екі топтық символдар типі бар:

   * ( _ ) сызу символы  бірлік  символдың  орнын  басады.   Мысалы,   'b_t'
символы 'bat' или 'bit' сөздеріне сәйкес келеді, бірақ 'brat'  –  қа  сәйкес
келмейді.

   * знак процента (%) пайыздық символ  символдардың  кез-келген  тізбегінің
орнын басады       (нөл символымен қоса). Мысалы, '%p%t'  символы

    'put', 'posit' немесе 'opt' сөздеріне сәйкес келеді, бірақ  'spite'  –қа
емес.

   Аттары G – ден басталатын барлық тапсырыс берушілерді табайық(  қорытынды
5.7 суретте көрсетілген):

          SELECT * FROM Customers WHERE cname LIKE 'G%';

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

             |  SELECT  *        FROM   Customers   WHERE  cname  LIKE  'G';


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

             |   cnum     cname    city     rating    snum   |

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

             |   2002     Giovanni Rome       200     1003   |

             |   2004     Grass    Berlin     300     1002   |

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

    5. 7 сурет: LIKE - ті  %-пен қолданатын SELECT

   Егер сіз қалай жазылатынын білмейтін ат немесе басқа  бір  мән  іздесеңіз
LIKE – ті қолдану  ыңғайлы  болады.  Сіз  өзіңіздің  бір  сатушыңыздың  атын
әріптермен қалай жазылғанын Peal немесе Peel дәл білмейсіз делік.Сіз  өзіңіз
білетін бөлігін және барлық  мүмкін қостарды табатындай  топтық  символдарды
қолдануыңызға болады ( бұл сұраныстың қорытындысы 5.8 суретте көрсетілген):

         SELECT *  FROM Salespeople  WHERE sname LIKE 'P _ _ l %';

     Әрбіреуі бір символды көрсететін сызба топтық символдары бізде бар  'P'
және 'l' – ге екі ғана  символ  қосады,  сондықтан   Prettel  –ге  ұқсас  ат
көрсетілуі мүмкін емес. ' % ' топтық символы – егер sname өрісінің  ұзындығы
Peel атындағы символдардың санынан көп болса, жолдың  аяғында  реализацияның
көбінде қажет (sname –нің қандай да  бір  басқа  мәндері  –  төрт  символдан
ұзағырақ болғандықтан ). Мұндай жағдайда, поля  sname  өрісінің  мәні,  Peel
түрінде сақталады және пробелдермен қолданылады. Осыдан, 'l' символы  жолдың
соңы ретінде қарастырылмайдыне.   ' %  ' топтық символы  –  бұл  пробелдерге
жай ғана сәйкес келеді. Бұл sname өрісі  VARCHAR типінде қолданылса  маңызды
емес.

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

             | SELECT *      FROM  Salespeople   WHERE sname LIKE ' P  1% ';


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

             |   snum      sname         city         comm   |

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

             |   1001      Peel         London        0.12   |

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

    5.8 сурет: SELECT  LIKE -ті  (_) сызбасымен қолданса

    Егер сізге жолдан пайыздық немесе сызба белгісін іздеу керек болса,  сіз
не істейсіз?  LIKE предикатында, кез-келген  бірлік  символды   ESC  символы
ретінде анықтай аласыз. Предикатта   ESC   символы  бірден  пайыздық  немесе
сызба белгісінің алдында қолданылады және ол пайыздық немесе  сызба  белгісі
топтық символ ретінде емес символ ретінде интерпретацияланады.  Мысалы,  біз
сызбасы бар баған sname-ді былай таба аламыз:




             SELECT *   FROM Salespeople  WHERE sname LIKE '%/_%'ESCAPE'/';

     Бұл деректермен ешқандай  қорытынды  болмайды,  өйткені  біз  сатушының
атына ешқандай сызбаны қоспадық . ESCAPE  сөйлемі  '/ ' –  ті   ESC  символы
ретінде анықтайды.  Символ ESC используемый  в  LIKE  –те  қолданылатын  ESC
символы  тпотық  символ  ретінде  өңделмейді  ,ол  бағанда  ізделетін  пайыз
белгісімен,сызба белгісімен немесе ESCAPE түрінде қолданылады.  Символ   ESC
символы бірлік болу керек және бірлік символға бірден қолданылады.

      Жоғарыдағы  мысалда,  басталудың  пайыздық  және  аяқталудың  пайыздық
топтық символ ретінде өңделеді;  сызба ғана өзіне көрсетілген.

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

      Алдыңғы мысалды  sname  –де   '_/'  бағанының  орнын  анықтауда  қайта
қолдананайық:

        SELECT *   FROM  Salespeople      WHERE  sname  LIKE  '  %  /_  /  /
%'ESCAPE'/';

     Мұндай деректермен тағы ешқандай қорытынды  болмайды.  Жол  (/_)  сызба
символымен және ESC(//)  символымен  ,  сонымен  қатар   жол  аяғындағы  (%)
символының кез-келген  тізбегіменқолданылады  және  (%)  символдарының  кез-
келген мағынасымен салыстырылады.

                    НӨЛДІК МӘНДЕРМЕН ( NULL ) ЖҰМЫС

     Көбінесе, таблицада әрбір өріс үшін  ешқандай  мағынасы  жоқ   жазбалар
болады,  өйткені  мысалы   ақпарат   аяқталмағандықтан   немесе   бұл   өріс
толтырылмағандықтан. SQL  сізге  өрісте  мәннің  орнына  NULL(ПУСТОЙ)  мәнін
енгізуге мүмкіндік бере отырып мұндай жағдайды ескереді. өрістің мәні  NULL-
ге тең болғанда, бұл мәліметтер базасының программасы арнайы бұл өрісті  осы
жол үшін ешқандай мәні  болмайды  деп  маркерлеген  (немесе  жазбаның).  Бұл
өріске  жай  берілуінен  ажыратылады,мәліметтер  базасы  кез-келген    басқа
мәндер сияқты нөл немесе бос орын мәні де  өңделеді.  NULL   техникалық  мән
болмайтындай онда да деректер типі болмайды. Ол өрістің  кез  келген  типіне
орналаса алады. Соған қарамастан, SQL-да NULL нуль ретінде  жиі айтылады.

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

                   ==========   NULL ОПЕРАТОРЫ   =========

     NULL мәннің жоқтығын білдіретіндіктен, NULL пайдаланылған кез келгеніне
салыстырудың нәтижесін біле алмайсыз. NULL кез  келген  мәнмен,  тіпті  тура
сондай басқа NULL-мен салыстырылғанда, нәтижесі не қате, не дұрыс  болмайды,
ол – белгісіз.  Булев  белгісізі  тіпті  предикатта  белгісіз  мәнді  шығара
отырып сұраныспен таңдалмайтын қате жол сияқты болады,  естеріңізде  болсын:
NOT (қате) – дұрысқа тең, ал NOT (белгісіз) – белгісізге тең.

     Осыдан шығатыны: 'city = NULL' немесе 'city IN (NULL)' типіндегі  өрнек
city мәнінен тәуелсіз белгісіз болады.

   Сіздер  қате  мен  белгісіз  арасындағы   айырмашылықты   –   предикаттың
шарттарына   сәйкес   келмейтін   бағандардың   мәндерінен   тұратын    және
бағандарында NULL бар жолдар білуіңіз керек.

                              COUNT-тың АРНАЙЫ АТРИБУТТАРЫ

   COUNT  функциясы  басқалардан  сәл  өзгешелеу.   Ол   берілген   кестенің
бағанының мәндерінің санын немесе жолдар  санын  есептейді.  Баған  мәндерін
санағанда ол берілген өрісте әр түрлі мәндердің шамасының санын шығару  үшін
DISTINCT-пен бірге қолданылады

   Біз оны,мысалы,  осы уақытта кестеде көрсетілген сатушылардың  нөмірлерін
санау үшін қолдана алар едік (6.3 суретте көрсетілген ):

                 SELECT COUNT ( DISTINCT snum )    FROM Orders;

                           DISTINCT-тың ҚОЛДАНЫЛУЫ

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

   SELECT-тен кейін емес.

     Бұл қолданысты индивидуал бағандарға пайдаланылатын  DISTINCT пен COUNT


   ANSI стандартын талап етеді, бірақ бағдарламалардың  көп  мөлшері  оларға
бұндай талаптар қоя бермейді.

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

             | SELECT COUNT (DISTINCT snum)                  |

             | FROM  Orders;                                 |

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

             | -------                                       |

             |       5                                       |

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

   6.3 сурет: Өріс мәндерін санау

   сіз  өрістен  көп  мәнді(  COUNT  )  санын  DISNINCT-тің   көмегімен  бір
сұраныста таңдай аласыз. Біз көргендей 3-тарауда сіз DISTINCT-тің  көмегімен
жолды таңдағанда бұл сұранысыңыз жүзеге  аспады.  DISTINCT  агрегаттың  кез-
келген функциясымен бірге  қолданыла  алады,  бірақ  көбінесе  ол  COUNT-пен
бірге жиі қолданылалы.  MAX және МІN – мен қолданылса ол ешқандай  эффектсіз
болады, ал SUM және АVG – пен сіз әдетте қайталанылатын мәндерді  енгізгенде
қолданасыз, барлық бағандардың жалпы  және  орташа  мәндерінен  заңды  түрде
эффектті.

                 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-деңгей










                                      А




                                     В1




                                     В2




                                     В3




                                     В4




                                     В5




                                     С1




                                     С2




                                     С3




                                     С4




                                     С5




                                     С6




                                     С7




                                     С8




                                    Роза




                                    Асем




                                    Қалам




                                   #11296




                                  Клиенттер




                                Қызметкерлер




                                  Товарлар




                                 Тапсырыстар




                              Компьютерлік жүйе




   SQL-сұраныс




Деректер




                               Деректер базасы




                                    ДББЖ




                                    Кесте





                                 Мәліметтер




                                     SQL


                                   сұраныс




                                   Ұсыныс

             Сұраныс негізінде кестедегі мәліметтерді көрсетеді






Пәндер