ms қатынасындағы sql сұрауы. Кіріспе

SQL – 4-сабақ. Деректерді таңдау – SELECT операторы

Сонымен, біздің форум деректер базасында үш кесте бар: пайдаланушылар (пайдаланушылар), тақырыптар (тақырыптар) және хабарламалар (хабарламалар). Және оларда қандай деректер бар екенін көргіміз келеді. Ол үшін SQL тілінде оператор бар ТАҢДАУ. Оны пайдалану синтаксисі келесідей:

SELECT_what FROM select_from;


«Нені_таңдау» орнына біз мәндерін көргіміз келетін бағанның атын немесе үтірмен бөлінген бірнеше бағандардың атын немесе барлық бағандарды таңдауды білдіретін жұлдызша таңбасын (*) көрсетуіміз керек. үстел. "From_choose" орнына кестенің атын көрсету керек.

Алдымен пайдаланушылар кестесіндегі барлық бағандарды қарастырайық:

ТАҢДАУ * пайдаланушылардан;

Бұл кестеге енгізген барлық деректеріміз. Бірақ біз тек id_user бағанын көргіміз келеді делік (мысалы, соңғы сабақта тақырыптар кестесін толтыру үшін пайдаланушылар кестесінде қандай id_users бар екенін білуіміз керек еді). Ол үшін сұрауда осы бағанның атын көрсетеміз:

Пайдаланушылардан id_user ТАҢДАУ;

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

ТАҢДАУ атын, пайдаланушылардан электрондық пошта;

Сол сияқты, сіз біздің басқа кестелерімізде қандай деректер бар екенін көре аласыз. Бізде қандай тақырыптар бар екенін көрейік:

Тақырыптардан * ТАҢДАУ;

Енді бізде тек 4 тақырып бар, ал олардың саны 100 болса? Мен олардың, мысалы, алфавит бойынша көрсетілгенін қалаймын. Бұл үшін SQL-де кілт сөз бар. БОЙЫНША СҰРЫПТАУсодан кейін сұрыптау орындалатын бағанның аты көрсетіледі. Синтаксис келесідей:

кесте_атыннан баған_атын ТАҢДАУ ТАПСЫРЫС БОЙЫНША сұрыптау_баған_аты;



Әдепкі сұрыптау өсу бойынша, бірақ оны кілт сөзді қосу арқылы өзгертуге болады DESC

Енді деректеріміз кему ретімен сұрыпталған.

Бір уақытта бірнеше бағандар бойынша сұрыптауға болады. Мысалы, келесі сұрау деректерді тақырып_атауы бағаны бойынша сұрыптайды және осы бағанда бірнеше бірдей жолдар болса, id_author бағаны кему ретімен сұрыпталады:

Нәтижені алдыңғы сұраудың нәтижесімен салыстырыңыз.

Көбінесе кестедегі барлық ақпарат бізге қажет емес. Мысалы, sveta (id=4) пайдаланушысы қандай тақырыптар жасағанын білгіміз келеді. Бұл үшін SQL-де кілт сөз бар. ҚАЙДА, мұндай сұраудың синтаксисі келесідей:

Біздің мысал үшін шарт - пайдаланушы идентификаторы, яғни. бізге тек id_author бағанында 4 бар жолдар қажет (пайдаланушы идентификаторы sveta):

Немесе біз «велосипедтер» тақырыбын кім жасағанын білгіміз келеді:

Әрине, автордың идентификаторының орнына автордың аты-жөнін көрсету ыңғайлырақ болар еді, бірақ атаулар басқа кестеде сақталады. Кейінгі сабақтарда біз бірнеше кестелерден деректерді таңдауды үйренеміз. Осы арада WHERE кілт сөзі арқылы қандай шарттарды көрсетуге болатынын білейік.

Оператор Сипаттама
= (тең) Таңдалған мәндер көрсетілгенге тең

Мысалы:

* id_author=4 тақырыптарынан ТАҢДАУ;

Нәтиже:

> (толығырақ) Көрсетілгеннен үлкен мәндер таңдалады

Мысалы:

* id_author>2 тақырыптарынан ТАҢДАУ;

Нәтиже:

< (меньше) Көрсетілгеннен аз мәндер таңдалды

Мысалы:

* id_author деген тақырыптардан ТАҢДАҢЫЗ
Нәтиже:

>= (үлкен немесе тең) Көрсетілген мәннен үлкен немесе оған тең мәндер таңдалады.

Мысалы:

id_author>=2 болатын тақырыптардан * ТАҢДАУ;

Нәтиже:

<= (меньше или равно) Көрсетілген мәннен аз немесе оған тең мәндер таңдалады.

Мысалы:

* id_author деген тақырыптардан ТАҢДАҢЫЗ
Нәтиже:

!= (тең емес) Көрсетілгенге тең емес мәндер таңдалады

Мысалы:

* ҚАЙДА id_author!=1 тақырыптарынан ТАҢДАҢЫЗ;

Нәтиже:

НҰЛ ЕМЕС Көрсетілген өрісте мәндері бар жолдар таңдалады

Мысалы:

id_author НҰЛ БОЛМАЙТЫН тақырыптардан * ТАҢДАҢЫЗ;

Нәтиже:

IS NULL Көрсетілген өрісте мәні жоқ жолдар таңдалады

Мысалы:

id_author NULL БОЛҒАН тақырыптардан * ТАҢДАҢЫЗ;

Нәтиже:

Бос жиын – мұндай жолдар жоқ.

АРАСЫНДА (арасында) Көрсетілген мәндер арасындағы мәндер таңдалады.

Мысалы:

* 1 ЖӘНЕ 3 АРАСЫНДА id_author болатын тақырыптардан ТАҢДАҢЫЗ;

Нәтиже:

IN (мән қамтылған) Көрсетілгенге сәйкес мәндер

Мысалы:

* id_author IN КЕЛГЕН тақырыптардан ТАҢДАУ (1, 4);

Нәтиже:

ЕМЕС (мән қамтылмаған) Белгіленген мәндерден басқа таңдалған мәндер

Мысалы:

* id_author ЕМЕС тақырыптардан ТАҢДАУ (1, 4);

Нәтиже:

ЛАЙК (сәйкестік) Үлгі мәндері таңдалды

Мысалы:

* тақырып_атауы "vel%" СИЯҚТЫ ТАҚЫРЫПТАРДАН ТАҢДАҢЫЗ;

Нәтиже:

LIKE операторының ықтимал метатаңбалары төменде талқыланады.

ҰНАЙМАЙДЫ Үлгіге сәйкес келмейтін мәндер таңдалады

Мысалы:

тақырып_атауы "vel%" ҰНАЙМАЙТЫН тақырыптардан * ТАҢДАҢЫЗ;

Нәтиже:

LIKE операторының метатаңбалары

Метатаңбаларды іздеуді тек мәтіндік өрістерде орындауға болады.

Ең көп тараған метатаңба болып табылады % . Бұл кез келген кейіпкерлерді білдіреді. Мысалы, "vel" әріптерінен басталатын сөздерді тапқымыз келсе, онда LIKE "vel%" деп жазамыз, ал "клуб" таңбалары бар сөздерді тапқымыз келсе, "%" деп жазамыз. клуб%». Мысалы:

Тағы бір жиі қолданылатын метатаңба _ . Аз немесе мүлдем таңбаны білдіретін % белгісінен айырмашылығы, астын сызу дәл бір таңбаны білдіреді. Мысалы:

Метатаңба мен «балық» арасындағы бос орынға назар аударыңыз, егер сіз оны өткізіп жіберсеңіз, сұрау жұмыс істемейді, себебі метатаңба _ дәл бір таңбаны білдіреді, ал бос орын да таңба болып табылады.

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

Бұл сабақ туралы 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 дерекқоры арқылы талқыланады.

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

Бізде бір жылдағы айлардың сандары мен атауларын қамтитын 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 Subscription End

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

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

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

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

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

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

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

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

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 id_mon ТАҢДАУ id = 5" "Ағымдағы жоба қосылымының параметрлерін пайдаланып сұрауды орындаңыз RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Біздің мәнді алу str =(RS.Field) ) 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;

СұранысSQLQ003. 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 сөйлемінен кейін келеді. m_income кестесінен сома мәні 200-ден асатын барлық жазбаларды алу мысалы:

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


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

SQL сұрауы Q007.Күрделі шарттарды өрнектеу үшін ЖӘНЕ (конъюнкция), НЕМЕСЕ (дизъюнкция) және ЕМЕС (логикалық терістеу) логикалық операциялары қолданылады. 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_product кестесінің жазбасына m_income.product_id мәні m_product.id мәніне тең болғанда қосылады:



ON m_income.product_id=m_product.id;

SQL сұрауы Q009.Бұл SQL сұрауында екі нәрсеге назар аудару керек: 1) іздеу мәтіні жалғыз тырнақшаға алынған ("); 2) күн #Ай/Күн/Жыл# пішімінде, бұл MS үшін дұрыс. Қол жеткізу. Басқа жүйелерде күн пішімі басқаша болуы мүмкін. 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 = (Таңдаңыз идентификатор FROM m_category WHERE title="Нан-тоқаш өнімдері"); !}

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

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_songgi1 бағаны айлардың абсолютті санын есептейді, 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
GROUP BY блок;

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 өзгерту сұрауы OOO Sladkoe шығарған барлық тауарлардың бағасын 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="OOO)"Сладкое"");. !}

№1 зертхана

SQL: RETRIEVE DATA - пәрменіТАҢДАУ

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

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

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

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

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

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

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

ТАҢДАУ *

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


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

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

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

№4 тапсырма.Ақпараты СТУДЕНТТЕР кестесінде бар Иванов тегі бар барлық студенттердің атын таңдайтын SQL режимінде таңдау сұранысын жасаңыз.

ТАҢДАУ ТЕГІ, АТЫ

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

ТЕГІ "Иванов" ҚАЙДА;

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

ТАҢДАУ ТЕГІ, АТЫ

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

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

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

ТАҢДАУ *

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

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

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

ТАҢДАУ *

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

ҚАЙДАITEM=" ИСМУ« ЖәнеБАҒАжоқ (4.5);

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

ТАҢДАУ *

FROMЗАТТАР

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


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

ТАҢДАУ *

FROMСТУДЕНТТЕР

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

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

SQL сұрауларының мысалдарын MS Access бағдарламасында SQL сұрауларын жазуды үйрену және жаттықтыру үшін пайдалануға болады.

Бір 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 жиынтық функциясын пайдаланып өрістер сомасы мен бағаның көбейтіндісінің қосындысын есептеу мысалы.