Takip et

SQL Sorguları ile Öğrenci-Ders Yönetim Sistemi

SQL Sorguları ile Öğrenci-Ders Yönetim Sistemi

Üniversiteler ve kolejler için verimli bir öğrenci ve ders yönetim sistemi kurmanın en kritik noktalarından biri, verinin etkili bir şekilde yönetilmesidir. Bu noktada, SQL veritabanı yönetim sistemleri ve güçlü SQL sorguları devreye girer. Bu makale, SQL’i kullanarak bir öğrenci ve ders yönetim sistemini nasıl tasarlayabileceğinizi ve yönetebileceğinizi adım adım açıklayacaktır. Öğrenci kayıtlarını, ders bilgilerini, notları ve daha fazlasını SQL sorguları ile nasıl sorgulayacağınızı, güncelleyeceğinizi ve yöneteceğinizi öğreneceksiniz. Hazırsanız, SQL dünyasına dalalım!

Öğrenci-Ders Yönetim Sistemi için Temel SQL Kavramları

Öncelikle, öğrenci ve ders yönetim sistemimiz için gerekli temel SQL kavramlarını gözden geçirelim. Bu sistemde, muhtemelen “Öğrenciler” ve “Dersler” adlı iki ana tablo ile çalışacağız. “Öğrenciler” tablosu, her öğrenci için öğrenci kimliği (öğrenci_id), adı, soyadı, bölüm bilgisi gibi alanlar içerecektir. “Dersler” tablosu ise ders kodu (ders_kodu), ders adı, kredi bilgisi ve hoca bilgisi gibi alanlar içerecektir. Bu iki tablo arasında bir ilişki kuracak bir “ÖğrenciDers” tablosu da ekleyebiliriz. Bu tabloda, öğrenci_id ve ders_kodu alanları yer alarak her öğrencinin hangi dersleri aldığını takip edebiliriz.

İşte bu tabloları oluşturmak için kullanabileceğimiz SQL komutları:

CREATE TABLE Ogrenciler (
    ogrenci_id INT PRIMARY KEY,
    adi VARCHAR(255),
    soyadi VARCHAR(255),
    bolum VARCHAR(255)
);

CREATE TABLE Dersler (
    ders_kodu VARCHAR(10) PRIMARY KEY,
    ders_adi VARCHAR(255),
    kredi INT,
    hoca_adi VARCHAR(255)
);

CREATE TABLE OgrenciDers (
    ogrenci_id INT,
    ders_kodu VARCHAR(10),
    FOREIGN KEY (ogrenci_id) REFERENCES Ogrenciler(ogrenci_id),
    FOREIGN KEY (ders_kodu) REFERENCES Dersler(ders_kodu),
    PRIMARY KEY (ogrenci_id, ders_kodu)
);

Bu komutlar, her bir tablonun yapısını ve alanlarını tanımlar. PRIMARY KEY kısıtlaması, her tablonun benzersiz bir kayıt tanımlayıcısına sahip olmasını sağlar. FOREIGN KEY kısıtlaması ise iki tablo arasındaki ilişkiyi tanımlar ve veri bütünlüğünü korur. Bu temel yapıyı oluşturduktan sonra, daha karmaşık sorgular yazmaya başlayabiliriz.

Öğrenci Bilgilerine Nasıl Erişilir?

Sistemde kayıtlı öğrencilerin bilgilerini görüntülemek için SELECT komutunu kullanabiliriz. Örneğin, tüm öğrencilerin adını, soyadını ve bölümünü görüntülemek için aşağıdaki sorguyu kullanabiliriz:

SELECT adi, soyadi, bolum
FROM Ogrenciler;

Belirli bir bölüme ait öğrencilerin bilgilerini görüntülemek için WHERE koşulunu kullanabiliriz. Örneğin, Bilgisayar Mühendisliği bölümündeki öğrencilerin bilgilerini görüntülemek için:

SELECT adi, soyadi, bolum
FROM Ogrenciler
WHERE bolum = 'Bilgisayar Mühendisliği';

Daha karmaşık sorgular için ORDER BY ve LIMIT komutlarını da kullanabiliriz. Örneğin, alfabetik sırada ilk 10 öğrencinin listesini görüntülemek için:

SELECT adi, soyadi, bolum
FROM Ogrenciler
ORDER BY soyadi
LIMIT 10;

Ders Bilgilerine ve Öğrenci-Ders İlişkisine Nasıl Erişilir?

Ders bilgilerine erişmek için Dersler tablosunu sorgulayabiliriz. Tüm derslerin listesini görüntülemek için şu sorguyu kullanabiliriz:

SELECT ders_kodu, ders_adi, kredi, hoca_adi
FROM Dersler;

Bir öğrencinin aldığı dersleri görüntülemek için JOIN komutunu kullanarak Ogrenciler ve OgrenciDers tablolarını birleştirebiliriz. Örneğin, öğrenci_id'si 1 olan öğrencinin aldığı dersleri görüntülemek için:

SELECT d.ders_adi, d.kredi
FROM OgrenciDers od
JOIN Dersler d ON od.ders_kodu = d.ders_kodu
WHERE od.ogrenci_id = 1;

Bu sorgu, OgrenciDers tablosundaki ogrenci_id ve Dersler tablosundaki ders_kodu alanlarını kullanarak iki tabloyu birleştirir ve öğrenci_id'si 1 olan öğrencinin aldığı derslerin adlarını ve kredilerini görüntüler. Daha karmaşık raporlamalar için GROUP BY ve HAVING komutlarını da kullanabiliriz. Örneğin, her dersin kaç öğrenci tarafından alındığını görüntülemek için:

SELECT d.ders_adi, COUNT(od.ogrenci_id) AS ogrenci_sayisi
FROM OgrenciDers od
JOIN Dersler d ON od.ders_kodu = d.ders_kodu
GROUP BY d.ders_adi
HAVING COUNT(od.ogrenci_id) > 5;

Veri Güncelleme ve Silme İşlemleri

Sistemdeki verileri güncellemek ve silmek için UPDATE ve DELETE komutlarını kullanırız. Örneğin, öğrenci_id'si 1 olan öğrencinin bölümünü değiştirmek için:

UPDATE Ogrenciler
SET bolum = 'Yazılım Mühendisliği'
WHERE ogrenci_id = 1;

Öğrenci_id'si 2 olan öğrencinin kayıtlarını silmek için (Dikkat: Bu işlem geri alınamaz!):

DELETE FROM Ogrenciler
WHERE ogrenci_id = 2;

Dikkat: Veri silme işlemlerini yaparken son derece dikkatli olun. Yanlışlıkla önemli verileri silebilirsiniz. İşlemlerden önce mutlaka yedek almayı veya işlemleri test ortamında denemeyi unutmayın. DELETE komutu kullanmadan önce mutlaka SELECT komutu ile silinecek verileri kontrol etmelisiniz.

İleri Düzey SQL Sorguları ve Optimizasyon

Daha gelişmiş SQL sorguları, performans iyileştirmeleri ve optimize edilmiş sorgular için alt sorgular (subqueries), birden çok tablo birleştirmeleri (JOIN çeşitleri: INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN), indeksleme ve view'ler gibi konulara değinebiliriz. Örneğin, bir öğrencinin aldığı derslerin ortalama kredilerini bulmak için alt sorgu kullanabiliriz:

SELECT AVG(kredi) AS ortalama_kredi
FROM (
    SELECT d.kredi
    FROM OgrenciDers od
    JOIN Dersler d ON od.ders_kodu = d.ders_kodu
    WHERE od.ogrenci_id = 1
) AS Dersler;

Veritabanı performansını artırmak için indeksleme çok önemlidir. Sıkça sorgu yapılan alanlara indeks eklemek sorguların çok daha hızlı çalışmasını sağlar. Bunun için CREATE INDEX komutunu kullanabilirsiniz. Örneğin, Ogrenciler tablosundaki soyadi alanına indeks eklemek için:

CREATE INDEX soyadi_index ON Ogrenciler (soyadi);

Daha karmaşık ve büyük veritabanlarında performans iyileştirmeleri için, sorguları optimize etmeniz ve uygun indeksleri oluşturmanız gerekir. Fatih Soysal'ın veritabanı optimizasyonu hakkındaki yazılarını (https://fatihsoysal.com) inceleyerek daha detaylı bilgi edinebilirsiniz.

Öğrenme Yol Haritası

Bu makalede anlatılan konuları öğrenmek için aşağıdaki yol haritasını takip edebilirsiniz:

Yeni Başlayanlar İçin:

  • Temel SQL komutlarını (SELECT, INSERT, UPDATE, DELETE) öğrenin.
  • Veritabanı tablolarını nasıl oluşturacağınızı ve ilişkilendireceğinizi öğrenin.
  • WHERE, ORDER BY, LIMIT gibi temel koşul ve sıralama komutlarını öğrenin.
  • Basit SELECT sorguları yazarak verileri sorgulama alıştırması yapın.

Orta Seviye:

  • JOIN komutlarını kullanarak birden çok tabloyu birleştirin.
  • Alt sorgular (subqueries) kullanmayı öğrenin.
  • GROUP BY ve HAVING komutlarını kullanarak verileri gruplayın ve filtreleyin.
  • Veri bütünlüğü ve kısıtlamaları öğrenin (PRIMARY KEY, FOREIGN KEY).

İleri Seviye:

  • Veritabanı optimizasyon tekniklerini öğrenin (indeksleme, sorgu optimizasyonu).
  • Farklı JOIN türlerini (INNER JOIN, LEFT JOIN, RIGHT JOIN) ve kullanım alanlarını öğrenin.
  • Stored procedures, triggers ve functions gibi gelişmiş SQL özelliklerini öğrenin.
  • Karmaşık sorgular yazarak ve performans analizleri yaparak deneyiminizi geliştirin.

Gerçek Dünya Senaryosu: Not Girişi ve Ortalama Hesaplama

Öğrenci ders yönetim sisteminde, her ders için notların girilmesi ve öğrencilerin dönem sonu ortalamalarının hesaplanması kritik bir işlevdir. Bu işlem için, "Notlar" adlı yeni bir tablo oluşturabiliriz. Bu tabloda, öğrenci_id, ders_kodu ve not gibi alanlar bulunur.

CREATE TABLE Notlar (
    ogrenci_id INT,
    ders_kodu VARCHAR(10),
    not INT,
    FOREIGN KEY (ogrenci_id) REFERENCES Ogrenciler(ogrenci_id),
    FOREIGN KEY (ders_kodu) REFERENCES Dersler(ders_kodu),
    PRIMARY KEY (ogrenci_id, ders_kodu)
);

Bir öğrencinin dönem sonu not ortalamasını hesaplamak için aşağıdaki SQL sorgusunu kullanabiliriz:

SELECT AVG(not) AS ortalama_not
FROM Notlar
WHERE ogrenci_id = 1;

Sonuç

SQL, öğrenci ve ders yönetim sistemleri için güçlü bir araçtır. Bu makalede, temel SQL komutlarını ve bir öğrenci-ders yönetim sistemini oluşturmak ve yönetmek için nasıl kullanılacağını öğrendiniz. Daha ileri düzey konular için Fatih Soysal'ın (https://fatihsoysal.com) web sitesini ziyaret edebilirsiniz. SQL'in gücünü keşfetmeye devam edin ve verilerinizi yönetme becerilerinizi geliştirin!

Sıkça Sorulan Sorular

  • SQL nedir? SQL (Structured Query Language), veritabanlarını yönetmek ve sorgulamak için kullanılan bir dildir.
  • JOIN komutu nedir? JOIN komutu, birden fazla tablodaki verileri birleştirmek için kullanılır.
  • Veritabanı optimizasyonu neden önemlidir? Veritabanı optimizasyonu, sorguların hızlı ve verimli çalışmasını sağlar.
  • SQL'de indeksleme nedir? İndeksleme, veritabanındaki verileri hızlı bir şekilde aramak için kullanılan bir tekniktir.
  • Veri bütünlüğü nedir? Veri bütünlüğü, verilerin doğruluğunu ve tutarlılığını sağlamaktır.

Yazar: Fatih Soysal

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.