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


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



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

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


Мәліметтер қорының кестесіне жаңа ақпаратты қосу процесі әдетте мәліметтерді жүктеу деп аталады. Мәліметтерді жүктеу үшін 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 |

| 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 – пен сіз әдетте қайталанылатын мәндерді енгізгенде қолданасыз, барлық бағандардың жалпы және орташа мәндерінен заңды түрде эффектті.




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




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

    Басты бет