Verilənlər bazasından məlumat çıxaranda, bizi nadir hallarda bütün sütunlar maraqlandırır. Məsələn, employees cədvəlində 15 sütun ola bilər: ad, soyad, doğum tarixi, vəzifə, maaş, işə qəbul tarixi və s. Amma sənə sadəcə onların adları və vəzifələri lazımdır. Bütün məlumatları çəkmək mənasız və səmərəsizdir. Bax, burada konkret sütunların seçilməsi sənətə çevrilir.
Analogiya üçün, bu elə bil ki, ümumi səbətdə portağal, alma və banan var, amma sənə yalnız almalar lazımdır. Super, hə? İndi bununla məşğul olacağıq!
Sintaksis
Xatırladaq ki, SQL maksimal dərəcədə user-friendly dizayn olunub.
Birincisi, sorğunun mətninin registri fərq etmir. Sən SELECT, Select və ya select yaza bilərsən və hər şey işləyəcək. İkincisi, sətir keçidləri heç bir rol oynamır. DBMS sorğunu bir uzun sətrə çevirəcək, ona görə də necə rahatdırsa elə yaza bilərsən.
Artıq yəqin ki, başa düşürsən, əsas sözlər SELECT və FROM ilə iş bitmir. Yoxsa SQL ətrafında bu qədər söhbət olmazdı. Genişləndirilmiş SQL sorğusu belə görünür:
SELECT sütunlar
FROM cədvəl
WHERE şərt
GROUP BY sütunlar
HAVING sütunlar
ORDER BY sıralama
Burada:
sütunlar— çıxarmaq istədiyin sütunların adlarıdır.cədvəl— məlumat çıxarılan cədvəlin adıdır.şərt— sətirlərin filtrasiyası üçün şərtdir.sıralama— sətirlər və sıralama qaydasıdır.
Asan səslənir? Gəlin bunu real nümunədə baxaq. Amma əvvəlcə daha sadə nümunələrlə başlayaq.
Baza sorğusunun nümunəsi
Tutaq ki, bizdə students cədvəli var və orada tələbələr haqqında məlumatlar saxlanılır. Cədvəlin strukturu belə ola bilər:
| id | first_name | last_name | age | grade |
|---|---|---|---|---|
| 1 | Alex | Lin | 20 | A |
| 2 | Anna | Song | 22 | B |
| 3 | Otto | Art | 19 | A |
İndi bizə sadəcə bütün tələbələrin soyadları last_name və qiymətləri grade lazımdır.
Sorğu belə olacaq:
SELECT last_name, grade
FROM students;
İcra nəticəsi:
| last_name | grade |
|---|---|
| Lin | A |
| Song | B |
| Art | A |
Təbrik edirəm, sən indi verilənlər bazasının resurslarına qənaət etdin və nəticəni daha oxunaqlı etdin!
Sətirlərin birləşdirilməsi
Sadəcə məlumat seçməyi artıq bacarırsan, indi bir az maraqlı bir şey edək. Bizim cədvəldə ad və soyad ayrı-ayrı sütunlardadır. Gəlin elə bir sorğu yazaq ki, tələbənin tam adı bir sütunda olsun.
PostgreSQL-də iki sətiri birləşdirmək üçün || operatorundan istifadə olunur. Bizim SELECT sorğumuz belə olacaq:
SELECT first_name || last_name, grade
FROM students;
İcra nəticəsi:
| first_name || last_name | grade |
|---|---|
| AlexLin | A |
| AnnaSong | B |
| OttoArt | A |
Hmm. Burada nəsə çatışmır. Məsələn, ad və soyad arasında boşluq yoxdur! Gəlin bunu düzəldək.
SELECT first_name || ' ' || last_name, grade
FROM students;
İcra nəticəsi:
| first_name || ' ' || last_name | grade |
|---|---|
| Alex Lin | A |
| Anna Song | B |
| Otto Art | A |
Əla. Cədvəlin nəticəsi mənə xoş gəlir, amma başlıq necə oldu? Orada full name və ya sadəcə name görmək istərdim, amma first_name || ' ' || last_name yox. Belə nə gözəl, nə də praktikdir. Amma bunun da həlli var.
Alias-lardan (təxəllüslərdən) istifadə ilə seçmə
SQL sorğularını daha oxunaqlı etmək üçün alias-lardan istifadə edə bilərsən. Bu, sadəcə olaraq sorğu daxilində sütuna yeni ad vermək üsuludur. Alias-lar üçün AS açar sözündən istifadə olunur (baxmayaraq ki, formal olaraq buraxmaq olar, amma oxunaqlılıq üçün yazmaq daha yaxşıdır).
Nümunəyə baxaq:
SELECT first_name AS "Ad", last_name AS "Soyad", grade AS "Qiymət"
FROM students;
İcra nəticəsi:
| Ad | Soyad | Qiymət |
|---|---|---|
| Alex | Lin | A |
| Anna | Song | B |
| Otto | Art | A |
Burada biz:
- Sütunları daha aydın adlarla adlandırdıq.
- Sorğuda alias-lardan istifadə etdik,
ASilə.
Əgər rəhbərin və ya müştərin üçün istifadəçi məlumatlarını çıxarmalısan və onu cədvələ baxanda qorxutmaq istəmirsənsə — alias-lar sənin dostundur.
İndi isə tam ad almaq üçün sorğumuzu bir az təkmilləşdirək.
SELECT first_name || ' ' || last_name AS "Tam ad", grade AS "Qiymət"
FROM students;
İcra nəticəsi:
| Tam ad | Qiymət |
|---|---|
| Alex Lin | A |
| Anna Song | B |
| Otto Art | A |
Əla. Necə istəmişdik, elə də oldu.
Niyə yalnız bəzi sütunları seçmək lazımdır?
- Performans
Təsəvvür et ki, milyonlarla sətri və yüzlərlə sütunu olan nəhəng cədvəllə işləyirsən. Bütün məlumatları çıxarmaq SELECT * dəqiqələrlə, bəzən saatlarla çəkə bilər və serverin resurslarını çox istifadə edər. Amma belə, yalnız lazım olanı alırsan.
- Oxunaqlılıq
Yalnız lazım olan sütunları çıxaranda nəticə daha rahat başa düşülür. Yoxsa nəticə elə olacaq ki, sanki cümə axşamı axşamı uzun xəbər lentini oxuyursan.
- Səhvlərin minimallaşdırılması
Sorğuda nə qədər az məlumat işləsən, səhv alma ehtimalın da bir o qədər az olar. Xüsusilə, bu məlumatlarla sonra işləyəcəksənsə.
Nələri yadda saxlamaq lazımdır?
Cədvəl alias-ları
Uzun cədvəl adları ilə işləmək üçün başqa bir yol — cədvəl alias-larından istifadə etməkdir. Onlar əsas cədvəl adını xatırlatmalı və ya məzmunu ilə məntiqi əlaqəli olmalıdır.
SELECT sa05.first_name, sa05.course_id
FROM students_archive_2005 AS sa05
Bu üsul xüsusilə faydalıdır, əgər səndə university_students_enrollments_records kimi uzun cədvəl adları varsa, usr və ya us istifadə edə bilərsən
Konkret sütunların seçilməsində tipik səhvlər
Sütun adlarında səhvlər. Əgər sütunun adını səhv yazsan, belə bir xəta mesajı alacaqsan:
ERROR: column "lastname" does not exist. Sütun adlarının düzgün yazıldığını yoxla.Konfliktli adlar. Sorğuda bir neçə cədvəl iştirak edəndə, mütləq göstər ki, hansı cədvələ aid sahədir. Məsələn,
students.first_name.SELECT *istifadə etmək — yeni başlayanlar üçün tələdir. Bəli, işləyir və çox rahatdır, amma böyük layihələrdə bu pis praktikadır! Həmişə yalnız həqiqətən lazım olan sütunları seç.
GO TO FULL VERSION