Hazır sql sorğuları. SQL istifadə edərək məlumatların alınması üçün sadə sorğular. Bütün sütunları seçin
Beləliklə, forum verilənlər bazasında üç cədvəl var:
· istifadəçilər (istifadəçilər);
· mövzular (mövzular);
· yazılar (mesajlar).
Onların hansı məlumatları ehtiva etdiyinə baxmaq lazımdır. SQL-də bunun üçün bir operator var SEÇİN. Onun istifadəsi üçün sintaksis aşağıdakı kimidir:
SELECT what_select FROM where_select;
"nə_seç" əvəzinə ya dəyərlərini görmək istədiyiniz sütunun adını, ya da vergüllə ayrılmış bir neçə sütunun adını və ya ulduz (*) simvolunu göstərməlisiniz, bu da cədvəlin bütün sütunlarını seçmək deməkdir. “where_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 edilmiş bütün məlumatlardır.
Tutaq ki, yalnız id_user sütununa baxmaq lazımdır (mövzular cədvəlini doldurmaq üçün istifadəçilər cədvəlində hansı id_userlərin olduğunu bilməlisiniz). Bunu etmək üçün sorğuda bu sütunun adını göstərin:
İstifadəçilərdən id_user SEÇİN;
Məsələn, istifadəçilərin adlarına və e-poçtlarına baxmaq lazımdırsa, onda vergüllə ayrılmış maraq sütunlarını sadalamalısınız:
İstifadəçilərdən ad, e-poçt SEÇİN;
Eynilə, digər cədvəllərin hansı məlumatları ehtiva etdiyini görə bilərsiniz.
Əvvəlcə hansı mövzuların olduğunu görək:
Mövzulardan * SEÇİN;
İndi cədvəldə cəmi 4 mövzu 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 baş verəcəyi sütunun adı. Sintaksis aşağıdakı kimidir:
Cədvəl_adından sütun_adı 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.
Məlumatlar indi azalan qaydada çeşidlənir.
Ç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 istifadəçi cədvəldəki bütün məlumatlara ehtiyac duymur. Məsələn, sveta istifadəçisi (id = 4) tərəfindən hansı mövzuların yaradıldığını öyrənməlisiniz. SQL-də bunun üçün açar söz var HARADA, belə bir sorğu üçün sintaksis aşağıdakı kimidir:
Cədvəl_adından sütun_adını SEÇİN HARƏ şərti;
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:
Mövzulardan * SEÇİN id_author=4;
İndi "velosipedlər" mövzusunu kimin yaratdığını öyrənməliyik:
Ə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ı. Sonra, bir neçə cədvəldən məlumatların necə seçiləcəyinə baxacağıq. Bu arada, WHERE açar sözündən istifadə etməklə 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. Nümunə: SEÇİN * FROM mövzuları HARADA id_author=4; Nəticə: ![]() |
> (daha çox) | Göstərilən dəyərdən daha böyük dəyərlər seçilir. Nümunə: SEÇİN * FROM mövzuları HARƏDƏ id_author > 2; Nəticə: ![]() |
< (меньше) | Göstərilən dəyərdən az olan dəyərlər seçilir. Nümunə: id_author olan Mövzulardan * SEÇİN< 3;
Результат:
![]() |
>= (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. Nümunə: SEÇİN * FROM mövzuları HARADA 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. Nümunə: id_author olan Mövzulardan * SEÇİN<= 3;
Результат:
![]() |
!= (bərabər deyil) | Göstərilən dəyərə bərabər olmayan dəyərlər seçilir. Nümunə: Mövzulardan SEÇİN * FROM id_author != 1; Nəticə: ![]() |
NULL DEYİL | Göstərilən sahədə dəyərləri olan sətirləri seçir. Nümunə: id_author NULL OLMADIĞI Mövzulardan * SEÇİN; Nəticə: ![]() |
NULL IS | Göstərilən sahədə dəyəri olmayan sətirləri seçir. Nümunə: id_author NULL OLDUĞU Mövzulardan * SEÇİN; Nəticə: ![]() |
ARASINDA (arada) | Göstərilənlər arasında dəyərlər seçilir. Nümunə: 1 VƏ 3 ARASINDA id_author olan mövzulardan * SEÇİN; Nəticə: ![]() |
IN (dəyər ehtiva edir) | Göstərilənlərə uyğun gələn dəyərlər seçilir. Nümunə: SEÇ * FROM mövzulardan HERƏ id_author IN (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. Nümunə: İD_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. Nümunə: mövzu_adının "led%" KİMİ OLDUĞU Mövzulardan * SEÇİN; Nəticə: ![]() |
BƏYƏNMƏYİR (uyğun deyil) | Naxışa uyğun gəlməyən dəyərlər seçilir. Nümunə: Mövzu_adı "led%" SEÇMƏYƏN Mövzulardan * SEÇİN; Nəticə: ![]() |
Mən artıq müxtəlif haqqında yazmışam SQL sorğuları, lakin daha mürəkkəb şeylər haqqında danışmaq vaxtıdır, məsələn, Bir neçə cədvəldən qeydləri seçmək üçün SQL sorğusu.
Siz və mən bir masadan seçim etdikdə hər şey çox sadə idi:
Cədvəl_adından HARADA seçim_şərtindən tələb olunan_sahələrin_adlarını SEÇİN
Hər şey çox sadə və mənasızdır, amma eyni anda bir neçə cədvəldən nümunə götürmək Bir az daha mürəkkəbləşir. Bir çətinlik sahə adlarını uyğunlaşdırmaqdır. Məsələn, hər cədvəldə bir sahə var id.
Gəlin bu sorğuya baxaq:
* Cədvəl_1, cədvəl_2 HARƏDƏ cədvəl_1.id > table_2.user_id SEÇİN
Bu cür sorğularla məşğul olmayan bir çoxları sahə adlarından əvvəl yalnız cədvəl adlarının əlavə edildiyini düşünərək hər şeyin çox sadə olduğunu düşünəcəklər. Əslində, bu, eyni sahə adları arasında ziddiyyətlərin qarşısını alır. Ancaq çətinlik bunda deyil, ondadır belə bir SQL sorğusu üçün alqoritm.
İş alqoritmi aşağıdakı kimidir: ilk qeyd ondan götürülür cədvəl_1. alır id bu girişdən cədvəl_1. Aşağıda tam şəkildə cədvəl var cədvəl_2. Və bütün qeydlər sahə dəyərinin olduğu yerə əlavə olunur İstifadəçi adı az id seçilmiş giriş cədvəl_1. Beləliklə, ilk iterasiyadan sonra görünə bilər 0-dan sonsuz sayda nəticəsində qeydlər. Növbəti iterasiyada növbəti cədvəl qeydi götürülür cədvəl_1. Bütün cədvəl yenidən skan edilir cədvəl_2, və seçmə şərti yenidən işə salınır table_1.id > table_2.user_id. Bu şərtə cavab verən bütün qeydlər nəticəyə əlavə edilir. Çıxış hər iki cədvəlin ümumi ölçüsündən dəfələrlə böyük olan çox sayda qeyd ola bilər.
İlk dəfədən sonra necə işlədiyini başa düşsəniz, əladır, amma yoxsa, tam başa düşənə qədər oxuyun. Bunu başa düşsəniz, daha asan olacaq.
Əvvəlki SQL sorğusu kimi, nadir hallarda istifadə olunur. Sadəcə olaraq verilmişdi bir neçə cədvəldən seçim alqoritminin izahı. İndi daha çömbəlməyə baxaq SQL sorğusu. Tutaq ki, iki masamız var: mallarla (bir sahə var sahib_idüçün məsuldur id məhsul sahibi) və istifadəçilərlə (bir sahə var id). Biz birini istəyirik SQL sorğusu bütün qeydləri əldə edin və hər birində istifadəçi və onun bir məhsulu haqqında məlumat var. Növbəti girişdə eyni istifadəçi və onun növbəti məhsulu haqqında məlumat var idi. Bu istifadəçinin məhsulları bitdikdə növbəti istifadəçiyə keçin. Beləliklə, biz iki cədvələ qoşulmalı və harada nəticə əldə etməliyik hər bir qeyd istifadəçi və onun məhsullarından biri haqqında məlumat ehtiva edir.
Oxşar sorğu 2 SQL sorğusunu əvəz edəcək: məhsullarla cədvəldən və istifadəçilərlə cədvəldən ayrıca seçmək üçün. Bundan əlavə, belə bir sorğu dərhal istifadəçiyə və onun məhsuluna uyğun olacaq.
Sorğunun özü çox sadədir (əgər əvvəlkini başa düşmüsünüzsə):
İstifadəçilərdən * SEÇİN, users.id = products.owner_id
Burada alqoritm artıq sadədir: cədvəldən ilk qeyd alınır istifadəçilər. Sonra alınır id və cədvəldəki bütün qeydlər təhlil edilir məhsullar olanları nəticəyə əlavə edir sahib_id bərabərdir id masadan istifadəçilər. Beləliklə, birinci iterasiyada ilk istifadəçidən bütün mallar toplanır. İkinci iterasiyada ikinci istifadəçinin bütün məhsulları toplanır və s.
Gördüyünüz kimi, Bir neçə cədvəldən seçim etmək üçün SQL sorğularıən sadə deyil, lakin onların faydaları çox böyük ola bilər, ona görə də belə sorğuları bilmək və istifadə edə bilmək çox arzuolunandır.
Siz proqramlaşdırmada yenisiniz və ya keçmişdə sadəcə SQL öyrənməkdən yayınmısınız? Sonra düzgün ünvana gəldiniz, çünki hər hansı bir tərtibatçı sonda bu sorğu dilini bilmək ehtiyacı ilə üzləşir. Siz əsas verilənlər bazası dizayneri olmaya bilərsiniz, lakin onlarla işləməkdən qaçmaq demək olar ki, mümkün deyil. Ümid edirəm ki, əsas SQL sorğu sintaksisinin bu qısa icmalı maraqlı tərtibatçıya və ona ehtiyacı olan hər kəsə kömək edəcəkdir.
SQL verilənlər bazası nədir?
Strukturlaşdırılmış Sorğu Dili ANSI tərəfindən dəstəklənən verilənlər bazası rabitə standartıdır. Ən son versiya SQL-99-dur, baxmayaraq ki, yeni standart SQL-200n artıq inkişaf mərhələsindədir. Əksər verilənlər bazası ANSI-92 standartına möhkəm uyğun gəlir. Daha müasir standartların tətbiqi ilə bağlı çoxlu müzakirələr aparılıb, lakin kommersiya verilənlər bazası təchizatçıları saxlanılan məlumatların saxlanması üçün öz yeni konsepsiyalarını inkişaf etdirərək bundan uzaqlaşırlar. Demək olar ki, hər bir verilənlər bazası ANSI standartına çox oxşar olsa da, bəzi unikal sintaksis dəstindən istifadə edir. Əksər hallarda, bu sintaksis əsas standartın uzantısıdır, baxmayaraq ki, bu sintaksis müxtəlif verilənlər bazaları üçün fərqli nəticələr verir. Xüsusilə gözlənilməz nəticələr əldə edirsinizsə, verilənlər bazası sənədlərini nəzərdən keçirmək həmişə yaxşı bir fikirdir.
Əgər siz SQL-də yenisinizsə, anlamalı olduğunuz bəzi əsas anlayışlar var.
Ümumiyyətlə, "SQL verilənlər bazası" əlaqəli verilənlər bazası idarəetmə sisteminin (RDBMS) ümumi adıdır. Bəzi sistemlər üçün "verilənlər bazası" həmçinin digər oxşar konstruksiyalardan mahiyyətcə ayrı hissə olan cədvəllər, verilənlər və ya konfiqurasiya məlumatları qrupuna aiddir. Bu halda hər bir SQL verilənlər bazası quraşdırması bir neçə verilənlər bazasından ibarət ola bilər. Digər sistemlərdə onlara cədvəllər deyilir.
Cədvəl verilənlər sətirlərini ehtiva edən sütunlardan ibarət verilənlər bazası strukturudur. Tipik olaraq, cədvəllər əlaqəli məlumatları ehtiva etmək üçün yaradılır. Eyni verilənlər bazasında bir neçə cədvəl yaradıla bilər.
Hər bir sütun işçilərin identifikasiya nömrələri, boy, avtomobil rəngi və s. kimi obyektlərin atributunu və ya atributları dəstini təmsil edir. Tez-tez sahə termini sütuna istinad etmək üçün istifadə olunur, ardınca "Ad sahəsində" kimi bir ad gəlir. Sıra sahəsi cədvəlin minimum elementidir. Cədvəldəki hər bir sütunun xüsusi adı, məlumat növü və ölçüsü var. Sütun adları cədvəl daxilində unikal olmalıdır.
Hər bir sıra (və ya qeyd) müəyyən bir obyektin atributlarının toplusunu təmsil edir, məsələn, bir sıra işçinin eyniləşdirmə nömrəsini, əmək haqqını, doğum ilini və s. Cədvəl sətirlərinin adları yoxdur. Müəyyən bir sıraya daxil olmaq üçün istifadəçi onu unikal şəkildə müəyyən edən bəzi atribut (və ya atributlar dəsti) göstərməlidir.
Verilənlərlə işləyərkən yerinə yetirilən ən mühüm əməliyyatlardan biri verilənlər bazasında saxlanılan məlumatların axtarışıdır. Bunun üçün istifadəçi sorğunu yerinə yetirməlidir.
İndi verilənlər bazası daxilində verilənlərin manipulyasiyasına diqqət yetirən verilənlər bazası sorğularının əsas növlərinə baxaq. Bizim məqsədlərimiz üçün bütün nümunələr istənilən mühitə uyğun standart SQL-də təqdim olunur.
Məlumat sorğularının növləri
SQL-də Data Manipulation Language (DML) adlanan dörd əsas məlumat sorğusu növü vardır:
SELECT – cədvəllərdən sətirləri seçin;
INSERT – cədvələ sətirlər əlavə etmək;
YENİLƏNİB – cədvəldə sətirlərin dəyişdirilməsi;
DELETE – cədvəldəki sətirləri silin;
Bu sorğuların hər birində verilənlər üzərində bəzi hərəkətləri yerinə yetirmək üçün istifadə olunan müxtəlif operatorlar və funksiyalar var. SELECT sorğusu ən çox seçimə malikdir. SELECT ilə birlikdə istifadə edilən JOIN və UNION kimi əlavə sorğu növləri də var. Ancaq hələlik biz yalnız əsas sorğulara diqqət yetirəcəyik.
İstədiyiniz məlumatları seçmək üçün SELECT sorğusundan istifadə edin
Verilənlər bazasında saxlanılan məlumatları əldə etmək üçün SELECT sorğusundan istifadə olunur. Bu sorğunun əsas təsiri tək bir cədvəllə məhdudlaşır, baxmayaraq ki, eyni zamanda bir neçə cədvəldən seçim etməyə imkan verən dizaynlar mövcuddur. Xüsusi sütunlar üçün bütün məlumat sətirlərini əldə etmək üçün belə bir sorğu istifadə olunur:
SEÇİN sütun1, sütun2 cədvəl_adından;
Siz həmçinin "*" joker simvolundan istifadə edərək cədvəldən bütün sütunları əldə edə bilərsiniz:
SEÇİN * cədvəl_adından;
Bu, xüsusi WHERE bəndi ilə məlumatları seçdiyiniz zaman faydalı ola bilər. Aşağıdakı sorğu "sütun1"in "3" dəyərini ehtiva etdiyi bütün sətirlərdən bütün sütunları qaytaracaq:
SEÇİN * cədvəl_adından HARADA sütun1=3;
“=” (bərabər) ilə yanaşı, aşağıdakı şərti operatorlar da mövcuddur:
Şərti ifadələr:
= Bərabər
<>Bərabər deyil
> Daha çox
<
Меньше
>= böyük və ya bərabərdir
<=
Меньше или равно
Bundan əlavə, siz BITWEEN və LIKE şərtlərindən, həmçinin AND və OR operatorlarının kombinasiyaları ilə WHERE şərti ilə müqayisə etmək üçün istifadə edə bilərsiniz.
* Cədvəl_adından SEÇİN ((Yaş >= 18) VƏ (Soyad 'İvanov' VƏ 'Sidorov' ARASINDA)) VEYA '%Motorola%' KİMİ Şirkət;
Rus tərcüməsində nə deməkdir: cədvəl_name cədvəlindən bütün sütunları seçin, burada yaş sütununun dəyəri 18-dən böyük və ya bərabərdir və Soyad sütununun dəyəri İvanovdan Sidorov daxil olmaqla əlifba sırasındadır və ya dəyər Şirkətin sütunu Motoroladır.
Yeni məlumat daxil etmək üçün INSERT sorğusundan istifadə edin
Yeni məlumat cərgəsi yaratmaq üçün INSERT sorğusu istifadə olunur. Mövcud məlumatları və ya boş cərgə sahələrini yeniləmək üçün YENİLƏNMƏ sorğusundan istifadə etməlisiniz.
Nümunə INSERT sorğu sintaksisi:
cədvəl_adı INSERT INTO (sütun1, sütun2, sütun3) VALUES ('data1', 'data2', 'data3');
Cədvəl sütunlarının göründüyü ardıcıllıqla bütün dəyərləri daxil etmək niyyətindəsinizsə, sütun adlarını buraxmaq istəyə bilərsiniz, baxmayaraq ki, bu oxunaqlılıq səbəblərinə görə üstünlük təşkil edir. Həmçinin, əgər siz sütunları siyahıya salırsınızsa, daxil etdiyiniz dəyərlər həmin sıraya uyğun gəldiyi müddətcə onları verilənlər bazasında göründükləri sıra ilə sadalamaq məcburiyyətində deyilsiniz. Məlumatı olmayan sütunları siyahıya salmamalısınız.
Verilənlər bazasında artıq mövcud olan məlumatlar çox oxşar şəkildə dəyişdirilir.
YENİLƏNİB Sorğu və HARADA Vəziyyəti
UPDATE mövcud dəyərləri dəyişdirmək və ya bir sıra sahəni boşaltmaq üçün istifadə olunur, buna görə də yeni dəyərlər mövcud məlumat növünə uyğun olmalı və məqbul dəyərləri təmin etməlidir. Bütün sətirlərdəki dəyərləri dəyişmək istəmirsinizsə, onda WHERE bəndindən istifadə etməlisiniz.
YENİLƏNİB cədvəl_adı SET sütun1 = 'məlumat1', sütun2 = 'məlumat2' HARADA sütun3 = 'data3';
Dəyişmək istədiyiniz sütun da daxil olmaqla istənilən sütunda WHERE istifadə edə bilərsiniz. Bu, müəyyən bir dəyəri digəri ilə əvəz etmək lazım olduqda istifadə olunur.
UPDATE table_name SET FirstName = 'Vasily' WHERE FirstName = 'Vasily' AND LastName = 'Balqabaq';
Ehtiyatlı ol! DELETE sorğusu bütün sətirləri silir
SİL sorğusu verilənlər bazasından bir sıranı tamamilə silir. Tək bir sahəni silmək istəyirsinizsə, YENİLƏMƏ sorğusundan istifadə etməli və bu sahəni proqramınızda NULL-ə analoji olacaq dəyərə təyin etməlisiniz. Ehtiyatlı olun ki, DELETE sorğunuzu WHERE bəndi ilə məhdudlaşdırın, əks halda cədvəlin bütün məzmununu itirə bilərsiniz.
DELETE FROM table_name WHERE column1 = 'data1';
Sətir verilənlər bazanızdan silindikdən sonra onu bərpa etmək mümkün deyil, ona görə də “IsActive” adlı bir sütunun və ya buna bənzər bir sütunun olması məsləhətdir, onu null olaraq dəyişdirə bilərsiniz ki, bu da məlumatların görünüşünün o sıra kilidlidir.
İndi siz SQL sorğularının əsaslarını bilirsiniz
SQL verilənlər bazası dilidir və biz məlumat sorğularında istifadə olunan ən vacib və əsas əmrləri əhatə etdik. Burada əhatə olunmayan bir çox əsas anlayışlar var (məsələn, SUM və COUNT), lakin yuxarıda sadalaya bildiyimiz bir neçə əmr sizi aktiv olmağa və SQL adlı gözəl sorğu dilini daha dərindən öyrənməyə təşviq etməlidir.
Bölmə 4 İnformasiya sistemləri
SQL-ə giriş.
Cədvəllərin yaradılması, dəyişdirilməsi və silinməsi.
Cədvəldən məlumatların alınması.
SQL sorğularının yaradılması.
SQL-də verilənlərin emalı.
Məktəbdə bu mövzunun tədrisi üsulları.
SQL-ə giriş. SQL, cədvəllərdə saxlanılan əlaqəli məlumat dəstləri olan əlaqəli verilənlər bazalarını yaratmağa və işləməyə imkan verən strukturlaşdırılmış sorğu dilidir. Dil məntiqi olaraq bir-biri ilə əlaqəli əlaqə cədvəlləri dəstləri şəklində təqdim olunan verilənlərlə əməliyyatlara yönəldilmişdir. Bu dilin strukturlarının ən mühüm xüsusiyyəti onun bu emal proseduruna deyil, verilənlərin emalının son nəticəsinə diqqət yetirməsidir. SQL özü verilənlərin harada yerləşdiyini, indeksləri və hətta nəticə əldə etmək üçün hansı əməliyyatların ən səmərəli ardıcıllığından istifadə edilməli olduğunu müəyyən edir.
Əvvəlcə SQL istifadəçinin verilənlər bazası ilə işləməsinin əsas üsulu idi və aşağıdakı əməliyyatlar toplusunu yerinə yetirməyə imkan verirdi: verilənlər bazasında yeni cədvəl yaratmaq; cədvələ yeni qeydlər əlavə etmək; qeydlərin dəyişdirilməsi; qeydlərin silinməsi; bir və ya bir neçə cədvəldən qeydlərin seçilməsi (verilmiş şərtə uyğun olaraq); masa strukturlarının dəyişdirilməsi.
Vaxt keçdikcə SQL yeni saxlanılan obyektləri (məsələn, indekslər, görünüşlər, tetikleyiciler və saxlanılan prosedurlar) təsvir etmək və idarə etmək imkanı verdi. SQL proqram təminatı ilə verilənlər bazası arasında yeganə əlaqə mexanizmi olaraq qalır. Eyni zamanda, müasir DBMS-lər, eləcə də DBMS-lərdən istifadə edən informasiya sistemləri istifadəçiyə sorğuların vizual qurulmasının işlənmiş vasitələrini təqdim edir. Hər SQL ifadəsi yadır xahiş verilənlər bazasından verilənlər və ya verilənlər bazasındakı məlumatların dəyişməsinə səbəb olan verilənlər bazasına zəng.
Verilənlər bazasında hansı dəyişikliklərin baş verdiyinə uyğun olaraq aşağıdakı sorğu növləri fərqləndirilir: verilənlər bazasında yeni və ya mövcud obyektlərin yaradılması və ya dəyişdirilməsi; məlumat almaq; yeni məlumat (qeydlər) əlavə etmək; məlumatları silmək; DBMS-ə giriş.
Əlaqəli verilənlər bazasının əsas saxlama obyekti cədvəldir, ona görə də bütün SQL sorğuları cədvəllər üzərində əməliyyatlardır. Buna uyğun olaraq müraciətlər aşağıdakılara bölünür:
Cədvəllərin özlərində fəaliyyət göstərən sorğular (cədvəllərin yaradılması və dəyişdirilməsi);
Fərdi qeydlər (və ya cədvəl sıraları) və ya qeydlər dəstləri üzərində işləyən sorğular.
Hər bir cədvəl öz sahələrinin siyahısı (cədvəl sütunları) şəklində təsvir olunur, bunlar: hər bir sahədə saxlanılan dəyərlərin növü; cədvəllər arasında əlaqə (əsas və ikinci dərəcəli açarların təyin edilməsi); indekslərin qurulması üçün lazım olan məlumatlar.
Beləliklə, SQL-dən istifadə mahiyyət etibarı ilə hər cür sıra seçimlərinin yaradılmasına və dəstdə olan bütün qeydlər üzərində əməliyyatların yerinə yetirilməsinə əsaslanır.
SQL əmrləri aşağıdakı qruplara bölünür:
1. Verilənlərin təyini dilinin əmrləri - DDL (Data Definition Language). Bu SQL əmrləri müxtəlif verilənlər bazası obyektlərini yaratmaq, dəyişdirmək və silmək üçün istifadə edilə bilər.
2. Verilənlərə nəzarət dilinin əmrləri - DCL (Data Control Language). Bu SQL əmrlərindən istifadə etməklə siz verilənlər bazasına istifadəçi girişinə nəzarət edə və xüsusi verilənlərdən (cədvəllər, görünüşlər və s.) istifadə edə bilərsiniz.
3. Tranzaksiyaya nəzarət dili əmrləri - TCL (Tganstation Control Language). Bu SQL əmrləri əməliyyatın nəticəsini təyin etməyə imkan verir.
4. Verilənlərin manipulyasiya dilinin əmrləri - DML (Data Manipulation Language). Bu SQL əmrləri istifadəçiyə məlumatları verilənlər bazasına daxil və verilənlər bazasından çıxarmağa imkan verir.
SQL ifadələri aşağıdakılara bölünür:
Məlumat təyini operatorları ( Data Definition Language, DDL)
CREATE verilənlər bazası obyekti yaradır (verilənlər bazasının özü, cədvəl, görünüş, istifadəçi və s.)
ALTER obyekti dəyişir
DROP obyekti silir
Məlumat manipulyasiya operatorları ( Data Manipulyasiya Dili, DML)
SELECT müəyyən şərtlərə cavab verən məlumatları oxuyur
INSERT yeni məlumatlar əlavə edir
UPDATE mövcud məlumatları dəyişdirir
DELETE məlumatları silir
Məlumata çıxış tərifi operatorları ( Data Control Language, DCL)
GRANT istifadəçiyə (qrupa) obyekt üzərində müəyyən əməliyyatlar üçün icazələr verir
REVOKE əvvəllər verilmiş icazələri ləğv edir
DENY icazədən üstün olan qadağanı müəyyən edir
Əməliyyata nəzarət bəyanatları ( Transaction Control Language, TCL)
COMMIT əməliyyatı tətbiq edir.
ROLLBACK cari əməliyyat kontekstində edilən bütün dəyişiklikləri geri qaytarır.
SAVEPOINT əməliyyatı daha kiçik hissələrə bölür.
Üstünlüklər: 1. Xüsusi DBMS-dən müstəqillik (DDL və DML ehtiva edən SQL sorğu mətnləri bir DBMS-dən digərinə olduqca asanlıqla köçürülə bilər). 2. Standartların mövcudluğu (konkret SQL tətbiqinin ümumi qəbul edilmiş standarta uyğunluğunu və uyğunluğunu müəyyən etmək üçün standartların və testlər toplusunun mövcudluğu yalnız dilin “sabitləşməsinə” kömək edir). 3. Deklarativ (SQL-dən istifadə edərək proqramçı yalnız hansı məlumatların əldə edilməsi və ya dəyişdirilməsi lazım olduğunu təsvir edir)
Qüsurlar: 1. Relational data modelinə uyğunsuzluq 2. Təkrarlanan sətirlər 3. Nulllar 4. Sütunların sırasının soldan sağa açıq şəkildə göstərilməsi 5. Adsız sütunlar və dublikat sütun adları 6. “=” xüsusiyyətinə dəstəyin olmaması 7. İstifadə göstəricilər 8. Yüksək ehtiyat
2.2 Cədvəllərin yaradılması, dəyişdirilməsi və silinməsi.
Cədvəl yaratmaq:
Cədvəllər CREATE TABLE əmri ilə yaradılır. Bu əmr boş cədvəl yaradır - sətirləri olmayan cədvəl. Dəyərlər DML INSERT əmrindən istifadə edərək daxil edilir. CREATE TABLE əmri əsasən müəyyən qaydada müəyyən edilmiş sütun adları dəstini təsvir etməklə cədvəlləri müəyyən edir. O, həmçinin məlumat növlərini və sütun ölçülərini müəyyənləşdirir. Hər cədvəldə ən azı bir sütun olmalıdır.
Komanda sintaksisi:
CƏDVƏL YARADIN
(
Cədvəlin dəyişdirilməsi:
ALTER TABLE əmri onun imkanları bir qədər məhdud olsa da, mənalı formadır. Mövcud cədvəlin tərifini dəyişdirmək üçün istifadə olunur. Bir qayda olaraq, cədvələ sütunlar əlavə edir. O, bəzən sütunları silə və ya ölçüsünü dəyişə bilər, bəzi proqramlarda isə məhdudiyyətlər əlavə edə və ya silə bilər. Cədvələ sütun əlavə etmək üçün tipik sintaksis:
CƏDVƏLİ DƏYİŞTİRİN
başlıq |
illik pab |
naşir |
Bunun üçün DBMS əvvəlcə cədvəlləri birləşdirməlidir başlıqlar və nəşriyyatlar , və yalnız bundan sonra yaranan əlaqədən nümunə hazırlayın.
Bəyanatda bu cür əməliyyatı yerinə yetirmək üçün SEÇİN açar sözdən sonra FROM məlumatların axtarıldığı cədvəllərin siyahısını göstərir. Açar sözdən sonra HARADA birləşmənin hansı şəraitdə həyata keçirildiyi göstərilir. Bu sorğunu yerinə yetirmək üçün aşağıdakı əmri verməlisiniz:
başlıqları SEÇİN. başlıq, başlıqlar. yearpub, nəşriyyatlar. naşir
Başlıqlardan, nəşriyyatlardan
WHERE titles.pub_id=publishers.pub_id;
Həm birləşmə, həm də seçim şərtlərinin eyni vaxtda göstərildiyi nümunə (əvvəlki sorğunun nəticəsi 1996-cı ildən sonrakı nəşrlərlə məhdudlaşır):
SEÇİN başlıqlar.title,titles.yearpub,publishers.publisher
Başlıqlardan, nəşriyyatlardan
HARA titles.pub_id=publishers.pub_id VƏ
titles.yearpub>1996;
Nəzərə alın ki, müxtəlif cədvəllərdə eyni adlı sahələr olduqda, qeyri-müəyyənliyi aradan qaldırmaq üçün sahə adından əvvəl cədvəlin adı və “.” işarəsi göstərilir. (nöqtə). (Həmişə cədvəlin adını qeyd etmək tövsiyə olunur!)
Təbii ki, ikidən çox cədvəli birləşdirmək mümkündür. Məsələn, yuxarıda təsvir edilən seçimi kitab müəlliflərinin adları ilə əlavə etmək üçün aşağıdakı formada operator yaratmalısınız:
Publishers.publisher
Başlıqlardan, nəşriyyatçılardan, başlıq müəlliflərindən, müəlliflərdən
HARA başlıqauthors.au_id=authors.au_id VƏ
Titleauthors.title_id=titles.title_id VƏ
Titles.pub_id=publishers.pub_id VƏ
Başlıqlar. yearpub > 1996;
Çox cədvəlləri birləşdirməyə alternativ operatordan istifadə etmək ola bilər
cədvəlləri birbaşa bənddə birləşdirmək FROM. Üç var
operator seçimi:
DAXİLİ QOŞULUN nəticədə qeydlərin daxil olduğu əlaqə
yalnız eyni atributlar əlaqəli atributlarda aşkar edildikdə təyin edin
dəyərlər;
SOL QOŞULUN birincidən (soldan) bütün qeydlərin olduğu sol əlaqə
cədvəllər nəticə dəstinə daxil edilir, hətta ikinci (sağda)
cədvəldə onlara uyğun qeydlər yoxdur;
SAĞ QOŞULUN ikincidən (sağda) bütün qeydlərin olduğu sağ əlaqə
cədvəllər ilk (solda) cədvəl olsa belə nəticə dəstinə daxil edilir
müvafiq qeydlər yoxdur.
Məsələn, əvvəlki nümunə operatordan istifadə etməklə həyata keçirilə bilər
INNER JOIN belədir:
SELECT müəllifləri.author,titles.title,titles.yearpub,
Publishers.publisher
FROM ((başlıqlar INNER JOIN publishers ON
Titles.pub_id=publishers.pub_id)
INNER JOIN başlıq müəllifləri ON
Itleauthors.title_id=titles.title_id)
INNER JOIN müəllifləri ON
Titleauthors.au_id=authors.au_id
WHERE titles.yearpub > 1996;
3. SELECT daxilində hesablamalar.
SQL yaranan əlaqənin sütunları üzərində müxtəlif hesab əməliyyatları yerinə yetirməyə imkan verir. Dizaynda<список_выбора> Sabitləri, funksiyaları və onların birləşmələrini hesab əməliyyatları və mötərizələrlə istifadə edə bilərsiniz. Məsələn, 1992-ci ildən (SQL-92 standartının qəbul edildiyi il) müəyyən bir kitabın nəşrinə qədər neçə il keçdiyini öyrənmək üçün əmri yerinə yetirə bilərsiniz:
SELECT başlığı, yearpub-1992 FROM başlıqlardan HARADA yearpub > 1992;
Arifmetik ifadələr toplama (+), çıxma (-),
bölmə (/), vurma (*), həmçinin müxtəlif funksiyalar (COS, SIN, ABS)
mütləq dəyər və s.).
SQL-də həm də qeydlər qrupunda eyni sahələr toplusunda hərəkətləri yerinə yetirən məcmu funksiyalar da müəyyən edilir. Onların arasında:
AVG(<имя поля>) - bu sahənin bütün dəyərləri üzrə orta
COUNT(<имя поля>) və ya COUNT (*) - qeydlərin sayı
MAX(<имя поля>) - bu sahənin bütün dəyərlərinin maksimumu
MIN(<имя поля>) - bu sahənin bütün dəyərlərinin minimumu
SUM(<имя поля>) - bu sahənin bütün dəyərlərinin cəmi
Nəzərə alın ki, hər bir toplama funksiyası tək bir dəyər qaytarır.
Nümunələr: verilənlər bazamızda ən qədim kitabın nəşr tarixini müəyyənləşdirin
Başlıqlardan MIN(yearpub) SEÇİN;
Başlıqlardan COUNT (*) SEÇİN ;
Funksiya məlumatlarının əhatə dairəsi məntiqi şərtdən istifadə etməklə məhdudlaşdırıla bilər. Məsələn, 2000-ci ildən sonra nəşr olunan kitabların sayı:
yearpub > 2000 olan başlıqlardan SAYI (*) SEÇİN;
4. Tarixlərlə işləmək üçün funksiyalar
MS Access-də Daxili tarix və vaxt funksiyalarının bütün dəsti var, onlardan bəzilərini sadalayaq:
Tarix() - cari tarix, yəni bugünkü tarix, ay və il;
D ay (tarix) - tarixdən günü çıxarır, məsələn, tarix- 12.09.97-ci il, nömrə 12;
Ay (tarix) - tarixdən ayı çıxarır, məsələn tarix - 12,09,97, funksiyanın tətbiqinin nəticəsidir- nömrə 9;
Ueag(tarix) - tarixdən ili çıxarır, məsələn, tarix - 12-09,97, funksiyanın tətbiqinin nəticəsidir- nömrə 97;
Həftə içi (tarix) - Amerika gün nömrələmə sistemində həftənin gününü tarixdən, yəni nümunədən çıxarır- tarix 12.09.97, funksiyanın tətbiqinin nəticəsi ədəddir 6, cümə gününə uyğundur
DatePart(HHTepBan, tarix) - burada arqument "interval"dır - istədiyiniz tarix komponenti və tarix üçün qısaldılmış addır - xüsusi tarix dəyəri və ya tarix sahəsinin adı
Misal üçün:
DatePart ("H",#12,09,97#) - həftənin günü - 6, yəni cümə,
DatePart ("HH",#12,09,97#) - ilin həftəsi - 37,
DatePart (" K ",# 12,09,97#) - ilin rübü - 3
DatePart("a",#12,09,97#) - gün -12,
DatePart("M",#12,09,97#) - ay - 9, \ DatePart("rrrr",#12,09,97#) - il - 1997
Nümunə sorğu. Standartı təsvir edən məqalənin dərcindən neçə il keçdiyini müəyyənləşdirin SQL (tutaq ki, məqalənin adı “Standart SQL")
Ay SEÇİN(Tarix()-il)
FROM başlıqlardan INNER JOIN publishers ON
titles.pub_id = publishers.pub_id
WHERE publisher = "SQL Standard";
5. Laboratoriya tapşırığı
Laboratoriya işlərinin gedişi haqqında qeydlər.
Sorğuların yerinə yetirilməsinin nəticələrinə baxmaq üçün tərtib edilmiş sorğulara uyğun məlumatların cədvəllərə daxil edilməsi lazımdır. Bu zaman sorğulardakı məlumatlar (tarixlər, adlar, miqdarlar və s.) verilənlər bazasına daxil edildikdən sonra dəyişdirilə bilər.
Laboratoriya tapşırıqlarını yerinə yetirərkən, seçimdən istifadə edərək bütün hesablanmış sahələri sinonimlərlə əvəz edin SEÇİM bəndində olduğu kimi.
Məsələn: SELECT COUNT (*) AS FROM başlıqlardan sətirlərin sayı;
Aşağıdakı sorğuları istifadə edərək həyata keçirin SQL:
Yanvar ayında edilən sifarişləri tapın.
-dən az olmayan miqdarda tədarük olunan məhsulları tapın 10 və 100-dən çox deyil.
Müştərinin “Krasnıy Luç” zavodundan aldığı, qiyməti 100 manatdan artıq olan məhsulların siyahısını əldə edin. 50 min UAH.
Müştəri “Krasnıy Luç” bütün sifarişlərdən neçə “Bolt” hissələri aldı?
Dövr ərzində sifariş edilən hissələrin adlarını müəyyənləşdirin 6/10/97-dən Sifariş etmədiyim 10/10/97"Qırmızı Ray" bitkisi.
Çatdırılmaları 10 mini keçən məhsul adlarının siyahısını əldə edin.
“Krasnıy Luç” zavodunun sifariş etdiyi hissələrin miqdarı nə qədərdir?
Bolt hissəsini hansı müştərilər sifariş edib?
1997-ci il üçün Bolt hissəsinin tədarüklərinin orta sayını müəyyənləşdirin.
Ən bahalı hissəni sifariş edən müştərini tapın.
6. Təhlükəsizlik sualları
Təkliflər nələrdir? SEÇİN məcburidir?
Cümlə nə soruşur? HARADA?
Hansı növ əlaqə ( QOŞULUN ) təlimatlarla dəstəklənir SEÇİN?
Təlimatın cümlələrinin ardıcıllığı nədir SEÇİN?
Cədvəl adını sahə adından əvvəl daxil etmək nə vaxt lazımdır?
Hesablanmış sahələri necə yaratmaq olar SEÇİN?
Əməliyyatdan istifadə edərək ikidən çox cədvəli birləşdirmək mümkündürmü? QOŞULUN?
Əməliyyat üçün alternativ sintaksis nədir QOŞULUN (istifadə edərək HARADA ) sorğunu düzgün yerinə yetirmək üçün istifadə edilə bilərmi?