Файл қосу
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 сұраныс Ұсыныс Сұраныс негізінде кестедегі мәліметтерді көрсетеді
Пәндер
- Іс жүргізу
- Автоматтандыру, Техника
- Алғашқы әскери дайындық
- Астрономия
- Ауыл шаруашылығы
- Банк ісі
- Бизнесті бағалау
- Биология
- Бухгалтерлік іс
- Валеология
- Ветеринария
- География
- Геология, Геофизика, Геодезия
- Дін
- Ет, сүт, шарап өнімдері
- Жалпы тарих
- Жер кадастрі, Жылжымайтын мүлік
- Журналистика
- Информатика
- Кеден ісі
- Маркетинг
- Математика, Геометрия
- Медицина
- Мемлекеттік басқару
- Менеджмент
- Мұнай, Газ
- Мұрағат ісі
- Мәдениеттану
- ОБЖ (Основы безопасности жизнедеятельности)
- Педагогика
- Полиграфия
- Психология
- Салық
- Саясаттану
- Сақтандыру
- Сертификаттау, стандарттау
- Социология, Демография
- Спорт
- Статистика
- Тілтану, Филология
- Тарихи тұлғалар
- Тау-кен ісі
- Транспорт
- Туризм
- Физика
- Философия
- Халықаралық қатынастар
- Химия
- Экология, Қоршаған ортаны қорғау
- Экономика
- Экономикалық география
- Электротехника
- Қазақстан тарихы
- Қаржы
- Құрылыс
- Құқық, Криминалистика
- Әдебиет
- Өнер, музыка
- Өнеркәсіп, Өндіріс
Қазақ тілінде жазылған рефераттар, курстық жұмыстар, дипломдық жұмыстар бойынша біздің қор #1 болып табылады.
Ақпарат
Қосымша
Email: info@stud.kz