1 –шi зертханалық жұмыс Тақырыбы: «Қойма» деректер қорын басқару жүйесін құру Зертханалық жұмыстың мақсаты



жүктеу 1.39 Mb.
бет12/12
Дата17.06.2016
өлшемі1.39 Mb.
1   ...   4   5   6   7   8   9   10   11   12

Кестелер. Сұраныстар. Мәліметтерді визуациялау.

SQL - сұраныстарын құрастыру.

SQL -сұраныстарын жасау үшін Delphi ортасынан Database ► Explore командасын немесе негізгі мәзірден Пуск ► Программы ► Borland Delphi 7 ► SQL Explorer командасын орындаңыз. Одан кейін брандмаузер терезесінде BIBLDATA псевдонимін тауып, оның сол жақтағы байланыс батырмасына басыңыз, ол «кітапхана» МҚ-ға шығу үшін жасалады. Бұл МҚ файл-серверік болғандықтан онда тек кестелер сақталады. BIBLDATA байланысты ашып, кез-келген кестенің атыа басыңыз, одан кейін Enter SQL вклакасына өтіңіз.

Үнсіз келісім бойынша берілген сұраныстың шрифтін өзгертіңіз, оны Courier New моноширный шрифтке ауыстырыңыз (View ► Text Font командасы арқылы тандалады). Дайын оған сұранысты орныдау сұраныс панельің оң жағынағы батырмасы арқылы істеуге болады.

Байланысқан кестелер арасынан сұрыптау.

Келесі сұранысты қарастырайық:

SELECT * FROM Nakls, Firms

Егер осы сұранысты орындасақ , онда ешкімге керек емес әр бір салымы кестесінде неше өрістер бар болса, сонша рет қайталанатындай МТ аламыз. өрістері үшін реляционды байланысты ескеру үшін тандау критериін орналастыру керек:

Кестелердің мұндай байанысын кейде олардың деккартық көбейтумен атайды.

WHERE арнайы сөзінен басталатын секциясына танау критериі жасалынады. екі кестені байланыстыру үшін , NAKLS кестесінің әрбір жазуы үшін NFirm өрісінде онымен байланысқан FIRMS кестесіндегі жазудың шифрі бар екенін бегіледік. Қорытыны МТ-де сонша жазу NAKLS кестесінде нешеуі бар болса сонша болады, әрбір жазуына он жағынан FIRMS кестесінің барлық өрістер жазулары қосылады.

Келесі сұраныс 1 сабақтың бағдарламаның DBGridl сеткасында берілген NAKLS МТ-ні қайталайтын МТ-ні құрастырады(18 сурет) :

SELECT


NaklID, NDate, FName, TName, NSum, NPayedSum,

NRetSum, NCoeff, NRetDate FROM

Nakls, Firms, TypeNakl WHERE

FirmID=NFirm AND TypeID=Ntype

Жазуларды сұрыптау.

Жаңағы мысал нақты түрде NAKLS МТ-ні қайталанатындай болуы үшін, NaklID өрісі бойынша жазуларды теруіміз керек. ORDER BY арнайы сөзден басталатын секциясы қолданылады:

SELECT

NaklID, NDate, FName, TName, NSum, NPayedSum,



NRetSum, NCoeff, NRetDate FROM

Nakls, Firms, TypeNakl WHERE

FirmID=NFirm AND TypeID=NType ORDER BY NaklID

Кестелер арасынан байланысты орнатқандай сұрыптауды кезкелген өрістерінен құрастыруға болды.

Қиын тандау критерийлері.

WHERE секциясы арқылы кестелері байланыстырумен бірге, қиын тандау критерийлерді құрастыруымызға болаы. Бұл үшін секцияда NOT, AND, OR түрдегі логикалық операцияларымен байланысқан, оперыторлар саны белгіленеді, мұндағы тильда(~) бегісі қатынастың белгісі:

SELECT

NaklID, NDate, FName, TName, NSum, NPayedSum,



NRetSum, NCoeff, NRetDate FROM

Nakls, Firms, TypeNakl WHERE

FirmID=NFirm AND TypeID=NType AND (NSum>100000 OR NRetSum>0) ORDER BY NaklID

Қатынас опеациясының оң жағынан мәні белгіленеді. Егер ол – мәтінің немесе ауқыт-дата типті болса, ол апострофқа немесе екілік ковычкаға алынуы тиіс. Одан басқа LIKE операциясын қолдана аламыз, ол LIKE операциясынан оң жағындағы мән бүкіл өрісті емес, тек бір бөлігін құрастырса болады.

SELECT BName FROM Books WHERE BName LIKE "Я%" ORDER BY BName
Бұл сұраныс кестеден кітаптің тек «я» әрпінен басталатын

мәндерін алады(20 сурет).

(%) Белгісі оның орнында кезектелген символдар бола алтыны көрсетеді. Келесі сұраныс атында бір рет болса да «Я» әрпі кезесетін кітаптарды тандайды:

SELECT BName FROM Books WHERE BName LIKE "%я%" ORDER BY BName


IN арнайы сөзі арқылы өрістің бола алатын мәндерін тере аламыз. Келесі сұраныс кестенің 1,3,7-ші кітантаптардың аттарын тереді(22 сутер):

SELECT BName FROM Books WHERE BookID IN (. 1, 3, 7)

IN Операциясынан кейінгі жай жақшада бола алатын міндерін жазудың орнына, SELECT операторын орналастыра аламыз. Егер оларға әкелінген кітаптарды төленбеген барлық сатып алушыларың тізімін көру керек болса, келесі сұранысты құрастыра аламыз(23 сурет).

SELECT FName FROM Firms WHERE FirmID IN

(SELECT NFirm FROM Nakls WHERE NPayedSum=O AND NType IN (1, 7)) ORDER BY Fname

Кестелердің псевдонимері және коментарийлер.

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

SELECT


NaklID, Date, Name, Name, Sum, PayedSum,...

Біркелкілікеместікті жою үшін өрістер аттары, олардың кестелер аттарымен толтырылады.

SELECT

NaklID, Date, Firms. Name, TypeNakl. Name, Sum, PayedSum,...



Қайталанатын кестелер аттары сұраныстың басқа да секцияларыда кездесетіндіктен оларды атауды қысқарту үшін SQL –де кестелерің аттарының орнына оның псевдонимін қолдануға:

SELECT


NaklID, Date, F. Name, T. Name, Sum, PayedSum,... FROM Nakls, Firms F, TypeNakl T..

Псевдоним секциясында кестенің атынан кейін белгіленеді. Сұраныстың кез-келген комментарий болуы мүмкін:

SELECT

/* өрістерінің қайталанатын аттары кестенің псевдонимдерімен толтырылады*/



NaklID, Date, F. Name, T. Name, Sum, PayedSum,... /* псевдонимдер кестенің атынан кейін символдарымен беріледі*/ FROM Nakls, Firms F, TypeNakl T...

Агрегатты функциялар және жазуларды топтау.

Өрістердің аттарының орнына және/немесе олармен бірге SELECT секциясында келесі агрегатты функцияларының бірін қолдануға болады:

AVG —аргументтің ортаңғы мәнін қайтарады;

COUNT —МТ барлық жазуларына аргументтердің кіру санын есептейді;

MAX —аргументтің максимальді мәнін қайтарады;

MIN —аргументтің минимаьді мәнін қайтарады;

SUM —аргуметтің мәнерін қосады.

Агригатты функцияға келгенде аргуметтің орнына МТ өрістерінен құрастырылған керекті мән болуы ммкін. Мысалы, келесі сұраныс сатып алушылардың қарыздарының орташа мәнін шығарады(24сурет):

SELECT AVG(NSum-NPayedSum-NRetSum)

FROM Nakls

WHERE NType in (1, 7)

Әкелінген барлық кітаптардың бағасымен барлық әкелушілердің тізімін келесі сұраныс береді ( 25 сурет):

SELECT SUM(NSum), FName FROM Nakls, Firms

WHERE FirmID=NFirm AND NType in (0, 6) • GROUP BY FName

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

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

SELECT COUNT(NFirm) FROM Nakls WHERE NType IN (0, 6)

Келесі сұраныс әкелушілер санын қайтарады (27сурет):

SELECT COUNT(DISTINCT NFirm) FROM Nakls WHERE NType IN (0, 6)



Бақылау сұрақтары


  1. Есепті құрудың ретін айтып беріңіз.

  2. SQL-сұраныстарды қалайша жасауға болады?

  3. Бас мәзір дегеніміз не? Оны қалай құруға болады?






1   ...   4   5   6   7   8   9   10   11   12


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

    Басты бет