ms girişində sql sorğusu. Giriş

SQL - Dərs 4. Məlumatların alınması - SELECT ifadəsi

Beləliklə, forum bazamızda üç cədvəl var: istifadəçilər (istifadəçilər), mövzular (mövzular) və yazılar (mesajlar). Və onların hansı məlumatları ehtiva etdiyini görmək istəyirik. SQL-də bunun üçün bir operator var SEÇİN. Onun istifadəsi üçün sintaksis aşağıdakı kimidir:

SEÇ what_select FROM where_select;


"nə_seç" əvəzinə ya dəyərlərini görmək istədiyimiz sütunun adını, ya da vergüllə ayrılmış bir neçə sütunun adını, ya da cədvəlin bütün sütunlarının seçimini bildirən ulduz (*) simvolunu göstərməliyik. . "From_select" əvəzinə cədvəlin adını göstərməlisiniz.

Əvvəlcə istifadəçilər cədvəlindəki bütün sütunlara baxaq:

İstifadəçilərdən * SEÇİN;

Bu cədvələ daxil etdiyimiz bütün məlumatlarımız budur. Ancaq fərz edək ki, biz yalnız id_user sütununa baxmaq istəyirik (məsələn, son dərsdə mövzular cədvəlini doldurmaq üçün istifadəçilər cədvəlində hansı id_userlərin olduğunu bilməliyik). Bunu etmək üçün sorğuda bu sütunun adını göstərəcəyik:

İstifadəçilərdən id_user SEÇİN;

Yaxşı, məsələn, istifadəçilərimizin adlarını və e-poçtlarını görmək istəyiriksə, onda vergüllə ayrılmış maraq sütunlarını sadalayacağıq:

İstifadəçilərdən ad, e-poçt SEÇİN;

Eynilə, digər cədvəllərimizdə hansı məlumatları ehtiva etdiyini görə bilərsiniz. Görək hansı mövzularımız var:

Mövzulardan * SEÇİN;

İndi cəmi 4 mövzumuz var, bəs onlardan 100-ü olarsa necə? İstərdim ki, onlar, məsələn, əlifba sırası ilə göstərilsin. SQL-də bunun üçün açar söz var SİFARİŞ ardınca çeşidləmənin aparılacağı sütunun adı. Sintaksis aşağıdakı kimidir:

Cədvəl_adından sütun_adını SEÇİN ORDER BY sort_column_name;



Varsayılan olaraq çeşidləmə artan qaydadadır, lakin bu açar söz əlavə etməklə dəyişdirilə bilər DESC

İndi məlumatlarımız azalan qaydada sıralanır.

Çeşidləmə eyni anda bir neçə sütun üzrə edilə bilər. Məsələn, aşağıdakı sorğu məlumatları mövzu_adı sütununa görə çeşidləyəcək və bu sütunda bir neçə eyni sətir varsa, id_author sütunu azalan qaydada çeşidlənəcək:

Nəticəni əvvəlki sorğunun nəticəsi ilə müqayisə edin.

Çox vaxt cədvəldəki bütün məlumatlara ehtiyacımız yoxdur. Məsələn, sveta (id=4) istifadəçisi tərəfindən hansı mövzuların yaradıldığını öyrənmək istəyirik. SQL-də bunun üçün açar söz var HARADA, belə bir sorğu üçün sintaksis aşağıdakı kimidir:

Bizim nümunəmiz üçün şərt istifadəçi identifikatorudur, yəni. Bizə yalnız id_author sütununda 4 (istifadəçi ID sveta) olan sətirlərə ehtiyacımız var:

Və ya "velosipedlər" mövzusunu kimin yaratdığını bilmək istəyirik:

Əlbəttə ki, müəllifin identifikatoru əvəzinə onun adı göstərilsəydi, lakin adlar başqa cədvəldə saxlanılsa, daha rahat olardı. Sonrakı dərslərdə biz çoxlu cədvəllərdən məlumatların seçilməsini öyrənəcəyik. Bu arada, WHERE açar sözündən istifadə edərək hansı şərtlərin təyin oluna biləcəyini öyrənək.

Operator Təsvir
= (bərabər) Göstərilən dəyərə bərabər olan dəyərlər seçilir

Misal:

Mövzulardan * SEÇİN id_author=4;

Nəticə:

> (daha çox) Göstəriləndən daha böyük dəyərlər seçilir

Misal:

Mövzulardan * SEÇİN id_author>2;

Nəticə:

< (меньше) Göstəriləndən az olan dəyərlər seçilir

Misal:

id_author olan Mövzulardan * SEÇİN
Nəticə:

>= (böyük və ya bərabər) Göstərilən dəyərdən böyük və ona bərabər olan dəyərlər seçilir

Misal:

Mövzulardan * SEÇİN id_author>=2;

Nəticə:

<= (меньше или равно) Göstərilən dəyərdən kiçik və ona bərabər olan dəyərlər seçilir

Misal:

id_author olan Mövzulardan * SEÇİN
Nəticə:

!= (bərabər deyil) Göstərilən dəyərə bərabər olmayan dəyərlər seçilir

Misal:

Mövzulardan * SEÇİN id_author!=1;

Nəticə:

NULL DEYİL Göstərilən sahədə dəyərləri olan sətirləri seçir

Misal:

id_author NULL OLMAYAN Mövzulardan * SEÇİN;

Nəticə:

NULL IS Göstərilən sahədə heç bir dəyəri olmayan sətirləri seçir

Misal:

id_author NULL OLAN Mövzulardan * SEÇİN;

Nəticə:

Boş dəst - belə xətlər yoxdur.

ARASINDA (arasında) Göstərilən dəyərlər arasında dəyərlər seçilir

Misal:

1 və 3 ARASINDA id_author olan mövzulardan * SEÇİN;

Nəticə:

IN (dəyər ehtiva edir) Göstərilən dəyərlərə uyğun olan dəyərlər seçilir

Misal:

* id_author IN OLDUĞU Mövzulardan SEÇİN (1, 4);

Nəticə:

DEYİL (dəyər daxil deyil) Göstərilənlərdən başqa dəyərlər seçilir

Misal:

* id_author OLMADIĞI Mövzulardan SEÇİN (1, 4);

Nəticə:

BƏYƏNMƏK (uyğunluq) Nümunəyə uyğun olan dəyərlər seçilir

Misal:

mövzu_adının "led%" KİMİ OLAN Mövzulardan * SEÇİN;

Nəticə:

LIKE operatoru üçün mümkün meta simvollar aşağıda müzakirə olunacaq.

BƏYƏNMƏYİR (uyğun deyil) Naxışa uyğun gəlməyən dəyərlər seçilir

Misal:

Mövzu_adının "led%" kimi OLMAYAN Mövzulardan * SEÇİN;

Nəticə:

LIKE operator metasimvolları

Meta simvollardan istifadə edərək axtarışlar yalnız mətn sahələrində həyata keçirilə bilər.

Ən çox yayılmış metaxarakterdir % . İstənilən simvol deməkdir. Məsələn, “vel” hərfləri ilə başlayan sözləri tapmaq istəsək, o zaman LIKE “vel%”, tərkibində “club” simvolları olan sözləri tapmaq istəsək, LIKE “%” yazacağıq. klub%". Misal üçün:

Digər tez-tez istifadə olunan metaxarakterdir _ . Az və ya heç simvolu bildirməyən %-dən fərqli olaraq, alt xətt tam olaraq bir simvolu bildirir. Misal üçün:

Metaxarakter və "balıq" arasındakı boşluğa diqqət yetirin; onu atlasanız, sorğu işləməyəcək, çünki metaxarakter _ tam bir simvolu ifadə edir və boşluq da bir xarakterdir.

Bu gün üçün kifayətdir. Növbəti dərsdə biz iki və ya daha çox cədvələ qarşı sorğu yazmağı öyrənəcəyik. Bu arada, özünüz yazılar cədvəlinə qarşı sorğular yaratmağa çalışın.

Bu dərs həsr olunub SQL sorğuları haqqında məlumat bazasına VBA Girişi. Biz VBA-da verilənlər bazasına INSERT, UPDATE, DELETE sorğularının necə edildiyini nəzərdən keçirəcəyik və həmçinin SELECT sorğusundan konkret dəyərin necə əldə ediləcəyini öyrənəcəyik.

Proqrama daxil olanlar VBA Girişi və SQL server verilənlər bazası ilə işləyərkən çox vaxt onlar verilənlər bazasına SQL sorğusu göndərmək kimi sadə və zəruri bir vəzifə ilə qarşılaşırlar, istər INSERT, UPDATE, istərsə də sadə SQL SELECT sorğusu. Biz təcrübəsiz proqramçılar olduğumuz üçün bunu da bacarmalıyıq, ona görə də bu gün biz bunu edəcəyik.

Biz artıq SQL serverindən məlumatların əldə edilməsi mövzusuna toxunmuşuq, burada bu məlumatları əldə etmək üçün VBA-da kod yazmışıq, məsələn, MSSql 2008-dən mətn faylına məlumatların yüklənməsi haqqında məqalədə və ya ona da toxunmuşuq materialda azdır Access-dən Word və Excel şablonuna məlumatların yüklənməsi, lakin bu və ya digər şəkildə biz buna səthi baxdıq və bu gün bu barədə bir az daha ətraflı danışmağı təklif edirəm.

Qeyd! Aşağıdakı bütün nümunələr Access 2003 ADP layihəsi və MSSql 2008 verilənlər bazasından istifadə etməklə nəzərdən keçirilir.Əgər siz ADP layihəsinin nə olduğunu bilmirsinizsə, o zaman biz bunu Access ADP layihəsini necə yaratmaq və konfiqurasiya etmək olar materialında nəzərdən keçirdik.

Nümunələr üçün mənbə məlumatları

Deyək ki, bizdə ilin aylarının nömrələrini və adlarını ehtiva edən test_table cədvəlimiz var (sorğular istifadə edərək yerinə yetirilir. İdarəetmə studiyası)

CƏDVƏL YARADIN .( NULL DEYİL, (50) NULL) ON ON

Artıq dediyim kimi, biz MS SQL 2008 ilə işləmək üçün konfiqurasiya edilmiş ADP layihəsindən istifadə edəcəyik, orada test forması yaratmışam və imza ilə başlanğıc düyməsini əlavə etmişəm. "Qaç", kodumuzu sınamaq üçün ehtiyacımız olacaq, yəni. Bütün kodu hadisə idarəedicisinə yazacağıq " Düyməni basmaq».

Verilənlər bazasına sorğular VBA-da INSERT, UPDATE, DELETE

Çox gecikməmək üçün dərhal işə başlayaq, deyək ki, test cədvəlimizə bir sıra əlavə etməliyik ( kodu şərh etdi)/

Private Sub start_Click() "Sorğu sətirini saxlamaq üçün dəyişəni elan edin Dim sql_query String olaraq "Bizə lazım olan sorğunu ona yazın sql_query = "INSERT INTO test_table (id, name_mon) VALUES ("6", "June")" "İcra et bu DoCmd.RunSQL sql_query End Sub

Bu halda sorğu cari verilənlər bazası əlaqə parametrlərindən istifadə etməklə yerinə yetirilir. Məlumatların əlavə edilib-edilmədiyini yoxlaya bilərik.

Gördüyünüz kimi, məlumatlar daxil edilmişdir.

Bir sətri silmək üçün aşağıdakı kodu yazırıq.

Private Sub start_Click() "Sorğu sətirini saxlamaq üçün dəyişəni elan edin Dim sql_query Sətir kimi "Orada silmə sorğusu yazın sql_query = "test_table SİL HARADAN id = 6" "İşlətin DoCmd.RunSQL sql_query End

Yoxlasaq, istədiyiniz xəttin silindiyini görərik.

Məlumatları yeniləmək üçün sql_query dəyişəninə yeniləmə sorğusu yazın, ümid edirəm mənası aydındır.

VBA-da verilənlər bazasına sorğu seçin

Burada işlər digər SQL konstruksiyalarından bir az daha maraqlıdır.

Birincisi, deyək ki, cədvəldən bütün məlumatları əldə etməliyik və məsələn, biz onu emal edib mesaj şəklində göstərəcəyik və siz, əlbəttə, başqa məqsədlər üçün istifadə edə bilərsiniz, bunun üçün aşağıdakıları yazırıq. kod

Private Sub start_Click() "Dəyişənləri elan et" Verilənlər bazasından qeydlər toplusu üçün Dim RS As ADODB.Recordset "Sorğu sətri Dim sql_query As String "String Dim str As String "Məlumatda yekun məlumatları göstərmək üçün sətir "Üçün yeni obyekt yaradın. qeydlər dəsti RS = Yeni ADODB .Recordset "Sorğu xətti sql_query = "Test_tableDƏN SEÇ identifikatoru, ad_mon" "Cari layihə bağlantı parametrlərindən istifadə edərək sorğunu icra edin RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Qeydiyyatda deyilkən (RS.EOF) "Mesajı göstərmək üçün dəyişəni doldurun str = str & RS.Fields("id") & "-" & RS.Fields("name_mon") & vbnewline "növbəti qeydə keçin RS.MoveNext Wend "msgbox str End Sub mesajını çıxarın

Burada qeyd dəstimizdəki bütün dəyərləri təkrarlamaq üçün artıq VBA Access döngələrindən istifadə edirik.

Ancaq çox vaxt qeydlər dəstindən bütün dəyərləri deyil, yalnız birini, məsələn, kodu ilə ayın adını almaq lazımdır. Bunu etmək üçün dövrədən istifadə etmək bir qədər bahadır, ona görə də biz sadəcə bir dəyər qaytaracaq və ona daxil olacaq sorğu yaza bilərik, məsələn, 5 kodundan istifadə edərək ayın adını alacağıq.

Private Sub start_Click() "Dəyişənləri elan et" Verilənlər bazasından qeydlər dəsti üçün Dim RS As ADODB.Recordset "Sorğu sətri Dim sql_query Sim kimi "Sətrin yekun dəyərini göstərmək üçün Dim str Sim kimi "Qeydlər dəsti üçün yeni obyekt yaradın RS = Yeni ADODB.Recordset "Sorğu xətti sql_query = "Test_table FROM ad_mon SEÇİN id = 5" "Cari layihə bağlantı parametrlərindən istifadə edərək sorğunu icra edin RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Dəyərimizi əldə edin str = RS. Fields(0) msgbox str End Sub

Universallıq üçün burada artıq hüceyrə adı ilə deyil, indeksi ilə müraciət etdik, yəni. 0 və bu ilk dəyərdir Rekordlar dəsti, sonunda dəyərimizi aldıq "Bilər".

Gördüyünüz kimi, hər şey olduqca sadədir. Əgər siz tez-tez verilənlər bazasından müəyyən bir dəyər əldə etməlisinizsə ( son misalda olduğu kimi), onda mən bütün kodu ayrı bir funksiyaya (VBA Access 2003-də funksiyanı necə yazmaq olar) bir giriş parametri ilə çıxarmağı məsləhət görürəm, məsələn, ay kodu ( nümunəmizi nəzərə alsaq) və sadəcə olaraq, bu dəyəri göstərmək lazım olduqda, lazımi parametrlə bizə lazım olan funksiyanı çağırın və budur, bununla VBA kodunu əhəmiyyətli dərəcədə azaldacağıq və proqramımızın qavrayışını yaxşılaşdıracağıq.

Bu gün üçün hamısı budur. Uğurlar!

"Mağaza" təhsil layihəsinin təsviri

Cədvəl əlaqə diaqramı

Cədvəllərin təsviri

m_kateqoriya - məhsul kateqoriyaları

m_income - malların qəbzi

m_nəticə - malların istehlakı

m_product - kataloq, məhsul təsvirləri

m_supplier - kataloq; təchizatçı məlumat

m_unit - kataloq; vahidlər

Bu təlim materialında verilmiş nümunələri praktiki olaraq yoxlamaq üçün aşağıdakı proqram təminatına malik olmalısınız:

Microsoft Access 2003 və ya daha sonra.

MS Access-də SQL Sorğu. Başlamaq

Cədvəlin məzmununu görmək üçün sol paneldəki cədvəlin adının üzərinə iki dəfə klikləyin:

Cədvəl sahəsində redaktə rejiminə keçmək üçün yuxarı paneldə Dizayn rejimini seçin:

SQL sorğusunun nəticəsini göstərmək üçün sol paneldə sorğu adını iki dəfə klikləyin:

SQL sorğunun redaktə rejiminə keçmək üçün yuxarı paneldə SQL rejimini seçin:

SQL sorğusu. MS Access-də nümunələr. SEÇİN: 1-10

SQL sorğusunda verilənlər bazası cədvəllərindən seçim etmək üçün SELECT ifadəsi istifadə olunur.

SQL Query Q001.İstədiyiniz ardıcıllıqla yalnız tələb olunan sahələri əldə etmək üçün nümunə SQL sorğusu:

SELECT dt, product_id, məbləğ


m_gəlirdən;

SQL Query Q002. Bu misal SQL sorğusunda ulduz (*) simvolu m_məhsul cədvəlinin bütün sütunlarını sadalamaq, başqa sözlə, m_məhsul əlaqəsinin bütün sahələrini almaq üçün istifadə olunur:

SEÇİN *
FROM m_product;

SorğuSQL Q003. DISTINCT ifadəsi dublikat qeydləri aradan qaldırmaq və çoxsaylı unikal qeydlər əldə etmək üçün istifadə olunur:

FƏRQLİ məhsul_id SEÇİN


m_gəlirdən;

SQL Query Q004. ORDER BY ifadəsi qeydləri müəyyən bir sahənin dəyərlərinə görə çeşidləmək (sifariş etmək) üçün istifadə olunur. Sahənin adı ORDER BY ifadəsindən sonra göstərilir:

SEÇİN *
m_gəlirdən


qiymətə görə SİFARİŞ;

SQL Query Q005. ASC ifadəsi ORDER BY ifadəsinin tamamlayıcısı kimi istifadə olunur və artan çeşidləməni təyin etməyə xidmət edir. DESC ifadəsi ORDER BY ifadəsinə əlavə olaraq istifadə olunur və azalan çeşidləməni təyin etmək üçün istifadə olunur. Nə ASC, nə də DESC göstərilmədiyi halda, ASC-nin olması (defolt) qəbul edilir:

SEÇİN *
m_gəlirdən


dt DESC BY SİFARİŞ , qiymət;

SQL Query Q006. Cədvəldən lazımi qeydləri seçmək üçün seçim şərtini ifadə edən müxtəlif məntiqi ifadələrdən istifadə olunur. Boolean ifadəsi WHERE ifadəsindən sonra görünür. Məbləğin dəyəri 200-dən çox olan m_income cədvəlindən bütün qeydlərin alınmasına nümunə:

SEÇİN *
m_gəlirdən


HARADA məbləğ>200;

SQL Query Q007. Mürəkkəb şərtləri ifadə etmək üçün AND (konyunksiya), OR (dizyunksiya) və NOT (məntiqi inkar) məntiqi operatorlarından istifadə olunur. m_outcome cədvəlindən məbləğ dəyəri 20 və qiymət dəyəri 10-dan böyük və ya ona bərabər olan bütün qeydləri əldə etməyə nümunə:

Qiymət


m_nəticədən
HARƏDƏ məbləğ=20 VƏ qiymət>=10;

SQL Query Q008.İki və ya daha çox cədvəldən verilənləri birləşdirmək üçün INNER JOIN, LEFT JOIN, RIGHT JOIN təlimatlarından istifadə edin. Aşağıdakı nümunə dt, product_id, məbləğ, qiymət sahələrini m_income cədvəlindən və başlıq sahəsini m_product cədvəlindən alır. m_income cədvəli qeydi m_product cədvəli qeydinə m_income.product_id dəyəri m_product.id dəyərinə bərabər olduqda qoşulur:



ON m_income.product_id=m_product.id;

SQL Sorğusu Q009. Bu SQL sorğusunda qeyd edilməli iki şey var: 1) axtarış mətni tək dırnaqlar (") içərisindədir; 2) tarix #Month/Day/Year# formatındadır, bu MS Access üçün doğrudur. sistemlərdə tarixin yazılma formatı fərqli ola bilər.12 iyun 2011-ci il tarixində südün qəbulu haqqında məlumatın göstərilməsi nümunəsi. Tarix formatına diqqət yetirin #6/12/2011#:

SELECT dt, product_id, başlıq, məbləğ, qiymət


FROM m_income DAXİLİ QOŞULUN m_product

WHERE title="Milk" And dt=#6/12/2011#; !}

SQL Query Q010. BETWEEN təlimatı dəyərin müəyyən diapazona aid olub-olmadığını yoxlamaq üçün istifadə olunur. 1 iyun və 30 iyun 2011-ci il tarixləri arasında alınan məhsullar haqqında məlumatı göstərən nümunə SQL sorğusu:

SEÇİN *
FROM m_income DAXİLİ QOŞULUN m_product


ON m_income.product_id=m_product.id
HARADA dt #6/1/2011# və #6/30/2011# ARASINDA;

SQL sorğusu. MS Access-də nümunələr. SEÇİN: 11-20

Bir SQL sorğusu digərinə daxil edilə bilər. Alt sorğu sorğu daxilindəki sorğudan başqa bir şey deyil. Tipik olaraq, alt sorğu WHERE bəndində istifadə olunur. Ancaq alt sorğulardan istifadə etməyin başqa yolları da var.

Sorğu Q011. m_product cədvəlindəki məhsullar haqqında məlumat göstərilir, kodları da m_income cədvəlindədir:

SEÇİN *
m_məhsulundan


WHERE id IN (m_income FROM product_id SEÇİN);

Sorğu Q012. m_product cədvəlindən kodları m_outcome cədvəlində olmayan məhsulların siyahısı göstərilir:

SEÇİN *
m_məhsulundan


İD OLMADIĞINDA (m_nəticədən məhsul_id SEÇİN);

Sorğu Q013. Bu SQL sorğusu m_income cədvəlində olan, lakin m_outcome cədvəlində olmayan məhsul kodlarının və adlarının unikal siyahısını göstərir:

SEÇİN DISTINCT product_id, başlıq


FROM m_income DAXİLİ QOŞULUN m_product
ON m_income.product_id=m_product.id
WHERE product_id IN YOX (m_nəticədən məhsul_id SEÇİN);

Sorğu Q014. m_kateqoriya cədvəlində adları M hərfi ilə başlayan kateqoriyaların unikal siyahısı göstərilir:

DISTINCT başlığı SEÇİN


m_məhsulundan
"M*" kimi başlıq;

Sorğu Q015. Sorğuda sahələr üzrə hesab əməliyyatlarının yerinə yetirilməsi və sorğuda sahələrin adının dəyişdirilməsi nümunəsi (ləqəb). Bu nümunə, mənfəətin satışın 7 faizi olduğunu fərz etsək, hər bir xərc maddəsi üçün xərc = kəmiyyət*qiymət və mənfəəti hesablayır:


məbləğ*qiymət/100*7 AS mənfəət
FROM m_outcome;

Sorğu Q016. Arifmetik əməliyyatları təhlil edərək və sadələşdirərək, sorğunun icra sürətini artıra bilərsiniz:

Dt, məhsul_id, məbləğ, qiymət, məbləğ*qiymət AS nəticə_cəmi,


nəticə_cəmi*0,07 AS mənfəət
FROM m_outcome;

Q017 sorğusu.Çox cədvəllərdən verilənləri birləşdirmək üçün INNER JOIN ifadəsindən istifadə edə bilərsiniz. Aşağıdakı misalda, ctgry_id dəyərindən asılı olaraq, m_income cədvəlindəki hər bir giriş məhsulun aid olduğu m_kateqoriya cədvəlindəki kateqoriyanın adı ilə uyğunlaşdırılır:

c.title, b.title, dt, məbləğ, qiymət, məbləğ*qiymət gəlir_summa kimi SEÇİN


FROM (m_gəlir DAXİLİ QOŞULMA KİMİ m_product AS b ON a.product_id=b.id)
İNNER JOIN m_category AS c ON b.ctgry_id=c.id
SİFARİŞ C.title, b.title;

Sorğu Q018. SUM - cəm, COUNT - kəmiyyət, AVG - arifmetik orta, MAX - maksimum dəyər, MIN - minimum qiymət kimi funksiyalar məcmu funksiyalar adlanır. Bir çox dəyərləri qəbul edirlər və emal etdikdən sonra tək bir dəyər qaytarırlar. SUM məcmu funksiyasından istifadə edərək məbləğ və qiymət sahələrinin məhsulunun cəminin hesablanmasına bir nümunə:

Cəmi_məblək kimi CƏMİ(məbləğ*qiymət) SEÇİN


m_gəlirdən;

Sorğu Q019. Bir neçə ümumi funksiyadan istifadə nümunəsi:

Məbləği (məbləği) Məbləğ_Məbləği, AVG(məbləği) Məbləğ_AVG AS SEÇİN,


MAX(məbləğ) AS Məbləğ_Maks, Min(məbləğ) AS Məbləğ_Min,
Say(*) AS Ümumi_Sayı
m_gəlirdən;

Q020 sorğusu. Bu nümunədə 2011-ci ilin iyun ayında kapitallaşdırılan 1 kodu olan bütün malların məbləği hesablanır:

Cəmi(məbləğ*qiymət) gəlir_cəmi kimi SEÇİN


m_gəlirdən
HARADA product_id=1 VƏ dt #6/1/2011# VƏ #6/30/2011# ARASINDA;.

Sorğu Q021. Aşağıdakı SQL sorğusu 4 və ya 6 kodu olan əşyaların satış məbləğini hesablayır:

Nəticə_cəmi kimi Cəmi (məbləğ*qiymət) SEÇİN


m_nəticədən
HARADA product_id=4 OR product_id=6;

Sorğu Q022. 12 iyun 2011-ci il tarixində 4 və ya 6 kodlu malların nə qədər satıldığı hesablanır:

Nəticə_cəmi kimi Cəmi (məbləğ*qiymət) SEÇİN


m_nəticədən
HARADA (məhsul_id=4 OR məhsul_id=6) VƏ dt=#6/12/2011#;

Sorğu Q023. Vəzifə budur. “Çörək məmulatları” kateqoriyasında kapitallaşdırılmış malların ümumi məbləğini hesablayın.

Bu problemi həll etmək üçün üç cədvəllə işləməlisiniz: m_income, m_product və m_category, çünki:


- kapitallaşdırılmış malların miqdarı və qiyməti m_gəlir cədvəlində saxlanılır;
- hər bir məhsulun kateqoriya kodu m_product cədvəlində saxlanılır;
- başlıq kateqoriyasının adı m_kateqoriya cədvəlində saxlanılır.

Bu problemi həll etmək üçün aşağıdakı alqoritmdən istifadə edəcəyik:


- alt sorğudan istifadə edərək m_kateqoriya cədvəlindən "Çörək məmulatları" kateqoriya kodunun müəyyən edilməsi;
- alınan hər bir məhsulun kateqoriyasını müəyyən etmək üçün m_income və m_product cədvəllərinin əlaqələndirilməsi;
- kateqoriya kodu yuxarıdakı alt sorğu ilə müəyyən edilmiş koda bərabər olan mallar üçün mədaxil məbləğinin (= kəmiyyət*qiymət) hesablanması.
SEÇİN
m_product-DAN DAXİLİ QOŞULMA KİMİ m_gəlir AS b ON a.id=b.product_id
WHERE ctgry_id = (SEÇ id FROM m_category WHERE title="Çörək məhsulları"); !}

Sorğu Q024. Aşağıdakı alqoritmdən istifadə edərək "Çörək məhsulları" kateqoriyasındakı kapitallaşdırılmış malların ümumi miqdarının hesablanması problemini həll edəcəyik:
- m_income cədvəlindəki hər bir giriş üçün, onun məhsul_idinin dəyərindən asılı olaraq, m_kateqoriya cədvəlindən kateqoriyanın adı ilə uyğunlaşdırılır;
- “Çörək məmulatları” kateqoriyası olan qeydləri seçin;
- qəbz məbləğini hesablayın = kəmiyyət*qiymət.

FROM (m_məhsul DAXİLİ QOŞULMA KİMİ m_gəlir AS b ON a.id=b.product_id)

WHERE c.title="Çörək məmulatları"; !}

Sorğu Q025. Bu nümunə nə qədər malın istehlak edildiyini hesablayır:

COUNT(məhsul_id) məhsul_cnt kimi SEÇİN


FROM (SEÇİN DISTINCT product_id FROM m_outcome) AS t;

Sorğu Q026. Qeydləri qruplaşdırmaq üçün GROUP BY ifadəsi istifadə olunur. Tipik olaraq, qeydlər bir və ya bir neçə sahənin dəyərinə görə qruplaşdırılır və hər qrupa bəzi ümumi əməliyyatlar tətbiq edilir. Məsələn, aşağıdakı sorğu malların satışı haqqında hesabat yaradır. Yəni, malların adları və satıldıqları məbləğdən ibarət bir cədvəl yaradılır:

Başlıq SEÇİN, SUM(məbləğ*qiymət) nəticə_cəmi AS


FROM m_product DAXİLİ QOŞULMA KİMİ m_nəticə AS b
ON a.id=b.product_id
GROUP BY BY;

Sorğu Q027. Kateqoriya üzrə satış hesabatı. Yəni, məhsul kateqoriyalarının adlarını, bu kateqoriyaların məhsullarının satıldığı ümumi məbləği və orta satış məbləğini ehtiva edən bir cədvəl yaradılır. ROUND funksiyası orta dəyəri ən yaxın yüzliyə yuvarlaqlaşdırmaq üçün istifadə olunur (onluq ayırıcıdan sonrakı ikinci rəqəm):

SEÇİN c.başlıq, SUM(məbləğ*qiymət) nəticə_cəmi,


ROUND(AVG(məbləğ*qiymət),2) nəticə_cəm_orta
FROM (m_məhsul DAXİLİ QOŞULMA KİMİ m_nəticə AS b ON a.id=b.product_id)
INNER JOIN m_category AS c ON a.ctgry_id=c.id
c.başlığa görə qruplaşdırmaq;

Sorğu Q028. Onun daxilolmalarının ümumi və orta sayı hər bir məhsul üçün hesablanır və ümumi mədaxilləri ən azı 500 olan məhsullar haqqında məlumatları göstərir:

məhsul_id SEÇİN, SUM(məbləğ) məbləği_sum,


Dəyirmi(Ort(məbləğ),2) AS məbləğ_orta
m_gəlirdən
məhsul_idinə görə qruplaşdırın
Məbləğin (məbləğin) OLMASI>=500;

Sorğu Q029. Bu sorğu hər bir məhsul üçün 2011-ci ilin ikinci rübündə onun daxilolmalarının məbləğini və orta hesablamasını hesablayır. Məhsul qəbzinin ümumi məbləği ən azı 1000-dirsə, bu məhsul haqqında məlumat göstərilir:

Başlıq SEÇİN, SUM(məbləğ*qiymət) gəlir_cəmi AS


FROM m_come a DAXİLİ QOŞULUN m_product b ON a.product_id=b.id
HARADA dt #4/1/2011# VƏ #6/30/2011# ARASINDA
Başlığa görə qruplaşdırın
MƏBLƏĞİN OLMASI(məbləğ*qiymət)>=1000;

Sorğu Q030. Bəzi hallarda, bəzi cədvəlin hər bir qeydini digər cədvəlin hər bir qeydinə uyğunlaşdırmaq lazımdır; buna dekart məhsulu deyilir. Belə bir əlaqə nəticəsində yaranan cədvəl Dekart cədvəli adlanır. Məsələn, bəzi A cədvəlində 100, B cədvəlində 15 qeyd varsa, onda onların Dekart cədvəli 100*15=150 qeyddən ibarət olacaq. Aşağıdakı sorğu m_income cədvəlindəki hər bir qeydi m_outcome cədvəlindəki hər bir qeydlə birləşdirir:
m_gəlirdən, m_nəticədən;

Sorğu Q031. Qeydləri iki sahə üzrə qruplaşdırmaq nümunəsi. Aşağıdakı SQL sorğusu hər bir təchizatçı üçün ondan alınan malların miqdarını və miqdarını hesablayır:


SUM(məbləğ*qiymət) gəlir_cəmi kimi

Sorğu Q032. Qeydləri iki sahə üzrə qruplaşdırmaq nümunəsi. Aşağıdakı sorğu hər bir təchizatçı üçün bizim tərəfimizdən satılan məhsullarının miqdarını və miqdarını hesablayır:

təchizatçı_id, məhsul_id, SUM(məbləğ) məbləği_sum,




təchizatçı_id, məhsul_idinə görə Qrup;

Sorğu Q033. Bu nümunədə yuxarıdakı iki sorğu (q031 və q032) alt sorğular kimi istifadə olunur. LEFT JOIN metodundan istifadə edərək bu sorğuların nəticələri bir hesabatda birləşdirilir. Aşağıdakı sorğuda hər bir təchizatçı üçün alınan və satılan məhsulların miqdarı və miqdarı haqqında hesabat göstərilir. Nəzərə alın ki, əgər bəzi məhsullar artıq alınıbsa, lakin hələ satılmayıbsa, bu giriş üçün nəticə_cəmi xanası boş olacaq. ki, bu sorğu nisbətən mürəkkəb sorğuların alt sorğu kimi istifadə edilməsinə yalnız bir nümunədir. Böyük miqdarda məlumatla bu SQL sorğusunun performansı şübhəlidir:

SEÇİN *
FROM



SUM(məbləğ*qiymət) gəlir_cəmi kimi

ON a.product_id=b.id QROUP BY BY təchizatçı_id, product_id) AS a
SOL QOŞULUN
(təchizatçı_id, məhsul_id, SUM(məbləğ) məbləği_sum,
SUM(məbləğ*qiymət) nəticə_cəmi
m_nəticədən DAXİLİ QOŞULMA KİMİ m_product AS b
ON a.product_id=b.id GROUP BY BY təchizatçı_id, product_id) AS b
ON (a.product_id=b.product_id) VƏ (a.supplier_id=b.supplier_id);

Sorğu Q034. Bu nümunədə yuxarıdakı iki sorğu (q031 və q032) alt sorğular kimi istifadə olunur. RIGTH JOIN metodundan istifadə edərək bu sorğuların nəticələri bir hesabatda birləşdirilir. Aşağıdakı sorğuda hər bir müştərinin istifadə etdiyi ödəniş sistemlərinə uyğun olaraq ödənişlərinin məbləği və etdiyi investisiyaların məbləği haqqında hesabat göstərilir. Aşağıdakı sorğuda hər bir təchizatçı üçün alınan və satılan məhsulların miqdarı və miqdarı haqqında hesabat göstərilir. Nəzərə alın ki, əgər hansısa məhsul artıq satılıbsa, lakin hələ gəlib çatmayıbsa, bu giriş üçün gəlir_məbləği xanası boş olacaq. Belə boş hüceyrələrin olması satış uçotunda səhvin göstəricisidir, çünki satışdan əvvəl müvafiq məhsulun gəlməsi lazımdır:

SEÇİN *
FROM


(təchizatçı_id, məhsul_id, SUM(məbləğ) məbləği_sum,
SUM(məbləğ*qiymət) gəlir_cəmi kimi
m_gəlirDƏN DAXİLİ QOŞULMA KİMİ m_product AS b ON a.product_id=b.id
təchizatçı_id, məhsul_id) GROUP BY a
SAĞ QOŞULUN
(təchizatçı_id, məhsul_id, SUM(məbləğ) məbləği_sum,
SUM(məbləğ*qiymət) nəticə_cəmi
m_nəticədən DAXİLİ QOŞULMA KİMİ m_product AS b ON a.product_id=b.id
təchizatçı_id, məhsul_id) BY BY QRUPLA b
ON (a.təchizatçı_id=b.təchizatçı_id) VƏ (a.məhsul_id=b.məhsul_id);

Sorğu Q035. Məhsul üzrə gəlir və xərclərin məbləğini göstərən hesabat göstərilir. Bunun üçün m_gəlir və m_nəticə cədvəllərinə uyğun olaraq məhsulların siyahısı yaradılır, sonra bu siyahıdan hər bir məhsul üçün m_gəlir cədvəlinə uyğun gəlirlərinin məbləği və m_nəticə cədvəlinə uyğun olaraq xərclərinin məbləği hesablanır:

məhsul_id, gəlir_məbləği AS SUM(məbləğlə) SEÇİN,


SUM(xarici_məbləğ) nəticə_məbləği AS
FROM
(məhsul identifikatorunu SEÇİN, məbləğdə AS, məbləğdə 0 AS xaric
m_gəlirdən
BÜTÜN BİRLİK
SEÇİN məhsul_id, 0 AS məbləğində, məbləğ AS out_abcount
FROM m_nəticə) AS t
GROUP BY product_id;

Sorğu Q036. EXISTS funksiyası ona ötürülən çoxluq elementlərdən ibarətdirsə, TRUE qaytarır. EXISTS funksiyası ona ötürülən çoxluq boşdursa, yəni heç bir elementdən ibarət deyilsə, FALSE qaytarır. Aşağıdakı sorğu həm m_income, həm də m_outcome cədvəllərində olan məhsul kodlarını göstərir:

FƏRQLİ məhsul_id SEÇİN


FROM m_come AS a
MÖVCUD VAR(m_nəticədən məhsul_id SEÇİN AS b

Sorğu Q037. Həm m_income, həm də m_outcome cədvəllərində olan məhsul kodları göstərilir:

FƏRQLİ məhsul_id SEÇİN


FROM m_come AS a
WHERE product_id IN (m_nəticədən məhsul_id SEÇİN)

Sorğu Q038. m_income cədvəlində olan, lakin m_outcome cədvəlində olmayan məhsul kodları göstərilir:

FƏRQLİ məhsul_id SEÇİN


FROM m_come AS a
MÖVCUD OLMAYAN YERDƏ(m_nəticədən məhsul_id SEÇİN AS b
WHERE b.məhsul_id=a.məhsul_id);

Sorğu Q039. Maksimum satış məbləği olan məhsulların siyahısı göstərilir. Alqoritm aşağıdakı kimidir. Hər bir məhsul üçün onun satış məbləği hesablanır. Sonra bu məbləğlərin maksimumu müəyyən edilir. Sonra hər bir məhsul üçün onun satışlarının məbləği yenidən hesablanır və satış məbləği maksimuma bərabər olan malların kodu və satış məbləği göstərilir:

məhsul_id, SUM(məbləğ*qiymət) məbləği_sum kimi SEÇİN


m_nəticədən
məhsul_idinə görə qruplaşdırın
MƏMBƏ OLAN(məbləğ*qiymət) = (MAX(s_miqdar) SEÇİN
FROM (məhsulun_idinə görə m_nəticə QRUPUDAN s_məbləğ KİMİ SUM(məbləğ*qiymət) SEÇİN));

Sorğu Q040. Məntiqi ifadəni qiymətləndirmək və nəticədən (DOĞRU və ya YANLIŞ) asılı olaraq hərəkəti yerinə yetirmək üçün qorunan söz IIF (şərti operator) istifadə olunur. Aşağıdakı misalda, miqdar 500-dən az olarsa, malın çatdırılması "kiçik" sayılır. Əks halda, yəni qəbz miqdarı 500-dən çox və ya ona bərabər olarsa, çatdırılma "böyük" hesab olunur:

SELECT dt, product_id, məbləğ,


IIF(m_gəlirdən məbləğ;

SQL Sorğusu Q041. IIF operatorunun bir neçə dəfə istifadə edildiyi halda, onu SWITCH operatoru ilə əvəz etmək daha rahatdır. SWITCH operatoru (çoxlu seçim operatoru) məntiqi ifadəni qiymətləndirmək və nəticədən asılı olaraq hərəkəti yerinə yetirmək üçün istifadə olunur. Aşağıdakı misalda, partiyadakı malların miqdarı 500-dən az olarsa, təhvil verilmiş lot “kiçik” sayılır. Əks halda, yəni malın miqdarı 500-dən çox və ya ona bərabər olarsa, lot “böyük” sayılır. ":

SELECT dt, product_id, məbləğ,


SWITCH(miqdar =500,"böyük") AS işarəsi
m_gəlirdən;

Sorğu Q042. Növbəti sorğuda qəbul edilmiş partiyada malların sayı 300-dən azdırsa, partiya “kiçik” sayılır. Əks halda, yəni şərt məbləği SELECT dt, product_id, məbləğ,
IIF(məbləğ IIF(m_gəlirdən məbləğ;

SQL sorğusu Q043. Növbəti sorğuda qəbul edilmiş partiyada malların sayı 300-dən azdırsa, partiya “kiçik” sayılır. Əks halda, yəni şərt məbləği SELECT dt, product_id, məbləğ,
SWITCH(məbləğin məbləği>=1000, "böyük") AS işarəsi
m_gəlirdən;

SQL sorğusu Q044. Aşağıdakı sorğuda satışlar üç qrupa bölünür: kiçik (150-yə qədər), orta (150-dən 300-ə qədər), böyük (300 və daha çox). Sonra hər qrup üçün ümumi məbləğ hesablanır:

Kateqoriya SEÇİN, SUM(nəticə_cəmi) Ctgry_Total


FROM (məbləği*nəticə_cəmi kimi qiymət seçin,
IIf(məbləğ*qiymət IIf(məbləğ*qiymət m_nəticədən) AS t
Kateqoriyaya görə Qrup;

SQL sorğusu Q045. DateAdd funksiyası verilmiş tarixə günlər, aylar və ya illər əlavə etmək və yeni tarix əldə etmək üçün istifadə olunur. Növbəti sorğu:
1) dt sahəsindən tarixə 30 gün əlavə edir və dt_plus_30d sahəsində yeni tarixi göstərir;
2) dt sahəsindən tarixə 1 ay əlavə edir və dt_plus_1m sahəsində yeni tarixi göstərir:

SEÇİN dt, dateadd("d",30,dt) AS dt_plus_30d, dateadd("m",1,dt) AS dt_plus_1m


m_gəlirdən;

SQL sorğusu Q046. DateDiff funksiyası iki tarix arasındakı fərqi müxtəlif vahidlərdə (günlər, aylar və ya illər) hesablamaq üçün nəzərdə tutulmuşdur. Aşağıdakı sorğu dt sahəsindəki tarix ilə cari tarix arasındakı fərqi günlər, aylar və illərlə hesablayır:

SEÇİN dt, DateDiff("d",dt,Tarix()) AS son_gün,


DateDiff("m",dt,Date()) AS son_aylar,
DateDiff("yyyy",dt,Tarix()) AS son_illər
m_gəlirdən;

SQL sorğusu Q047. DateDiff funksiyasından istifadə etməklə malın alındığı tarixdən (cədvəl m_gəlir) cari tarixə qədər olan günlərin sayı hesablanır və istifadə müddəti müqayisə edilir (cədvəl m_product):


DateDiff("d",dt,Date()) AS son_günlər
m_gəlirDƏN DAXİLİ QOŞULMA KİMİ m_product AS b
ON a.product_id=b.id;

SQL sorğusu Q048. Malların qəbul edildiyi tarixdən cari tarixə qədər olan günlərin sayı hesablanır, sonra bu miqdarın istifadə müddətini keçib-keçməməsi yoxlanılır:

SELECT a.id, product_id, dt, lifedays,


DateDiff("d",dt,Date()) AS son_günlər, IIf(son_günlər>həyat günləri,"Bəli","Xeyr") AS date_expire
m_gəlirdən a DAXİLİ QOŞUL m_məhsulu b
ON a.product_id=b.id;

SQL Sorğusu Q049. Malların qəbul edildiyi tarixdən cari tarixə qədər olan ayların sayı hesablanır. ay_son1 sütunu ayların mütləq sayını, month_last2 sütunu tam ayların sayını hesablayır:

dt, DateDiff("m",dt,Tarix()) AS ay_son1, SEÇİN


DateDiff("m",dt,Tarix())-iif(gün(dt)>gün(tarix()),1,0) AS ay_son2
m_gəlirdən;

SQL Query Q050. 2011-ci il üçün alınmış malların miqdarı və miqdarı haqqında rüblük hesabat göstərilir:

SEÇİM kvartal, SUM(nəticə_cəmi) AS Ümumi


FROM (SEÇİN məbləğ*qiymət AS nəticə_cəm, ay(dt) AS m,
KÖVÇƏ(m =10.4) AS kvartal
m_gəlirdən HARADA il(dt)=2011) AS t
Rübə görə Qrup;

Sorğu Q051. Aşağıdakı sorğu istifadəçilərin alınan malların miqdarından çox miqdarda malların istehlakı haqqında məlumatı sistemə daxil edə bilib-bilmədiyini öyrənməyə kömək edir:

məhsul_id SEÇİN, SUM(cəmdə) gəlir_cəmi AS, SUM(xərc_cəm) nəticə_cəmi AS


FROM (məhsul_id-i SEÇİN, məbləğ*qiymət daxildə, 0 xaric kimi
m_gəlirindən
BÜTÜN BİRLİK
məhsul_id-sini SEÇİN, cəmi kimi 0, cəmi kimi məbləğ*qiymət
m_nəticədən) AS t
məhsul_idinə görə qruplaşdırın
CƏMİ VAR (cəmdə)
Sorğu Q052. Sorğu ilə qaytarılan sətirlərin nömrələnməsi müxtəlif üsullarla həyata keçirilir. Məsələn, siz MS Access-in özündən istifadə etməklə MS Access-də hazırlanmış hesabatın sətirlərini yenidən nömrələyə bilərsiniz. Siz həmçinin proqramlaşdırma dillərindən, məsələn, VBA və ya PHP-dən istifadə edərək yenidən nömrələyə bilərsiniz. Ancaq bəzən bunu SQL sorğusunun özündə etmək lazımdır. Beləliklə, aşağıdakı sorğu m_income cədvəlinin sətirlərini ID sahəsinin dəyərlərinin artan sırasına uyğun olaraq nömrələyəcək:

COUNT(*) N, b.id, b.məhsul_id, b.miqdar, b.qiymət kimi SEÇİN


FROM m_income a DAXİLİ QOŞUL m_gəlir b ON a.id QRUP BY b.id, b.məhsul_id, b.miqdar, b.qiymət;

Sorğu Q053. Satış məbləğinə görə məhsullar arasında ilk beşliyə daxil olan məhsullar nümayiş etdirilir. İlk beş qeyd TOP təlimatından istifadə edərək çap olunur:

TOP 5, məhsul_id, cəm(məbləğ*qiymət) cəm kimi SEÇİN


m_nəticədən
məhsul_idinə görə qruplaşdırın
məbləğə görə SİFARİŞ(məbləğ*qiymət) DESC;

Sorğu Q054. Satış məbləğinə görə məhsullar arasında ilk beş məhsul göstərilir və nəticədə sıralar nömrələnir:

COUNT(*) N, b.məhsul_id, b.summa kimi SEÇİN


FROM


FROM m_outcome GROUP BY BY product_id) AS a
DAXİLİ QOŞULUN
(məhsul identifikatorunu seçin, cəmi(məbləğ*qiymət) cəmi,
summa*10000000+məhsul_id AS id
FROM m_outcome QRUP BY product_id) AS b
ON a.id>=b.id
QRUPLA B.məhsul_id, b.summa
COUNT (*) SAYIB (*) SİPARİŞİNİN OLMASI;

Sorğu Q055. Aşağıdakı SQL sorğusu MS Access SQL-də COS, SIN, TAN, SQRT, ^ və ABS riyazi funksiyalarının istifadəsini göstərir:

SEÇ (m_income-dən say(*) seçin) N kimi, 3.1415926 pi, k,


2*pi*(k-1)/N x, COS(x) COS_, SIN(x) SIN_, TAN(x) TAN_,
SQR(x) SQRT_ kimi, x^3 "x^3", ABS(x) ABS_ kimi
FROM (SAYI(*) K AS SEÇİN
m_gəlirDƏN DAXİLİ QOŞULMA KİMİ m_income AS b ON a.idGROUP BY BY) t;

SQL sorğusu. MS Access-də nümunələr. YENİLƏNİB: 1-10

Sorğu U001. Aşağıdakı SQL dəyişiklik sorğusu m_income cədvəlində 3 kodu olan malların qiymətlərini 10% artırır:

YENİLƏNİB m_gəlir SET qiyməti = qiymət*1.1


HARADA məhsul_id=3;

U002 sorğusu. Aşağıdakı SQL yeniləmə sorğusu m_income cədvəlindəki bütün məhsulların kəmiyyətini adları “Neft” sözü ilə başlayan 22 vahid artırır:

YENİLƏNİB m_gəlir SET məbləği = məbləğ+22


WHERE product_id IN (m_product FROM identifikatoru "Neft*" KİMİ başlığı SEÇİN HARADA);

U003 sorğusu. m_outcome cədvəlində dəyişiklik üçün aşağıdakı SQL sorğusu Sladkoe MMC tərəfindən istehsal olunan bütün malların qiymətlərini 2 faiz azaldır:

YENİLƏNİB m_nəticə SET qiyməti = qiymət*0.98


məhsul_id HARADA
(m_product-dan a.id SEÇİN və İNNER JOIN m_supplier b
ON a.supplier_id=b.id WHERE b.title="LLC)"Сладкое"");. !}

1 nömrəli laboratoriya işi

SQL: DATA EXTRACT - əmrSEÇİN

İşin məqsədi:

  • SQL ifadələri ilə tanış olmaq;
  • SELECT əmrindən istifadə edərək Access-də sadə SQL sorğularının yaradılmasını öyrənmək;

· IN, BETWEEN, LIKE, IS NULL operatorlarının istifadəsi.

Məşq edin№1. SQL rejimində TƏLƏBƏLƏR cədvəlindən AD və SOYAD sahələrinin bütün dəyərlərini seçmək üçün sorğu yaradın.

ADI, SOYADI SEÇİN

TƏLƏBƏLƏRDƏN;

Məşq edin№2 . SQL rejimində TƏLƏBƏLƏR cədvəlinin bütün sütunlarını seçmək üçün sorğu yaradın.

SEÇİN *

TƏLƏBƏLƏRDƏN;


Tapşırıq №3. SQL rejimində tələbələrin yaşadığı şəhərlərin adlarını seçmək üçün sorğu yaradın.

FƏRQLİ ŞƏHƏR SEÇİN

[ŞƏXSİ MƏLUMAT]DAN;

Tapşırıq № 4. SQL rejimində İvanov soyadlı bütün tələbələrin adlarını götürən seçim sorğusu yaradın, bu barədə məlumat TƏLƏBƏLƏR cədvəlində var.

SOYADINI, ADINI SEÇİN

TƏLƏBƏLƏRDƏN

SOYADI HARADA="İvanov";

Tapşırıq № 5. Büdcə təhsil forması üzrə UIT-22 qrupunda təhsil alan tələbələrin ad və soyadlarını əldə etmək üçün SQL rejimində seçim sorğusu yaradın.

SOYADINI, ADINI SEÇİN

TƏLƏBƏLƏRDƏN

WHERE GROUP="UIT-22" AND BUDGET=true;

Tapşırıq № 6. SQL rejimində sorğu yaradın. İMTAHA cədvəlindən nümunə üçün yalnız 4 və 5 qiymət alan tələbələr haqqında məlumat.

SEÇİN *

NƏDƏN [DƏYİŞMƏKİMTAHALAR]

HARADASİNİFIN(4,5);

Tapşırıq № 7. IOSU fənnindən imtahan qiyməti 3 olan tələbələr haqqında məlumat seçmək üçün zanpoc və SQL rejimi yaradın.

SEÇİN *

NƏDƏN [DƏYİŞMƏKİMTAHALAR]

HARADAƏŞYA=" IOSU"VəSİNİFIn deyil (4,5);

Tapşırıq № 8. Saatları 100 ilə 130 arasında olan elementlər üçün qeydləri seçmək üçün SQL rejimində sorğu yaradın.

SEÇİN *

FROMƏŞYALAR

HARADABAXIN100-130 ARASINDA;


Tapşırıq № 9. TƏLƏBƏLƏR cədvəlindən soyadları, məsələn, “C” hərfi ilə başlayan tələbələr haqqında məlumat seçmək üçün SQL rejimində sorğu yaradın.

SEÇİN *

FROMTƏLƏBƏLƏR

HARADASOYADIKİMİ"İLƏ*";

Nəticə: Laboratoriya işi zamanı biz SQL təlimatları ilə tanış olduq, IN, BETWEEN, LIKE operatorlarından istifadə etməklə SELECT əmrindən istifadə etməklə Access-də sadə SQL sorğularının yaradılmasını öyrəndik.

Nümunə SQL sorğuları MS Access-də SQL sorğularının yazılmasını öyrənmək və təcrübə etmək üçün istifadə edilə bilər.

Bir SQL sorğusu digərinə daxil edilə bilər. Alt sorğu sorğu daxilindəki sorğudan başqa bir şey deyil. Tipik olaraq, alt sorğu WHERE bəndində istifadə olunur. Ancaq alt sorğulardan istifadə etməyin başqa yolları da var.

Sorğu Q011. m_product cədvəlindəki məhsullar haqqında məlumat göstərilir, kodları da m_income cədvəlindədir:

SEÇİN *
m_məhsulundan
WHERE id IN (m_income FROM product_id SEÇİN);

Sorğu Q012. m_product cədvəlindən kodları m_outcome cədvəlində olmayan məhsulların siyahısı göstərilir:

SEÇİN *
m_məhsulundan
İD OLMADIĞINDA (m_nəticədən məhsul_id SEÇİN);

Sorğu Q013. Bu SQL sorğusu m_income cədvəlində olan, lakin m_outcome cədvəlində olmayan məhsul kodlarının və adlarının unikal siyahısını göstərir:

SEÇİN DISTINCT product_id, başlıq
FROM m_income DAXİLİ QOŞULUN m_product
ON m_income.product_id=m_product.id
WHERE product_id IN YOX (m_nəticədən məhsul_id SEÇİN);

Sorğu Q014. m_kateqoriya cədvəlində adları M hərfi ilə başlayan kateqoriyaların unikal siyahısı göstərilir:

DISTINCT başlığı SEÇİN
m_məhsulundan
"M*" kimi başlıq;

Sorğu Q015. Sorğuda sahələr üzrə hesab əməliyyatlarının yerinə yetirilməsi və sorğuda sahələrin adının dəyişdirilməsi nümunəsi (ləqəb). Bu nümunə, mənfəətin satışın 7 faizi olduğunu fərz etsək, hər bir xərc maddəsi üçün xərc = kəmiyyət*qiymət və mənfəəti hesablayır:


məbləğ*qiymət/100*7 AS mənfəət
FROM m_outcome;

Sorğu Q016. Arifmetik əməliyyatları təhlil edərək və sadələşdirərək, sorğunun icra sürətini artıra bilərsiniz:

Dt, məhsul_id, məbləğ, qiymət, məbləğ*qiymət AS nəticə_cəmi,
nəticə_cəmi*0,07 AS mənfəət
FROM m_outcome;

Q017 sorğusu.Çox cədvəllərdən verilənləri birləşdirmək üçün INNER JOIN ifadəsindən istifadə edə bilərsiniz. Aşağıdakı misalda, ctgry_id dəyərindən asılı olaraq, m_income cədvəlindəki hər bir giriş məhsulun aid olduğu m_kateqoriya cədvəlindəki kateqoriyanın adı ilə uyğunlaşdırılır:

c.title, b.title, dt, məbləğ, qiymət, məbləğ*qiymət gəlir_summa kimi SEÇİN
FROM (m_gəlir DAXİLİ QOŞULMA KİMİ m_product AS b ON a.product_id=b.id)
İNNER JOIN m_category AS c ON b.ctgry_id=c.id
SİFARİŞ C.title, b.title;

Sorğu Q018. SUM - cəm, COUNT - kəmiyyət, AVG - arifmetik orta, MAX - maksimum dəyər, MIN - minimum qiymət kimi funksiyalar məcmu funksiyalar adlanır. Bir çox dəyərləri qəbul edirlər və emal etdikdən sonra tək bir dəyər qaytarırlar. SUM məcmu funksiyasından istifadə etməklə məbləğ və qiymət sahələrinin hasilinin cəminin hesablanması nümunəsi.