Məzmuna keç
Educora
Başlanğıc14 dəq2 / 22

SELECT və sütun ləqəbləri

Cədvəldən lazım olan sütunları seç, yerindəcə hesablamalar apar, sütunlara ləqəb ver və DISTINCT ilə təkrarları aradan qaldır.

Özünü yoxla
Bu dərsdə öyrənəcəksən
  • SELECT ... FROM ... ilə lazımi sütunları seçmək
  • Sorğuda hesablanan sütunlar yaratmaq və AS ilə onlara ad vermək
  • DISTINCT ilə təkrarsız qiymətlər almaq

Kitabxanaçıdan nadir hallarda «mənə bütün kitabları gətir» deyə xahiş edirik. Adətən konkret nəsə istəyirik: «yalnız adlarını və müəlliflərini de». Verilənlər bazasında da belədir — bütöv cədvəl bizə az-az lazım olur. SELECT əmri bazadan tam olaraq hansı məlumatı istədiyimizi deməyə, hətta heç yerdə saxlanmayan yeni qiymətləri hesablamağa imkan verir.

SELECT və FROM

Ən sadə sorğu iki hissədən ibarətdir: SELECT-dən sonra lazım olan sütunları vergüllə ayıraraq sadalayırıq, FROM-dan sonra isə cədvəlin adını yazırıq. Nəticə də cədvəldir — yalnız seçdiyimiz sütunlarla və seçdiyimiz ardıcıllıqla. Sonundakı ORDER BY id sətirlərin şagird nömrəsinə görə düzülməsini təmin edir.

SQL
SELECT first_name, last_name, city
FROM students
ORDER BY id;
▸ Gözlənilən nəticə
first_name | last_name | city
Aysel | Məmmədova | Bakı
Murad | Əliyev | Gəncə
Leyla | Hüseynova | Bakı
Elvin | Quliyev | Sumqayıt
Nigar | Rzayeva | Şəki
Rəşad | Kərimov | Bakı
Günay | Abbasova | Lənkəran
Tural | İsmayılov | Gəncə
Səbinə | Nəsirova | Quba
Kamran | Həsənov | Bakı
Fidan | Cəfərova | Naxçıvan
Orxan | Babayev | Sumqayıt

SELECT-də hesablamalar

SELECT-də yalnız sütun adları deyil, ifadələr də yazmaq olar: +, -, *, / və bölmə qalığı üçün %. Məsələn, hər məhsulun anbardakı ümumi dəyərini tapmaq üçün qiyməti miqdara vururuq. Yeni sütun yalnız nəticədə yaranır — cədvəlin özü dəyişmir.

SQL
SELECT name, price, stock,
       price * stock AS stock_value
FROM products
ORDER BY id;
▸ Gözlənilən nəticə
name | price | stock | stock_value
Laptop | 1450 | 8 | 11600
Smartphone | 899.99 | 15 | 13499.85
Headphones | 120.5 | 40 | 4820
Notebook | 3.2 | 500 | 1600
Pen set | 7.9 | 300 | 2370
Backpack | 55 | 60 | 3300
Desk lamp | 34.99 | 25 | 874.75
Water bottle | 12 | 120 | 1440
Monitor | 310 | 0 | 0
Chess set | 42 | 18 | 756

Qiymətlər çox vaxt kəsr ədəd olur. ROUND(x, 2) funksiyası ədədi vergüldən sonra iki rəqəmə qədər yuvarlaqlaşdırır. Gəl, hər qiyməti 18% vergi daxil olmaqla hesablayaq — bunun üçün qiyməti 1,18-ə vururuq. Kodda kəsr ədədlər həmişə nöqtə ilə yazılır: 1.18.

SQL
SELECT name,
       price,
       ROUND(price * 1.18, 2) AS price_with_tax  -- price + 18%
FROM products
ORDER BY id;
▸ Gözlənilən nəticə
name | price | price_with_tax
Laptop | 1450 | 1711
Smartphone | 899.99 | 1061.99
Headphones | 120.5 | 142.19
Notebook | 3.2 | 3.78
Pen set | 7.9 | 9.32
Backpack | 55 | 64.9
Desk lamp | 34.99 | 41.29
Water bottle | 12 | 14.16
Monitor | 310 | 365.8
Chess set | 42 | 49.56
-- işarəsindən sonrakı mətn şərhdir və icra olunmur.
SQL
SELECT 7 / 2   AS int_div,
       7 / 2.0 AS real_div,
       7 % 2   AS remainder;
▸ Gözlənilən nəticə
int_div | real_div | remainder
3 | 3.5 | 1
FROM olmadan da SELECT yazmaq olar — onda SQL sadəcə kalkulyator kimi işləyir.

Ləqəblər: AS

Hesablanmış sütunun normal adı olmur — nəticədə o, price * stock kimi yöndəmsiz görünür. Ləqəb (alias) nəticədəki sütuna yeni ad verir: ifadə AS ad. AS sözünü buraxmaq da olar (price * stock stock_value da işləyir), amma onu yazanda sorğu daha aydın oxunur. Ləqəb yalnız nəticədə mövcuddur, cədvəldəki sütunun adı dəyişmir.

Mətnləri birləşdirmək üçün SQLite-da || operatoru işlədilir. Aşağıda adı, boşluğu və soyadı bir sütunda birləşdirib ona full_name ləqəbini veririk.

SQL
SELECT first_name || ' ' || last_name AS full_name,
       age
FROM students
ORDER BY id;
▸ Gözlənilən nəticə
full_name | age
Aysel Məmmədova | 15
Murad Əliyev | 16
Leyla Hüseynova | 14
Elvin Quliyev | 17
Nigar Rzayeva | 15
Rəşad Kərimov | 16
Günay Abbasova | 14
Tural İsmayılov | 17
Səbinə Nəsirova | 16
Kamran Həsənov | 15
Fidan Cəfərova | 17
Orxan Babayev | 14

Ləqəbdə boşluq olacaqsa, onu qoşa dırnağa al: AS "Course title". Yadda saxla: SQL-də qoşa dırnaq adlar (sütun, cədvəl, ləqəb) üçündür, mətn qiymətləri isə həmişə tək dırnaqda yazılır: 'Bakı'.

SQL
SELECT title   AS "Course title",
       teacher AS "Teacher"
FROM courses
ORDER BY id;
▸ Gözlənilən nəticə
Course title | Teacher
Algebra | Ramin Səfərov
Geometry | Ramin Səfərov
Mechanics | Ülviyyə Axundova
Organic Chemistry | Samir Hacıyev
World History | Nərmin Vəliyeva
Python Basics | Elnur Qasımov
English B1 | Sara Mitchell
Nə edirikSQLiteMySQLPostgreSQLSQL Server
Mətnləri birləşdirməka || bCONCAT(a, b)a || b, CONCAT(a, b)a + b, CONCAT(a, b)
Boşluqlu ləqəb"Course title"tərs apostroflar (backtick) içində"Course title"[Course title]
7 / 2 nəticəsi33.500033
Eyni iş dörd məşhur VBİS-də.

Təkrarları aradan qaldırmaq: DISTINCT

Şagirdlərimiz hansı şəhərlərdəndir? SELECT city 12 sətir qaytarar və Bakı dörd dəfə təkrarlanar. DISTINCT sözü nəticədən eyni sətirləri silir və hər qiyməti bir dəfə saxlayır.

SQL
SELECT DISTINCT city
FROM students
ORDER BY city;
▸ Gözlənilən nəticə
city
Bakı
Gəncə
Lənkəran
Naxçıvan
Quba
Sumqayıt
Şəki

DISTINCT bütün sətrə aid olur: bir neçə sütun yazsaq, təkrarsız birləşmələr alırıq. Müştərilərin ölkə və şəhərlərinə baxaq: Bakıda iki müştəri yaşayır, amma nəticədə Azerbaijan | Bakı cütü yalnız bir dəfə görünür.

SQL
SELECT DISTINCT country, city
FROM customers
ORDER BY country, city;
▸ Gözlənilən nəticə
country | city
Azerbaijan | Bakı
Azerbaijan | Gəncə
Russia | Moscow
Türkiye | Ankara
Türkiye | İstanbul
United Kingdom | London
Tapşırıq

Endirim günüdür: hər məhsulun adını (name) və 10% endirimli qiymətini göstər. Endirimli qiyməti 2 onluq rəqəmə qədər yuvarlaqlaşdır, ona sale_price ləqəbini ver və nəticəni id-yə görə sırala.

Tapşırıq · SQL
SELECT name
       -- add the discounted price here
FROM products
ORDER BY id;
▸ Gözlənilən nəticə
name | sale_price
Laptop | 1305
Smartphone | 809.99
Headphones | 108.45
Notebook | 2.88
Pen set | 7.11
Backpack | 49.5
Desk lamp | 31.49
Water bottle | 10.8
Monitor | 279
Chess set | 37.8
Tapşırıq

courses cədvəlində hansı fənlər var? Hər fənni (subject) yalnız bir dəfə göstər və əlifba sırası ilə düz.

Tapşırıq · SQL
SELECT subject
FROM courses
ORDER BY subject;
▸ Gözlənilən nəticə
subject
Chemistry
English
History
Informatics
Math
Physics

Əsas fikirlər

  • SELECT sütunlar FROM cədvəl — hər sorğunun əsasıdır; * bütün sütunlar deməkdir.
  • SELECT-də ifadələr və funksiyalar yazmaq olar, məsələn, price * stock və ROUND(x, 2).
  • AS nəticədəki sütuna ləqəb verir; cədvəldəki ad dəyişmir.
  • Mətn tək dırnaqda yazılır, || isə mətnləri birləşdirir (MySQL-də CONCAT).
  • DISTINCT nəticədən təkrarlanan sətirləri silir.
  • SQLite-da iki tam ədədin bölünməsi tam ədəd verir: 7 / 2 = 3.

Özünü yoxla

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

1 / 10
Hansı sorğu məhsulların yalnız adını və qiymətini qaytarır?