SELECT ... FROM ...ilə lazımi sütunları seçmək- Sorğuda hesablanan sütunlar yaratmaq və
ASilə onlara ad vermək DISTINCTilə 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.
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.
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.
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.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.
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ı'.
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ə edirik | SQLite | MySQL | PostgreSQL | SQL Server |
|---|---|---|---|---|
| Mətnləri birləşdirmək | a || b | CONCAT(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əsi | 3 | 3.5000 | 3 | 3 |
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.
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.
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
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.
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
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.
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 * stockvəROUND(x, 2).ASnə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). DISTINCTnə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.