ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.11.2023
Просмотров: 80
Скачиваний: 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: Шамалардың орнына жолдардың саналуы.