CodeGym /Kurslar /SQL SELF /Sadə sorğuların qurulması: SELECT, WHERE və ORDER BY ilə ...

Sadə sorğuların qurulması: SELECT, WHERE və ORDER BY ilə işləmək

SQL SELF
Səviyyə , Dərs
Mövcuddur

İndi isə gəlin bütün bu bilikləri bir yerə yığaq və SELECT, WHEREORDER BY kombinasiyası ilə sadə, amma faydalı sorğular qurmağı öyrənək. Bu bacarıq sənə çoxlu tapşırıqlarda lazım olacaq, məsələn, istifadəçilərin siyahısını almaqdan tutmuş kiçik hesabatlar hazırlamağa qədər.

Başlamazdan əvvəl, sadə SQL-sorğusunun strukturu necə olur, yadına salaq:

SELECT kolonka1, kolonka2, kolonka3
FROM cədvəl
WHERE şərt
ORDER BY kolonka ASC
LIMIT sətr_sayı
OFFSET sətr_sayı;

Əgər SQL ədəbi əsər olsaydı, SELECT — fəsil başlığı, FROM — onun məzmunu, WHERE isə süjetin izahı olardı. ORDER BY isə oxumağı daha maraqlı etmək üçün qayda-qanun əlavə edir!

Operatorların ardıcıllığı dəqiq olmalıdır. Bəzilərini buraxmaq olar, amma ardıcıllığı dəyişmək olmaz.

Nümunə 1: Əla qiymət alan tələbələrin adlarını seçmək

Təsəvvür elə ki, bizdə belə bir students cədvəli və aşağıdakı məlumatlar var:

id name age grade
1 Otto 21 A
2 Maria 22 B
3 Alex 20 A
4 Nat 23 C
5 Dan 25 B

Sənə lazım olan — bütün əla qiymət alan tələbələrin siyahısını almaqdır (yəni grade = 'A'), adlarına görə sıralanmış şəkildə. Bunu belə edirik:

SELECT name
FROM students
WHERE grade = 'A'
ORDER BY name ASC;

Nəticə:

name
Alex
Otto

İzah:

  1. SELECT name — yalnız adı seçirik. Lazımsız məlumatları çıxarmağa ehtiyac yoxdur.
  2. WHERE grade = 'A' — yalnız əla qiymət alanları filtr edirik.
  3. ORDER BY name ASC — tələbələrin adlarını əlifba sırası ilə düzürük.

Nümunə 2: Qiymətə görə məhsul axtarışı

İndi isə təsəvvür elə ki, bizdə products adlı məhsullar cədvəli var:

id product_name category price
1 Smartfon Electronics 30000
2 Televizor Electronics 45000
3 Xolodilnik Appliances 50000
4 Pilesos Appliances 15000
5 Lampochka Lighting 500

Tapşırığımız — "Electronics" kateqoriyasından olan məhsulları qiymətə görə azalan sırada almaqdır. Sorğu belə olacaq:

SELECT product_name, price
FROM products
WHERE category = 'Electronics'
ORDER BY price DESC;

Nəticə:

product_name price
Televizor 45000
Smartfon 30000

İzah:

  1. SELECT product_name, price — məhsulun adını və qiymətini seçirik.
  2. WHERE category = 'Electronics' — yalnız "Electronics" kateqoriyasındakı məhsulları filtr edirik.
  3. ORDER BY price DESC — nəticəni qiymətə görə azalan sırada düzürük (ən bahalı birinci olacaq).

Nümunə 3: Mürəkkəb filtrlər və məntiq

Eyni students cədvəlindən istifadə edirik. Tutaq ki, bizə 21 yaşdan böyük olan və qiyməti B və ya C olan tələbələri tapmaq lazımdır, nəticəni yaşa görə sıralamaq şərtilə. Burada bir neçə şərti birləşdiririk:

SELECT name, age, grade
FROM students
WHERE age > 21 AND (grade = 'B' OR grade = 'C')
ORDER BY age ASC;

Nəticə:

name age grade
Maria 22 B
Nat 23 C
Dan 25 B

İzah:

  1. WHERE age > 21 — yalnız 21 yaşdan böyük tələbələri seçirik.
  2. AND (grade = 'B' OR grade = 'C') — qiyməti B və ya C olanları filtr edirik. Dairəvi mötərizələr şərtləri qruplaşdırmaq üçündür.
  3. ORDER BY age ASC — nəticəni yaşa görə artan sırada düzürük, ən gəncdən başlayaraq.

Nümunə 4: Sıralama və filtrin birləşdirilməsi

Yenidən products cədvəlinə qayıdırıq. Məqsədimiz — qiyməti 50 000-dən ucuz olan məhsulları tapmaq, əvvəlcə kateqoriyaya görə, sonra isə hər kateqoriyada qiymətə görə artan sırada düzülməkdir.

SELECT product_name, category, price
FROM products
WHERE price < 50000
ORDER BY category ASC, price ASC;

Nəticə:

product_name category price
Pilesos Appliances 15000
Smartfon Electronics 30000
Televizor Electronics 45000
Lampochka Lighting 500

İzah:

  1. WHERE price < 50000 — əvvəlcə yalnız 50 000-dən ucuz məhsulları filtr edirik.
  2. ORDER BY category ASC, price ASC — əvvəlcə kateqoriyaya görə (əlifba sırası ilə), sonra isə hər kateqoriyada qiymətə görə artan sırada düzürük.

Nümunə 5: Tez-tez rast gəlinən səhv — şərtləri unutmaq

İndi isə baxaq, nə səhv ola bilər. Tutaq ki, məntiqi operatorlarla işləyərkən şərtləri qruplaşdırmağı unuduruq?

Səhv sorğu:

SELECT name, age, grade
FROM students
WHERE age > 21 AND grade = 'B' OR grade = 'C'
ORDER BY age ASC;

Burada OR grade = 'C' AND age > 21 nəzərə alınmadan işləyəcək və sorğu düzgün nəticə qaytarmayacaq. Yəni, qiyməti C olan bütün tələbələr çıxacaq, hətta 21 yaşdan kiçik olsalar belə.

Ona görə də həmişə mötərizələrdən istifadə et, aydın olsun:

WHERE age > 21 AND (grade = 'B' OR grade = 'C')
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION