SQL (Structured Query Language)
SQL, verilənlər bazası ilə əlaqə qurmaq üçün istifadə olunan standart sorğu dilidir. Bu dil vasitəsilə verilənlər bazasında məlumatları yaratmaq, oxumaq, yeniləmək və silmək mümkündür.
SQL Kateqoriyaları
Data Definition Language (DDL)
DDL, verilənlər bazasının strukturunu yaratmaq, dəyişdirmək və silmək üçün istifadə olunur.
- CREATE: Yeni verilənlər bazası obyektləri (cədvəllər, indekslər, görünüşlər) yaradır.
PostgreSQL cədvəl yaradılması nümunəsi
CREATE TABLE istifadeciler (
id SERIAL PRIMARY KEY,
ad VARCHAR(50) NOT NULL,
soyad VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
-- Index yaradılması
CREATE INDEX idx_istifadeci_email ON istifadeciler(email);
CREATE INDEX idx_istifadeci_ad_soyad ON istifadeciler(ad, soyad);
-
ALTER: Mövcud obyektlərin strukturunu dəyişdirir.
ALTER TABLE istifadeciler ADD COLUMN dogum_tarixi DATE; -
DROP: Obyektləri silir.
DROP TABLE istifadeciler; -
TRUNCATE: Cədvəldəki bütün məlumatları silir, lakin cədvəl strukturunu saxlayır.
TRUNCATE TABLE istifadeciler;
Data Manipulation Language (DML)
DML, verilənlər bazasındakı məlumatları manipulyasiya etmək üçün istifadə olunur.
-
SELECT: Məlumatları oxuyur.
SELECT ad, soyad FROM istifadeciler WHERE yas > 25; -
INSERT: Yeni məlumat əlavə edir.
INSERT INTO istifadeciler (id, ad, soyad, email) VALUES (1, 'Əli', 'Məmmədov', 'ali@example.com'); -
UPDATE: Mövcud məlumatları yeniləyir.
UPDATE istifadeciler SET yas = 30 WHERE id = 1; -
DELETE: Məlumatları silir.
DELETE FROM istifadeciler WHERE id = 1;
Data Control Language (DCL)
DCL, verilənlər bazasına giriş icazələrini idarə etmək üçün istifadə olunur.
-
GRANT: İstifadəçilərə müəyyən icazələr verir.
GRANT SELECT, INSERT ON istifadeciler TO user1; -
REVOKE: İstifadəçilərdən icazələri geri alır.
REVOKE INSERT ON istifadeciler FROM user1;
Transaction Control Language (TCL)
TCL, tranzaksiyaları idarə etmək üçün istifadə olunur və ACID prinsiplərinin tətbiqini təmin edir.
- COMMIT: Tranzaksiyanı təsdiqləyir və dəyişiklikləri daimi edir.
- ROLLBACK: Tranzaksiyanı geri qaytarır və dəyişiklikləri ləğv edir.
- SAVEPOINT: Tranzaksiya daxilində yaddaş nöqtəsi yaradır.
PostgreSQL tranzaksiya nümunələri
-- COMMIT nümunəsi - pul köçürmə
BEGIN;
UPDATE hesablar SET balans = balans - 100.00 WHERE hesab_id = 1;
UPDATE hesablar SET balans = balans + 100.00 WHERE hesab_id = 2;
-- Balansları yoxla
SELECT hesab_id, balans FROM hesablar WHERE hesab_id IN (1, 2);
COMMIT;
-- ROLLBACK nümunəsi
BEGIN;
UPDATE hesablar SET balans = balans - 100.00 WHERE hesab_id = 1;
-- Xəta baş verdi - balans mənfi oldu
SELECT balans FROM hesablar WHERE hesab_id = 1;
ROLLBACK;
-- SAVEPOINT nümunəsi
BEGIN;
INSERT INTO istifadeciler (ad, soyad, email) VALUES ('Ali', 'Məmmədov', 'ali@test.com');
SAVEPOINT user_created;
INSERT INTO sifarisler (istifadeci_id, mebleg) VALUES (1, 150.00);
SAVEPOINT order_created;
-- Bu əməliyyat uğursuz olsa
UPDATE hesablar SET balans = balans - 1000000 WHERE hesab_id = 1;
-- Yalnız son əməliyyatı geri qaytar
ROLLBACK TO order_created;
COMMIT;
SQL Sorğusunun İcra Mərhələləri
SQL sorğusu verilənlər bazası mühərriki tərəfindən bir neçə mərhələdə emal olunur:
-
Parsing (Təhlil):
- SQL sorğusu sintaksis və semantika baxımından yoxlanılır
- Parse tree (sintaksis ağacı) yaradılır
- Sorğunun düzgünlüyü təsdiqlənir
-
Optimization (Optimallaşdırma):
- Query Planner müxtəlif icra planlarını qiymətləndirir
- Statistika və indekslər əsasında ən effektiv plan seçilir
- Execution plan (icra planı) yaradılır
-
Execution (İcra):
- Seçilmiş plan üzrə məlumatlar oxunur
- Filtrlər, birləşmələr (joins) və digər əməliyyatlar yerinə yetirilir
- Nəticə dəsti formalaşdırılır
-
Result Return (Nəticənin Qaytarılması):
- Emal edilmiş məlumatlar istifadəçiyə qaytarılır
- Böyük nəticə dəstləri adətən hissə-hissə (chunk) qaytarılır
SQL Optimallaşdırma Üsulları
İndekslərdən İstifadə
CREATE INDEX idx_istifadeci_email ON istifadeciler(email);
Sorğu Optimallaşdırması
-
WHERE şərtlərinin düzgün istifadəsi:
-- Yaxşı
SELECT * FROM sifarisler WHERE musteri_id = 100;
-- Pis (indeks istifadə edilmir)
SELECT * FROM sifarisler WHERE YEAR(sifaris_tarixi) = 2023; -
JOIN əməliyyatlarının optimallaşdırılması:
-- İndeksli sütunlar üzərində JOIN
SELECT m.ad, s.mebleg
FROM musteriler m
JOIN sifarisler s ON m.id = s.musteri_id; -
EXPLAIN istifadəsi:
EXPLAIN SELECT * FROM sifarisler WHERE musteri_id = 100;
Ümumi SQL Funksiyaları
Aqreqat Funksiyalar
-
COUNT: Sətirlərin sayını hesablayır
SELECT COUNT(*) FROM sifarisler WHERE musteri_id = 100; -
SUM: Dəyərlərin cəmini hesablayır
SELECT SUM(mebleg) FROM sifarisler WHERE musteri_id = 100; -
AVG, MIN, MAX: Orta, minimum və maksimum dəyərləri hesablayır
SELECT AVG(mebleg), MIN(mebleg), MAX(mebleg) FROM sifarisler;
String Funksiyaları
- CONCAT, SUBSTRING, UPPER, LOWER: Mətn manipulyasiyaları
SELECT CONCAT(ad, ' ', soyad) AS tam_ad FROM istifadeciler;
Tarix Funksiyaları
- NOW, DATE_ADD, DATEDIFF: Tarix əməliyyatları
SELECT * FROM sifarisler WHERE sifaris_tarixi > DATE_SUB(NOW(), INTERVAL 30 DAY);