Məzmuna keç
Educora
İrəli10-cu sinif24 dəq39 / 59

Verilənlər bazasında sorğular, axtarış və çeşidləmə

Sadə və mürəkkəb şərtlər (=, <>, <, >, <=, >=, AND, OR, NOT), * və ? maskaları, sorğunun çoxluqlarla addım-addım hesablanması, yazıların sayılması, çeşidləmədən sonra yazının yerinin tapılması — DİM-in yazılışı ilə.

Özünü yoxla
Bu dərsdə öyrənəcəksən
  • Sadə şərtləri müqayisə işarələri ilə yazmaq və hər şərti ödəyən yazıları tapmaq
  • AND, OR, NOT və mötərizəli mürəkkəb sorğunu çoxluqlarla addım-addım hesablamaq
  • * və ? maskalarını mətn sahələrində tətbiq etmək
  • Sorğudan və çeşidləmədən sonra yazının yeni yerini müəyyən etmək

Onlayn mağazada «qiyməti 50 manatdan az» və «reytinqi 4-dən yuxarı» süzgəclərini seçirsən — və minlərlə məhsuldan cəmi bir neçəsi qalır. Bu, sorğudur: VBİS hər yazını şərtlə yoxlayır və yalnız uyğun gələnləri göstərir.

Qəbul imtahanında hər variantda sorğuya aid bir tapşırıq olur: sorğuya neçə yazının cavab verdiyini, hansı nömrəli yazıların seçildiyini və ya çeşidləmədən sonra yazının yerini necə dəyişdiyini tapmaq lazımdır. Cədvəllərin quruluşu «Verilənlər bazası: modellər, VBİS və əlaqəli cədvəllər» dərsində izah olunub.

Sorğu və sadə şərt

Tərif
Sorğu

VBİS-in obyekti: bazadan şərtə uyğun yazıları seçən (axtaran), lazım olduqda onları çeşidləyən və nəticəni yeni cədvəl kimi göstərən əmr. Sorğu verilənləri dəyişmir, yalnız seçir.

Tərif
Sadə şərt

«sahə — müqayisə işarəsi — qiymət» şəklində yazılır: Riyaziyyat > 18, Status = «gecikir». Mətn qiymətləri dırnaqda yazılır və hərfbəhərf müqayisə olunur.

İşarəMənasıNümunə
=bərabərdirSinif = 10
<>bərabər deyilPlatforma <> 2
<kiçikdirYaş < 16
>böyükdürBal > 90
<=kiçik və ya bərabərdirQiymət <= 50
>=böyük və ya bərabərdirTarix >= 70
№AdRiyaziyyatFizikaİnformatika
1Aysel181225
2Murad252114
3Leyla121922
4Elvin202517
5Nigar91620
6Rəşad231124
7Günay152219
Cədvəl «Olimpiada»: şagirdlərin üç fəndən balları. Bu dərsdəki 1–3-cü nümunələr bu cədvələ aiddir.
1-ci nümunə. Sadə şərtlər — yazıların çoxluğu

«Olimpiada» cədvəlində hansı nömrəli yazılar şərtə cavab verir?
1) Riyaziyyat > 18 2) Fizika <= 16 3) İnformatika <> 22 4) Riyaziyyat >= 18

Həllini göstər
Hər yazını yuxarıdan aşağı yoxlayırıq və nömrələri çoxluq kimi yazırıq.
1) 25, 20, 23 → {2, 4, 6}. 18 > 18 yalandır, ona görə 1 yoxdur.
2) 12, 16, 11 → {1, 5, 6}. 16 <= 16 doğrudur.
3) 22-dən fərqli olanların hamısı → {1, 2, 4, 5, 6, 7}.
4) Sərhəd daxildir: 18, 25, 20, 23 → {1, 2, 4, 6}.

Mürəkkəb şərtlər: AND, OR, NOT

Sadə şərtlər məntiq əməlləri ilə birləşir — «Məntiq əməliyyatları və məntiq elementləri» dərsindəki VƏ, VƏ YA, DEYİL. DİM tapşırıqlarında onlar ingiliscə yazılır: AND, OR, NOT. Hər sadə şərtə uyğun yazıların çoxluğunu tapsaq, mürəkkəb şərt çoxluqlar üzərində əməllərə çevrilir. M(A) — A şərtinə cavab verən yazıların nömrələri çoxluğudur.

M(A AND B) = M(A) ∩ M(B)
burada:
  • M(A)A şərtinə cavab verən yazıların nömrələri
  • ∩kəsişmə: hər iki çoxluqda olanlar

AND — hər iki şərt ödənməlidir: ortaq nömrələr qalır.

M(A OR B) = M(A) ∪ M(B)
burada:
  • ∪birləşmə: ən azı bir çoxluqda olanlar

OR — ən azı bir şərt ödənməlidir: nömrələr birləşdirilir, təkrar yazılmır.

M(NOT A) = U \ M(A)
burada:
  • Ucədvəlin bütün yazıları
  • \fərq: U-dan M(A)-nı çıxırıq

NOT — şərt ödənməyən yazılar qalır.

Nümunələr «Olimpiada» cədvəlinə görə: (Riyaziyyat > 18) AND (İnformatika >= 20) → {2, 4, 6} ∩ {1, 3, 5, 6} = {6}; (Riyaziyyat > 18) OR (Fizika > 20) → {2, 4, 6} ∪ {2, 4, 7} = {2, 4, 6, 7}; NOT (Fizika > 15) → {1, 6}. Əməllərin sırası: əvvəl mötərizələr (içəridən çölə), sonra NOT, sonra AND, ən sonda OR. DİM sorğularında mötərizələr adətən qoyulur: ən içəridəki mötərizədən başla, mötərizə olmayan yerdə isə NOT → AND → OR sırasına əməl et. Eyni məntiq internetdə axtarışda da işləyir — bax: «İnternetdə axtarış: axtarış sistemləri və sorğular».

  1. 1
    Sadə şərtləri ayır

    Sorğudakı hər sadə şərt üçün yazıların çoxluğunu yaz.

  2. 2
    NOT-u tətbiq et

    NOT olan şərtdə qalan yazıları götür — və ya işarəni əksinə çevir.

  3. 3
    Mötərizələri içəridən aç

    AND → kəsişmə, OR → birləşmə; hər ara nəticəni ayrıca yaz.

  4. 4
    Cavabı götür

    Son çoxluq — seçilən yazıların nömrələri, onun elementlərinin sayı — yazıların sayıdır.

2-ci nümunə. DİM tipli tapşırıq: hansı yazılar?

«Olimpiada» cədvəlinə
(((Riyaziyyat < 20) AND NOT (Fizika > 18)) OR ((İnformatika > 21) AND (Fizika > 15)))
sorğusu tətbiq edilərsə, hansı nömrəli yazılar seçilər?
A) 1, 5 B) 1, 3, 5 C) 3, 5, 6 D) 1, 3, 5, 6 E) 3

Həllini göstər
1) Riyaziyyat < 20 → {1, 3, 5, 7}; NOT (Fizika > 18) = Fizika <= 18 → {1, 5, 6}. AND → {1, 5}.
2) İnformatika > 21 → {1, 3, 6}; Fizika > 15 → {2, 3, 4, 5, 7}. AND → {3}.
3) OR: {1, 5} ∪ {3} = {1, 3, 5}.
Doğru cavab: B) 1, 3, 5.
NOT (A AND B) = (NOT A) OR (NOT B) · NOT (A OR B) = (NOT A) AND (NOT B)
burada:
  • A, Bistənilən şərtlər

De Morqan qanunları: NOT mötərizəyə daxil olanda AND ↔ OR yer dəyişir.

3-cü nümunə. NOT xaricdə: neçə yazı?

«Olimpiada» cədvəlində neçə yazı NOT (NOT (Riyaziyyat > 15) AND (İnformatika < 20)) OR NOT (Fizika > 20) sorğusuna cavab verir?

Həllini göstər
1-ci yol (çoxluqlarla): NOT (Riyaziyyat > 15) → {3, 5, 7}; İnformatika < 20 → {2, 4, 7}; AND → {7}; xarici NOT → {1, 2, 3, 4, 5, 6}. NOT (Fizika > 20) → {1, 3, 5, 6}. OR → {1, 2, 3, 4, 5, 6}.
2-ci yol (De Morqan): NOT (NOT A AND B) = A OR NOT B, yəni (Riyaziyyat > 15) OR (İnformatika >= 20) → {1, 2, 4, 6} ∪ {1, 3, 5, 6} = {1, 2, 3, 4, 5, 6} — nəticə eynidir.
Cavab: 6 yazı.
NOT-u müqayisə işarəsi ilə əvəz et
  1. 1.NOT (Bal > 45) ⇔ Bal 45
  2. 2.NOT (Yaş >= 16) ⇔ Yaş 16
  3. 3.NOT (Şəhər = «Bakı») ⇔ Şəhər «Bakı»
  4. 4.NOT (Qiymət <= 20) ⇔ Qiymət 20

Maskalar: * və ?

Mətn sahəsində bəzən dəqiq qiyməti yox, maskanı — nümunəni axtarırıq. Maskada iki xüsusi işarə var: * — istənilən sayda (sıfır da ola bilər) istənilən simvol, ? — düz bir istənilən simvol. DİM-in yazılışında maska bərabərlik işarəsindən sonra dırnaqda yazılır: İstiqamət = «*n».

MaskaMənasıUyğundurUyğun deyil
*nn ilə bitirRiverton, MapletonSandford, Oakdale
M*M ilə başlayırMilltown, MapletonRiverton
*ll*içində ll varMilltown, HillsideLakeside
?a*ikinci simvolu aOakdale, LakesideMilltown
1??1 ilə başlayan 3 simvol101, 1501150, 205
№ReysİstiqamətPlatformaStatus
1101Riverton2vaxtında
2205Oakdale1gecikir
3310Milltown3vaxtında
4118Mapleton2gecikir
5222Lakeside1vaxtında
6407Sandford3gecikir
7150Hillside2vaxtında
8333Brighton1vaxtında
Cədvəl «Avtovağzal»: şəhərlərarası reyslər (şəhər adları uydurmadır).
4-cü nümunə. Maska ilə sorğu

«Avtovağzal» cədvəlinə ((Status = «gecikir» OR Platforma = 1) AND İstiqamət = «*n*») sorğusu tətbiq edilərsə, neçə yazı seçilər? Maska «*n» olsaydı, cavab necə dəyişərdi?

Həllini göstər
1) Status = «gecikir» → {2, 4, 6}; Platforma = 1 → {2, 5, 8}; OR → {2, 4, 5, 6, 8}.
2) «*n*» — adında n hərfi olanlar: Riverton, Milltown, Mapleton, Sandford, Brighton → {1, 3, 4, 6, 8}.
3) AND → {4, 6, 8} — 3 yazı.
4) «*n» — yalnız n ilə bitənlər: {1, 3, 4, 8} (Sandford çıxır). Onda {2, 4, 5, 6, 8} ∩ {1, 3, 4, 8} = {4, 8} — 2 yazı.

Çeşidləmə

Tərif
Çeşidləmə

Yazıları bir və ya bir neçə sahənin qiymətinə görə müəyyən sıraya düzmək. Artma sırası: ədədlər kiçikdən böyüyə, mətn əlifba sırası ilə (A → Z), tarixlər əvvəlkidən sonrakına. Azalma sırası — əksinə. Çeşidləmə yazıları və onların sayını dəyişmir, yalnız sırasını dəyişir.

İki sahəyə görə çeşidləmədə yazılar əvvəlcə birinci sahəyə görə düzülür; birinci sahədə qiymətləri eyni olan yazılar isə ikinci sahəyə görə sıralanır. Məsələn, Bakı, Gəncə, Lənkəran, Şəki artma sırası ilə düzülmüş şəhərlərdir. DİM-in ən çətin sorğu tapşırığı süzgəc və çeşidləməni birləşdirir:

  1. 1
    Sorğunu tətbiq et

    Seçilən yazıları əvvəlki sırası ilə yeni cədvələ yaz.

  2. 2
    Köhnə yeri qeyd et

    Lazım olan yazının bu yeni cədvəldə neçənci sətirdə olduğunu yaz: k.

  3. 3
    Çeşidlə

    Nəticə cədvəlini göstərilən sahəyə görə artma və ya azalma sırası ilə düz.

  4. 4
    Yeni yeri müqayisə et

    Yeni yer m olsun: k − m > 0 — «k − m sətir yuxarı», k − m < 0 — aşağı, k = m — dəyişməz.

№AdRiyaziyyatFizikaKimya
1Kamran728164
2Səbinə886990
3Orxan657771
4Fidan908558
5Tural706283
6Günay597476
Cədvəl «Sınaq»: 5-ci nümunə üçün.
5-ci nümunə. Süzgəc + çeşidləmə

«Sınaq» cədvəlinə ((Riyaziyyat >= 70 OR Kimya > 75) AND Fizika > 65) sorğusu tətbiq edildikdən sonra alınan cədvəl Kimya sahəsinə görə artma sırası ilə çeşidlənir. Fidan haqqındakı yazı yerini necə dəyişər?
A) 2 sətir aşağı B) 1 sətir yuxarı C) dəyişməz D) 2 sətir yuxarı E) 1 sətir aşağı

Həllini göstər
1) Kamran: 72 >= 70, 81 > 65 → var. Səbinə: 88, 69 → var. Orxan: 65 və 71 — mötərizə yalandır → yox. Fidan: 90, 85 → var. Tural: 70 >= 70, amma Fizika 62 → yox. Günay: Kimya 76 > 75, Fizika 74 → var.
2) Nəticə cədvəli: Kamran, Səbinə, Fidan, Günay — Fidan 3-cü sətirdədir (k = 3).
3) Kimyaya görə artma: Fidan 58, Kamran 64, Günay 76, Səbinə 90 — Fidan 1-ci sətirdədir (m = 1).
4) k − m = 2 > 0.
Doğru cavab: D) 2 sətir yuxarı.
6-cı nümunə. İki sahəyə görə çeşidləmə

Yazılar (ad — sinif — bal): Aysel — 9 — 85, Murad — 10 — 90, Leyla — 9 — 92, Elvin — 11 — 78, Nigar — 10 — 88, Rəşad — 9 — 70. Cədvəl əvvəlcə Sinif sahəsinə görə artma, sonra Bal sahəsinə görə azalma sırası ilə çeşidlənir. Nigar neçənci yerdə olar?

Həllini göstər
1) 9-cu sinif (balın azalması ilə): Leyla 92, Aysel 85, Rəşad 70 → 1–3-cü yerlər.
2) 10-cu sinif: Murad 90, Nigar 88 → 4–5-ci yerlər.
3) 11-ci sinif: Elvin 78 → 6-cı yer.
Cavab: Nigar 5-ci yerdədir.
Python
rows = [('Kamran', 72, 81, 64), ('Sabina', 88, 69, 90), ('Orkhan', 65, 77, 71),
        ('Fidan', 90, 85, 58), ('Tural', 70, 62, 83), ('Gunay', 59, 74, 76)]

# query: ((Math >= 70 OR Chemistry > 75) AND Physics > 65)
result = [r for r in rows if (r[1] >= 70 or r[3] > 75) and r[2] > 65]
print('After the query:', [r[0] for r in result])

# sort by Chemistry, ascending (reverse=True would give descending)
sorted_rows = sorted(result, key=lambda r: r[3])
print('After sorting: ', [r[0] for r in sorted_rows])

k = [r[0] for r in result].index('Fidan') + 1
m = [r[0] for r in sorted_rows].index('Fidan') + 1
print('Fidan:', k, '->', m, '| rows up:', k - m)
▸ Gözlənilən nəticə
After the query: ['Kamran', 'Sabina', 'Fidan', 'Gunay']
After sorting:  ['Fidan', 'Kamran', 'Gunay', 'Sabina']
Fidan: 3 -> 1 | rows up: 2
5-ci nümunə Python-da: AND, OR, NOT Python-da and, or, not kimi yazılır, <> isə != kimi. Şərti dəyiş və «İşə sal» düyməsini bas.
İnteraktiv
Simulyasiya yüklənir…
Hər yazını sorğu ilə yoxla. Günaya diqqət et: 90 > 90 yalandır.
DİM-in yazılışıSQL
(A > 5) AND NOT (B = 2)WHERE a > 5 AND NOT b = 2
Platforma <> 2platform <> 2
İstiqamət = «*n»destination LIKE '%n'
Kod = «1??»code LIKE '1__'
Kimya üzrə artma / azalma sırasıORDER BY chemistry ASC / DESC
Eyni sorğular SQL dilində: maskada * əvəzinə %, ? əvəzinə _ yazılır. Ətraflı: SQL kursunun «WHERE: sətirlərin süzülməsi», «LIKE, IN, BETWEEN və IS NULL», «ORDER BY və LIMIT: sıralama və məhdudlaşdırma» dərsləri.

Əsas fikirlər

  • Sadə şərt: sahə — işarə — qiymət; > və < sərhədi daxil etmir, >= və <= daxil edir, <> — «bərabər deyil».
  • AND → kəsişmə, OR → birləşmə, NOT → qalan yazılar; ardıcıllıq: mötərizə, NOT, AND, OR.
  • NOT-u əks işarə ilə əvəz et (NOT (x > a) ⇔ x <= a) və De Morqan qanunlarını tətbiq et.
  • Maska: * — istənilən sayda simvol (sıfır da), ? — düz bir simvol; «*n» — n ilə bitir, «*n*» — n var.
  • Süzgəc + çeşidləmə: yazının yeri sorğunun nəticə cədvəlində sayılır, sonra çeşidləmədən sonrakı yerlə müqayisə olunur.

Özünü yoxla

12 sual. Hər düzgün cavab XP qazandırır.

1 / 12
Sorğuda <> işarəsi nə deməkdir?