№ 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 қолданасыз.
=============== 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';
Шешім келесі суретте көрсетілген:
=============== 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 символы бірден пайыздық немесе сызба белгісінің алдында қолданылады және ол пайыздық немесе сызба белгісі топтық символ ретінде емес символ ретінде интерпретацияланады.
НӨЛДІК МӘНДЕРМЕН ( NULL ) ЖҰМЫС
Көбінесе, таблицада әрбір өріс үшін ешқандай мағынасы жоқ жазбалар болады, өйткені мысалы ақпарат аяқталмағандықтан немесе бұл өріс толтырылмағандықтан. SQL сізге өрісте мәннің орнына NULL(ПУСТОЙ) мәнін енгізуге мүмкіндік бере отырып мұндай жағдайды ескереді. өрістің мәні NULL-ге тең болғанда, бұл мәліметтер базасының программасы арнайы бұл өрісті осы жол үшін ешқандай мәні болмайды деп маркерлеген (немесе жазбаның). Бұл өріске жай берілуінен ажыратылады,мәліметтер базасы кез-келген басқа мәндер сияқты нөл немесе бос орын мәні де өңделеді. NULL техникалық мән болмайтындай онда да деректер типі болмайды. Ол өрістің кез келген типіне орналаса алады. Соған қарамастан, SQL-да NULL нуль ретінде жиі айтылады.
========== NULL ОПЕРАТОРЫ =========
NULL мәннің жоқтығын білдіретіндіктен, NULL пайдаланылған кез келгеніне салыстырудың нәтижесін біле алмайсыз. NULL кез келген мәнмен, тіпті тура сондай басқа NULL-мен салыстырылғанда, нәтижесі не қате, не дұрыс болмайды, ол – белгісіз. Булев белгісізі тіпті предикатта белгісіз мәнді шығара отырып сұраныспен таңдалмайтын қате жол сияқты болады, естеріңізде болсын: NOT (қате) – дұрысқа тең, ал NOT (белгісіз) – белгісізге тең.
Осыдан шығатыны: 'city = NULL' немесе 'city IN (NULL)' типіндегі өрнек city мәнінен тәуелсіз белгісіз болады.
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 – пен сіз әдетте қайталанылатын мәндерді енгізгенде қолданасыз, барлық бағандардың жалпы және орташа мәндерінен заңды түрде эффектті.
Достарыңызбен бөлісу: |