Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Көпкестелі сұраныстар. Кестелерді біріктіру.

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

Кестелерді біріктіру. Көптеген жағдайларда бірнеше кестелерден деректерді алып, оларды бір қорытынды кестеге жинақтау қажет болады. Мұндай операция кестелерді біріктіру деп аталады. Біріктіру кезінде əртүрлі кестелер өрістерін байланыстыру жүргізіледі, мұнда өрістер арасында сəйкес анықталған мəндерді қолданумен байланыс орнатылады. FROM операторынан кейін кестелер аттары араларына үтір қою арқылы жазылады. Негізінде өрістің толық аты кестелер аттарынан жəне үтір арқылы бөлінген өрістің өзінен тұрады. Егер кестелерді біріктіретін барлық бағандар əртүрлі аттардан тұратын болса, онда оларды тікелей кесте атын көрсетпей-ақ қолдана беруге болады.

Келесі мысалды қарастырайық. Тауарлар алған бөлімдерді, ComboBox1 аралас тізімінен таңдап алынған, шығару қажет. C++Builder ортасында бұл төмендегідей болады:

{

TLocateOptions S;

ADOTable1->Locate(“tovar”, ComboBox1->Text,S);

int k=ADOTable1->FieldByName(“kodtov”)->AsInteger; ADOQuery1->Close();

ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add(“Select p1. otdel, p2.data_v, p2.kolvo from otdel p1,

tovotd p2 where (p1.kodotd=p2.kodotd) and (p2.kodtov=:a)”); ADOQuery1->Parameters->Items[0]->Value=k;

ADOQuery1->Open();

 

14.Сұраныстар құру, IN операторының қолданылуы және оған мысал келтіру. IN операторы келесі түрде жазылады: <өріс> in (<жиын>) жəне жоғарыда көрсетілген өріс мəні осы көрсетілген жиынның қандайда бір элементі болып табылатын жазбаларды іріктейді. Мысалы, еңбек ақылары 40000, 55500 жəне 25000 болатын қызметкерлер тізімін таңдап алу қажет: SELECT LastName, FirstName, Salary FROM Employee

where Salary = 40000 or Salary = 55500 or Salary = 25000

Əдетте бұл операторды қысқа түрде IN операторының көмегімен былай жазуға болады: SELECT LastName, FirstName, Salary FROM Employee

where Salary IN (40000, 55500, 25000)

IN операторының аргументі ретінде жазбаларды іріктеуге қатысты өрістер мəні алынған. IN операторы символдық мəндерді іздеу үшін де қолдануға болады. Айталық, бізге Christiansted, Grand Cayman жəне St. Thomas қалаларындағы компания аттарын анықтау қажет болсын. Бұл Customer кестесіндегі мəліметтер. Алдыңғы жазған сұранысты біраз өзгертейік: SELECT Company, City FROM Customer

WHERE City IN ('Christiansted', 'Grand Cayman1’, 'St. Thomas')

City өрісінің мəндері текстік болып табылады, сондықтан оны тырнақшаға аламыз.

Select fam, Year_r from Pers where fam in(‘Иванов’,’Петров’,’Сидоров’) операторы сұраныста берілген фамилиялы қызметкерлердің жазбаларын іріктейді, ал Select fam, Year_r from Pers where Year_r in(1980, 1990) операторы сұраныста көрсетілген туған күндер бойынша қызметкердің жазбаларын іріктейді.

 

 

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

Аралас сұраныстар Select операторымен алынатын қорытындыны басқа Select операторында қолдануға болады. Мысалы, ең жас қызметкерді табайық: Select Fam, Year_r From Pers Where Year_r=(Select max(Year_r) From Pers) Бұл операторда екінші Select max(Year_r) From Pers операторы максималды туған күнді береді жəне ол Select негізгі операторының Where элементінде қызметкерлерді іздеу немесе кімнің туған күні ең максималды болатындығын іздеуде пайдаланылады. Енді ішкі сұраныстар көмегімен екі ұжымнан барлық фамилиялары бір адамдарды іздейік: Select * From Pers Where Fam IN (Select Fam From Pers1) Select Fam From Pers1 ішкі операторы Pers1 кестесінен фамилиялар жиынын береді, ал Select негізгі операторының Where конструкциясы Pers кестесінен Pers1 кестесінде бар фамилиялар жиынын таңдап алады. Аралас сұраныстар жазбаларды іріктеудің қосымша шаты ретінде қолданылуы мүмкін. Бұл шарттың жұмыс істеу механизмін түсіну үшін Steven Buchanan атты қызметкер басқарған кемелер тізімі жəне оның жөнелтілу уақытын шығарып беретін қарапайым сұранысты қарастырайық: SELECT ShipName AS Название_судна, OrderDate AS Жіберу_Уақыты FROM Orders WHERE EmployeelD IN (SELECT EmployeelD FROM Employees WHERE FirstName = 'Steven' AND LastName = 'Buchanan') Бұл сұраныста IN операторы теңдік операторымен ауыстырылуы мүмкін. Дегенмен де IN операторы мəндер массивін, ал скалярлық теңдік операторы тек бір ғана мəн шығарады. Ішкі сұраныстарда сұраныстарды орындау реті ең төменгі деңгейде орналасқан ішкі сұраныстардан бастап орындалады. Қарастырылып отырған мысалда аты жəне фамилиясы бойыша EmployeelD қызметкердің жеке номері қарастырылады. Негізгі сұраныс табылған мəнді параметрі ретінде қабылдайды.

 

16. Сақталынған процедурлар және мұнда if...else операторын қолдану. Негізінде IF...ELSE операторы басқа программалау тілдерінде T-SQL тіліндегідей жұмыс жасайды, бірақ оның жұмыс істеу əдісі көбінесе С тілін еске түсіреді. Бұл операторлардың синтаксисі төмендегідей: IF <Boolean Expression>

<SQL statements I BEGIN <code series> END

[ELSE

<SQL statement> I BEGIN <code series> END]

<Boolean Expression> өрнегі ретінде орындалу нəтижесінде кез келген бульдік мəн беретін өрнекті беруге болады.

Шартсыз IF @Q = NULL операторы жүйеде ешқашан ақиқат мəн қабылдай алмайды жəне қорытындысында NULL-ге тең @Q айнымалысы бар барлық мəндер қабылдауға жіберіледі. Оның орнына көрсетілген оператор ретінде келесі инструкцияны пайдалануға болады: IF @Q IS NULL

Дұрыс емес тапсырыс уақыты орнына NULL-мəнін жазу үшін IF...ELSE операторын пайдалану қажет. Ол үшін қарапайым тексеру жүргізу қажет, DATEDIFF функциясын не үшін қолдану керек екендігін білу үшін. Қарастырылып отырған жағдайда салыстыру үшін қызметкерлер енгізген уақыт пен ағымдағы уақыты қолданылады. Берілген жағдайда уақыт компонентін белгілеу ретінде тəулікті бейнелеуші dd константасын көрсетіп, алынған өрнекті IF өрнегіне қосуға болады: IF DATEDIFF (dd, @OrderDate, GETDATE()) > 7

Егер DATEDIFF функциясының алынған мəні 7-ден үлкен болса (егер тапсырыс 7 күн бұрын енгізілген), онда берілген тапсырысуақыты мəнінің орнына NULL-ді енгізу қажет: SELECT @OrderDate = NULL

Сақталынған процедураны IF операторы дайын болғанна кейін жазуға болады: USE Northwind

GO

CREATE PROC Add_sp

@CustomerID nvarchar(5),

@OrderDate datetime = NULL,

@OrderID int OUTPUT /*ағымдағы уақыттан жеткізілу уақыты жеті күнге айырмашылығы бар ма екендігі тексеріледі жəне егер оң нəтиже болса NULL-мəнмен алмастырылады*/

IF DATEDIFF(dd, @OrderDate, GETDATE()) > 7

SELECT @OrderDate = NULL /* жаңа жазба құру */

INSERT INTO Orders

VALUES (@CustomerID, @OrderDate) /* идентификация мəні қайта құрылған жазбадан сыртқы айнымалыларға беріледі */ SELECT @OrderID = @@IDENTITY

Енді жаңа талаптарды ескеруге мүмкіндік беретін сақталынған процедураны шақырайық: USE Northwind

GO

DECLARE @MyIdent int

EXEC Add_sp

@CustomerID = 'ALFKI1,

@OrderDate = '5/1/2011',

@OrderID = @MyIdent OUTPUT

SELECT @MyIdent AS IdentityValue

SELECT OrderID, CustomerID, OrderDate FROM Orders WHERE OrderID = @MyIdent Таңдау нəтижесі келесі жазбалардан тұрады: (1 row(s) affected) IdentityValue

(1 row(s) affected)

OrderID CustomerID OrderDate

11079 ALFKI NULL (1 row(s) affected)

(5/1/2011) уақыты берілді, бірақ деректер қорына басқа мəн қойылды, IF операторы көмегімен қолдануға болмайтын мəн аланып, деректер қорына мəліметтерді қоярдың алдында алмастырылды.

 




Дата добавления: 2015-09-12; просмотров: 50 | Поможем написать вашу работу | Нарушение авторских прав

Тұтынушы бөлімі арқылы деректер қорындағы мәліметтерді өзгерту коды сұранысын жазыңыз. | Агрегаттық функциялар. | Деректерқорымен ADOкомпоненттеріарқылыбайланысудыңберілуі. | Деректер қорын пайдаланудағы ADO технологиясы. | Деректерқорындақолданушынықұру | Берілгендерді модификациялау. Insert операторы. | Берілгендердімодификациялау. Update операторы. | Шарт бойынша таңдау | ADOTable компонентінің негізгі қасиеттері мен әдістері. | Динамикалық сұраныстар және ADOQuery параметрлері. |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.008 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав