T.C. MİLLÎ EĞİTİM BAKANLIĞI BİLİŞİM TEKNOLOJİLERİ VERİ TABANINDA SORGULAR 481BB0037 Ankara, 2012 Bu modül, mesleki ve teknik eğitim okul/kurumlarında uygulanan Çerçeve Öğretim Programlarında yer alan yeterlikleri kazandırmaya yönelik olarak öğrencilere rehberlik etmek amacıyla hazırlanmış bireysel öğrenme materyalidir. Millî Eğitim Bakanlığınca ücretsiz olarak verilmiştir. PARA İLE SATILMAZ. İÇİNDEKİLER AÇIKLAMALAR .................................................................................................................... ii AÇIKLAMALAR .............................................................Hata! Yer işareti tanımlanmamış. GİRİŞ ....................................................................................................................................... 1 ÖĞRENME FAALİYETİ-1 ..................................................................................................... 3 1. SORGULAR VE ÇEŞİTLERİ ............................................................................................. 3 1.1. SQL Dilinin Yapısı ....................................................................................................... 4 1.1.1. Sorgu İle Tablo Oluşturma .................................................................................... 4 1.1.2. Tablo Silme............................................................................................................ 6 1.1.3. Sütun Ekleme ......................................................................................................... 6 1.1.4. Tablo Güncelleme.................................................................................................. 7 1.1.5. SELECT Deyiminin Yapısı ................................................................................... 9 1.1.6. SQL Fonksiyonları .............................................................................................. 14 1.2. Verileri Gruplayarak Analiz Etme .............................................................................. 16 1.2.1. Grup Fonksiyonları .............................................................................................. 16 1.2.2. Birden Fazla Sütuna Göre Gruplama ................................................................... 17 1.2.3. Grup Koşullarının Kullanımı ............................................................................... 18 UYGULAMA FAALİYETİ .......................................................................................... 19 ÖLÇME VE DEĞERLENDİRME .................................................................................... 21 ÖĞRENME FAALİYETİ-2 ..............................................Hata! Yer işareti tanımlanmamış. 2. İLİŞKİLİ TABLOLAR ...................................................................................................... 23 2.1. Tabloların Birleştirilmesi ............................................................................................ 23 2.1.1. Kartezyen Çarpımı ............................................................................................... 23 2.1.2. Eşiti Olan Birleştirme .......................................................................................... 25 2.1.3. Eşiti Olmayan Birleştirme ................................................................................... 26 2.2. Alt Sorgular ................................................................................................................. 27 2.2.1. Alt Sorgu Düzenleme Kuralları ........................................................................... 27 2.2.2. Alt Sorgunun Tanımlanması ................................................................................ 28 2.2.3. Çoklu Satır Alt Sorguları ..................................................................................... 28 2.2.4. Tek Satır Alt Sorguları......................................................................................... 30 UYGULAMA FAALİYETİ .............................................................................................. 31 ÖLÇME VE DEĞERLENDİRME .................................................................................... 33 ÖĞRENME FAALİYETİ-3 ................................................................................................... 34 3. DML SORGULARI ........................................................................................................... 34 3.1. Tabloya Satır Ekleme İşlemi ....................................................................................... 34 3.1.1. INSERT Deyimi Yapısı ....................................................................................... 34 3.1.2. NULL Değer Ekleme ........................................................................................... 36 3.1.3. Fonksiyonların Kullanımı .................................................................................... 36 3.1.4. Bir Diğer Tablodan Satır Kopyalama .................................................................. 37 3.2. Tablodaki Verileri Güncelleme ................................................................................... 38 3.3. Tablolardan Veri Silme ............................................................................................... 40 UYGULAMA FAALİYETİ .............................................................................................. 42 ÖLÇME VE DEĞERLENDİRME .................................................................................... 44 MODÜL DEĞERLENDİRME ............................................................................................. 45 CEVAP ANAHTARLARI ..................................................................................................... 47 KAYNAKÇA ......................................................................................................................... 48 i AÇIKLAMALAR AÇIKLAMALAR KOD ALAN DAL/MESLEK MODÜLÜN ADI MODÜLÜN TANIMI SÜRE ÖN KOŞUL YETERLİK 481BB0037 Bilişim Teknolojileri Veri Tabanı Programcılığı, Web Programcılığı Veri Tabanında Sorgular Veri tabanı üzerinde sorguların oluşturulması ve çalıştırılması ile ilgili bilgilerin verildiği öğrenme metaryalidir. 40/24 “Veri Tabanı Hazırlama” modülünü tamamlamış olmak MODÜLÜN AMACI Genel Amaç Bu modülü başarı ile tamamlayan öğrenci; İlişkisel Veri Tabanını, SQL (Structured Query Language-Yapısal Sorgulama Dili) ve DML (Data Manipulation Language) sorgularını verimli ve düzenli çalıştırarak Veri Tabanında sorgulama yapabilecektir. Amaçlar 1. Sorgu oluşturabilecek ve çeşitlerini kullanabileceksiniz. 2. İlişkili tablolar ile sorgu hazırlayabileceksiniz. 3. Veri işleme (DML) sorgularını kullanabileceksiniz. EĞİTİM ÖĞRETİM ORTAMLARI VE DONANIMLARI Ortam: Bilgisayar Laboratuvarı Donanım:Bilgisayar, internet, projeksiyon ÖLÇME VE DEĞERLENDİRME Modül içinde yer alan her öğrenme faaliyetinden sonra verilen ölçme araçları ile kendinizi değerlendireceksiniz. Öğretmen modül sonunda ölçme aracı (çoktan seçmeli test, doğru-yanlış testi, boşluk doldurma, eşleştirme vb.) kullanarak modül uygulamaları ile kazandığınız bilgi ve becerileri ölçerek sizi değerlendirecektir. ii GİRİŞ GİRİŞ Sevgili Öğrenci, Bir önceki modül olan “Veri Tabanı Hazırlama” modülünde veri tabanı yazılımı kurulumunu yaparak, veri tabanının en önemli ögesi olan tabloları, tabloların özelliklerini ve tablolarla ilgili çeşitli işlemler yapmayı öğrenmiştiniz. Veri tabanında tablo oluşturma işleminden sonra gelen en önemli işlem ise “Sorgular” oluşturmaktır. Bu modül ile sorgular hazırlamayı öğrenecek, veri tabanı tablolarınız üzerinde ekleme, silme sıralama gibi işlemleri yapabilecek, kısacası veri tabanı tablolarınıza istediğiniz şekilde erişim sağlayabileceksiniz. Her modülün sonunda kendinizi değerlendirebileceğiniz ölçme ve değerlendirme soruları, öğrenmiş olduğunuz konuyu pekiştirmeniz için ise uygulama faaliyetleri ve tüm modüllerin sonunda bu öğrenme faaliyeti kapsamında neler öğrendiğinize dair kendinizi test etmenizi sağlayacak “Modül Değerlendirme” soruları bulunmaktadır. Bunları başarı ile tamamladığınız takdirde sizler artık “Veri Tabanında Sorgu” yapmayı öğrenmiş olacaksınız. Tabii ki takıldığınız bir konuda da öğretmeninize baş vurmayı ihmal etmeyiniz. 1 2 ÖĞRENME FAALİYETİ–1 AMAÇ ÖĞRENME FAALİYETİ-1 Sorgu oluşturabilecek ve çeşitlerini kullanabileceksiniz. ARAŞTIRMA Sorgu çeşitlerinin neler olduğunu araştırınız. SQL komutlarının kullanılan veri tabanı hazrılama programlarına göre ne gibi değişiklikleri olduğunu araştırınız. 1. SORGULAR VE ÇEŞİTLERİ “Veri Tabanı Hazırlama” modülünde veri tabanının temelini oluşturan tablolar ve tablolarla ilgili özellikler anlatılmıştı. Veri tabanında tablo oluşturma işleminden sonra gelen en önemli işlem ise “Sorgular” oluşturmaktır. Tablolardaki kayıtlarda silme, ekleme, sıralama, seçme, değiştirme gibi işlemlere ihtiyaç duyulacaksa sorgular hazırlanması gerekir. Ayrıca, yapılan bir takım işlemleri otomatikleştirmek ve verilerde yapılan değişiklikleri kaydetmeden önce gözden geçirmek istendiği zaman da sorgular oluşturulur. Tablonun yapısına ve verileri görüntüleme yöntemine göre değişik özelliklerde sorgular hazırlanmaktadır. Seçme sorguları, parametre sorguları, çapraz sorgular, eylem sorguları ve SQL sorguları kullanılan sorgu türleridir. Seçme Sorguları: En sık kullanılan sorgu türüdür. Seçme sorguları, bilgileri “veri sayfası görünümü”nde gösteren veri tabanı nesnesi türüdür. Sorgu, verileri bir veya birden fazla tablodan, mevcut sorgulardan veya bunların her ikisinden alabilmektedir. Parametre Sorguları: Parametre sorguları, çalıştırıldığı zaman bir ölçüt girilmesini sağlayan iletişim kutusunu açan sorgulardır. Örneğin bir okuldaki personelin ocak ayında sevk aldığı günleri görmek istiyorsak, açılan iletişim kutusuna ölçüt olarak istenilen tarih aralıkları girilir ve bu tarihler arasındaki veriler listelenir. Çapraz Sorgular: Bir tablodaki bilgileri analiz etmek, karşılaştırmak ve tablonun özetini hazırlamak için kullanılan sorgu türüdür. Belirtilen iki alana göre istenilen işlemi (toplama, ortalama, vs.) tablo şeklinde göstermekte kullanılır. 3 Eylem Sorguları: Tek işlemle birçok kayıtta değişiklik yapan sorgulardır. Silme sorgusu, güncelleştirme sorgusu, ekleme sorgusu ve tablo yapma sorgusu olmak üzere dört çeşit eylem sorgusu vardır. SQL Sorguları: SQL deyimlerini kullanarak veri tabanını güncelleştirme ve yönetme ile ilgili oluşturulan sorgulardır. 1.1. SQL Dilinin Yapısı SQL (Structured Query Language), veri tabanındaki verileri okumak, güncellemek, yeni veri eklemek, verileri silmek vb. gibi işlemleri yapan, program yazarken kolaylıklar sağlayan, satırlarca kodun yaptığı işlemi tek bir sorguda yapabilen, yapısal bir sorgulama dilidir. 1.1.1. Sorgu İle Tablo Oluşturma Sorgu kullanarak tablo oluşturmak için CREATE TABLE ifadesi kullanılır. SQL kodu yazılarak tablo oluşturma aşağıdaki şekilde yapılmaktadır. Kullanımı: CREATE TABLE tablo_adı ( Sütun1 veri tipi, Sütun2 veri tipi, . . sütunN veri tipi ) Sorgu kullanarak tablo oluşturmak için öncelikle “Veri Tabanı Hazırlama” modülünde öğrendiğiniz şekilde boş bir veri tabanı oluşturulur ya da önceden hazırlamış olduğunuz veri tabanı dosyası açılır. Veri tabanını oluşturduktan sonra Oluştur sekmesi altında yer alan Diğer grubundan Sorgu Tasarımı( ) düğmesine tıklanır. Sorgu Tasarımı seçeneği sorgu tasarımcısının açılmasını sağlar ve Tabloyu Göster iletişim kutusu görüntülenir. 4 Şekil 1.1: Tabloyu göster iletişim kutusu Tabloyu Göster İletişim kutusundan eklemek istenilen Tablo veya sorgular seçilip sırası ile Ekle ve Kapat düğmelerine tıklanır. Sorgu1 sekmesi üzerinde farenin sağ tuşuna basılıp açılan menüden seçeneği seçilip istenilen SQL kodları yazılır. Örnek: Aşağıdaki SQL kodları Veri tabanı hazırlama programında yazılıp çalıştırıldığı zaman PERSONEL adında bir tablo oluşturulur ve bu tablonun sütunları Personel_no, Adı, Soyadı olarak tanımlanmış olur. Çalıştır( ) düğmesine basıldığında aşağıdaki sonuç elde edilir. 5 1.1.2. Tablo Silme Daha önceden oluşturmuş olduğunuz bir tabloya ihtiyaç duymayıp veri tabanından silmek isteyebilirsiniz. Silme işlemini gerçekleştirmek için DROP deyimi kullanılmaktadır. Kullanımı: DROP TABLE tablo Örnek: DROP TABLE PERSONEL Yeni bir sorgu oluşturup yukarıdaki komut satırını yazıp çalıştırdığınız zaman veri tabanı programı önceden oluşturmuş olduğunuz PERSONEL isimli tabloyu silecektir. NOT: Tabloyu silmeden önce tabloyu kapatmanız gerekmektedir. 1.1.3. Sütun Ekleme Bir tablo oluşturduktan sonra, isteğe göre oluşturulmuş olan tabloya yeni sütunlar ekleyebilirsiniz. Tabloya yeni bir sütun eklemek için ADD COLUMN deyimi kullanılır. Kullanımı: ALTER TABLE tablo_adı ADD sütun_adı, veri_türü Örnek: Önceden oluşturulmuş olan PERSONEL isimli tabloya “Bölümü” sütununu eklemek istersek SQL ifadesi aşağıdaki şekilde olacaktır. Çalıştır( ) düğmesine basıldığında aşağıdaki sonuç elde edilecektir. 6 1.1.4. Tablo Güncelleme Belirtilen tablodaki alanların değerlerini belirtilen ölçütlere göre değiştirmek için bir güncelleme sorgusu oluşturmak gerekir. Bunun için UPDATE deyimi kullanılır. Kullanımı: UPDATE tablo SET sütun_adı=yenideğer WHERE ölçütler; Örnek: Ücret tablosundaki kayıtlarda, Maaşı isimli alanda yer alan değerlerden % 0,07 kesinti yaparak sonucu yine aynı alan üzerinde kaydetmek istensin. Ücret tablosunun kesinti yapılmadan önceki hali aşağıdaki gibidir. Maaş üzerinde % 0.07 kesinti yapmayı sağlayacak sorgu aşağıdaki gibidir. Sorgu yukarıdaki gibi yazılıp çalıştır( gibi olacaktır. 7 ) düğmesine basıldığında sonuç aşağıdaki Bazı durumlarda tanımlamış olduğunuz sütunlarda değişiklik yapmak isteyebilirsiniz. Örneğin Personel tablosunda başlangıçta tam sayı olarak tanımlamış olduğunuz İl_Kodu alanının veri türünü 15 karakterden oluşan bir metin alanı olarak değiştirmek isteyebilirsiniz. Şekil 1.2 : İl_kodu alanının veri türünün değiştirilmeden önceki hali İl_kodu veri türünü metin veri türüne dönüştürmek için Sorgu penceresine yazılması gereken kod aşağıdaki gibi olacaktır. Kod satırı yazılıp çalıştır( edilecektir. ) düğmesine basıldığı zaman aşağıdaki sonuç elde Şekil 1.3: İl_kodu alanının veri türünün değiştirilmiş hali 8 1.1.5. SELECT Deyiminin Yapısı Veri tabanında verilere erişebilmek için SELECT deyimi kullanılmaktadır. Select deyimi ile bir tabloda bulunan belli bir sütun, birden fazla sütun veya tüm sütunları çekebilirsiniz. Bunun yanı sıra sorgulama işlemlerini gerçekleştirmek için de SELECT deyiminden yararlanılır. Kullanımı: SELECT [sütun_listesi] FROM [tablo_listesi] Örnek: SELECT adı FROM PERSONEL Bu satır ile Personel tablosunda bulunan “adı” alanını seçersiniz. Örnek: SELECT * FROM PERSONEL Bu satır ile Personel tablosunda bulunan tüm alanlar seçilmiş olur. 9 Örnek: SELECT adı, Soyadı FROM PERSONEL Bu satır ile Personel tablosunda bulunan adı ve soyadı alanlarını seçersiniz. Örnek: SELECT adı, Soyadı, adı +” “ + Soyadı FROM PERSONEL Bu satır ile Personel tablosunda bulunan adı ve soyadı alanlarını birleştirmiş olursunuz. + operatörü sütun birleştirmek için kullanılmakla birlikte, eğer sütunlar rakamlardan oluşan veriler içeriyorlarsa bu operatör matematiksel toplama işlemi yapmış olur. 1.1.5.1. Verilerin Sınırlandırılması Veri tabanında veriyi alma işlemi sırasında satırlara birtakım sınırlamalar getirilerek tablonun tüm satırları yerine istenildiği kadarını elde etmek mümkündür. Tabloda belirli kısımları seçme işlemini gerçekleştirmek için WHERE sözcüğü kullanılmaktadır. Kullanımı: SELECT [sütunlar] FROM [tablo] WHERE [koşul] 10 Örnek: PERSONEL tablosunda yer alan İl_kodu 34 olan kayıtları listelemek istersek komut satırı aşağıdaki şekilde olacaktır. Yukarıdaki SQL kodunu yazıp çalıştırdığımız zaman aşağıda görüldüğü gibi İl_kodu 34 olan kayıtlar listelenecektir. Örnek: Ücret tablosunda, Personel_no ve maaşı alanları görülmektedir. Aşağıdaki SQL deyimi, maaşları 2000 TL’den yüksek olan çalışanları seçmeye yarar. Bu komut satırı yazılıp çalıştırıldığında listelenen kayıtlar aşağıdaki gibi olacaktır. 11 Aşağıdaki tabloda Where komutuyla kullanılabilecek koşul operatörlerine örnekler verilmiştir. KOŞUL 200 Not 2000 < 200 <= 200 >100 >=100 100 veya 125 >50 ve <100 -veyaBetween 50 and 100 <50 or >100 In(10, 22, 30) Like "*4,99" Is Null Is Not Null SORGU SONUCU Maaşın 200 TL olduğu kayıtları döndürür. Maaşın 2000 TL olmadığı kayıtları döndürür. Maaşın 200 TL'den az (<200) olduğu kayıtları döndürür. İkinci ifade (<=200) birim fiyatın 200 TL'ye eşit veya daha az olduğu kayıtları görüntüler. Maaşın 100TL'den fazla olduğu kayıtları döndürür. İkinci ifade maaşın 100 TL'ye eşit veya daha fazla olduğu kayıtları görüntüler. Maaşın 100 TL veya 125 TL olduğu kayıtları döndürür. Maaşın 50 TL ile 100 TL arasında olduğu (ancak dahil değil) kayıtları döndürür. Maaşın 50 TL ile 100 TL arasında olmadığı kayıtları döndürür. Maaşın 10 TL, 22 TL veya 25 TL olduğu kayıtları döndürür. Maaşın sonunda "4,99" bulunan, 4,99 TL, 14,99 TL, 24,99 TL vb. kayıtları döndürür. NOT * ve % karakterleri bir ifadede kullanıldığı zaman, herhangi bir sayıda karakteri temsil eder (bunlara joker karakter de denir). %karakteri * karakteriyle birlikte bir ifadede kullanılamadığı gibi, ? joker karakteriyle birlikte de bir ifadede kullanılamaz. % joker karakterini, _ joker karakterini de içeren bir ifadede kullanabilirsiniz. Maaşı alanına değer girilmeyen kayıtları döndürür. Maaşı alanında değerin eksik olmadığı kayıtları döndürür. Tablo 1.2: Sorgu ölçütleri örnek tablosu Örnek: Fiyatı 50 ile 100 TL arasında olan tüm ürünleri listelemek istersek SQL kodu aşağıdaki şekilde olacaktır. SELECT * FROM URUN WHERE FİYAT BETWEEN 50 AND 100 Örnek: İsmi “A” ile başlayan personeller listelenmek istenirse SQL kodu aşağıdaki şekilde olacaktır. SELECT * FROM PERSONEL WHERE ADI LIKE “A%” 12 1.1.5.2. Sıralama İşlemleri Tabloların satırlarının herhangi bir sütuna göre sıralanmasının istendiği durumlarda SELECT deyimi ORDER BY ile birlikte kullanılır. Örnek: SELECT Soyadı, adı FROM PERSONEL ORDER BY Soyadı; Örnek: SELECT Soyadı, adı FROM PERSONEL ORDER BY Soyadı ASC; Yukarıdaki her iki örnek de personelin adlarını soyadlarına göre sıralamaktadır. Varsayılan sıralama artan sıralamadır. Ve her ikisi de çalıştırıldığı zaman aynı sonucu vermektedir. Azalan şekilde sıralama yapmak için (Z'den A'ya, 9'dan 0'a), azalan şekilde sıralamak istenilen her alanın sonuna DESC sözcüğünün eklenmesi gerekir. Örnek: SELECT Soyadı, İl_Kodu FROM PERSONEL ORDER BY İl_Kodu DESC, Soyadı Bu kodları yazıp çalıştırdığımız zaman görüntü aşağıdaki şekilde olacaktır. Yukarıdaki örnekte, İl_kodları seçilip azalan şekilde sıralama yapılmaktadır. 13 1.1.6. SQL Fonksiyonları SQL fonksiyonları tek satır fonksiyonları ve çoklu satır fonksiyonları (grup fonksiyonları) olmak üzere iki türlüdür. Tek satır fonksiyonları genelde sadece Fonksiyon olarak adlandırılıp, tablonun her bir satırına uygulanabilen fonksiyonlardır. Karakter, sayısal, tarih ve dönüştürme olmak üzere farklı türleri vardır. Karakter fonksiyonları, girdi olarak karakter verilerini alıp, karakter veya sayısal değerler döndürebilen fonksiyonlardır. Karakter fonksiyonlarından en fazla kullanılanları Tablo 1.3’te gösterilmiştir. LCASE Büyük harfleri küçük harflere dönüştürmek için kullanılır. UCASE Küçük harfleri büyük harflere dönüştürmek için kullanılır. MID Verinin bir parçasını çekmek için kullanılır. LEN Bir string ifadesinin veya bir sütundaki verinin uzunluğunu döndürmek için kullanılır. Tablo 1.3: Karakter fonksiyonları Sayısal fonksiyonlar, sayısal veriler üzerinde birtakım işlemleri gerçekleştirmek için kullanılan fonksiyonlardır. Sayısal fonksiyonlardan en fazla kullanılanları Tablo 1.4’te gösterilmiştir. ROUND Sayısal değerleri yuvarlamak için kullanılır. MOD İki sayısal değerin, birbirine bölümünden elde edilen kalanı döndürmek için kullanılır. Tablo 1.4: Sayısal fonksiyonlar Dönüştürme fonksiyonları, karakter, sayısal ve tarih verilerinin birbirine dönüştürülmesi için kullanılan fonksiyonlardır. Dönüştürme fonksiyonlardan en fazla kullanılanları Tablo 1.5’te gösterilmiştir. CSTR Tarih ve sayısal bilginin istenildiği gibi biçimlendirilerek karakter dizisine dönüştürülmesini sağlar. CINT Bir dizenin içerdiği sayısal değerleri biçimlendirilerek sayısal veri türüne dönüştürmeye yarar. CDATE Bir dizenin içerdiği tarih verilerinin istenildiği gibi biçimlendirilerek tarih veri türüne dönüştürmek için kullanılır. Tablo 1.5: Dönüştürme fonksiyonları 14 Tarih ve saat fonksiyonları, tarih ve saat ile bilgi almak ve tarih ve saat verilerini biçimlendirmek için kullanılan fonksiyonlardır. Tarih ve saat fonksiyonlardan en fazla kullanılanları Tablo 1.6’da gösterilmiştir. NOW Bilgisayarınızdaki geçerli sistem tarihini ve saatini bildirmek için kullanılır. Örnek: SELECT Now(); DAY 1 ve 31 dahil olmak üzere bu rakamlar arasında ayın gününü temsil eden bir tam sayı belirten Variant (Tamsayı) döndürmek için kullanılır. Örnek: SELECT Day(#11/22/2003#); Bu kod yazılıp çalıştırıldığında ayın gününü temsil eden “22” sayısı döndürülecektir. MONTH Yılın ayını gösteren 1 ile 12 arasında (bu sayılar dahil) bir tam sayı belirten Variant (Integer) türünde değer döndürmeye yarar. Örnek: SELECT Month (#22/11/2009#); Bu kod çalıştırıldığı zaman yılın ayını gösteren “11” değeri döndürülecektir. YEAR Yılı gösteren bir tam sayı içeren Variant (Integer) türünde bir değer döndürmeye yarar. Verilen tarihin yılını döndürür. Örnek: SELECT Year (#22/11/2012#); DATEADD Belirtilen bir zaman aralığı eklenmiş olan bir tarihi içeren Variant (Tarih) veri türünü döndürür. Örnek: SELECT DateAdd("yyyy",3,#11/22/2009#); 2009 yılına 3 yıl eklenmiştir DATEDIFF Belirtilen iki tarih arasındaki zaman aralıklarının sayısını belirten bir Variant (Long) döndürür. Örnek: SELECT DateDiff('m',#11/17/2011#,#1/22/2012#); Bu kod yazılıp çalıştırıldığı zaman bu zaman dilimleri arasında iki ay fark olduğundan “2” değeri dönecektir. DATEPART Verilen bir tarihin belirtilen kısmını içeren bir Variant (Tam sayı) döndürür. Örnek: SELECT DATEPART("yyyy", "01/04/2012") Tablo 1.6: Tarih ve saat fonksiyonları 15 1.2. Verileri Gruplayarak Analiz Etme Şu ana kadar incelemiş olduğumuz deyimler söz konusu tablonun tüm satırlarına uygulanmaktaydı. Bazı durumlarda bazı işlemlerin satırlar yerine gruplara uygulanması gerekmektedir. Veriler gruplara ayrılıp analiz edilir ve bu tür gruplama işlemleri için de grup fonksiyonları kullanılır. 1.2.1. Grup Fonksiyonları Tek satır fonksiyonları tablonun bir satırına uygulanıp buna karşılık gelen bir sonuç satırı elde ediliyordu. Bir grup satıra bir fonksiyonun uygulanmasının söz konusu olduğu durumlara; "çoklu satır" veya "grup fonksiyonları" adı verilir. Grup fonksiyonları tablonun tüm satırlarına uygulanabilmektedir. AVG() Bu fonksiyon, herhangi bir sütunun içerdiği sayısal değerlerin aritmetik ortalamasını hesaplamak amacıyla kullanılır. Fonksiyonun uygulandığı sütunun veri türü sayısal olmalıdır. Örnek: SELECT AVG(NOTLAR) AS ORTALAMA FROM OGRENCİ SUM() Sütunların içerdiği sayısal değerleri toplamak amacıyla kullanılan fonksiyondur. Örnek: SELECT SUM(NOTLAR) AS TOPLAM FROM OGRENCİ STDEV() Standart sapma, sayısal verilerin aritmetik ortalamalardan farklarının kareli ortalaması olarak bilinir. Bu hesaplamayı yapan SQL fonksiyonu ise; STDEV() 'dir. Örnek: SELECT STDEV(NOTLAR) AS “St SAPMA” FROM OGRENCİ VARP() Sorgunun belirtilen alanında bulunan değerler kümesiyle temsil edilen bir grubun tahmini varyansını gösterir. Varyans, sayısal değerler arasındaki değişkenliği ölçen bir kavramdır. Standart sapmanın karesi olarak bilinmektedir. Örnek: SELECT VARP(MAAŞ) AS VARYANS FROM PERSONEL MAX() ve MIN() Tablodaki değerler arasında en büyük olanı bulmak için MAX(), en küçük olanını bulmak içinse MIN() ve fonksiyonları kullanılır. Örnek: SELECT MAX(NOLAR) AS “EN YÜKSEK” FROM ÖĞRENCİ Örnek: SELECT MİN(NOTLAR) AS “EN DÜŞÜK” FROM ÖĞRENCİ COUNT() Bir tablodaki kayıtların sayılması amacıyla kullanılan fonksiyondur. COUNT(*) fonksiyonu, NULL değerleri de içeren tüm kayıtların sayılmasını sağlar. WHERE ile birlikte kullanılırsa, bu koşula uygun tüm kayıtları sayar. COUNT(sütun) biçiminde kullanılırsa, söz konusu sütunda NULL değerler içermeyen tüm kayıtların sayılmasına neden olur. Örnek: SELECT COUNT(*) AS “ÖĞRENCİ SAYISI” FROM ÖĞRENCİ Tablo 1.7: Grup fonksiyonları ve örnekleri 16 1.2.2. Birden Fazla Sütuna Göre Gruplama GROUP BY kullanarak belirtilen alan listesindeki benzer değerlere sahip kayıtları tek bir kayıt olarak birleştirebilirsiniz. Yani birden fazla sütun için de gruplama yapabilirsiniz. Kullanımı: SELECT alanlistesi FROM tablo WHERE ölçütler [GROUP BY grupalanlistesi] Örnek: Yukarıdaki PERSONEL tablosunda her ilde yaşayan personel sayısına göre gruplama yapmak istersek SQL kodu aşağıdaki gibi olacaktır. Bu kodu çalıştırdığımız zaman PERSONEL tablosunda yer alan personellerin yaşadıkları illere göre sayısı listelenecektir. Örnek: SELECT Count(*) AS Personelsayısı FROM PERSONEL; Yukarıdaki komut satırı personel tablosunda yer alan toplam personel sayısını gösterir. 17 1.2.3. Grup Koşullarının Kullanımı Grup işlemlerinin uygulanması sırasında birtakım sınırlamalar gerekebilir. Grup koşulları belirlenirken HAVING sözcüğü kullanılır. HAVING sözcüğü gruplama yaptıktan sonra kullanılır. Gruplandırmak istenilmeyen satırları dışarıda tutmak için WHERE, gruplandırılan kayıtlara filtre uygulamak için ise HAVING kullanılır. Group By ifadesi Where ifadesinden sonra, Having ifadesinden önce kullanılır. Order By ifadesi ise en son kullanılır. Kayıtlar GROUP BY ile gruplandırılır ve HAVING ile de hangi kayıtların görüntüleneceği gösterilir. Örnek: Yukarıdaki Ücret tablosunda Toplam maaşı 2500’den büyük olan grupları listelemek istiyorsak SQL kodu aşağıdaki gibi olacaktır. Sorgu çalıştırıldığı zaman görüntü aşağıdaki gibi olacaktır. 18 UYGULAMA FAALİYETİ UYGULAMA FAALİYETİ Aşağıda verilen işlem basamaklarını takip ederek konuyu daha da pekiştirelim. Öneriler kısmı, uygulama faaliyeti için yönlendirici olacaktır. İşlem Basamakları Veri tabanınızda “Okul” adında bir tablo oluşturunuz. Tablonun alan adları ve veri türleri aşağıdaki gibi olsun: Öğrenci_no(int); Adı varchar(15); Soyadı varchar(15); Yaşı int; Tabloya 4 kişinin bilgilerini içerecek şekilde kayıt girişi yapınız. “Dersler” isminde yeni bir tablo oluşturunuz. “Dersler” tablosunu siliniz “Okul” tablosuna Doğum_tarihi sütununu ekleyiniz. “Okul” tablosundaki tüm öğrencilerin yaşını 2 yaş artırınız. Yaşı 15’ten küçük olan öğrencileri seçiniz. “Notlar” isminde yeni bir tablo oluşturunuz. Ogr_Not int veri türünde bir alan ekleyiniz. Bu tabloya 4 tane not girişi yapınız. Notu 60 ile 90 arasında olan öğrencileri listeleyiniz. “Okul” tablosundaki kayıtları soyadı alanına göre sıralayınız. “Okul” tablosundaki öğrencilerin yaşları toplamını bulunuz. “Okul” tablosunda en büyük yaşın kaç olduğunu bulunuz. Öğrencileri yaşlarına göre gruplayınız. 19 Öneriler CREATE TABLE komutunu kullanarak tablonuzu oluşturunuz. Tabloyu veri sayfası görünümünde açıp veri girişini yapınız. CREATE TABLE komutunu kullanınız. DROP TABLE Dersler ADD COLUMN deyimini kullanınız. UPDATE deyiminden yararlanınız. SELECT deyimini kullanınız. CREATE TABLO Notlar SELECT ve BETWEEN kullanarak listeleyiniz. ORDER BY deyiminden yararlanınız. SUM(); MAX(); GRUP BY(); KONTROL LİSTESİ Bu faaliyet kapsamında aşağıda listelenen davranışlardan kazandığınız beceriler için Evet, kazanamadığınız beceriler için Hayır kutucuğuna (X) işareti koyarak kendinizi değerlendiriniz. Değerlendirme Ölçütleri 1. Sorgular ve çeşitlerinin neler olduğunu öğrendiniz mi? 2. Sorgu ile veri tabanı oluşturdunuz mu? 3. Sorgu ile tablo oluşturdunuz mu? 4. Sorgu ile oluşturmuş olduğunuz tabloyu silebildiniz mi? 5. Sorgu kullanarak tablonuza sütun eklediniz mi? 6. Tablo güncelleme işlemini kullandınız mı? 7. Select deyimi kullanarak tablodaki verilere erişebildiniz mi? 8. Satırların ve sütunların sınırlandırılmasını yaptınız mı? 9. Order By kullanarak sıralama yaptınız mı? 10. SQL fonksiyonlarını kullandınız mı? 11. Grup fonksiyonlarını kullandınız mı? 12. Tablonuzdaki verileri SQL kullanarak birden fazla sütuna göre grupladınız mı? 13. Having sözcüğü kullanarak grup koşullarını belirleyebildiniz mi? Evet Hayır DEĞERLENDİRME Değerlendirme sonunda “Hayır” şeklindeki cevaplarınızı bir daha gözden geçiriniz. Kendinizi yeterli görmüyorsanız, öğrenme faaliyetini tekrar ediniz. Bütün cevaplarınız “Evet” ise “Ölçme ve Değerlendirme”ye geçiniz. 20 ÖLÇME VE DEĞERLENDİRME ÖLÇME VE DEĞERLENDİRME Aşağıdaki cümlelerin başında boş bırakılan parantezlere, cümlelerde verilen bilgiler doğru ise D, yanlış ise Y yazınız. 1. ( ) Tabloların satırlarının herhangi bir sütuna göre sıralanmasının istendiği durumlarda SELECT deyimi ORDER BY ile birlikte kullanılır. 2. ( ) MID() fonksiyonu bir karakter fonksiyonudur ve küçük harfleri büyük harfe dönüştürmek için kullanılır. 3. ( ) COUNT() fonksiyonu bir tablodaki kayıtların sayılması amacıyla kullanılan fonksiyondur. Aşağıdaki soruları dikkatlice okuyunuz ve doğru seçeneği işaretleyiniz. 4. Sorgu kullanarak tablo oluşturmak için kullanılan SQL deyimi aşağıdakilerden hangisidir? A) CREATE TABLE B) INSERT TABLE C) DELETE TABLE D) DROP TABLE 5. ADD COLUMN deyiminin görevi aşağıdakilerden hangisidir? A) Tabloya satır eklemek için kullanılır. B) Tabloya yeni bir ad vermek için kullanılır. C) Tabloyu silmek için kullanılır. D) Tabloya sütun eklemek için kullanılır. 6. ÖĞRENCİLER tablosunda yer alan ADI ve BÖLÜMÜ alanlarını seçmek için kullanılan SQL kodu aşağıdakilerden hangisidir? A) SELECT ADI, BÖLÜMÜ FROM ÖĞRENCİ B) INSERT ADI, BÖLÜMÜ FROM ÖĞRENCİLER C) SELECT AD, SOYAD, BÖLÜMÜ FROM ÖĞRENCİLER D) SELECT ADI, BÖLÜMÜ FROM ÖĞRENCİLER 7. Büyük harfleri küçük harfe dönüştürmek için kullanılan fonksiyon aşağıdakilerden hangisidir? A) UCASE() B) LCASE C) MOD( ) D) CINT() 21 8. Herhangi bir sütunun içerdiği sayısal değerlerin aritmetik ortalamasını hesaplamak amacıyla kullanılan fonksiyon aşağıdakilerden hangisidir? A) SUM() B) STDEV() C) AVG() D) MAX() 9. SELECT DateAdd("yyyy",2,#11/22/2010#); komut satırı hangi sonucu üretir? A) 2010 yılına 2 yıl ekler. B) 11/22/2010 tarihine 2 gün ekler. C) 11/22/2010 tarihine 2 hafta ekler. D) Hiçbiri DEĞERLENDİRME Cevaplarınızı cevap anahtarıyla karşılaştırınız. Yanlış cevap verdiğiniz ya da cevap verirken tereddüt ettiğiniz sorularla ilgili konuları faaliyete geri dönerek tekrarlayınız. Cevaplarınızın tümü doğru ise bir sonraki öğrenme faaliyetine geçiniz. 22 ÖĞRENME FAALİYETİ–2 AMAÇ ÖĞRENME FAALİYETİ-2 İlişkili tablolar ile sorgu hazırlayabileceksiniz. ARAŞTIRMA Hangi durumlarda tabloların birleştirilmesi işlemine ihtiyaç duyulduğunu araştırınız. 2. İLİŞKİLİ TABLOLAR İlişkisel veri tabanları, birbirleri ile mantıksal ilişkiler içinde olan tablolardan oluşmaktadır. Tabloları ortak olarak sahip oldukları alanlarda birleştirmek için ilişkiler kullanılır. İlişki ise bir sorguda birleştirmeyle gösterilmektedir. Bu bölümde birbirleri ile ilişkileri olan tablolar için kullanılabilecek birleştirme türlerinin neler olduğunu, bu türlerin hangi durumlarda kullanıldığını ve nasıl birleştirme oluşturulacağını öğreneceğiz. 2.1. Tabloların Birleştirilmesi Birden fazla tablodan veri almak gerektiği durumlarda tablolar arasında ilişki kurulması gerekmektedir. Bu işleme Join (birleştirme) adı verilir. Join işlemi birden fazla tabloyu birbirine bağlayıp bu tablolar üzerinde işlem yapabilmemizi sağlamaktadır. Birleştirme işlemi yapabilmek için tabloların aynı değerleri içeren sütunlarının kullanılması gerekir. Tablo birleştirme işlemi yapılırken birleştirmek istediğiniz duruma göre, Kartezyen birleşim, eşiti olan birleştirme veya eşiti olmayan birleştirme türlerinden uygun olanını kullanabilirsiniz. 2.1.1. Kartezyen Çarpımı İki tablo arasında birleştirme koşulunun tanımlanmadığı durumlarda Kartezyen çarpımından söz edilir. Soldaki tablonun her kaydı için, sağdaki tablodan bütün kayıtları çeker. Birleştirme koşulunun geçersiz olduğu ve birinci tablodaki tüm satırların ikinci tablodaki tüm satırlarla birleşmediği durumlarda da Kartezyen çarpım elde edilir. 23 Kullanımı: SELECT sütun1, sütun2, sütun3,…, sütunN FROM tablo1, tablo2, tablo3,…, tabloN Örnek: Ürünler tablosundaki kayıtlar ile Reyonlar tablosundaki kayıtlara Kartezyen birleşimi uygulanmış örnek aşağıda verilmiştir. SELECT * FROM ÜRÜNLER, REYONLAR; Ürünler tablosunda 4, Reyonlar tablosunda 3 kayıt bulunmaktadır. Bu iki tablonun birleşiminden 4x3=12 satırlık bir birleşim meydana gelecektir. Şekil 2.1’de 1. Tablodaki her kayıt için 2. Tablodaki tüm kayıtlar listelenmiştir. Şekil 2.1: Kartezyen çarpımı sonucu tabloların birleştirilmesi 24 2.1.2. Eşiti Olan Birleştirme İç birleştirme olarak da adlandırılan birleştirme türüdür. İç birleştirme bir sorguya, birleştirilen tabloların birinde yer alan satırların, birleştirilen alanlardaki verileri temel alarak, diğer tablodaki satırlara karşılık geldiğini bildirir. İç birleştirme içeren bir sorgu çalıştırıldığında, sorgu işlemlerine yalnızca, birleştirilen tabloların her ikisinde de bulunan ortak değere sahip olan satırlar eklenir. Birleştirmede yer alan her iki tablodan sadece, birleştirme alanında eşleşen satırlar döndürülmek istenildiği zaman iç birleştirme kullanılır. Eşiti olan birleştirme yapılırken INNER JOIN deyimi kullanılır. Kullanımı: FROM tablo1 INNER JOIN tablo2 ON tablo1.sütun1 karşılaştırma tablo2.sütun2 Birinci tablodaki tüm kayıtları çekip, bu kayıtlar ile eşleşen ikinci tablodaki kayıtlar listelenir. Örnek: veya Yukarıdaki örnekteki her iki yazım türü de tabloları birleştirecek ve ortak değere sahip olan kayıtlar aşağıdaki gibi listelenecektir. 25 2.1.3. Eşiti Olmayan Birleştirme Eşiti olan birleştirme sırasında bir tablodaki bir sütunun içerdiği değerler diğer tablonun ilgili sütunu ile eşleştirilip sadece eşleşen değerler birleştiriliyordu. Eşleşmeyen satırlar ise birleştirilemiyordu. Eşleşmeyen satırların da birleştirilip sonuca dâhil edilmesi istenilen durumlarda “Eşiti Olmayan Birleştirme” kullanılmaktadır. Eşiti olmayan birleştirmeler (dış birleştirmeler), eşleşmeyen kayıtların hangi tabloda olduğuna bakarak sol dış birleştirme veya sağ dış birleştirme olmak üzere iki şekilde olabilmektedir. Kullanımı: FROM tablo1 [ LEFT | RIGHT ] JOIN tablo2 ON tablo1.sütun1 karşılaştırma tablo2.sütun2 Buradaki tablo1 ve tablo2 kayıtların birleştirileceği tabloların adını, sütun1 ve sütun2 birleştirilen sütunların adlarını, karşılaştırma ise ("=," "<," ">," "<=," ">=" veya "<>.") gibi işleçleri göstermektedir. Sol dış birleştirme oluşturmak için LEFT JOIN kullanılır. Soldaki tablodan tüm kayıtlar alınır, sağdaki tabloda eşleşen kayıtlar yazılır ve eşleşmeyen kayıtlar için NULL değer döndürülür. Sağ dış birleştirme oluşturmak için RIGHT JOIN kullanılır. Sağ dış birleşimler, ilk tablonun (soldaki tablo) kayıtlarında eşleşen değer olmasa bile, iki tablodan ikincisinin (sağdaki tablo) tüm kayıtlarını içerir. Örneğin, Bölümler (sol) ve Personel (sağ) tablolarında bölüme atanmış personel olmasa bile tüm bölümleri seçmek için LEFT JOIN, herhangi bir bölüme atanmamış olanlar da dâhil, tüm personeli seçmek için ise RIGHT JOIN kullanılır. Örnek 1: Yukarıdaki ÜRÜNLER ve REYONLAR tablosunu RIGHT JOIN kullanarak birleştirmek için aşağıdaki SQL komutu kullanılır. 26 Kod yazılıp çalıştırıldığı zaman görüntü aşağıdaki gibi olacaktır. Örnek 2: ÜRÜNLER ve REYONLAR tablosunu LEFT JOIN kullanarak birleştirmek için aşağıdaki SQL kodu yazılır. Kod yazılıp çalıştırıldığı zaman görüntü aşağıdaki gibi olacaktır. 2.2. Alt Sorgular Bazı durumlarda bir sorgudan elde edilen sonuç diğer başka bir sorgu içerisinde kullanılabilmektedir. Bu tür durumlarda iç içe sorgular oluşturulmaktadır. Kullanılan iç içe sorgularda yer alan içteki sorgulara “alt sorgular” adı verilir. 2.2.1. Alt Sorgu Düzenleme Kuralları Alt sorgular düzenlenirken uyulması gereken birtakım kurallar bulunmaktadır. Bunlar; FORM sözcüğü içinde tanımlanan sorgular dışında, alt sorgu, ana sorgu içerisindeki karşılaştırma işlecinin sağ tarafında yer almalıdır. Alt sorgu, parantezler içerisinde yer almalıdır. Alt sorgu ORDER BY sözcüğünü içermemelidir. ORDER BY sadece ana sorgu içerisinde yer alabilmektedir. 27 2.2.2. Alt Sorgunun Tanımlanması Alt sorgu bir SELECT, SELECT...INTO, INSERT...INTO, DELETE veya UPDATE deyimi içinde veya başka bir alt sorguda SELECT deyiminin kullanılması ile elde edilir. Kullanımı: SELECT liste FROM tablo WHERE ifade karşılaştırma (SELECT liste FROM tablo) Bir alt sorgu aşağıdaki bölümlerden oluşmaktadır: karşılaştırma [ANY | ALL | SOME] (sqldeyimi):Karılaştırma, ifadeyi, alt sorgunun sonuçları ile karşılaştırmaya yarayan bir karşılaştırma işlecidir. ifade [NOT] IN (sqldeyimi): İfade, alt sorgu sonuç kümesinde aranan ifadeye verilen addır. WHERE iki sorguyu birbirine bağlamak için kullanılmaktadır. ANY veya SOME, yapılan karşılaştırma sonucunda alt sorgu kayıtlarından herhangi bir tanesi ile eşleşen ana sorgu kayıtlarını almak için kullanılır. ALL, yapılan karşılaştırma sonucunda alt sorgu kayıtlarının tümüyle eşleşen ana sorgu kayıtlarını almak için kullanılmaktadır. IN, alt sorgudaki kayıtların değerine eşit olan ana sorgu kayıtlarını almak için kullanılır. NOT IN ise alt sorgudaki kayıtların değerine eşit olmayan ana sorgu kayıtlarını almak için kullanılır. 2.2.3. Çoklu Satır Alt Sorguları Alt sorgudan bir satır yerine birden fazla satırın elde edildiği durumlar çoklu satır alt sorgusu olarak adlandırılır. Bu tür sorgular IN, ANY, ALL gibi işleçler yardımıyla yapılabilmektedir. “>ANY” en azdan daha büyük, “<ANY” ise en çoktan daha az anlamına gelmektedir. “>ALL” en büyükten daha büyük, “<ALL” ise en küçükten daha küçük anlamına gelmektedir. 28 Örnek IN işleci: İndirim oranı %30’dan daha fazla olan tüm ürünleri gösteren SQL kodu aşağıdaki gibidir. SELECT * FROM Ürünler WHERE U_No IN (SELECT U_No FROM Sipariş WHERE İndirim = .30); Örnek ANY işleci: Birim fiyatı, % 30 veya daha fazla indirimle satılmış herhangi bir ürünün birim fiyatından yüksek olan tüm ürünleri gösteren SQL kodu aşağıdaki gibidir. SELECT * FROM Ürünler WHERE B_Fiyat > ANY (SELECT B_Fiyat FROM Sipariş WHERE İndirim >= .30); Örnek ALL işleci: Birim fiyatı, % 30 veya daha fazla indirimle satılmış tüm ürünlerin birim fiyatından yüksek olan ürünleri listelemek için kullanılan SQL kodu aşağıdaki gibidir. SELECT * FROM Ürünler WHERE B_Fiyat > ALL (SELECT B_Fiyat FROM Sipariş WHERE İndirim >= .30); 29 2.2.4. Tek Satır Alt Sorguları Alt sorgudan tek satırın elde edildiği sorgulardır. Örnek: Yukarıdaki PERSONEL tablosuna göre Personel numarası “10” olan personelle aynı bölümde çalışan personelin isimlerini listeleyecek SQL kodu aşağıdaki gibi olacaktır. SELECT Adı, Bölüm_no FROM PERSONEL WHERE Bölüm_no= (SELECT Bölüm_no FROM PERSONEL WHERE p_no=10); Alt sorgu sonucunda “10” numaralı personelin çalıştığı bölümün numarası, yani “200” değeri elde edilecektir. Ana sorguda ise çalıştığı bölüm numarası “200” olan kişileri sorgulamaktadır. Sorguyu yazıp çalıştırdığımızda aşağıdaki sonuç elde edilecektir. 30 UYGULAMA FAALİYETİ UYGULAMA FAALİYETİ PERSONEL ve BÖLÜM tabloları aşağıda verilmiştir. İşlem Basamakları Yukarıdaki alan ve verilerden oluşan PERSONEL ve BÖLÜM tablolarını oluşturunuz. PERSONEL ve BÖLÜM tablolarını Kartezyen çarpımı kullanarak birleştiriniz. Öneriler Tabloları veri sayfası görünümünde açarak oluşturabilirsiniz. PERSONEL ve BÖLÜM tablolarını eşiti olan birleştirme kullanarak birleştirecek SQL kodunu yazınız. PERSONEL ve BÖLÜM tablolarını eşiti olmayan birleştirme kullanarak birleştirecek SQL kodunu yazınız. PERSONEL tablosuna göre Personel numarası “12” olan personelle aynı bölümde çalışan personelin isimlerini listeleyecek SQL kodunu yazıp çalıştırınız. INNER JOIN kullanınız. RIGHT JOIN kullanarak dış birleştirmeyi gerçekleştiriniz. Tek satır alt sorgu oluşturunuz. 31 KONTROL LİSTESİ Bu faaliyet kapsamında aşağıda listelenen davranışlardan kazandığınız beceriler için Evet, kazanamadığınız beceriler için Hayır kutucuğuna (X) işareti koyarak kendinizi değerlendiriniz. 1. 2. 3. 4. 5. 6. 7. 8. Değerlendirme Ölçütleri SQL kullanarak istenilen tabloları birleştirebildiniz mi? Çoklu tabloları kullanabildiniz mi? Kartezyen çarpımı kullandınız mı? Eşiti olan birleştirme işlemini öğrendiniz mi? Eşiti olmayan birleştirme işlemini gerçekleştirebildiniz mi? SQL kodları kullanarak alt sorgu tanımlaması yapabildiniz mi? Alt sorgu düzenleme kurallarının neler olduğunu öğrendiniz mi? Tek ve çok sütunlu alt sorgular oluşturdunuz mu? Evet Hayır DEĞERLENDİRME Değerlendirme sonunda “Hayır” şeklindeki cevaplarınızı bir daha gözden geçiriniz. Kendinizi yeterli görmüyorsanız öğrenme faaliyetini tekrar ediniz. Bütün cevaplarınız “Evet” ise “Ölçme ve Değerlendirme” ye geçiniz 32 ÖLÇME VE DEĞERLENDİRME ÖLÇME VE DEĞERLENDİRME Aşağıdaki cümlelerin başında boş bırakılan parantezlere, cümlelerde verilen bilgiler doğru ise D, yanlış ise Y yazınız. 1. ( ) Birinci tablodaki tüm satırların ikinci tablodaki tüm satırlarla birleşmediği durumlarda eşiti olan birleştirme türü kullanılır. 2. ( ) Tablolar birleştirilirken eşiti olmayan birleştirme yapmak için INNER JOIN deyimi kullanılır. 3. ( ) Tablo birleştirme sırasında eşleşmeyen satırların da birleştirilip sonuca dahil edilmesi istenilen durumlarda “Eşiti olmayan birleştirme” kullanılır. 4. ( ) Sağ dış birleştirme oluşturmak için RIGHT JOIN kullanılır. 5. ( ) Alt sorgu içerisinde ORDER BY sözcüğü kullanılamaz. 6. ( ) All işleci alt sorgudaki kayıtların değerine eşit olmayan ana sorgu kayıtlarını almak için kullanılır. 7. ( ) Alt sorgudan elde edilen sonuçta tek satırlık bir sonuç elde ediliyorsa bu işleme çoklu satır sorguları denir. DEĞERLENDİRME Cevaplarınızı cevap anahtarıyla karşılaştırınız. Yanlış cevap verdiğiniz ya da cevap verirken tereddüt ettiğiniz sorularla ilgili konuları faaliyete geri dönerek tekrarlayınız. Cevaplarınızın tümü doğru ise bir sonraki öğrenme faaliyetine geçiniz 33 ÖĞRENME FAALİYETİ–3 AMAÇ ÖĞRENME FAALİYETİ-3 Veri işleme (DML) sorgularını kullanabileceksiniz. ARAŞTIRMA DML sorgularının neler olduğunu ve hangi amaçlar için kullanıldığını araştırınız. 3. DML SORGULARI Bir tabloya yeni bir kayıt eklemek, mevcut kayıt üzerinde değişiklik yapmak veya bir kaydı silmek istediğimiz durumlarda, Select deyimi kullanarak yapmış olduğumuz sorgulamalar işe yaramaz. DML (Data Manipulation Language) dili kullanılarak, veri tabanı tablosuna veri ekleme, silme ve güncelleme işlemleri yapılabilmektedir. 3.1. Tabloya Satır Ekleme İşlemi Bir tabloya bir veya daha çok satır (kayıt) eklemek için INSERT INTO deyimi kullanılır. Bu işlem “Ekleme Sorgusu” olarak adlandırılmaktadır. 3.1.1. INSERT Deyimi Yapısı Bir tabloya yeni veri eklemek için INSERT deyimi kullanılır. INSERT deyimi, INTO ve VALUES ifadeleri ile birlikte kullanılır ve tabloya yeni veri eklenmesi sağlanır. Veri ekleme sırasında ilk olarak INSERT INTO ile ekleme yapılacak olan tablo veya sütunlar belirlenir. Daha sonra VALUES ifadesi ile eklenecek olan değerler parantez içinde belirtilir. Verilerin sıralanışına dikkat etmek gerekmektedir. Örneğin (Personel_no, Adı, Soyadı, Bölümü) şeklinde sıralanmış olan alanlarda, eklenecek değerlerin de aynı sırada olması gerekmektedir. Tablodaki tüm alanlara değer girilecekse, tablo isminden sonra sütun isimlerinin belirtilmesine gerek yoktur. Çünkü bu tür durumda tablodaki tüm alanlara veri girişi sağlanmış olacaktır. Sütun ismi belirtmeden kullanımı: INSERT INTO tablo VALUES (değer1, değer2…) 34 Sütun ismi belirterek kullanımı: INSERT INTO tablo (sütun1, sütun2…) VALUES (değer1, değer2…) Mevcut kayıtlarda bulunan tek alanlardaki verileri değiştirmek için ekleme sorgusu yerine güncelleştirme sorgusu kullanılmaktadır. Ekleme sorguları sadece veri satırları eklemek için kullanılır. Örnek: Yukarıdaki Personel tablosuna bir kayıt eklemek istiyorsak SQL kodu aşağıdaki şekilde olacaktır. Kodu yazıp çalıştır düğmesine bastığımız zaman program bize yeni bir satır eklemek üzere olduğumuza dair aşağıdaki uyarı ekranını görüntüleyecektir. Evet düğmesine bastıktan sonra Personel tablomuzu çalıştırdığımızda yeni kayıt eklenmiş hali aşağıdaki gibi olacaktır. NOT: Veri eklenecek alan sayısal veri türü tanımlanmışsa eklenecek veri tek tırnaklar arasında yazılmaz. Metin ve tarih veri türünde tanımlanmış ise eklenecek veri tek tırnaklar içinde yazılır. 35 Örnek: Personel tablosunda sadece Personel_no ve Bölümü alanlarına veri girişi yapmak istiyorsak SQL sorgu kodu aşağıdaki şekilde olacaktır. INSERT INTO PERSONEL(Personel_no, Bölümü) VALUES (18, 'Müzik'); Kodu çalıştırdığımız zaman Personel tablosunun yeni hali aşağıdaki şekilde olacaktır. 3.1.2. NULL Değer Ekleme Oluşturduğunuz tablodaki bir veya birden fazla alana Null değer girilmesi gerekebilir. Bunun için kullanılan iki yol mevcuttur. Birinci yöntem ile INSERT INTO deyimi içerisinde Null değer alacak olan alanlar yazılmaz. INSERT INTO PERSONEL(Personel_no, Bölümü) VALUES (18, 'Müzik'); Diğer yöntem ise aşağıdaki şekilde uygulanır; INSERT INTO PERSONEL(Personel_no, adı, Soyadı, Bölümü, İl_Kodu) VALUES (18, NULL, NULL, 'Müzik', NULL) Bu yöntem ile boş bırakılmak istenilen alanlara NULL şeklinde bir atama yapılmıştır. 3.1.3. Fonksiyonların Kullanımı INSERT INTO içerisinde fonksiyonlar da kullanılabilmektedir. Örneğin PERSONEL tablosuna yeni bir kayıt eklerken Giriş_tarihi isimli alana o günün tarih ve zaman bilgisini eklemek istiyorsak komut satırı aşağıdaki gibi olacaktır. Bu kodu çalıştırdığımız zaman Personel tablosunun yeni hali aşağıdaki gibi olacaktır. 36 Bu örnekte Now() fonksiyonu kullanılarak, sisteminizin tarih ve saat bilgisi 55 numaralı personelin işe giriş tarihi olarak eklenmiştir. 3.1.4. Bir Diğer Tablodan Satır Kopyalama INSERT işlemini kullanarak bir tabloda bulunan kayıtları istediğiniz diğer bir tabloya kopyalayabilirsiniz. Bu işlem için yapılması gereken Values yerine Select ifadesini kullanmaktır. Kullanımı: INSERT INTO Tablo1(sütun1, sütun2,…) SELECT sütun1, sütun2 FROM Tablo2 Örnek: ÇALIŞANLAR tablosunda bulunan kayıtları PERSONEL tablosuna kopyalayalım. Şekil 3.1: Personel tablosu Şekil 3.2: Çalışanlar tablosu 37 Çalışanlar tablosunda tek bir kayıt bulunmaktadır. Bu kaydı Personel tablosuna kopyalamak için gerekli olan komut satırı aşağıdaki gibi olacaktır. INSERT INTO PERSONEL(Personel_no, adı, Soyadı, Bölümü) SELECT Personel_no, adı, Soyadı, Bölümü FROM ÇALIŞANLAR Yukarıdaki kod, sorgu penceresine yazılıp çalıştırıldığı zaman Personel tablosunun yeni hali aşağıdaki gibi olacaktır. 3.2. Tablodaki Verileri Güncelleme Bir tabloda bulunan kayıt veya kayıtların istenildiği zaman değiştirilmesi mümkündür. Tablolarda güncelleme işlemini gerçekleştirmek için UPDATE komutu kullanılır. SET ifadesi ile güncellenecek alanlar ve bu alanların alacakları yeni değerler belirlenir. WHERE deyimi ile de verilerin güncelleştirilmesi için koşul belirlenir. Eğer WHERE ifadesi ile bir koşul belirlenmezse tablodaki tüm kayıtlar güncellenmiş olacağından WHERE kullanmaya dikkat edilmesi gerekmektedir. Kullanımı: UPDATE tablo SET sütun1=değer1, sütun2=değer2,.. WHERE Koşul Örnek: Personel tablosunda yer alan 30 numaralı personelin “35” olan İl_Kodu bilgisini “06” olarak değiştirmek isteyelim. 38 Bu işlem için yazılması gereken SQL kodu aşağıdaki şekilde olacaktır. UPDATE PERSONEL SET İl_Kodu = '06' WHERE Personel_no = 30 Yukarıdaki kodu yazıp çalıştırdığımızda tek bir satırın güncelleştirileceğini belirtip onaylamamız istenen aşağıdaki pencere görüntülenecektir. Buradan Evet düğmesine tıklanır. Daha sonra Personel tablosu çalıştırıldığı zaman kayıt güncelleştirme aşağıdaki gibi olacaktır. Örnek: PERSONEL tablosundaki tüm illerin kodunu “06” olarak değiştirmek istersek SQL kodları aşağıdaki gibi olmalıdır. UPDATE PERSONEL SET İl_Kodu = '06' WHERE Personel_no Kodu yazıp çalıştırdığımız zaman personel tablosu aşağıdaki gibi güncellenmiş olacaktır. 39 3.3. Tablolardan Veri Silme Bir tabloda bulunan kayıt veya kayıtların istenildiği zaman silinmesi mümkündür. Tablolarda silme işlemini gerçekleştirmek için DELETE komutu kullanılır. DELETE komutu kullanılırken FROM eki ile birlikte tablo ismi yazılarak hangi tablodan veri silinmesi istendiği belirtilebilir. WHERE deyimi ile de verilerin silinme koşulu belirlenir. Eğer WHERE ifadesi ile bir koşul belirlenmezse tablodaki tüm kayıtlar silineceğinden WHERE kullanmaya dikkat edilmesi gerekmektedir. Kullanımı: DELETE FROM Tablo WHERE Koşul Örnek: Personel tablosunda yer alan 30 numaralı personeli silmek için yazılacak SQL komutu aşağıdaki gibi olacaktır. DELETE FROM PERSONEL WHERE Personel_no = 30 Bu kodu yazıp Tasarım sekmesindeki Çalıştır düğmesine bastığımızda aşağıdaki uyarı ekranı karşımıza çıkacaktır. Buradan Evet düğmesine tıkladığımız zaman Personel tablosundaki 30 numaralı kayıt silinmiş olacaktır. Örnek: DELETE FROM ÇALIŞANLAR kodu ile ÇALIŞANLAR tablosunda bulunan tüm kayıtlar silinecektir. 40 Örnek: Personel tablosunda Bölümü “müzik” ve “resim” olanlar dışındaki diğer kayıtların silinmesini istersek; Personel tablosunda silme işlemi uygulamadan önce Bölümü alanında bulunan kayıtlar aşağıda gösterilmiştir Aşağıdaki kodları yazıp çalıştırdığımızda personel tablosundaki Bölümü müzik ve resim olan kayıtlar dışındaki tüm kayıtlar silinecektir. DELETE FROM PERSONEL WHERE Bölümü NOT IN ("müzik", "resim") 41 UYGULAMA FAALİYETİ UYGULAMA FAALİYETİ Aşağıdaki şekilde ÖĞRENCİ tablosu görülmektedir. İşlem Basamakları Yukarıdaki şekilde görüldüğü gibi alan ve kayıtları içeren ÖĞRENCİ tablosunu oluşturunuz. Yukarıdaki tabloya aşağıdaki verileri içeren bir satır eklemeyi sağlayacak sql kodunu yazınız. Kimlik_no:33332222255 Adı: Özge Soyadı: Şen Doğum_yeri: Mersin Doğum_tarihi:23.03.1991 Okulu: Marmara Ün. Bölümü: Matematik Sorguyu çalıştırınız. Adı: Ayşe, Soyadı:Yaz ve diğer değerler Null olacak şekilde yeni bir satır eklemeyi sağlayacak SQL kodunu yazınız. ÖĞRENCİ tablosunda yer alan “11111111111” kimlik nolu öğrencinin Kimya olan bölümünü İngilizce olarak değiştirmeyi sağlayacak SQL kodunu yazınız. ÖĞRENCİ tablosundaki tüm öğrencilerin bölümünü “Resim” olarak değiştiriniz. “11111111111” kimlik numaralı öğrenciyi ÖĞRENCİ tablosundan silmek için gerekli sql kodunu yazınız. ÖĞRENCİ tablosunda bulunan tüm kayıtları siliniz. Öneriler INSERT INTO ÖĞRENCİ ile kayıt eklemek istediğiniz tabloyu belirtip values ile de değerleri giriniz. VALUES(NULL,’Ayşe’, ‘Yaz’, NULL, NULL, NULL, NULL) UPDATE komutu kullanarak güncelleme yapınız. UPDATE komutunu kullanınız. DELETE komutunu kullanınız. DELETE FROM ÖĞRENCİ 42 KONTROL LİSTESİ Bu faaliyet kapsamında aşağıda listelenen davranışlardan kazandığınız beceriler için Evet, kazanamadığınız beceriler için Hayır kutucuğuna (X) işareti koyarak kendinizi değerlendiriniz. 1. 2. 3. 4. 5. 6. Değerlendirme Ölçütleri DML sorgusu kullanarak tablonuza satır eklediniz mi? DML sorgusu kullanarak tablonuza null değer eklediniz mi? Fonksiyonları kullanabildiniz mi? Bir tablodan diğer bir tabloya istediğiniz satırı kopyalayabildiniz mi? Tablonuzdaki verileri güncelleyecek sorguyu oluşturdunuz mu? DML sorgusu kullanarak tablonuzdan veri sildiniz mi? Evet Hayır DEĞERLENDİRME Değerlendirme sonunda “Hayır” şeklindeki cevaplarınızı bir daha gözden geçiriniz. Kendinizi yeterli görmüyorsanız öğrenme faaliyetini tekrar ediniz. Bütün cevaplarınız “Evet” ise “Ölçme ve Değerlendirme” ye geçiniz 43 ÖLÇME VE DEĞERLENDİRME ÖLÇME VE DEĞERLENDİRME Aşağıdaki cümlelerin başında boş bırakılan parantezlere, cümlelerde verilen bilgiler doğru ise D, yanlış ise Y yazınız. Aşağıdaki soruları dikkatlice okuyunuz ve doğru seçeneği işaretleyiniz. 1. ( ) Bir tabloya satır eklemek için INSERT INTO deyimi kullanılır. 2. ( ) Values ifadesi ile ekleme yapılacak olan tablo ismi belirtilir. 3. ( ) Insert Into içinde fonksiyonlar kullanılamaz. 4. ( ) Tablolarda güncelleme işlemini gerçekleştirmek için Delete komutu kullanılır. 5. ( ) Update komutu ile kullanılan SET ifadesi güncellenecek alanlar ve bu alanların alacakları yeni değerleri belirlemek için kullanılır. DEĞERLENDİRME Cevaplarınızı cevap anahtarıyla karşılaştırınız. Yanlış cevap verdiğiniz ya da cevap verirken tereddüt ettiğiniz sorularla ilgili konuları faaliyete geri dönerek tekrarlayınız. Cevaplarınızın tümü doğru ise “Modül Değerlendirme”ye geçiniz. 44 MODÜL DEĞERLENDİRME MODÜL DEĞERLENDİRME Aşağıdaki cümlelerin başında boş bırakılan parantezlere, cümlelerde verilen bilgiler doğru ise D, yanlış ise Y yazınız. 1. ( ) Belirtilen tablodaki alanların değerlerini belirtilen ölçütlere göre değiştirecek bir güncelleme sorgusu oluşturmak için UPDATE deyimi kullanılır. 2. ( ) Veri tabanında verilere erişebilmek için SELECT deyimi kullanılmaktadır. Aşağıdaki cümlelerde boş bırakılan yerlere doğru sözcüğü yazınız. 3. Tabloların satırlarının herhangi bir sütuna göre sıralanmasının istendiği durumlarda SELECT deyimi ……… ile birlikte kullanılır. 4. Bir dizenin içerdiği sayısal değerleri biçimlendirilerek sayısal veri türüne dönüştürmek için …….fonksiyonu kullanılır. Aşağıdaki soruları dikkatlice okuyunuz ve doğru seçeneği işaretleyiniz. 5. Bilgisayardaki geçerli sistem tarih ve saatini bildirmek için aşağıdakilerden hangisi kullanılır? A) SELECT Now() B) SELECT Day() C) SELECT Tarih() D) SELECT Zaman() 6. Sütunların içerdiği sayısal değerleri toplamak amacıyla kullanılan fonksiyon aşağıdakilerden hangisidir? A) AVG() B) STDEV() C) SUM() D) VARP() 7. Birden fazla sütun içinde gruplama yapmak için aşağıdakilerden hangisi kullanılır? A) ORDER BY B) GROUP BY C) SELECT BY D) FROM BY 45 8. Tabloların birleştirilmesi sırasında eşiti olan birleştirme yapılırken kullanılan deyim aşağıdakilerden hangisidir? A) INNER JOIN B) LEFT JOIN C) RIGHT JOIN D) INSERT JOIN 9. Alt sorgudaki kayıtların değerine eşit olmayan ana sorgu kayıtlarını almak için kullanılan işleç aşağıdakilerden hangisidir? A) SOME B) ANY C) ALL D) IN 10. Bir tabloda bulunan kayıtların istenildiği zaman silinebilmesi için kullanılan komut aşağıdakilerden hangisidir? A) UPDATE B) INSERT C) DELETE D) WHERE DEĞERLENDİRME Değerlendirme sonunda “Hayır” şeklindeki cevaplarınızı bir daha gözden geçiriniz. Kendinizi yeterli görmüyorsanız öğrenme faaliyetini tekrar ediniz. Bütün cevaplarınız “Evet” ise bir sonraki modüle geçmek için öğretmeninize başvurunuz. 46 CEVAP ANAHTARLARI CEVAP ANAHTARLARI ÖĞRENME FAALİYETİ-1’İN CEVAP ANAHTARI Doğru Yanlış Doğru A D D B C A 1 2 3 4 5 6 7 8 9 ÖĞRENME FAALİYETİ-2’NİN CEVAP ANAHTARI Yanlış Yanlış Doğru Doğru Doğru Yanlış Yanlış 1 2 3 4 5 6 7 ÖĞRENME FAALİYETİ-3’ÜN CEVAP ANAHTARI Doğru Yanlış Yanlış Yanlış Doğru 1 2 3 4 5 MODÜL DEĞERLENDİRMENİN CEVAP ANAHTARI Doğru Doğru Ordey By Cint A C B A D C 1 2 3 4 5 6 7 8 9 10 47 KAYNAKÇA KAYNAKÇA YALÇIN Özkan, Veri Tabanı Sistemleri, Alfa Yayınları, İstanbul, 2009. ÇİÇEK Musa, Veritabanı Tasarımı ve SQL Sorgulama Dili, Nirvana Yayınları, Ankara, 2010. GÜRKAN Osman, Microsoft Office 2010, Nirvana Yayınları, Ankara, 2010. http://altanmesut.trakya.edu.tr/vt/Verileri_gruplayarak_analiz.ppt (14.03.2012,14:00) http://altanmesut.trakya.edu.tr/vt/Sql_Fonksiyonları.ppt (08.03.2012,15:30) http://moodle.midas.baskent.edu.tr/mod/resource/view.php?inpopup=true&id=6 6 (15.03.2012,16:30) 48