VERİTABANI SQL (Structured Query Language)
SQL'de Gruplama Bir tablonun satırları gruplara ayrılarak fonksiyonların bunlara uygulanması mümkündür. Gruplara ayırmak için SELECT deyimi içerisinde GROUP BY ifadesi kullanılır. Örnek: OGRENCI tablosunda bulunan her bölüm için öğrenci sayısını ve burs toplamını hesaplayan SQL İfadesi : SELECT BOLUM, COUNT(ADI) AS SAYI, SUM (BURS) AS TOPLAM, FROM OGRENCI GROUP BY BOLUM
GROUP BY Komutu Kullanılırken Dikkat Edilmesi Gereken Bazı Hususlar: GROUP BY ile takma isimler kullanılmaz. GROUP BY ile tanımlanan sütunların belirtilen sütunlara göre artan sırada olduğu varsayılır. Sıralamayı azalan şekilde düzenlemek için ORDER BY komutu kullanılır. GROUP BY içinde belirtilen sütun isimleri grup fonksiyonu içinde yer almak zorunda değildir. GROUP BY içinde belirtilen sütun isimleri SELECT listesinde yer almak zorunda değildir.
Birden Fazla Sütuna Göre Gruplandırma GROUP BY ifadesi ile birden fazla sütuna göre gruplandırma yapmak mümkündür. Örnek: Her BOLUM ve BOLUM içindeki GOREV'lere göre personeli gruplayarak MAAS ortalamalarını elde etmek amacıyla aşağıdaki SQL cümlesi yazılır. SELECT BOLUM, GOREV, AVG (MAAS) FROM PERSONEL GROUP BY BOLUM, GOREV
Grupta Koşul Kullanılması : Grup işlemleri yapılırken istenen bazı koşullar HAVING ifadesi ile kullanılabilir. Örnek: OGRENCI tablosunun içerisinde sadece BILGISAYAR ve ENDUSTRI bölümleri için her bölümün ortalama burs ücretini hesaplayan SQL ifadesi SELECT BOLUM, AVG(BURS) AS ORTALAMA FROM OGRENCI GROUP BY BOLUM HAVING BOLUM IN('BILGISAYAR','ENDUSTRI')
Örnekler Personel tablosunun içerisinde sadece 10, 20, 30 numaralı bölümler için her bölümün ortalama ücretlerini hesaplayan SQL cümlesi: SELECT Bolum_No AS [Bölüm No], AVG (Ucret) AS Ortalama FROM Personel GROUP BY Bolum_No HAVING Bolum_No IN (10, 20, 30) Personel tablosunda ortalama ücreti 3500 den büyük olan bölümlerin numarasını ve o bölümdeki en yüksek ücreti hesaplayan SQL cümlesi: SELECT Bolum_No AS [Bölüm No], MAX (Ucret) AS [En Çok] FROM Personel GROUP BY Bolum_No HAVING Bolum_No >3500
ÇOKLU TABLO İŞLEMLERİ SELECT ifadesi birden fazla tablodan da sorgulama yapmak istendiği durumlarda da kullanılabilir. Birden fazla tablodan sorgulama yapılmak istendiği durumlarda tabloların belirli bir sütuna göre birbirlerine bağlanması gerekir. Örnek: Bir işyerinde çalışanların kişisel bilgilerini PERSONEL tablosundan, bölüm bilgilerini BOLUM tablosundan almak için yazılacak SQL ifadesi SELECT PERSONEL.PERNO, PERSONEL.AD, PERSONEL.BOL_NO, BOLUM.BOL_AD, BOLUM.BOL_TEL FROM PERSONEL, BOLUM WHERE PERSONEL.BOL_NO=BOLUM.BOL_NO
UNION ve UNION ALL Operatörleri UNION operatörü verilen şart ifadesine uygun olarak, çift kayıtları göz ardı eder ve her iki kümedeki tüm kayıtları seçer. Buna karşılık verilen şart ifadesine uygun olarak çift kayıtlarda dahil olmak üzere tüm kayıtların seçilmesi isteniyorsa UNION ALL operatörü kullanılır. Örnek: OGRENCI tablosunda adı M ile başlayanları veya bölümü B ile başlayanları listelemek için SQL ifadesi. SELECT ADI, OGRNO, BOLUM FROM OGRENCI WHERE ADI LIKE 'M*' UNION SELECT ADI, OGRNO, BOLUM FROM OGRENCI WHERE BOLUM LIKE 'B*'
UNION ve UNION ALL Operatörleri Üstteki SQL ifadesi ile aynı olan kayıtlar görüntülemez. Aynı olan kayıtlarında görüntülenmesi isteniyorsa UNION ALL anahtar kelimesi kullanılır. SELECT ADI, OGRNO, BOLUM FROM OGRENCI WHERE ADI LIKE 'M*' UNION ALL SELECT ADI, OGRNO, BOLUM FROM OGRENCI WHERE BOLUM LIKE 'B*'
Çoklu SELECT Deyimi Bu tip SQL ifadelerinde, ana SELECT sorgusu bir başka alt SELECT sorgusundan elde edilen sonuçları kullanır. SELECT liste FROM tablo WHERE ifade, işleç (SELECT liste FROM tablo) Ana sorgu ile alt sorgu birbirine WHERE, HAVING ve FROM anahtar kelimeleri ile kullanılabilir.
Örnek: Öğrenci numarası "0901.10111" olan öğrencimizden daha fazla burs alan öğrencileri listeleyecek SQL ifadesi SELECT AD, OGRNO, BURS FROM OGRENCI WHERE BURS> (SELECT BURS FROM OGRENCI WHERE OGRNO='0901.10111')
Grup Fonksiyonlarının Kullanılması Grup fonksiyonları sadece bir değer döndürdükleri için, bu tür fonksiyonlar tek satır alt sorgulama işlemlerinde kullanılabilir. Örnek: Personel içerisinde ortalama maaştan daha fazla maaş alan personeli listelemek için SQL ifadesi : SELECT ADI, MAAS FROM PERSONEL WHERE MAAS> (SELECT AVG(MAAS) FROM PERSONEL)
HAVING İle Grup Şartlarının Tanımlanması Örnek: "SATIN ALMA" bölümünde en yüksek ücret alan personelin ücretinden daha fazla ücret alan bölümleri listeleyen SQL ifadesi: SELECT BOLUM, MAX(MAAS) AS [EN FAZLA MAAŞ] FROM PERSONEL GROUP BY BOLUM HAVING MAX(MAAS)> (SELECT MAX(MAAS) FROM PERSONEL WHERE BOLUM='SATIN ALMA')
Çoklu Satır Alt Sorgusu Alt sorgudan bir satır yerine daha fazla sayıda satır elde ediliyorsa bu kez sorgu çoklu satır alt sorgusu olarak değerlendirilir. Bu tür sorgular aşağıdaki operatörler yardımıyla gerçekleştirilir. IN operatörü : Liste içerisindeki değerlerden seçme işlemini gerçekleştirir Örnek: Her bölümdeki en fazla maaşları belirleyerek, bu belirlenen değerlerle aynı maaşı alan personeli listelemek için gerekli SQL ifadesi : SELECT AD, MAAS, BOLUM FROM PERSONEL WHERE MAAS IN( SELECT MAX(MAAS) FROM PERSONEL GROUP BY BOLUM)
Çoklu Satır Alt Sorgusu ANY Operatörü : Alt sorgu tarafından üretilen her bir değer ana sorgu içinde belirlenen bir değerle karşılaştırmak söz konusu ise ANY operatörü kullanılır. Bu operatör "=, <, >" operatörlerinden biri ile kullanılabilir. =ANY ifadesi IN tanımı ile eşdeğerdir. <ANY en çoktan daha az anlamına gelir >ANY en az dan daha büyük anlamına gelir. Örnek: Personel tablosunda en fazla maaş alan HİZMETLİ'den daha az maaş alan personeli listelemek için SQL ifadesi : SELECT ADI, MAAS, GOREV FROM PERSONEL WHERE MAAS <ANY (SELECT MAAS FROM PERSONEL WHERE GOREV='HİZMETLİ')
Çoklu Satır Alt Sorgusu ALL OPERATÖRÜ : Alt sorgu tarafından üretilen tüm değerlerin, ana sorgu içerisinde bir girdi olarak kullanılması söz konusu ise ALL operatörü kullanılır. <ALL en küçükten daha küçük anlamına gelir >ALL en büyükten daha büyük anlamına gelir. Örnek: Maaşı tüm bölümlerin ortalama maaşından daha küçük olan personeli listelemek için SQL ifadesi : SELECT ADI, MAAS FROM PERSONEL WHERE MAAS <ALL(SELECT AVG(MAAS) FROM PERSONEL GROUP BY BOLUM)
Veri Ekleme, Güncelleme ve Silme İşlemleri
SELECT deyimi ile yapılan işlemler sorgulama işlemleridir. Bu sorgulamalar Tablo üzerinde herhangi bir değişikliğe yol açmazlar. Eğer bir tabloya yeni bir kayıt eklenmesi, bir satır güncelleme yapılması ya da bir satırın silinmesi isteniyorsa, SELECT deyim ile bu gerçekleşmez. Bunlar için INSERT, UPDATE ve DELETE deyimleri kullanılır.
Tabloya Satır Ekleme (INSERT) INSERT INTO tablo (sütunlar) VALUES (değerler) Bu deyim çalıştırıldığında tabloya yeni bir satır eklenir. Örnek: OGRENCI tablosuna yeni bir kayıt ekleyelim. SELECT * FROM OGRENCI INSERT INTO OGRENCI(NO, ADI, ADRES) VALUES('0901.10999', 'ALİ YILDIZ', 'MALATYA') Örnek: NULL değerinin girilmesi SELECT * FROM OGRENCI INSERT INTO OGRENCI(NO, ADI, ADRES) VALUES('0901.10999', 'ALİ YILDIZ', NULL)
Tablodaki Verileri Güncelleme (UPDATE) Bir tablonun içerdiği değerler değiştirilmek istendiğinde UPDATE deyimi kullanılır. UPDATE tablo SET sütunl =değer1, sütun2=değer2,... WHERE şart Örnek: Personel tablosunda sici nosu A9765 olan memurun DOGUMYERI'ni 'SIVAS' olarak değiştirmek istiyoruz. UPDATE PERSONEL SET DOGUMYERI='SIVAS' WHERE SICIL_NO='A9765'
Örnek : Maaşları 1000 ile 2500 arasında olan çalışanın maaşını 3000 yapan SQL ifadesi: UPDATE PERSONEL SET MAAS=3000 WHERE MAAS BETWEEN 1000 AND 2500; OGRENCI tablosunda yer alan kayıtlardan ADRES'i İstanbul ve Ankara olanlanrın tümünü Sakarya yapan SQL ifadesi : UPDATE OGRENCI SET ADRES='SAKARYA' WHERE ADRES IN ('İstanbul', 'Ankara')
Tablodan Satır Silmek (DELETE) Tabloda yer alan bir ya da daha fazla satırı silmek için DELETE deyimi kullanılır. DELETE [FROM] tablo [WHERE şart] Örnek: OGRENCI tablosunun tüm kayıtlarını silmek için : DELETE FROM OGRENCI Örnek: OGRENCI tablosu içerisinde yer alan BOLUM_KODU 12 olan bölümü silmek için : DELETE FROM OGRENCI WHERE BOLUM_KODU= 12