Жазуларды сұрыптау.
Жаңағы мысал нақты түрде 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
19 сурет. жазулардың қиын тандау критерийдің қорытындысы.
Қатынас опеациясының оң жағынан мәні белгіленеді. Егер ол – мәтінің немесе ауқыт-дата типті болса, ол апострофқа немесе екілік ковычкаға алынуы тиіс. Одан басқа LIKE операциясын қолдана аламыз, ол LIKE операциясынан оң жағындағы мән бүкіл өрісті емес, тек бір бөлігін құрастырса болады.
SELECT BName FROM Books WHERE BName LIKE "Я%" ORDER BY BName
Бұл сұраныс кестеден кітаптің тек «я» әрпінен басталатын
мәндерін алады(20 сурет).
21 сурет. LIKE операцияны қолдануың нәтижесі.
(%) Белгісі оның орнында кезектелген символдар бола алтыны көрсетеді. Келесі сұраныс атында бір рет болса да «Я» әрпі кезесетін кітаптарды тандайды:
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)
22 сурет. IN операциясын қолданудың нәтижесі.
23 сурет. SELECT операторымен салынған тізімнің құрастырудың нәтижесі.
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)
24сурет. Сатып алушылар қарыздарының орнташа .
Әкелінген барлық кітаптардың бағасымен барлық әкелушілердің тізімін келесі сұраныс береді ( 25 сурет):
SELECT SUM(NSum), FName FROM Nakls, Firms
WHERE FirmID=NFirm AND NType in (0, 6) • GROUP BY FName
Рис. 25. әкелушілер тізімі.
Толықтай түрдегі агрегатты функцияларымен бірге кестелердің өрістері де бар сұраныстар үшін топты секциялар қажет етеді, онда міндетті түрде барлық секциясында берілген өрістер жазылады.
Агрегатты функцияларды қолданғанда тізімнен қайталанатын өрістер аттарын алып тасталынуы тиіс. Бұл үшін DISTINCT арнайы сөзі қолданылады. Мысалы , төмендегі сұраныс кітаптарды әкелумен байланысқан салымар тізімін қайтарады(26 сурет):
SELECT COUNT(NFirm) FROM Nakls WHERE NType IN (0, 6)
Рис. 26. әкелу туралы салымдардың саны.
Келесі сұраныс әкелушілер санын қайтарады (27сурет):
SELECT COUNT(DISTINCT NFirm) FROM Nakls WHERE NType IN (0, 6)
27сурет. әкелушілер саны
Достарыңызбен бөлісу: |