Мәліметтер қорына жазбаларды енгізу, жою, жаңарту. VBA Access арқылы дерекқорға сұрауды жіберу жолы Қатынас атауларында sql сұрауларын жасау

Зертханалық жұмыс No1

SQL: DATA EXTRACT - командаТАҢДАУ

Жұмыс мақсаты:

  • SQL операторларымен танысу;
  • ТАҢДАУ пәрмені арқылы Access-те қарапайым SQL сұраныстарын құруды үйрену;

· IN, BETWEEN, LIKE, IS NULL операторларын қолдану.

Жаттығу№1. SQL режимінде СТУДЕНТТЕР кестесіндегі АТ пен ТЕГ өрістерінің барлық мәндерін таңдау үшін сұраныс жасаңыз.

АТТЫ, ТЕГІН ТАҢДАҢЫЗ

СТУДЕНТТЕРДЕН;

Жаттығу№2 . SQL режимінде СТУДЕНТТЕР кестесінің барлық бағандарын таңдау үшін сұрау жасаңыз.

ТАҢДАУ *

СТУДЕНТТЕРДЕН;


№3 тапсырма. SQL режимінде студенттер тұратын қалалардың атауларын таңдау үшін сұрау жасаңыз, олар туралы ақпарат ЖЕКЕ ДЕРЕКТЕР кестесінде.

АЙРЫҚ ҚАЛА ТАҢДАУ

[ЖЕКЕ ДЕРЕКТЕР]ДЕН;

№4 тапсырма. SQL режимінде Иванов тегі бар барлық студенттердің атын шығаратын таңдау сұранысын жасаңыз, олар туралы ақпарат ОҚУШЫЛАР кестесінде бар.

ТЕГІН, АТТЫ ТАҢДАҢЫЗ

СТУДЕНТТЕРДЕН

ТЕГІ "Иванов";

№5 тапсырма. Бюджеттік оқыту нысаны бойынша UIT-22 тобында оқитын студенттердің аты-жөнін алу үшін SQL режимінде таңдау сұранысын жасаңыз.

ТЕГІН, АТТЫ ТАҢДАҢЫЗ

СТУДЕНТТЕРДЕН

WHERE GROUP="UIT-22" ЖӘНЕ БЮДЖЕТ=шын;

№6 тапсырма. SQL режимінде сұрау жасаңыз. ЕМТИХАН кестесінен үлгі үшін тек 4 және 5-ші бағалары бар студенттер туралы ақпарат.

ТАҢДАУ *

КІМНЕН [ӨЗГЕРТУЕмтихандар]

ҚАЙДАБАҒАIN(4,5);

№7 тапсырма. IOSU пәнінен емтихан бағасы 3 болатын студенттер туралы ақпаратты таңдау үшін zanpoc және SQL режимін жасаңыз.

ТАҢДАУ *

КІМНЕН [ӨЗГЕРТУЕмтихандар]

ҚАЙДАITEM=" IOSU«ЖәнеБАҒАжоқ (4,5);

№8 тапсырма.Сағаттары 100 мен 130 аралығындағы элементтер үшін жазбаларды таңдау үшін SQL режимінде сұрау жасаңыз.

ТАҢДАУ *

FROMЗАТТАР

ҚАЙДАКӨРІҢІЗ100-ден 130-ға дейін;


№9 тапсырма.Студенттердің кестесінен фамилиялары, мысалы, «С» әрпінен басталатын студенттер туралы ақпаратты таңдау үшін SQL режимінде сұраныс жасаңыз.

ТАҢДАУ *

FROMСТУДЕНТТЕР

ҚАЙДАТЕГІЛАЙК"МЕН*";

Қорытынды:кезінде зертханалық жұмыс SQL инструкцияларымен танысты, IN, BETWEEN, LIKE операторлары арқылы SELECT командасы арқылы Access-те қарапайым SQL сұраныстарын құруды үйренді.

Бұл сабақ арналады SQL сұрауларыдеректер базасына VBA қатынасы. Біз VBA жүйесінде дерекқорға INSERT, UPDATE, DELETE сұраулары қалай жасалатынын қарастырамыз, сонымен қатар SELECT сұрауынан нақты мәнді алу жолын үйренеміз.

Бағдарламаға кіретіндер VBA қатынасымәліметтер қорымен жұмыс істеу кезінде SQL сервері, өте жиі олар INSERT, UPDATE немесе қарапайым SQL SELECT сұрауы болсын, дерекқорға SQL сұрауын жіберу сияқты қарапайым және қажетті тапсырмамен кездеседі. Біз жаңадан келген бағдарламашылар болғандықтан, біз де мұны істей алуымыз керек, сондықтан бүгін біз мұны істейміз.

Біз SQL серверінен деректерді алу тақырыбын қозғадық, онда біз бұл деректерді алу үшін VBA-да код жаздық, мысалы, MSSql 2008 мәтіндік файлына деректерді жүктеу туралы мақалада немесе біз оған да тоқталғанбыз материалда аз Access-тен деректерді Word және Excel үлгісіне жүктеп салу, бірақ қалай болғанда да, біз бұған үстірт қарадық және бүгін мен бұл туралы толығырақ сөйлесуді ұсынамын.

Ескерту! Төмендегі барлық мысалдар Access 2003 ADP жобасы мен MSSql 2008 дерекқоры арқылы қарастырылады.Егер сіз ADP жобасының не екенін білмесеңіз, біз мұны Access ADP жобасын құру және конфигурациялау материалында қарастырдық.

Мысалдар үшін бастапқы деректер

Бізде жыл айларының сандары мен атауларын қамтитын test_table кестесі бар делік (сұраулар Басқару студиясы)

КЕСТЕ ҚҰРУ .( NULL ЕМЕС, (50) NULL) ON GO

Жоғарыда айтқанымдай, біз MS SQL 2008 бағдарламасымен жұмыс істеу үшін конфигурацияланған ADP жобасын қолданамыз, онда мен сынақ пішінін жасап, қолтаңбасы бар бастау түймешігін қостым. «Жүгіру», ол біздің кодты сынауымыз керек, яғни. Біз барлық кодты оқиға өңдегішіне жазамыз» Түймені басу».

VBA ішіндегі INSERT, UPDATE, DELETE дерекқорына сұраныстар

Ұзақ кешіктірмеу үшін бірден бастайық, сынақ кестемізге жол қосу керек делік ( коды түсініктеме берді)/

Private Sub start_Click() "Сұрау жолын сақтау үшін айнымалы мәнді жариялау Dim sql_query Жол ретінде "Оған қажет сұрауды жазыңыз sql_query = "INSERT INTO test_table (id, name_mon) VALUES ("6", "June")" "Орындау бұл DoCmd.RunSQL sql_query End Sub

Бұл жағдайда сұрау ағымдағы дерекқор қосылымының параметрлері арқылы орындалады. Біз деректердің қосылғанын немесе қосылмағанын тексере аламыз.

Көріп отырғаныңыздай, деректер енгізілді.

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

Private Sub start_Click() "Сұрау жолын сақтау үшін айнымалы мәнді жариялау Dim sql_query Жол ретінде "Оған жою сұрауын жазыңыз sql_query = "DELETE test_table WHERE id = 6" "Орындаңыз DoCmd.RunSQL sql_query End

Тексерсек, қалаған жолдың жойылғанын көреміз.

Деректерді жаңарту үшін sql_query айнымалысына жазыңыз жаңарту сұрауы, мағынасы түсінікті деп үміттенемін.

VBA ішіндегі дерекқорға сұрауды ТАҢДАҢЫЗ

Мұнда басқа SQL конструкцияларына қарағанда біршама қызықтырақ.

Біріншіден, кестеден барлық деректерді алу керек делік, және, мысалы, біз оны өңдеп, хабарламада көрсетеміз, және сіз, әрине, оны басқа мақсаттарда пайдалана аласыз, ол үшін біз келесіні жазамыз. код

Private Sub start_Click() "Айнымалы мәндерді жариялау "Дерекқордан жазбалар жиыны үшін Dim RS As ADODB.Recordset "Сұрау жолы Dim sql_query As String "Хабардағы соңғы деректерді Dim str As String көрсетуге арналған жол "үшін жаңа нысан жасау жазбалар жинағы RS = Жаңа ADODB .Recordset "Сұрау сызығы sql_query = "Test_table FROM идентификаторын, атын_mon ТАҢДАҢЫЗ" "Сұрауды ағымдағы жоба қосылымының RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic параметрлерін пайдаланып іске қосыңыз "Not (RS.EOF) "Хабарды көрсету үшін айнымалыны толтырыңыз str = str & RS.Fields("id") & "-" & RS.Fields("name_mon") & vbnewline "келесі жазбаға өтіңіз RS.MoveNext Wend "msgbox str End Sub хабарын шығарыңыз

Мұнда біз жазбалар жинағындағы барлық мәндерді қайталау үшін VBA Access циклдерін пайдаланып жатырмыз.

Бірақ көбінесе жазбалар жинағынан барлық мәндерді емес, тек біреуін, мысалы, оның коды бойынша айдың атауын алу қажет. Мұны істеу үшін циклды пайдалану біршама қымбатқа түседі, сондықтан біз жай ғана бір мәнді қайтаратын және оған қол жеткізетін сұрауды жаза аламыз, мысалы, 5 кодын пайдаланып айдың атын аламыз.

Private Sub start_Click() "Айнымалыларды жариялау" Дерекқордан жазбалар жиыны үшін Dim RS As ADODB.Recordset "Сұрау жолы Dim sql_query As String" Соңғы мәнді көрсету үшін жол Dim str Жол ретінде "Жазбалар жинағы үшін жаңа нысан жасау RS = Жаңа ADODB.Recordset "Сұрау жолы sql_query = "test_table FROM name_mon ТАҢДАУ id = 5" "Сұрауды ағымдағы жоба қосылымының параметрлерін пайдаланып іске қосыңыз RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Біздің мәнді алу str = RS. Fields(0) msgbox str End Sub

Әмбебаптық үшін біз қазірдің өзінде ұяшық атымен емес, оның индексімен, яғни. 0, және бұл ең бірінші мән Жазбалар жинағы, соңында біз мәнге ие болдық «мамыр».

Көріп отырғаныңыздай, бәрі өте қарапайым. Дерекқордан белгілі бір мәнді жиі алу қажет болса ( соңғы мысалдағыдай), содан кейін барлық кодты бөлек функцияға шығаруды ұсынамын (VBA Access 2003 бағдарламасында функцияны қалай жазу керек) бір енгізу параметрімен, мысалы, ай коды ( егер біздің мысалды қарастырсақ) және жай ғана, егер бұл мәнді көрсету қажет болса, қажетті параметрмен бізге қажет функцияны шақырыңыз және дәл солай, осылайша біз VBA кодын айтарлықтай азайтамыз және бағдарламамыздың қабылдауын жақсартамыз.

Бүгінгі күннің бәрі осы. Іске сәт!

«Дүкен» оқу жобасының сипаттамасы

Кесте сілтеме диаграммасы

Кестелердің сипаттамасы

m_category - өнім санаттары

m_income - тауардың түсуі

m_outcome – тауарларды тұтыну

m_product - каталог, өнім сипаттамалары

m_supplier - каталог; жеткізуші туралы ақпарат

m_unit - каталог; өлшем бірлік

Осы оқу материалында келтірілген мысалдарды іс жүзінде тексеру үшін сізде келесі бағдарламалық құрал болуы керек:

Microsoft Access 2003 немесе одан кейінгі.

MS Access-те SQL сұранысы. Бастау

Кестенің мазмұнын көру үшін сол жақ панельдегі кесте атауын екі рет басыңыз:

Кесте өрісін өңдеу режиміне ауысу үшін басыңыз жоғарғы панельДизайн режимін таңдаңыз:

SQL сұрауының нәтижесін көрсету үшін сол жақ тақтадағы сұрау атауын екі рет басыңыз:

SQL сұрауын өңдеу режиміне ауысу үшін жоғарғы панельде SQL режимін таңдаңыз:

SQL сұрауы. MS Access-тегі мысалдар. ТАҢДАУ: 1-10

SQL сұрауында SELECT операторы дерекқор кестелерінен таңдау үшін пайдаланылады.

SQL сұрау Q001.Қажетті реттілікте тек қажетті өрістерді алу үшін SQL сұрауының мысалы:

SELECT dt, product_id, сома


FROM m_income;

SQL сұрау Q002.Бұл мысалда SQL сұрауында жұлдызша (*) таңбасы m_product кестесінің барлық бағандарын тізімдеу үшін, басқаша айтқанда, m_product қатынасының барлық өрістерін алу үшін пайдаланылады:

ТАҢДАУ *
FROM m_product;

СұранысSQL Q003. DISTINCT операторы қайталанатын жазбаларды жою және бірнеше бірегей жазбаларды алу үшін пайдаланылады:

DISTINCT product_id ТАҢДАУ


FROM m_income;

SQL сұрау Q004. ORDER BY операторы жазбаларды белгілі бір өрістің мәндері бойынша сұрыптау (реттеу) үшін қолданылады. Өріс атауы ORDER BY операторынан кейін көрсетіледі:

ТАҢДАУ *
m_кірістен


Бағасы бойынша ТАПСЫРЫС;

SQL сұрау Q005. ASC операторы ORDER BY операторына қосымша ретінде пайдаланылады және өсу бойынша сұрыптауды көрсету үшін қызмет етеді. DESC операторы ORDER BY операторына қосымша қолданылады және кему бойынша сұрыптауды көрсету үшін қолданылады. ASC де, DESC де көрсетілмеген жағдайда ASC (әдепкі) бар деп есептеледі:

ТАҢДАУ *
m_кірістен


ТАПСЫРЫС БОЙЫНША dt DESC , бағасы;

SQL сұрау Q006.Кестеден қажетті жазбаларды таңдау үшін таңдау шартын білдіретін әртүрлі логикалық өрнектер қолданылады. Логикалық өрнегі WHERE операторынан кейін пайда болады. Сома мәні 200-ден асатын m_income кестесінен барлық жазбаларды алу мысалы:

ТАҢДАУ *
m_кірістен


ҚАЙДА сомасы>200;

SQL сұрау Q007.Өрнек үшін қиын жағдайлар AND (конъюнкция), OR (дизъюнкция) және NOT (логикалық терістеу) логикалық операторларын пайдаланыңыз. m_outcome кестесінен сома мәні 20 және баға мәні 10-нан үлкен немесе оған тең барлық жазбаларды алу мысалы:

Бағасы


FROM m_outcome
ҚАЙДА сомасы=20 ЖӘНЕ бағасы>=10;

SQL сұрау Q008.Екі немесе одан да көп кестелердің деректерін біріктіру үшін INNER JOIN, LEFT JOIN, RIGHT JOIN нұсқауларын пайдаланыңыз. Келесі мысал dt, product_id, сома, баға өрістерін m_income кестесінен және тақырып өрісін m_product кестесінен шығарады. m_income кесте жазбасы m_income.product_id мәні m_product.id мәніне тең болғанда m_product кестесі жазбасына қосылады:



ON m_income.product_id=m_product.id;

SQL сұрау Q009.Бұл SQL сұрауында ескеретін екі нәрсе бар: 1) сіз іздеген мәтін жалғыз тырнақшалар("); 2) күн #Ай/Күн/Жыл# пішімінде берілген, бұл MS Access үшін дұрыс. Басқа жүйелерде күнді жазу пішімі басқаша болуы мүмкін. Түбіртек туралы ақпаратты көрсету мысалы. сүттің 2011 жылдың 12 маусымында. Күн пішімін ескеріңіз №6/12/2011#:

SELECT dt, product_id, тақырып, сома, баға


FROM m_income INNER JOIN m_product

WHERE title="Сүт" And dt=#6/12/2011#; !}

SQL сұрау Q010. BETWEEN нұсқауы мәннің белгілі бір диапазонға жататынын тексеру үшін қолданылады. 2011 жылдың 1 маусымы мен 30 маусымы аралығында алынған өнімдер туралы ақпаратты көрсететін мысал SQL сұрауы:

ТАҢДАУ *
FROM m_income INNER JOIN m_product


ON m_income.product_id=m_product.id
ҚАЙДА dt #6/1/2011# мен #6/30/2011# арасында;

SQL сұрауы. MS Access-тегі мысалдар. ТАҢДАУ: 11-20

Бір SQL сұрауы екіншісіне кірістірілуі мүмкін. Ішкі сұрау сұрау ішіндегі сұраудан басқа ештеңе емес. Әдетте ішкі сұрау WHERE сөйлемінде қолданылады. Бірақ ішкі сұрауларды пайдаланудың басқа жолдары бар.

Q011 сұрау. m_product кестесіндегі өнімдер туралы ақпарат көрсетіледі, олардың кодтары m_income кестесінде де бар:

ТАҢДАУ *
FROM m_product


WHERE id IN (m_income FROM product_id SELECT);

Q012 сұрау. m_product кестесіндегі өнімдердің тізімі көрсетіледі, олардың кодтары m_outcome кестесінде жоқ:

ТАҢДАУ *
FROM m_product


WHERE id IN ЕМЕС (ТАҢДАУ product_id FROM m_outcome);

Сұраныс Q013.Бұл SQL сұрауы m_income кестесіндегі, бірақ m_outcome кестесінде емес өнім кодтары мен атауларының бірегей тізімін көрсетеді:

DISTINCT product_id ТАҢДАУ, тақырып


FROM m_income INNER JOIN m_product
ON m_income.product_id=m_product.id
WHERE product_id IN YOX (ТАҢДАУ product_id FROM m_outcome);

Q014 сұрау. m_category кестесінен атаулары M әрпінен басталатын санаттардың бірегей тізімі көрсетіледі:

DISTINCT тақырыпты ТАҢДАУ


FROM m_product
ҚАЙДА «М*» сияқты тақырып;

Q015 сұрау.Сұраудағы өрістерге арифметикалық амалдарды орындау және сұраудағы өрістердің атын өзгерту мысалы (бүркеншік ат). Бұл мысалда кіріс сатылымның 7 пайызы болса, шығыс = сан*баға және әрбір баптың шығыс жазбасы үшін пайда есептеледі:


сома*баға/100*7 AS пайда
FROM m_outcome;

Q016 сұрау.Арифметикалық амалдарды талдау және жеңілдету арқылы сұраныстың орындалу жылдамдығын арттыруға болады:

ТАҢДАУ dt, өнім_идентификаторы, сома, баға, сома*баға Нәтижесі_сома,


нәтиже_қосынды*0,07 AS пайда
FROM m_outcome;

Сұраныс Q017.Бірнеше кестелердегі деректерді біріктіру үшін INNER JOIN операторын пайдалануға болады. Келесі мысалда ctgry_id мәніне байланысты m_income кестесіндегі әрбір жазба өнім тиесілі m_category кестесіндегі санат атауымен сәйкестендіріледі:

ТАҢДАУ c.title, b.title, dt, сома, баға, сома*баға AS кіріс_сомасы


FROM (m_income a.product_id=b.id INNER JOIN AS b ON m_product AS)
INNER JOIN m_category AS c ON b.ctgry_id=c.id
ТАРТИП БОЙЫНША c.title, b.title;

Сұраныс Q018. SUM – қосынды, COUNT – сан, AVG – орташа арифметикалық, MAX – максималды мән, MIN – ең төменгі мән сияқты функциялар жиынтық функциялар деп аталады. Олар көптеген мәндерді қабылдайды және оларды өңдегеннен кейін бір мәнді қайтарады. SUM жиынтық функциясын пайдаланып, сома мен баға өрістерінің көбейтіндісінің қосындысын есептеу мысалы:

СОМА(сома*баға) Жалпы_сома ретінде ТАҢДАҢЫЗ


FROM m_income;

Q019 сұрау.Бірнеше жиынтық функцияларды пайдалану мысалы:

ТАҢДАУ сомасын(сома) Сома_сома ретінде, AVG(сома) соманы_AVG ретінде,


MAX(сома) AS Amount_Max, Мин(сома) AS Amount_min,
Сан(*) AS Жалпы_сан
FROM m_income;

Сұраныс Q020.Бұл мысалда 2011 жылдың маусымында капиталдандырылған 1 коды бар барлық тауарлардың сомасы есептеледі:

Табыс_сомасы ретінде соманы(сома*баға) ТАҢДАҢЫЗ


m_кірістен
ҚАЙДА өнім_id=1 ЖӘНЕ dt #6/1/2011# ЖӘНЕ #6/30/2011# АРАСЫНДА;.

Q021 сұрау.Келесі SQL сұрауы 4 немесе 6 коды бар элементтерді сату көлемін есептейді:

Нәтиже_сома ретінде соманы (сома*баға) ТАҢДАҢЫЗ


FROM m_outcome
WHERE product_id=4 НЕМЕСЕ product_id=6;

Q022 сұрау. 2011 жылдың 12 маусымында 4 немесе 6 коды бар қанша тауар сатылғаны есептеледі:

Сома(сома*баға) нәтиже_қосынды ретінде ТАҢДАҢЫЗ


FROM m_outcome
ҚАЙДА (өнім_идентификаторы=4 НЕМЕСЕ өнім_идентификаторы=6) ЖӘНЕ dt=#6/12/2011#;

Q023 сұрау.Тапсырма мынау. Капиталдандырылған «Нан-тоқаш өнімдері» санатындағы тауарлардың жалпы сомасын есептеңіз.

Бұл мәселені шешу үшін үш кестемен жұмыс істеу керек: m_income, m_product және m_category, себебі:


- m_income кестесінде капиталдандырылған тауарлардың саны мен бағасы сақталады;
- әрбір өнімнің санат коды m_product кестесінде сақталады;
- тақырып категориясының аты m_category кестесінде сақталады.

Бұл мәселені шешу үшін біз келесі алгоритмді қолданамыз:


- ішкі сұранысты пайдаланып m_category кестесінен «Нан-тоқаш өнімдері» категориясының кодын анықтау;
- әрбір сатып алынатын өнімнің санатын анықтау үшін m_income және m_product кестелерін қосу;
- санат коды жоғарыда көрсетілген ішкі сұрауда анықталған кодқа тең тауарлар үшін түбіртек сомасын есептеу (=саны*бағасы).
ТАҢДАУ
FROM m_product INNER JOIN РЕТІНДЕ m_income AS b ON a.id=b.product_id
WHERE ctgry_id = (SELECT id FROM m_category WHERE title="Нан-тоқаш өнімдері"); !}

Q024 сұрау.«Нан-тоқаш өнімдері» санатындағы капиталдандырылған тауарлардың жалпы сомасын есептеу мәселесін келесі алгоритм бойынша шешеміз:
- m_income кестесіндегі әрбір жазба үшін оның өнім_идентификаторының мәніне байланысты m_категория кестесінен санат атауымен сәйкестендіріңіз;
- санаты «Нан-тоқаш өнімдері» болып табылатын жазбаларды таңдау;
- түбіртек сомасын есептеңіз = саны*бағасы.

FROM (m_product INNER JOIN РЕТІНДЕ m_income AS b ON a.id=b.product_id)

WHERE c.title="Нан-тоқаш өнімдері"; !}

Q025 сұрау.Бұл мысал қанша тауардың тұтынылғанын есептейді:

COUNT(өнім_идентификаторы) өнім_cnt ретінде ТАҢДАҢЫЗ


FROM (ТАҢДАУ DISTINCT product_id FROM m_outcome) AS t;

Q026 сұрау. GROUP BY операторы жазбаларды топтау үшін пайдаланылады. Әдетте жазбалар бір немесе бірнеше өрістердің мәні бойынша топтастырылады және әрбір топқа кейбір жиынтық әрекет қолданылады. Мысалы, келесі сұрау тауарларды сату туралы есепті жасайды. Яғни, тауарлардың атаулары мен олардың сатылған сомасынан тұратын кесте жасалады:

Тақырыпты ТАҢДАҢЫЗ, СУМ(сома*баға) нәтиже_қосынды ретінде


FROM m_product AS a INNER JOIN m_outcome AS b
ON a.id=b.product_id
GROUP BY BY;

Q027 сұрау.Санат бойынша сату есебі. Яғни, өнім санаттарының атаулары, осы санаттардағы өнімдердің сатылған жалпы сомасы және орташа сатылым сомасы қамтылған кесте жасалады. ROUND функциясы орташа мәнді жүздікке дейін дөңгелектеу үшін қолданылады (ондық бөлгіштен кейінгі екінші сан):

ТАҢДАУ c.title, SUM(сома*баға) Нәтиже_қосынды,


ROUND(AVG(сома*баға),2) Нәтиже_қосынды_орта
FROM (m_product AS a.id=b.product_id)
INNER JOIN m_category AS c ON a.ctgry_id=c.id
GROUP BY c.title;

Q028 сұрау.Оның түбіртектерінің жалпы және орташа саны әрбір өнім үшін есептеледі және жалпы түсімдері 500-ден кем емес өнімдер туралы ақпаратты көрсетеді:

ТАҢДАУ өнім_идентификаторы, СОМА(сома) сома_сома ретінде,


Дөңгелек(Орташа(сома),2) AS сома_орта
m_кірістен
өнім_идентификаторы бойынша ТОПТАУ
БАР сома(сома)>=500;

Q029 сұрау.Бұл сұрау әрбір өнім үшін оның 2011 жылдың екінші тоқсанында жасалған түсімдерінің сомасы мен орташа мәнін есептейді. Егер өнім түбіртегінің жалпы сомасы кемінде 1000 болса, онда осы өнім туралы ақпарат көрсетіледі:

Тақырыпты ТАҢДАҢЫЗ, SUM(сома*баға) Кіріс_сомасы ретінде


FROM m_income a INNER JOIN m_product b ON a.product_id=b.id
ҚАЙДА dt #4/1/2011# ЖӘНЕ #6/30/2011# АРАСЫНДА
Тақырып бойынша топтастыру
СОМА БАР(сома*баға)>=1000;

Q030 сұрау.Кейбір жағдайларда кейбір кестенің әрбір жазбасын басқа кестенің әрбір жазбасымен сәйкестендіру қажет; ол декарттық туынды деп аталады. Осындай байланыс нәтижесінде пайда болатын кесте Декарт кестесі деп аталады. Мысалы, кейбір А кестесінде 100 жазба, ал В кестесінде 15 жазба болса, онда олардың декарттық кестесі 100*15=150 жазбадан тұрады. Келесі сұрау m_income кестесіндегі әрбір жазбаны m_outcome кестесіндегі әрбір жазбамен қосады:
FROM m_income, m_ntice;

Q031 сұрау.Жазбаларды екі өріс бойынша топтастыру мысалы. Келесі SQL сұранысы әрбір жеткізуші үшін одан алынған тауардың көлемі мен санын есептейді:


SUM(сома*баға) Кіріс_сомасы ретінде

Q032 сұрау.Жазбаларды екі өріс бойынша топтастыру мысалы. Келесі сұрау әрбір жеткізуші үшін біз сататын өнімдерінің көлемі мен санын есептейді:

жеткізуші_идентификаторын, өнім_идентификаторын, СУМ(сома) сомасын_сома ретінде ТАҢДАУ,




GROUP BY BY жабдықтаушы_идентификаторы, өнім_идентификаторы;

Q033 сұрау.Бұл мысалда жоғарыдағы екі сұрау (q031 және q032) ішкі сұраулар ретінде пайдаланылады. LEFT JOIN әдісін қолданатын осы сұраулардың нәтижелері бір есепке біріктіріледі. Келесі сұрау әрбір жеткізуші үшін алынған және сатылған өнімдердің саны мен сомасы туралы есепті көрсетеді. Кейбір өнім әлдеқашан алынған болса, бірақ әлі сатылмаған болса, бұл жазбаның нәтиже_сомасы ұяшығы бос болатынын ескеріңіз. бұл сұрау салыстырмалы күрделі сұрауларды ішкі сұрау ретінде пайдаланудың мысалы ғана. Бұл SQL сұрауының үлкен деректер көлемімен өнімділігі күмәнді:

ТАҢДАУ *
FROM



SUM(сома*баға) Кіріс_сомасы ретінде

ON a.product_id=b.id GROUP BY BY product_id, product_id) a AS
СОЛ ҚОСЫЛУ
(Таңдау жеткізуші_идентификаторы, өнім_идентификаторы, СУМ(сома) сома_сома ретінде,
СУМ(сома*баға) Нәтиже_сомасы
FROM m_outcome AS a INNER JOIN m_product AS b
ON a.product_id=b.id ТОБЫ БОЙЫНША жеткізуші_идентификаторы, өнім_идентификаторы) AS b
ҚОСУЛЫ (a.product_id=b.product_id) ЖӘНЕ (a.supplier_id=b.product_id);

Q034 сұрау.Бұл мысалда жоғарыдағы екі сұрау (q031 және q032) ішкі сұраулар ретінде пайдаланылады. RIGTH JOIN әдісін қолданатын осы сұраулардың нәтижелері бір есепте біріктірілген. Келесі сұрауда әрбір клиенттің өзі пайдаланған төлем жүйелеріне және ол салған инвестиция сомасына сәйкес төлемдер сомасы туралы есеп көрсетіледі. Келесі сұрау әрбір жеткізуші үшін алынған және сатылған өнімдердің саны мен сомасы туралы есепті көрсетеді. Кейбір өнім сатылған болса, бірақ әлі келмеген болса, бұл жазбаның кіріс_сомасы ұяшығы бос болатынын ескеріңіз. Мұндай бос ұяшықтардың болуы сатуды есепке алудағы қатенің көрсеткіші болып табылады, өйткені сатылымға дейін ең алдымен сәйкес тауардың келуі қажет:

ТАҢДАУ *
FROM


(Таңдау жеткізуші_идентификаторы, өнім_идентификаторы, СУМ(сома) сома_сома ретінде,
SUM(сома*баға) Кіріс_сомасы ретінде
FROM m_income AS a.product_id=b.id ON INNER JOIN m_product AS b
жеткізуші_идентификаторы, өнім_идентификаторы бойынша ТОПТАУ a
ОҢ ҚОСЫЛУ
(Таңдау жеткізуші_идентификаторы, өнім_идентификаторы, СУМ(сома) сома_сома ретінде,
СУМ(сома*баға) Нәтиже_сомасы
FROM m_outcome AS a.product_id=b.id ON INNER JOIN AS b ON m_product
ТОБЫ БОЙЫНША жеткізуші_идентификаторы, өнім_идентификаторы) AS b
ҚОСУЛЫ (a.product_id=b.product_id) ЖӘНЕ (a.product_id=b.product_id);

Q035 сұрау.Өнім бойынша кірістер мен шығыстардың сомасын көрсететін есеп көрсетіледі. Ол үшін m_income және m_outcome кестелері бойынша өнімдердің тізімі жасалады, содан кейін осы тізімдегі әрбір өнім үшін m_income кестесі бойынша оның кірісінің сомасы және m_outcome кестесі бойынша оның шығыстарының сомасы есептеледі:

ТАҢДАУ өнім_идентификаторы, СУМ(сомадағы) табыс_сомасы,


СУМ(шығарылатын_сома) нәтиже_сомасы
FROM
(Өнім_идентификаторын ТАҢДАҢЫЗ, сома AS_сома, 0 AS тыс_сома
m_кірістен
БАРЛЫҚ ОДАҚ
SELECT product_id, 0 AS AS in_summa, AS AS out_summa
FROM m_outcome) AS t
GROUP BY product_id;

Q036 сұрау. EXISTS функциясы егер оған берілген жиында элементтер болса, TRUE мәнін қайтарады. EXISTS функциясы егер оған берілген жиын бос болса, яғни оның құрамында элементтер жоқ болса, FALSE мәнін қайтарады. Келесі сұрау m_income және m_outcome кестелерінің екеуінде де қамтылған өнім кодтарын көрсетеді:

DISTINCT product_id ТАҢДАУ


FROM m_income AS a
ҚАЙДА БАР(өнім_идентификаторын m_нәтижеден ТАҢДАҢЫЗ b

Q037 сұрау. m_income және m_outcome кестелерінің екеуінде де қамтылған өнім кодтары көрсетіледі:

DISTINCT product_id ТАҢДАУ


FROM m_income AS a
WHERE product_id IN IN (m_outcome FROM product_id ТАҢДАҢЫЗ)

Q038 сұрау. m_income кестесінде қамтылған, бірақ m_outcome кестесінде жоқ өнім кодтары көрсетіледі:

DISTINCT product_id ТАҢДАУ


FROM m_income AS a
ЖОҚ ЖОҚ(өнім_идентификаторын m_нәтижеден ТАҢДАҢЫЗ b
WHERE b.product_id=a.product_id);

Q039 сұрау.Ең көп сату сомасы бар өнімдер тізімі көрсетіледі. Алгоритм келесідей. Әрбір өнім үшін оның сатылым сомасы есептеледі. Содан кейін бұл сомалардың максималды мөлшері анықталады. Содан кейін әрбір өнім үшін оның сатылым сомасы қайтадан есептеледі және сату сомасы максимумға тең тауарлардың коды мен сату сомасы көрсетіледі:

өнім_идентификаторын, СУМА(сома*баға) сома_сома ретінде ТАҢДАҢЫЗ


FROM m_outcome
өнім_идентификаторы бойынша ТОПТАУ
СОМА БАР(сома*баға) = (МАКС(С_сома) ТАҢДАУ
FROM (Өнім_идентификаторы бойынша m_нәтиже ТОБЫ БОЙЫНША СОМА РЕТІНДЕ ТАҢДАУ СУМ(сома*баға));

Q040 сұрау.Сақталған сөз IIF ( шартты оператор) логикалық өрнекті бағалау және нәтижеге байланысты әрекетті орындау үшін қолданылады (TRUE немесе FALSE). Келесі мысалда, егер саны 500-ден аз болса, тауарды жеткізу "кішігірім" болып саналады. Әйтпесе, яғни түбіртек саны 500-ден көп немесе оған тең болса, жеткізілім "үлкен" болып саналады:

SELECT dt, product_id, сома,


IIF(m_кірістен түскен сома;

SQL сұрауы Q041. IIF операторы бірнеше рет қолданылған жағдайда оны SWITCH операторымен ауыстыру ыңғайлырақ. SWITCH операторы (бірнеше таңдау операторы) логикалық өрнекті бағалау және нәтижеге байланысты әрекетті орындау үшін қолданылады. Келесі мысалда, егер лоттағы тауардың саны 500-ден аз болса, жеткізілген лот «кішігірім» болып саналады. Әйтпесе, яғни тауардың саны 500-ден көп немесе оған тең болса, лот «ірі» болып саналады. ":

SELECT dt, product_id, сома,


SWITCH(сома =500,"үлкен") AS белгісі
FROM m_income;

Q042 сұрау.Келесі сұраныста, егер алынған партиядағы тауардың саны 300-ден аз болса, онда партия «аз» болып саналады. Әйтпесе, яғни шарт сомасы SELECT dt, product_id, сома,
IIF(сома IIF(м_табыс сомасы;

SQL сұрау Q043.Келесі сұраныста, егер алынған партиядағы тауардың саны 300-ден аз болса, онда партия «аз» болып саналады. Әйтпесе, яғни шарт сомасы SELECT dt, product_id, сома,
SWITCH(сома сомасы>=1000, "үлкен") AS белгісі
FROM m_income;

SQL сұрауы Q044.Келесі сұраныста сатылымдар үш топқа бөлінеді: шағын (150-ге дейін), орташа (150-ден 300-ге дейін), үлкен (300 немесе одан да көп). Әрі қарай, әрбір топ үшін жалпы сома есептеледі:

Санатты ТАҢДАҢЫЗ, СУМ(нәтиже_қосынды) Ctgry_Total


FROM (ТАҢДАУ соманы*нәтиже_сома ретінде баға,
IIf(сома*баға IIf(сома*баға m_нәтижеден) AS t
GROUP BY Category;

SQL сұрауы Q045. DateAdd функциясы берілген күнге күндерді, айларды немесе жылдарды қосу және жаңа күнді алу үшін пайдаланылады. Келесі сұрау:
1) dt өрісіндегі күнге 30 күн қосады және dt_plus_30d өрісінде жаңа күнді көрсетеді;
2) dt өрісіндегі күнге 1 ай қосады және dt_plus_1m өрісінде жаңа күнді көрсетеді:

ТАҢДАУ dt, dateadd("d",30,dt) AS dt_plus_30d, dateadd("m",1,dt) AS dt_plus_1m


FROM m_income;

SQL сұрауы Q046. DateDiff функциясы әртүрлі бірліктерде (күндер, айлар немесе жылдар) екі күн арасындағы айырмашылықты есептеуге арналған. Келесі сұрау dt өрісіндегі күн мен күндер, айлар және жылдардағы ағымдағы күн арасындағы айырмашылықты есептейді:

ТАҢДАУ dt, DateDiff("d",dt,Date()) AS соңғы_күн,


DateDiff("m",dt,Date()) AS соңғы_айлар,
DateDiff("yyyy",dt,Date()) AS соңғы_жылдар
FROM m_income;

SQL сұрау Q047. DateDiff функциясы арқылы тауарды алған күннен бастап (m_income кестесі) ағымдағы күнге дейінгі күндер саны есептеледі және жарамдылық мерзімі салыстырылады (m_product кестесі):


DateDiff("d",dt,Date()) AS соңғы_күндер
FROM m_income INNER JOIN РЕТІНДЕ m_product AS b
ON a.product_id=b.id;

SQL сұрауы Q048.Тауарды алған күннен бастап ағымдағы күнге дейінгі күндер саны есептеледі, содан кейін бұл санның жарамдылық мерзімінен асып кетуі тексеріледі:

ТАҢДАУ a.id, product_id, dt, lifedays,


DateDiff("d",dt,Date()) AS соңғы_күндер, IIf(соңғы_күндер>өмір күндері,"Иә","Жоқ") AS date_expire
FROM m_income a INNER JOIN m_product b
ON a.product_id=b.id;

SQL сұрауы Q049.Тауарды алған күннен бастап ағымдағы күнге дейінгі айлар саны есептеледі. month_last1 бағанасы айлардың абсолютті санын есептейді, month_last2 бағанасы толық айлардың санын есептейді:

ТАҢДАУ dt, DateDiff("m",dt,Date()) AS month_songgi1,


DateDiff("m",dt,Date())-iif(күн(dt)>күн(күн()),1,0) AS month_songgi2
FROM m_income;

SQL сұрау Q050. 2011 жылға сатып алынған тауарлардың саны мен сомасы туралы тоқсан сайынғы есеп көрсетіледі:

ТАҢДАУ квартал, СУММ(нәтиже_сома) AS Барлығы


FROM (ТАҢДАУ сома*нәтиже_сома АС баға, ай(дт) AS m,
ҚОСУ(м =10,4) AS кварталь
FROM m_income WHERE year(dt)=2011) AS t
Тоқсан бойынша ТОП;

Q051 сұрау.Келесі сұрау пайдаланушылардың жүйеге алынған тауарлар сомасынан асатын көлемдегі тауарларды тұтынуы туралы ақпаратты енгізе алатынын анықтауға көмектеседі:

ТАҢДАУ өнім_идентификаторы, SUM(қосында_сома) AS кіріс_сомасы, SUM(шығыс_сома) AS нәтиже_сомасы


FROM (ТАҢДАУ өнім_идентификаторы, сома*баға қосындысы ретінде, 0 шығыс_сома ретінде
m_кірісінен
БАРЛЫҚ ОДАҚ
Өнім_идентификаторын ТАҢДАҢЫЗ, 0 сомасын_сома ретінде, сома*бағасы_сома ретінде
from m_outcome) AS t
өнім_идентификаторы бойынша ТОПТАУ
СОМА БАР(қосындыда)
Q052 сұрау.Сұрау арқылы қайтарылған жолдардың нөмірленуі әртүрлі тәсілдермен жүзеге асырылады. Мысалы, MS Access-те дайындалған есеп жолдарын MS Access-тің өзін пайдаланып қайта нөмірлеуге болады. Сіз сондай-ақ бағдарламалау тілдерін, мысалы, VBA немесе PHP арқылы нөмірді қайталай аласыз. Дегенмен, кейде мұны SQL сұрауының өзінде жасау керек. Сонымен, келесі сұрау ID өріс мәндерінің өсу ретіне сәйкес m_income кестесінің жолдарын нөмірлейді:

COUNT(*) ТАҢДАУ N, b.id, b.product_id, b.summa, b.price


FROM m_income a INNER JOIN m_income b ON a.id GROUP BY b.id, b.product_id, b.summa, b. Price;

Q053 сұрау.Сату көлемі бойынша өнімдердің ішінде үздік бес өнім көрсетіледі. Алғашқы бес жазба TOP нұсқауы арқылы басып шығарылады:

ТОП 5, өнім_идентификаторы, сома(сома*баға) жиынтық ретінде ТАҢДАҢЫЗ


FROM m_outcome
өнім_идентификаторы бойынша ТОПТАУ
сома (сома*баға) БОЙЫНША ТАПСЫРЫС;

Q054 сұрау.Сату көлемі бойынша өнімдердің ең жақсы бес өнімі көрсетіледі және нәтижесінде жолдар нөмірленеді:

COUNT(*) ТАҢДАУ N, b.product_id, b.summa


FROM


FROM m_outcome GROUP BY product_id) AS a
ІШКІ ҚОСЫЛУ
(Таңдау өнім_идентификаторы, сома(сома*баға) жиынтық ретінде,
жиынтық*10000000+өнім_идентификаторы AS идентификаторы
FROM m_outcome GROUP BY product_id) AS b
ON a.id>=b.id
b.product_id, b.summa
COUNT (*) САН (*) БОЙЫНША ТӘРТІБІ БОЛУ;

Q055 сұрау.Келесі SQL сұрауы MS Access SQL жүйесінде COS, SIN, TAN, SQRT, ^ және ABS математикалық функцияларын пайдалануды көрсетеді:

ТАҢДАУ (m_income ішінен санауды(*) таңдаңыз) N ретінде, 3,1415926 pi, k,


2*pi*(k-1)/N x ретінде, COS(x) COS_ ретінде, SIN(x) SIN_ ретінде, TAN(x) TAN_ ретінде,
SQR(x) SQRT_ ретінде, x^3 "x^3", ABS(x) ABS_ ретінде
FROM (COUNT(*) ЕСЕП ТАҢДАУ k
FROM m_income AS a.idGROUP BY BY b.id) t;

SQL сұрауы. MS Access-тегі мысалдар. ЖАҢАРТУ: 1-10

U001 сұрауы.Келесі SQL өзгерту сұрауы m_income кестесіндегі 3 коды бар тауарлардың бағасын 10%-ға арттырады:

ЖАҢАРТУ m_income SET бағасы = баға*1.1


WHERE product_id=3;

U002 сұрау.Келесі SQL жаңарту сұрауы m_income кестесіндегі барлық өнімдердің санын атаулары «Мұнай» сөзінен басталатын 22 бірлікке арттырады:

ЖАҢАРТУ m_табыс SET сомасы = сома+22


WHERE product_id IN (m_product FROM ИД ТАҢДАУ ҚАЙДА "Мұнай*" сияқты тақырып);

U003 сұрау. m_outcome кестесін өзгертуге арналған келесі SQL сұрауы Sladkoe LLC шығарған барлық тауарлардың бағасын 2 пайызға төмендетеді:

ЖАҢАРТУ m_outcome SET бағасы = баға*0,98


WHERE product_id IN
(m_product a INNER JOIN m_supplier FROM a.id ТАҢДАУ b
ON a.supplier_id=b.id WHERE b.title="LLC)"Сладкое"");. !}

Мәліметтер қорына жазбаларды енгізу, жою, жаңарту

ExecuteReader() әдісі тек оқуға арналған ақпарат ағыны арқылы SQL Select мәлімдемесінің нәтижелерін көруге мүмкіндік беретін деректерді оқу құралы нысанын шығарып алады. Дегенмен, деректер кестесін өзгертетін SQL операторларын орындау қажет болса, онда әдісті шақыру керек. ExecuteNonQuery() осы нысанныңкомандалар. Бұл жалғыз әдіс пәрмен мәтінінің пішіміне байланысты кірістірулерді, өзгертулерді және жоюларды орындауға арналған.

Тұжырымдама сұраусызнәтиже жиынын қайтармайтын SQL мәлімдемесін білдіреді. Демек, Мәлімдемелерді таңдаңызсұраулар болып табылады, бірақ Кірістіру, Жаңарту және Жою операторлары емес. Сәйкесінше, ExecuteNonQuery() әдісі жазбалардың жаңа жиынын емес, осы мәлімдемелер әсер ететін жолдар санын қамтитын int мәнін қайтарады.

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

Нақты өндірістік ортада сіздің ADO.NET логикаңыз .NET .dll жинағында бір қарапайым себеппен – кодты қайта пайдалану үшін оқшауланатыны сөзсіз! Бұл алдыңғы мақалаларда сізді тапсырмалардан алаңдатпау үшін жасалмады. Бірақ AutoLot дерекқорымен жұмыс істеуге қажетті әрбір қолданба үшін бірдей қосылу логикасын, бірдей деректерді оқу логикасын және бірдей пәрменді орындау логикасын әзірлеу уақытты босқа кетіреді.

.NET код кітапханасында деректерге қол жеткізу логикасын оқшаулау арқылы кез келген пайдаланушы интерфейсі бар әртүрлі қолданбалар (консоль стилі, жұмыс үстелі стилі, веб-стиль және т.б.) бар кітапханаға тіпті тілге қарамастан қатынаса алады. Ал егер сіз C# тілінде деректерге қол жеткізу кітапханасын жасасаңыз, онда басқа .NET бағдарламашылары өздерін жасай алады пайдаланушы интерфейстерікез келген тілде (мысалы, VB немесе C++/CLI).

Деректерге қол жеткізу кітапханамызда (AutoLotDAL.dll) ADO.NET қосылған түрлерін пайдаланып AutoLot дерекқорымен әрекеттесетін жалғыз аттар кеңістігі (AutoLotConnectedLayer) болады.

AutoLotDAL («AutoLot Data Access Layer» сөзінің қысқасы) деп аталатын жаңа C# Class Library жобасын жасау арқылы бастаңыз, содан кейін бастапқы C# код файлының атауын AutoLotConnDAL.cs етіп өзгертіңіз.

Содан кейін аттар кеңістігінің ауқымын AutoLotConnectedLayer деп өзгертіңіз және бастапқы сыныптың атын InventoryDAL деп өзгертіңіз, себебі бұл класс AutoLot дерекқорының Түгендеу кестесімен өзара әрекеттесу үшін жасалған әртүрлі мүшелерді анықтайды. Соңында, келесі .NET аттар кеңістігін импорттаңыз:

Жүйені пайдалану; System.Collections.Generic пайдалану; System.Text көмегімен; System.Data пайдалану; System.Data.SqlClient пайдалану; аттар кеңістігі AutoLotConnectedLayer (қоғамдық класс InventoryDAL ( ) )

Қосылым логикасын қосу

Біздің бірінші міндетіміз жарамды қосылым жолын пайдаланып, шақыру процесіне деректер көзіне қосылуға және оны ажыратуға мүмкіндік беретін әдістерді анықтау болып табылады. Біздің AutoLotDAL.dll жинағы System.Data.SqlClient сынып түрлерін пайдалану үшін қатаң кодталған болғандықтан, InventoryDAL нысаны жасалған кезде бөлінетін жеке SqlConnection айнымалы мәнін анықтаңыз.

Қосымша, OpenConnection() әдісін, содан кейін осы айнымалымен әрекеттесетін басқа CloseConnection() әдісін анықтаңыз:

InventoryDAL жалпы класы ( жеке SqlConnection қосылу = нөл; жалпы жарамсыз OpenConnection(жол байланысы) ( қосылу = жаңа SqlConnection(connectionString); connect.Open(); ) жалпы бос CloseConnection() ( connect.Close(); ) )

Қысқалық үшін, InventoryDAL түрі барлық мүмкін ерекшеліктерді тексермейді және әртүрлі жағдайлар орын алған кезде (мысалы, қосылым жолы дұрыс пішімделгенде) реттелетін ерекшеліктерді шығармайды. Дегенмен, егер сіз өндіріс деректеріне қол жеткізу кітапханасын жасап жатсаңыз, орындалу уақытында орын алуы мүмкін кез келген ауытқуларды есепке алу үшін құрылымдық ерекшеліктерді өңдеу әдістерін пайдалану қажет болуы мүмкін.

Кірістіру логикасын қосу

Кірістіру жаңа жазбаТүгендеу кестесіне SQL мәлімдемесін пішімдеу кіреді Кірістіру(пайдаланушы енгізуіне байланысты) және пәрмен нысанын пайдаланып ExecuteNonQuery() әдісін шақыру. Бұл әрекетті орындау үшін, InventoryDAL сыныбына жалпыға ортақ InsertAuto() әдісін қосыңыз, ол Түгендеу кестесінің төрт бағанына (CarID, Color, Make және PetName) сәйкес төрт параметрді қабылдайды. Осы аргументтер негізінде жаңа жазба қосу үшін жолды жасаңыз. Соңында, SqlConnection нысанын пайдаланып SQL операторын орындаңыз:

Жалпы жарамсыз InsertAuto(int идентификаторы, жол түсі, жол жасау, жол petName) ( // SQL мәлімдемесі string sql = string.Format("Insert Inventory" + "(CarID, Make, Color, PetName) Мәндер (@CarId, @Make, @Color, @PetName)"); (SqlCommand cmd = жаңа SqlCommand(sql, this.connect)) ( // Параметрлерді қосу cmd.Parameters.AddWithValue("@CarId", id); cmd.Parameters.AddWithValue("@Make", жасау); cmd. Parameters.AddWithValue("@Color", түс); cmd.Parameters.AddWithValue("@PetName", petName); cmd.ExecuteNonQuery(); ) )

Реляциялық дерекқордағы жазбаларды көрсететін сыныптарды анықтау деректерге қол жеткізу кітапханасын жасаудың жалпы әдісі болып табылады. Шын мәнінде, ADO.NET Entity Framework дерекқор деректерімен әрекеттесу мүмкіндігін беретін қатты терілген сыныптарды автоматты түрде жасайды. Айтпақшы, ADO.NET оқшау деңгейі реляциялық дерекқордағы берілген кестеден деректерді көрсету үшін қатты терілген DataSet нысандарын жасайды.

Жолды біріктіру арқылы SQL мәлімдемесін жасау қауіпсіздік қаупі болуы мүмкін (SQL кірістіру шабуылдары туралы ойланыңыз). Пәрмен мәтінін кейінірек сипатталатын параметрленген сұраныстың көмегімен жасаған дұрыс.

Жою логикасын қосу

Жою бар жазбажаңа жазбаны енгізуден қиын емес. InsertAuto() кодынан айырмашылығы, біреу тапсырыс берушілер кестесінен әлдеқашан тапсырыс берген көлікті алып тастау әрекеті жасалған ықтимал жағдайды өңдейтін бір маңызды әрекет ету/ұстау аймағы көрсетіледі. InventoryDAL сыныбына келесі әдісті қосыңыз:

Қоғамдық жарамсыз DeleteCar(int идентификаторы) ( string sql = string.Format("CarID = "(0)"", идентификаторы бар түгендеуден жою); (SqlCommand cmd = жаңа SqlCommand(sql, this.connect)) ( тырысыңыз ( cmd.ExecuteNonQuery(); ) catch (SqlException ex) ( Ерекшелік қатесі = жаңа Ерекше жағдай ("Кешіріңіз, бұл машина кері тапсырыста!", мысалы); тастау қатесі; ) ) )

Өзгерту логикасын қосу

Түгендеу кестесіндегі бар жазбаны жаңарту туралы сөз болғанда, бірден анық сұрақ туындайды: қоңырау шалу процесінде нені өзгертуге болады: көліктің түсі, түсінікті атауы, моделі немесе үшеуі де? Икемділікті арттырудың бір жолы - кез келген SQL мәлімдемесін қамтуы мүмкін жол түрінің параметрін қабылдайтын әдісті анықтау, бірақ бұл ең аз деп айту қауіпті.

Ең дұрысы, шақыру процесіне жазбаларды өзгертуге мүмкіндік беретін әдістер жиынтығы болғаны дұрыс әртүрлі жолдар. Дегенмен, деректерге қол жеткізудің қарапайым кітапханасы үшін біз қоңырау шалу процесіне көрсетілген көліктің ыңғайлы атауын өзгертуге мүмкіндік беретін жалғыз әдісті анықтаймыз:

Жалпы жарамсыз UpdateCarPetName(int id, string newpetName) ( string sql = string.Format("Inventory Set PetName = "(0)" Мұнда CarID = "(1)"", newpetName, id); (SqlCommand cmd = жаңа) пайдалану SqlCommand(sql, this.connect)) ( cmd.ExecuteNonQuery(); ) )

Таңдау логикасын қосу

Енді біз жазбаларды таңдау әдісін қосуымыз керек. Бұрын көрсетілгендей, нақты деректер жеткізушісінің деректерді оқу құралы нысаны тек оқуға арналған курсорды пайдаланып жазбаларды таңдауға мүмкіндік береді. Read() әдісін шақыру арқылы әрбір жазбаны бір уақытта өңдеуге болады. Мұның бәрі тамаша, бірақ қазір біз бұл жазбаларды шақырушы қолданба деңгейіне қалай қайтару керектігін анықтауымыз керек.

Бір әдіс Read() әдісі арқылы деректерді шығарып алу, содан кейін көп өлшемді массивті (немесе жалпы тізім сияқты басқа нысанды) толтыру және қайтару болады. ).

Тағы бір әдіс - шын мәнінде дербес ADO.NET қабатына жататын System.Data.DataTable нысанын қайтару. DataTable — деректердің кестелік блогын көрсететін класс (мысалы, қағаз немесе электрондық кесте).

DataTable класы жолдар мен бағандардың жиыны ретінде деректерді қамтиды. Бұл жинақтарды бағдарламалы түрде толтыруға болады, бірақ DataTable түрінде деректерді оқу құралы нысаны арқылы автоматты түрде толтыра алатын Load() әдісі бар! Мұнда түгендеу кестесіндегі деректер деректер кестесі ретінде қайтарылатын мысал келтірілген:

Public DataTable GetAllInventoryAsDataTable() ( DataTable inv = new DataTable(); string sql = "Инвентаризациядан * таңдау"; пайдалану (SqlCommand cmd = жаңа SqlCommand(sql, this.connect)) ( SqlDataReader dr = cmd.ExecuteReader(); .Load(dr); dr.Close(); ) return inv; )

Параметрленген пәрмен нысандарымен жұмыс істеу

Әзірге InventoryDAL түріне арналған кірістіру, жаңарту және жою логикасында біз әрбір SQL сұрауы үшін қатаң кодталған жол литералдарын қолдандық. Сіз SQL параметрлерін жай мәтін бөлігі емес, нысандар ретінде қарастыруға мүмкіндік беретін параметрленген сұраулардың бар екенін білетін шығарсыз.

SQL сұрауларымен объектіге бағытталған түрде жұмыс істеу қателерді азайтуға көмектесіп қана қоймайды (қатты терілген сипаттарымен), бірақ параметрленген сұраулар әдетте жолдық әріптік сұрауларға қарағанда әлдеқайда жылдамырақ, өйткені олар тек бір рет талданады (әр уақытта емес). CommandText сипаты SQL жолына орнатылған). Сонымен қатар, параметрленген сұраулар SQL инъекциялық шабуылдарынан қорғайды (мәліметтерге қол жеткізу қауіпсіздігі мәселесі).

Параметрленген сұрауларды қолдау үшін ADO.NET пәрмен нысандары жеке параметр нысандарының жинағын сақтайды. Әдепкі бойынша, бұл жинақ бос, бірақ сәйкес келетін параметр нысандарының кез келген санын қосуға болады толтырғыш параметрлері SQL сұрауында. SQL сұрау параметрін кейбір пәрмен нысанының параметрлер жиынының мүшесімен байланыстыру қажет болса, SQL параметрінің алдына @ белгісін қойыңыз (кем дегенде Microsoft-пен жұмыс істегенде). SQL сервері, бірақ барлық ДҚБЖ бұл белгілеуді қолдамайды).

DbParameter түрі арқылы параметрлерді орнату

Параметрленген сұрауларды жасауды бастамас бұрын, DbParameter түрімен (провайдер параметрінің нысандары үшін негізгі класс) танысайық. Бұл сыныпта параметрдің атын, өлшемін және түрін, сонымен қатар параметрдің қарау бағыты сияқты басқа сипаттарды көрсетуге мүмкіндік беретін бірқатар қасиеттер бар. DbParameter түрінің кейбір маңызды қасиеттері төменде келтірілген:

DbType

CLR түрі ретінде ұсынылған параметрден деректер түрін алады немесе орнатады

Бағыт

Параметр түрін қайтарады немесе орнатады: тек енгізу, тек шығару, енгізу және шығару немесе мәнді қайтаратын параметр

IsNullable

Қайтарады немесе параметр бос мәндерді қабылдай алатынын орнатады

Параметр атауы

DbParameter атауын алады немесе орнатады

Өлшем

Мәселелер немесе орнатулар максималды өлшемпараметрге арналған деректер (тек мәтіндік деректер үшін пайдалы)

Мән

Параметрдің мәнін қайтарады немесе орнатады

Пәрмен нысандарының жинағын DBParameter-үйлесімді нысандармен толтыру жолын көрсету үшін InsertAuto() әдісін параметр нысандарын пайдаланатындай етіп қайта жазайық (барлық басқа әдістерді дәл осылай қайта жасауға болады, бірақ осы мысал бізге жеткілікті болады):

Жалпы жарамсыз InsertAuto(int идентификаторы, жол түсі, жол жасау, жол petName) ( // SQL мәлімдемесі жолы sql = string.Format("Инвентаризацияға кірістіру" + "(CarID, Жасалу, Түс, PetName) Мәндер("(0) ","(1)","(2)","(3)")", идентификатор, жасау, түсі, petName); // Параметрленген пәрмен арқылы (SqlCommand cmd = жаңа SqlCommand(sql, this.connect)) ( SqlParameter param = new SqlParameter(); param.ParameterName = "@CarID"; param.Value = id; param.SqlDbType = SqlDbType.Int; cmd.Parameters.Add(param); param = жаңа SqlParameter();парам. ParameterName = "@Make"; param.Value = жасау; param.SqlDbType = SqlDbType.Char; param.Size = 10; cmd.Parameters.Add(param); param = жаңа SqlParameter(); param.ParameterName = "@Color "; param.Value = түс; param.SqlDbType = SqlDbType.Char; param.Size = 10; cmd.Parameters.Add(param); param = new SqlParameter(); param.ParameterName = "@PetName"; param.Value = petName;param.SqlDbType = SqlDbType.Char;param.Size = 10;cmd.Parameters.Add(param);cmd.ExecuteNonQuery(); ))

Мұндағы SQL сұрауында әрқайсысының алдында @ белгісі болатын төрт толтырғыш таңба бар екенін ескеріңіз. SqlParameter түріндегі ParameterName сипатын пайдаланып, осы толтырғыштардың әрқайсысын сипаттауға және әр түрлі ақпаратты (мән, деректер түрі, өлшем және т.б.) қатты терілген түрде көрсетуге болады. Барлық параметр нысандары дайындалғаннан кейін олар Add() шақыруы арқылы пәрмен нысандарының жиынына қосылады.

Мұнда параметр нысандарын жобалау үшін әртүрлі қасиеттер қолданылады. Дегенмен, параметр нысандары әртүрлі сипаттардың мәндерін орнатуға мүмкіндік беретін бірнеше шамадан тыс конструкторларды қолдайтынын ескеріңіз (бұл ықшам кодтық базаға әкеледі). Сондай-ақ, Visual Studio 2010 бағдарламасында сіз үшін осы жалықтыратын параметр кодын автоматты түрде жасайтын әртүрлі графикалық дизайнерлер бар екенін ескеріңіз.

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

Ережелер шаршы жақшаларқұрылымның [міндетті емес бөлігін] білдіреді. Тік жолақ опциялар арасындағы таңдауды көрсетеді (var1|var2). Эллипс бірнеше рет қайталану мүмкіндігін білдіреді - 1 рет, 2 рет [, …]

SELECT мәлімдемесі

Microsoft Access дерекқор механизміне дерекқордан ақпаратты жазбалар жиыны ретінде қайтаруға нұсқау береді.

Синтаксис

ТАҢДАУ [ предикат] { * | кесте.* | [кесте.]өріс1

[, [кесте.]өріс2 [, ...]]}
FROM кесте_өрнек [, ...]




SELECT операторы келесі элементтерді қамтиды.

Элемент

Сипаттама

Предикат

Келесі предикаттардың бірі: ALL, DISTINCT, DISTINCTROW немесе TOP. Предикаттар қайтарылған жазбалар санын шектеу үшін пайдаланылады. Ешбір предикат берілмесе, әдепкі БАРЛЫҚ болып табылады.

Барлық өрістер көрсетілген кестеден немесе кестелерден таңдалғанын көрсетеді

Кесте

Өрістерінен жазбалар таңдалған кестенің аты

өріс1, өріс2

Шығарылатын деректерді қамтитын өрістердің атаулары. Бірнеше өрістер көрсетілсе, деректер олардың атаулары берілген ретпен шығарылады

лақап аты1, лақап аты2

Атаулар бастапқы баған атауларының орнына баған тақырыптары ретінде пайдаланылады кестелер

кесте_өрнек

Шығарылатын деректерді қамтитын бір немесе бірнеше кесте атаулары.

сыртқы_деректер қоры

Компонентте көрсетілген кестелерден тұратын мәліметтер қорының атауы кесте_өрнекегер олар ағымдағы дерекқорда болмаса

Ескертпелер

Бұл әрекетті орындау үшін Microsoft Access дерекқор жүйесі көрсетілген кесте(лерді) іздейді, қажетті бағандарды шығарып алады, көрсетілген шарттарға сәйкес келетін жолдарды таңдайды және алынған жолдарды көрсетілген ретпен сұрыптайды немесе топтайды.

SELECT мәлімдемелері дерекқор деректерін өзгертпейді.

SELECT операторы әдетте SQL операторының бірінші сөзі болып табылады (SQL операторы (жол). Анықтайтын өрнек SQL пәрмені, мысалы, ТАҢДАУ, ЖАҢАРТУ немесе ЖОЮ, және ҚАЙДА немесе ТАПСЫРЫС БЕРУ сияқты сөйлемдерді қосады. SQL мәлімдемелері/жолдары әдетте сұраулар мен статистикалық функцияларда қолданылады.) Көптеген SQL операторлары SELECT операторлары немесе SELECT...INTO операторлары болып табылады.

SELECT операторының минималды синтаксисі келесідей:

ТАҢДАУ өрістер FROM кесте

Кестедегі барлық өрістерді таңдау үшін жұлдызшаны (*) пайдалануға болады. Келесі мысал Қызметкерлер кестесіндегі барлық өрістерді таңдайды.

ТАҢДАУ * Қызметкерлерден;

Егер өріс атауы FROM сөйлеміндегі бірнеше кестеге қосылса, оның алдына кесте аты мен операторды қойыңыз. «.» (нүкте). Келесі мысалда «Бөлім» өрісі «Қызметкерлер» және «Басшылар» кестелерінде бар. SQL операторы Қызметкерлер кестесінен бөлімдерді және жетекшілер кестесінен жетекші атауларын таңдайды.

Қызметкерлерді ТАҢДАУ. Кафедра меңгерушілері. Басқарушы аты-жөні Қызметкерлерден ІШКІ ҚОСЫЛУ. Бөлім = Менеджерлер. Бөлім;

RecordSet нысанын жасаған кезде кесте өрісінің атауын Microsoft Access дерекқор механизмі нысандағы «Өріс» нысанының аты ретінде пайдаланады. Жазбалар жинағы. Өріс атауын өзгерту қажет болса немесе өрісті тудыратын өрнекпен қамтамасыз етілмесе, резервтелген сөзді пайдаланыңыз (Сақталған сөз. Visual Basic сияқты тілдің элементі болып табылатын сөз. Сақталған сөздерге операторлардың атаулары, кірістірілген функциялар және деректер түрлері, әдістер, операторлар және объектілер.) AS. Келесі мысал қайтарылған нысанды атау үшін «Күн» тақырыбының қалай пайдаланылатынын көрсетеді Өрісалынған объектіде Жазбалар жинағы.

Қызметкерлерден туған күнді күн ретінде ТАҢДАУ;

Бірыңғай немесе бірдей нысан атауларын қайтаратын жиынтық функциялармен немесе сұраулармен жұмыс істегенде Өріс, басқа нысан атауын жасау үшін AS сөйлемін пайдалануыңыз керек Өріс. Келесі мысалда қайтарылған нысан Өрісалынған объектіде Жазбалар жинағы«Санақ» деген атау берілген.

COUNT(EmployeeCode) ҚЫЗМЕТКЕРЛЕРДЕН САНАҚ РЕТІНДЕ ТАҢДАУ;

SELECT операторымен жұмыс істегенде, алынған деректерді одан әрі шектеу және ұйымдастыру үшін қосымша сөйлемдерді пайдалануға болады. Қосымша ақпарат алу үшін пайдаланып жатқан ұсыныстың анықтама тақырыбын қараңыз.

FROM сөйлемі

SELECT операторында тізімделген өрістерді қамтитын кестелер мен сұрауларды көрсетеді.

Синтаксис

ТАҢДАУ өріс_тізімі
FROM кесте_өрнек

FROM сөйлемі бар SELECT операторы келесі элементтерді қамтиды:

Элемент

Сипаттама

өріс_тізімі

кесте_өрнек

Бір немесе бірнеше кестелерді анықтайтын өрнек - деректер көздері. Өрнек кесте атауы, сақталған сұрау атауы немесе INNER JOIN, LEFT JOIN немесе RIGHT JOIN операторы арқылы құрастырылған нәтиже өрнегі болуы мүмкін.

сыртқы_деректер қоры

Көрсетілген барлық кестелерді қамтитын сыртқы дерекқорға толық жол кесте_өрнек

Ескертпелер


SELECT операторынан кейін FROM сөйлемінің болуы қажет.

Кестелердің тізімделу реті кесте_өрнекмағынасы жоқ.

Байланыстырылған кестелерді пайдалану (Байланыстырылған кесте. Ашық дерекқордың бөлігі болып табылмайтын, бірақ Microsoft Access бағдарламасында қолжетімді файлда сақталатын кесте. Пайдаланушы байланыстырылған кестеге жазбаларды қоса алады, жоя алады және өзгерте алады, бірақ оның құрылымын өзгерте алмайды. .) IN тармағының орнына сыртқы дерекқордан деректерді алу процесін оңайырақ және тиімдірек ете аласыз.

Төмендегі мысал Қызметкерлер кестесінен деректерді алу жолын көрсетеді.

ТАҢДАУ Тегі, Аты

Қызметкерлерден;

SQL сұраулары үшін таңдалған жазбаларды көрсетеді ( SQL тілі(Құрылымдық сұраныс тілі). Реляциялық ДҚБЖ деректеріне қол жеткізу, сұрау, жаңарту және басқару үшін кеңінен қолданылатын құрылымдық сұрау және дерекқор бағдарламалау тілі.

Синтаксис

ТАҢДАУ ]]
FROM кесте

Осы предикаттарды қамтитын SELECT операторы келесі құрамдастарды қамтиды:

Құрамдас

Сипаттама

Ешбір предикаттар қосылмаса, тұспалданады. Microsoft Access дерекқор механизмі SQL операторының шарттарына сәйкес келетін барлық жазбаларды таңдайды (SQL операторы (жол). SELECT, UPDATE немесе DELETE сияқты SQL пәрменін анықтайтын және WHERE немесе ORDER BY сияқты сөйлемдерді қамтитын өрнек. SQL мәлімдемелері/жолдары әдетте сұраулар мен статистикалық функцияларда қолданылады). Келесі екі бірдей мысал Қызметкерлер кестесінен барлық жазбаларды қайтару жолын көрсетеді.

Қызметкерлерден

EmployeeCode БОЙЫНША ТАПСЫРЫС;

Қызметкерлерден

EmployeeCode БОЙЫНША ТАПСЫРЫС;

Таңдалған өрістерде қайталанатын деректері бар жазбаларды қоспайды. Сұрау нәтижелеріне SELECT мәлімдемесінде тізімделген әрбір өрістің бірегей мәндері ғана қосылады. Мысалы, Қызметкерлер кестесіндегі кейбір қызметкерлердің тегі бірдей болуы мүмкін. Тегі өрісінде екі жазбада «Иванов» тегі болса, келесі SQL операторы «Иванов» фамилиясын қамтитын бір ғана жазбаны қайтарады.

DISTINCT Фамилияны ТАҢДАҢЫЗ

DISTINCT компоненті түсірілсе, сұрау "Иванов" тегі бар екі жазбаны да қайтарады.

ТАҢДАУ сөйлемінде бірнеше өрістер болса, барлық өріс мәндерінің тіркесімі сұрау нәтижелеріне тек сол жазба үшін бірегей болса ғана қосылады.

DISTINCT құрамдасын пайдаланатын сұрау нәтижелері басқа пайдаланушылар жасаған кейінгі өзгерістерді көрсету үшін жаңартылмайды.

Бірдей деректері бар жеке өрістерді қамтымай, толық қайталанатын жазбалардан деректерді қоспайды. «Тұтынушы коды» өрісі арқылы «Тұтынушылар» және «Тапсырыстар» кестелерін байланыстыратын сұрау жасалды деп есептейік. Тұтынушылар кестесінде қайталанатын Тұтынушы идентификаторы өрістері жоқ, бірақ олар Тапсырыстар кестесінде бар, себебі әрбір тұтынушыда бірнеше тапсырыс болуы мүмкін. Төмендегі SQL мәлімдемесі DISTINCTROW құрамдасын сол тапсырыстардың мәліметтерін айтпай-ақ, кем дегенде бір тапсырыс жасаған ұйымдарды тізімдеу үшін қалай пайдалану керектігін көрсетеді.

Тұтынушылардың INNER JOIN тапсырыстарынан ДИСТИНКТРОВ атауын ТАҢДАУ

ON Clients. CustomerId = Тапсырыстар. Клиент коды

Тақырып БОЙЫНША ТАПСЫРЫС;

Егер DISTINCTROW құрамдас бөлігі алынып тасталса, сұрау бірнеше рет тапсырыс берген әрбір ұйым үшін бірнеше жолдарға әкеледі.

DISTINCTROW компоненті сұрауда пайдаланылатын кейбір кестелерден өрістерді таңдағанда ғана күшіне енеді. Егер сұрау тек бір кестені қамтыса немесе барлық кестелерден өрістер шығарылса, DISTINCTROW компоненті еленбейді.

ТОП n

ORDER BY сөйлемінде көрсетілген ауқымдағы бірінші немесе соңғы жазбалар арасында болатын жазбалардың көрсетілген санын қайтарады. 1994 жылғы сыныптағы үздік 25 оқушының атын көрсеткіңіз келеді делік.

Аты Тегі

Бітірген жылы = 2003 ж

GradePointAverage DESC БОЙЫНША ТАПСЫРЫС;

ORDER BY сөйлемін қоспасаңыз, сұрау Студенттер кестесінен WHERE сөйлемін қанағаттандыратын 25 жазбаның кездейсоқ жинағын қайтарады.

TOP предикаты тең мәндер арасындағы таңдауды қамтымайды. Алдыңғы мысалдағы 25-ші және 26-шы жазбаларда бірдей GPA болса, сұрау 26 жазбаны қайтарады.

Сондай-ақ, PARCENT сақталған сөзді ТАПСЫРЫС БОЙЫНША сөйлемде көрсетілген ауқымдағы бірінші немесе соңғы жазбалардың кейбір пайызын шығарып алу үшін пайдалануға болады. Үздік 25-тің орнына сіз бітіруші сыныптағы оқушылардың төменгі 10% көрсеткіңіз келеді делік.

ТОП 10 ПАЙЫЗДЫ ТАҢДАҢЫЗ

Аты Тегі

Бітірген жылы = 2003 ж

GradePointAverage ASC бойынша ТАПСЫРЫС;

ASC предикаты диапазонның төменгі бөлігінен алынған мәндердің шығуын көрсетеді. TOP предикатынан кейінгі мән Integer деректер түрі болуы керек. Бүтін мәндерді сақтау үшін пайдаланылатын негізгі деректер түрі. Integer айнымалысы -32768-32767 аралығында 64 биттік (8 байт) сан ретінде сақталады. ) таңбасыз .

TOP предикаты сұрауды жаңарту мүмкіндігіне әсер етпейді.

кесте

Жазбалар шығарылатын кестенің аты.

да қараңыз

SELECT мәлімдемесі

FROM сөйлемі

WHERE сөйлемі

FROM сөйлемінде тізімделген кестелерден қандай жазбалар ТАҢДАУ, ЖАҢАРТУ немесе DELETE мәлімдемелері арқылы өңделетінін анықтайды.

Синтаксис

ТАҢДАУ өріс_тізімі
FROM кесте_өрнек
ҚАЙДА таңдау_шарттары

WHERE сөйлемі бар SELECT операторы келесі бөліктерді қамтиды.

Бөлім

Сипаттама

өріс_тізімі

Кез келген бүркеншік аттармен бірге шығарылатын өрістің немесе өрістердің атауы (Бөркеншік ат (SQL). Өрнектегі кесте немесе өріс үшін балама атау. Бүркеншік аттар әдетте келесі сілтемелерді жеңілдету үшін қысқарақ кесте немесе өріс атаулары ретінде пайдаланылады. бағдарламалар, анық емес сілтемелерді болдырмау және сұрау нәтижелерін көрсету кезінде сипаттайтын атауларды алу үшін.), предикаттар (БАРЛЫҚ, DISTINCT, DISTINCTROW немесе TOP) немесе SELECT операторының кез келген басқа параметрімен.

кесте_өрнек

Деректер шығарылатын кестенің немесе кестелердің атауы.

таңдау_шарттары

Өрнек (Өрнек. Бір мәнге әкелетін математикалық және логикалық операторлардың, тұрақты мәндердің, функциялардың, өріс атауларының, басқару элементтерінің және қасиеттердің тіркесімі. Өрнек есептеулерді орындай алады, мәтінді өңдей алады немесе деректерді тексере алады.) енгізілген жазбаларға сәйкес келуі керек. сұрау нәтижелерінде.

Ескертпелер

Microsoft Access дерекқор механизмі WHERE тармағында тізімделген шарттарға сәйкес келетін жазбаларды таңдайды. WHERE сөйлемі көрсетілмесе, сұрау кестедегі барлық жолдарды қайтарады. Сұрау бірнеше кестелерді көрсетсе, бірақ WHERE немесе JOIN сөйлемін көрсетпесе, сұрау декарттық өнімді шығарады (декарттық өнім. Екі немесе одан да көп кестелерге сілтеме жасайтын FROM сөйлемі бар және WHERE немесе жоқ SQL SELECT операторын орындау нәтижесі болып табылады. Біріктіру әдісін көрсететін JOIN сөйлемі.) кестелер.

WHERE сөйлемі талап етілмейді, бірақ пайдаланылса, ол FROM сөйлеміне сәйкес келуі керек. Мысалы, сіз барлық қызметкерлерді сату бөлімінен (ҚАЙДА Бөлім = «Сату») немесе 18 мен 30 жас аралығындағы барлық тұтынушыларды таңдай аласыз (ҚАЙДА 18 бен 30 жас аралығында).

Егер JOIN сөйлемі бірнеше кестелерде SQL біріктіру әрекеті үшін пайдаланылмаса, нәтиже нысаны Жазбалар жинағыжаңарту мүмкін болмайды.

WHERE сөйлемі HAVING сөйлеміне ұқсас және таңдалған жазбаларды көрсетеді. Жазбалар GROUP BY сөйлемі бойынша топтастырылғаннан кейін, HAVING сөйлемі көрсетілетін жазбаны да анықтайды.

WHERE сөйлемі GROUP BY сөйлемі арқылы топтастыру қажет емес жазбаларды алып тастау үшін пайдаланылады.

SQL операторы қай жазбаларды қайтаратынын анықтау үшін әртүрлі өрнектерді пайдаланыңыз. Мысалы, келесі SQL мәлімдемесі жалақысы RUR-дан асатын барлық қызметкерлерді таңдайды.

ТАҢДАУ Тегі, Жалақысы ҚАЙДА ЖҰМЫСШЫЛАРДАН Жалақы > 21000;

WHERE сөйлемінде логикалық операторлар арқылы қосылған 40-қа дейін өрнек болуы мүмкін (мысалы, ЖӘНЕЖәне НЕМЕСЕ).

Бос орындар немесе тыныс белгілері бар өріс атауын енгізсеңіз, оны шаршы жақшаға алуыңыз керек (). Мысалы, тұтынушы туралы мәліметтер кестесі нақты тұтынушылар туралы ақпаратты қамтуы мүмкін.

ТАҢДАУ [Тұтынушының сүйікті мейрамханасы]

Аргументті көрсету таңдау_шарттары, күн литералдары (Күн литералы. Сандық белгілермен (#) алынған жарамды пішімдегі таңбалардың кез келген тізбегі. Жарамды пішімдер Тіл мен Стандарттар параметрлерінде және Әмбебап күн пішімінде көрсетілген күн пішімі болып табылады.) АҚШ пішімінде көрсетілуі керек. , тіпті АҚШ-тан тыс күн пішімі пайдаланылса да. Microsoft Access дерекқор механизмінің нұсқасы. Мысалы, «1996 жылдың 10 мамыры» күні Ұлыбританияда 10/5/96, Ресейде 05/10/1996 деп жазылған. Төмендегі мысалдарда көрсетілгендей, сандық белгілерге (#) күн литералдарын қосуды ұмытпаңыз.

Ұлыбритания дерекқорынан 1996 жылдың 10 мамырындағы жазбаларды табу үшін келесі SQL мәлімдемесін пайдаланыңыз:

Жөнелтілген күні = #10.05.1996#;

Сондай-ақ функцияны пайдалануға болады DateValue, халықаралық параметрлерді мойындай отырып, Microsoft орнатқан Windows®. Мысалы, Ресей үшін бұл кодты пайдаланыңыз:

* Жөнелтілген күні = DateValue ("05/10/1996");

Ал келесі код Ұлыбританияға арналған:

Жөнелтілген күні = DateValue("10/5/96");

Ескерту.Таңдау шарты жолында көрсетілген баған GUID (Реплика идентификаторы (GUID)) типінде болса. Microsoft Access дерекқорындағы 16 байт өріс репликацияны бірегей анықтау үшін пайдаланылады. GUID репликаларды, реплика жиындарын, кестелерді, жазбаларды және басқа нысандар.Microsoft Access дерекқорларында GUID кодтары реплика кодтары деп аталады.), таңдау шарттары сәл басқа синтаксисті пайдаланады.

WHERE ReplicaID = (GUID (AB-CDEF0ABCDEF))

Кірістірілген жақшалар мен сызықшалардың дұрыс орналасқанын тексеріңіз.

Бастапқы бет: http://office. /ru-ru/access/HA.aspx? pid=CH

GROUP BY сөйлемі

Көрсетілген өрістер тізімінде бірдей мәндері бар жазбаларды бір жазбаға біріктіреді. Әрбір жазба үшін жиынтық мән жасалады, егер SQL біріктіру функциясы SELECT мәлімдемесіне қосылған болса, мысалы: сомасынемесе Санау.

Синтаксис

ТАҢДАУ өріс_тізімі
FROM кесте
ҚАЙДА таңдау_шарты

GROUP BY сөйлемі бар SELECT мәлімдемесі келесі элементтерді қамтиды:

Элемент

Сипаттама

өріс_тізімі

Кез келген бүркеншік аттармен бірге шығарылатын өрістердің атаулары (Lias (SQL). Өрнектегі кесте немесе өріс үшін балама атау. Бүркеншік аттар әдетте бағдарламаларда кейінгі сілтемені жеңілдету үшін қысқарақ кесте немесе өріс атаулары ретінде пайдаланылады, анық емес сілтемелерді болдырмау және сұрау нәтижелерін көрсету кезінде көбірек ақпарат беретін атауларды алу үшін.) және статистикалық SQL функциялары, предикаттар (ALL, DISTINCT, DISTINCTROW немесе TOP) немесе SELECT операторының басқа параметрлері

кесте

таңдау_шарттары

Таңдау шарты. Егер мәлімдемеде WHERE сөйлемі болса, онда ол жазбаларға қолданылғаннан кейін мәндер Microsoft Access дерекқор механизмі арқылы топтастырылады.

топ_өріс_тізімі

топ_өріс_тізімі

Ескертпелер

GROUP BY сөйлемі міндетті емес.

Егер SQL статистикалық функциялары SELECT мәлімдемесіне қосылмаса, жиынтық мәндер есептелмейді.

GROUP BY өріс мәндері Null (Нөл. Өріске енгізуге болатын немесе жетіспейтін немесе белгісіз деректерді көрсету үшін өрнектер мен сұрауларда қолданылатын мән. Visual Basic бағдарламасында Null кілт сөзі Null мәнін көрсетеді. Кейбір өрістер, мысалы бастапқы кілт өрістері ретінде нөл мәндерін қамтуы мүмкін емес.), топтастырылған және өткізілмейді. Дегенмен құндылықтар Нөл SQL статистикалық функцияларының ешқайсысы арқылы бағаланбайды.

WHERE сөйлемі топтастыруды қажет етпейтін жолдарды алып тастау үшін қолданылады. HAVING сөйлемі топтастырудан кейін жазбаларды сүзу үшін қолданылады.

GROUP BY өрістер тізімінен Memo деректер түрі (Memo Field деректер түрі. Microsoft Access дерекқорындағы өріс деректер түрі. MEMO өрісінде 65535 таңбаға дейін болуы мүмкін.) немесе OLE нысаны (Өріс деректер түрі) жоқ өрістер OLE нысаны" Microsoft Access дерекқорына байланыстырылған немесе ендірілген басқа қолданбалардан нысандарды сақтау үшін пайдаланылатын өріс деректер түрі.) өріс ТАҢДАУ мәлімдемесіне қосылмаған болса да, FROM тармағында көрсетілген кез келген кестедегі кез келген өріске сілтеме жасай алады. Ол үшін SELECT операторында кем дегенде бір SQL статистикалық функциясының болуы жеткілікті. Microsoft Access дерекқор механизмі MEMO өрісі немесе OLE нысан деректерін қамтитын өрістер бойынша топтастыруға мүмкіндік бермейді.

ТАҢДАУ өрістер тізіміндегі барлық өрістер GROUP BY сөйлемінде болуы немесе SQL біріктіру функциясының аргументі болуы керек.

да қараңыз

SELECT мәлімдемесі

SELECT...INTO мәлімдемесі

ALL, DISTINCT, DISTINCTROW, TOP предикаттары

FROM сөйлемі

Ұсыныс БАР

ORDER BY тармағы

WHERE сөйлемі

SQL статистикалық функциялары

Бастапқы бет: http://office. /ru-ru/access/HA.aspx? pid=CH

Ұсыныс БАР

GROUP BY сөйлемі бар ТАҢДАУ мәлімдемесінде пайда болатын топтастырылған жазбаларды анықтайды. Жазбалар GROUP BY сөйлемі бойынша топтастырылғаннан кейін, HAVING сөйлемі оның шарттарына сәйкес келетіндерді көрсетеді.

Синтаксис

ТАҢДАУ өріс_тізімі
FROM кесте
ҚАЙДА таңдау_шарттары
ТОПТАУ топ_өріс_тізімі

HAVING сөйлемі бар SELECT операторы келесі элементтерді қамтиды:

Элемент

Сипаттама

өріс_тізімі

Кез келген бүркеншік аттармен бірге жүктелетін өрістердің атаулары (Лақап ат (SQL). Өрнектегі кесте немесе өріс үшін балама атау. Бүркеншік аттар әдетте бағдарламаларда кейінгі сілтемелерді жеңілдету үшін қысқарақ кесте немесе өріс атаулары ретінде пайдаланылады, анық емес сілтемелерді болдырмау және сұрау нәтижелерін көрсету кезінде көбірек ақпаратты атауларды алу үшін.) және SQL статистикалық функциялары, предикаттар (ALL, DISTINCT, DISTINCTROW немесе TOP) немесе SELECT операторының басқа параметрлерімен.

кесте

Жазбалар жүктелетін кестенің атауы

таңдау_шарты

Таңдау шарты. Егер мәлімдемеде WHERE сөйлемі болса, Microsoft Access дерекқор механизмі жазбаларға қолданылғаннан кейін мәндерді топтайды.

топ_өріс_тізімі

Жазбаларды топтастыру үшін пайдаланылатын өрістердің атаулары (10-ға дейін). Есімдердің реті топ_өріс_тізімітоптастыру деңгейін анықтайды – жоғарыдан төменге қарай

топтық_шарт

Көрсетілетін жазбаларды көрсететін өрнек

Ескертпелер

HAVING сөйлемі міндетті емес.

HAVING сөйлемі жазбаларды таңдауды анықтайтын WHERE сөйлеміне ұқсас. Жазбаларды GROUP BY сөйлемімен топтағаннан кейін, HAVING сөйлемі көрсетілетін жазбаларды анықтайды.

Түр кодын ТАҢДАУ,

Сома(InStock)

FROM Өнімдер

TypeCode БОЙЫНША ТОПТАУ

БАР сома(InStock) > 100 және "TEL*" сияқты;

HAVING сөйлемінде логикалық операторлар арқылы байланысқан 40-қа дейін өрнек болуы мүмкін ЖәнеЖәне Немесе.

Бастапқы бет: http://office. /ru-ru/access/HA.aspx? pid=CH

ORDER BY тармағы

Сұрау бойынша қайтарылған жазбаларды көрсетілген өріс(тер) мәндерінің өсу немесе кему реті бойынша сұрыптайды.

Синтаксис

ТАҢДАУ өріс_тізімі
FROM кесте
ҚАЙДА таңдау_шарты
[, өріс2 ][, ...]]]

ORDER BY сөйлемін қамтитын SELECT операторы келесі элементтерді қамтиды.

Элемент

Сипаттама

өріс_тізімі

Кез келген бүркеншік аттармен бірге шығарылатын өрістердің атаулары (Lias (SQL). Өрнектегі кесте немесе өріс үшін балама атау. Бүркеншік аттар әдетте бағдарламаларда кейінгі сілтемені жеңілдету үшін қысқарақ кесте немесе өріс атаулары ретінде пайдаланылады, анық емес сілтемелерді болдырмау және сұрау нәтижелерін көрсету кезінде көбірек ақпаратты атауларды алу үшін.) және SQL статистикалық функциялары, предикаттар (ALL, DISTINCT, DISTINCTROW немесе TOP) немесе SELECT операторының басқа параметрлерімен.

кесте

Жазбалар шығарылатын кестенің атауы

таңдау_шарттары

Таңдау шарттары. Егер мәлімдемеде WHERE сөйлемі болса, ол жазбаларға қолданылғаннан кейін Microsoft Access дерекқор механизмі жазбалардың мәндерін реттейді.

өріс1, өріс2

Жазбалар сұрыпталатын өрістердің атаулары.

Ескертпелер

ORDER BY сөйлемі міндетті емес. Ол деректерді сұрыпталған пішінде көрсету қажет болғанда қолданылуы керек.

Әдепкі сұрыптау реті (Сұрыптау реті. Деректерді оның мәндері мен түріне қарай реттеу тәсілі. Деректерді алфавит бойынша, сандық мәндер бойынша немесе күні бойынша сұрыптауға болады. Сұрыптау реті өсу реті бойынша (0-ден 100-ге дейін, A-ға дейін) болуы мүмкін. Z) немесе кему (100-ден 0-ге дейін, Z-ден А-ға дейін).) өсу (А-дан Я-ға, 0-ден 9-ға дейін). Төмендегі мысалдар қызметкер атын тегі бойынша сұрыптауды көрсетеді.

ТАҢДАУ Тегі, Аты

Қызметкерлерден

ТЕГІ БОЙЫНША ТАПСЫРЫС;

ТАҢДАУ Тегі, Аты

Қызметкерлерден

ТАПСЫРЫС БОЙЫНША Тегі ASC;

Өрістерді кему ретімен сұрыптау үшін (Z-ден A-ға дейін, 9-дан 0-ге дейін), әрбір өрістің атына сақталған DESC сөзін қосыңыз. Келесі мысал қызметкердің жалақысына негізделген кему ретімен сұрыптауды көрсетеді.

ТАҢДАУ Тегі, Жалақы

Қызметкерлерден

ТАПСЫРЫС БОЙЫНША Жалақы DESC, Тегі;

MEMO Field (Memo Field деректер түрі. Microsoft Access дерекқорындағы өріс деректер түрі. MEMO өрісінде 65 535 таңбаға дейін болуы мүмкін.) немесе OLE нысан өрісі (OLE нысаны) деректерін қамтитын ТАПСЫРЫС тармағында өрістерді көрсетсеңіз. Өріс деректер түрі "Microsoft Access дерекқорына байланыстырылған немесе ендірілген басқа қолданбалардан нысандарды сақтау үшін пайдаланылатын өріс деректер түрі.), бұл қатені тудырады. Microsoft Access дерекқор механизмі бұл өріс түрлерін сұрыптай алмайды.

ORDER BY сөйлемі әдетте SQL операторындағы соңғы сөйлем болып табылады (SQL операторы (жол). SELECT, UPDATE немесе DELETE сияқты SQL пәрменін анықтайтын және WHERE немесе ORDER BY сияқты сөйлемдерді қамтитын өрнек. SQL операторлары. /жолдар сұраныстар мен статистикалық функцияларда жиі қолданылады.).

ORDER BY сөйлеміне қосымша өрістерді қосуға болады. Жазбалар алдымен ORDER BY тармағында бірінші көрсетілген өріс бойынша сұрыпталады. Бірінші өрістегі бірдей мәндері бар жазбалар кейін екіншісімен көрсетілген өріс бойынша сұрыпталады және т.б.
да қараңыз

SELECT мәлімдемесі

SELECT...INTO мәлімдемесі

ALL, DISTINCT, DISTINCTROW, TOP предикаттары

FROM сөйлемі

GROUP BY сөйлемі

Ұсыныс БАР

WHERE сөйлемі

SQL статистикалық функциялары

Бастапқы бет: http://office. /ru-ru/access/HA.aspx? pid=CH

INNER JOIN операциясы

Екі кестедегі жазбаларды біріктіреді, егер осы кестелердің қосылатын өрістерінде бірдей мәндер болса.

Синтаксис

FROM 1-кестеІШКІ ҚОСЫЛУ кесте 2ҚОСУЛЫ 1-кесте.өріс1 салыстыру_оператор кестесі2.өріс2

INNER JOIN операциясы келесі элементтерден тұрады:

Элемент

Сипаттама

1-кесте, кесте 2

Біріктірілетін жазбаларды қамтитын кестелердің атаулары

өріс1, өріс2

Байланыстырылатын өрістердің атаулары. Сандық емес өрістер бірдей деректер типінде болуы керек (Деректердің түрі. Өріс құрамында болуы мүмкін деректер түрін анықтайтын өріс сипаттамасы. Деректер түрлеріне: Логикалық, Бүтін, Ұзын, Валюта, Жалғыз, Қос, Күн, Жол, және Нұсқа (әдепкі).) және бір түрдегі деректерді қамтиды. Дегенмен, бұл өрістердің атаулары әртүрлі болуы мүмкін

салыстыру_операторы

Кез келген салыстыру операторы: (=,<, >, <=, >= немесе<>)




Жоғарғы