SQL (Yapılandırılmış Sorgu Dili), veritabanlarında veri depolamak, işlemek ve almak için standart bir dildir.
Yaygın SQL veri tipleri şunları içerir:
-- Bu tek satırlık bir yorumdur
/*
Bu çok
satırlı bir
yorumdur
*/
DDL, veritabanı nesnelerinin yapısını tanımlamak ve değiştirmek için kullanılır.
CREATE TABLE calısanlar (
calısan_id INT PRIMARY KEY,
ad VARCHAR(50),
soyad VARCHAR(50),
ise_baslama_tarihi DATE,
maas DECIMAL(10, 2)
);
-- Sütun ekle
ALTER TABLE calısanlar ADD email VARCHAR(100);
-- Sütun değiştir
ALTER TABLE calısanlar ALTER COLUMN email VARCHAR(150);
-- Sütun sil
ALTER TABLE calısanlar DROP COLUMN email;
DROP TABLE calısanlar;
DML, veritabanındaki verileri işlemek için kullanılır.
INSERT INTO calısanlar (calısan_id, ad, soyad, ise_baslama_tarihi, maas)
VALUES (1, 'Ahmet', 'Yılmaz', '2023-01-15', 50000.00);
UPDATE calısanlar
SET maas = 55000.00
WHERE calısan_id = 1;
DELETE FROM calısanlar
WHERE calısan_id = 1;
DQL, veritabanından veri almak için kullanılır.
SELECT * FROM calısanlar;
SELECT ad, soyad, maas
FROM calısanlar
WHERE maas > 50000
ORDER BY soyad ASC;
SELECT * FROM calısanlar
WHERE ise_baslama_tarihi >= '2023-01-01' AND maas < 60000;
SELECT * FROM calısanlar
WHERE soyad LIKE 'Y%';
SELECT * FROM calısanlar
WHERE departman_id IN (1, 2, 3);
SELECT * FROM calısanlar
WHERE maas BETWEEN 40000 AND 60000;
Birleştirmeler, iki veya daha fazla tablonun ilgili sütunlarına dayalı olarak satırları birleştirmek için kullanılır.
SELECT c.ad, c.soyad, d.departman_adı
FROM calısanlar c
INNER JOIN departmanlar d ON c.departman_id = d.departman_id;
SELECT c.ad, c.soyad, d.departman_adı
FROM calısanlar c
LEFT JOIN departmanlar d ON c.departman_id = d.departman_id;
SELECT c.ad, c.soyad, d.departman_adı
FROM calısanlar c
RIGHT JOIN departmanlar d ON c.departman_id = d.departman_id;
SELECT c.ad, c.soyad, d.departman_adı
FROM calısanlar c
FULL OUTER JOIN departmanlar d ON c.departman_id = d.departman_id;
Toplama fonksiyonları, bir dizi değer üzerinde hesaplamalar yapar ve tek bir sonuç döndürür.
SELECT
COUNT(*) as toplam_calısan,
AVG(maas) as ortalama_maas,
MAX(maas) as en_yuksek_maas,
MIN(maas) as en_dusuk_maas,
SUM(maas) as toplam_maas
FROM calısanlar;
SELECT departman_id, AVG(maas) as ort_maas
FROM calısanlar
GROUP BY departman_id;
SELECT departman_id, AVG(maas) as ort_maas
FROM calısanlar
GROUP BY departman_id
HAVING AVG(maas) > 50000;
Bir alt sorgu, başka bir sorgunun içine yerleştirilmiş bir sorgudur.
SELECT ad, soyad
FROM calısanlar
WHERE departman_id IN (
SELECT departman_id
FROM departmanlar
WHERE departman_adı = 'IT'
);
SELECT
ad,
soyad,
maas,
(SELECT AVG(maas) FROM calısanlar) as ort_maas
FROM calısanlar;
İndeksler, veri alma işlemlerini hızlandırmak için kullanılır.
CREATE INDEX idx_soyad ON calısanlar (soyad);
DROP INDEX idx_soyad ON calısanlar;
Bir görünüm, bir SELECT ifadesinin sonucuna dayalı sanal bir tablodur.
CREATE VIEW yuksek_maasli_calisanlar AS
SELECT ad, soyad, maas
FROM calısanlar
WHERE maas > 60000;
SELECT * FROM yuksek_maasli_calisanlar;
Saklı yordamlar, kaydedilebilen ve yeniden kullanılabilen hazırlanmış SQL ifadeleridir.
CREATE PROCEDURE DepartmanaGoreCalisanlarıAl
@DepartmanId INT
AS
BEGIN
SELECT * FROM calısanlar
WHERE departman_id = @DepartmanId;
END;
EXEC DepartmanaGoreCalisanlarıAl @DepartmanId = 1;
Tetikleyiciler, belirli olaylar gerçekleştiğinde otomatik olarak çalışan özel saklı yordamlardır.
CREATE TRIGGER trg_DegisiklikTarihiniGuncelle
ON calısanlar
AFTER UPDATE
AS
BEGIN
UPDATE calısanlar
SET degisiklik_tarihi = GETDATE()
WHERE calısan_id IN (SELECT calısan_id FROM inserted);
END;
İşlemler, bir dizi SQL işleminin tek bir iş birimi olarak gerçekleştirilmesini sağlar.
BEGIN TRANSACTION;
UPDATE hesaplar SET bakiye = bakiye - 100 WHERE hesap_id = 1;
UPDATE hesaplar SET bakiye = bakiye + 100 WHERE hesap_id = 2;
IF @@ERROR = 0
COMMIT TRANSACTION;
ELSE
ROLLBACK TRANSACTION;
DCL, veritabanındaki verilere erişimi kontrol etmek için kullanılır.
GRANT SELECT, INSERT ON calısanlar TO kullanici1;
REVOKE INSERT ON calısanlar FROM kullanici1;
EXPLAIN SELECT * FROM calısanlar WHERE soyad = 'Yılmaz';
SELECT *
kullanmaktan kaçının2024 © Tüm hakları saklıdır - buraxta.com