Açıköğretim Ders Notları

Konumsal Veritabanı 1 Dersi 5. Ünite Özet

Açıköğretim ders notları öğrenciler tarafından ders çalışma esnasında hazırlanmakta olup diğer ders çalışacak öğrenciler için paylaşılmaktadır. Sizlerde hazırladığınız ders notlarını paylaşmak istiyorsanız bizlere iletebilirsiniz.

Açıköğretim derslerinden Konumsal Veritabanı 1 Dersi 5. Ünite Özet için hazırlanan  ders çalışma dokümanına (ders özeti / sorularla öğrenelim) aşağıdan erişebilirsiniz. AÖF Ders Notları ile sınavlara çok daha etkili bir şekilde çalışabilirsiniz. Sınavlarınızda başarılar dileriz.

İlişkisel Veritabanında Tablolar Arası İlişkiler Ve Sorgulamalar

Giriş

Veritabanlarının en vazgeçilmez özelliklerinden biri depolanan veriden hızlı bilgi elde edilebilmesidir. Bu özellik veritabanlarının sorgulanması ve analiz edilmesi ile mümkündür. Bilindiği üzere veritabanı sorgulaması ve analizi bütün Veritabanı Yönetim Sistemleri (VTYS) tarafından kullanılan Yapılandırılmış Sorgulama Dili (Structured Query Language-SQL) ile yapılmaktadır. Verilerden hızlı bilgi elde edebilmek için sorgulama aracının yanı sıra, veri yığınlarının ilişkili oldukları diğer veri yığınlarına çabuk erişilmesi gerekir.

İlişkisel veritabanı modeli (relational database model) ile verilerin yığınlar (kümeler) halinde işlenebileceği ve yığınlar arasında ilişkiler kurulabileceği görülmüştür. Mantık ve alt küme olgusunun veritabanı üzerine uygulanabilirliğini ortaya koyan ilişkisel veritabanı modeli, dayandığı bu matematiksel teori nedeni ile ilişkisel adını almaktadır. Kendinden önceki veritabanı modellerinin gelişmiş bir versiyonu olarak ifade edilebilen bu model oldukça yaygın kullanılan bir veritabanı modelidir.

Veritabanı kuramı ortaya atıldığında ilk geliştirilen model hiyerarşik veritabanı modelidir (hierarchical database model). Bu modelde, adından da anlaşılacağı üzere yalnızca birden çoğa bir ilişki söz konusudur. Zaman içerisinde farklı ilişkilerin de gerekliliği gündeme gelince, ağ veritabanı modeli (network database model) geliştirilmiş ve birden çoğa ilişkinin yanı sıra çoktan çoğa ilişki kurulabilmiştir. Ancak hiyerarşik veritabanı ve ağ veritabanı modellerinin esnek olamayışı, bu modellerde veriyi bilgiye dönüştürme sürecinde tablolar arası ilişkilerin tam olarak tanımlanamaması, ilişkisel veritabanı modelinin ortaya atılmasında tetikleyici bir etken olmuştur. İlişkisel veritabanı modelinin en önemli özelliklerinden biri anahtar alan kavramıdır. İlişkisel veritabanı modeli anahtar alanlar yardımı ile tablolar arasında ilişki kurulmasını sağlamış, özellikle diğer modellerden farklı olarak varlıklar arasındaki doğal ilişki olan bire bir (1:1) ilişkinin tablolar arasında kullanılmasına olanak tanımıştır.

Tablolar Arası İlişkiler

Birden çok farklı tabloda depolanan karmaşık veritabanı tasarımlarında tablolar arasında ilişkilerin kurulması gerekir. Tablolar arası ilişkiler veri tekrarını engelleyerek verimlilik artışı sağlar. İlişkiler her iki tabloda da bulunan ortak bilgi alanları üzerinden, anahtar alanlardaki verilerin eşleştirilmesiyle kurulur. Çoğu durumda (bire bir ilişki hariç), bu eşleştirme alanları, birinci tabloda benzersiz kayıt barındıran birincil anahtar alan (primary key field) ile ikinci tablodaki çoklu kayıt içeren yabancı anahtar alan (foreign key field) bağlantısı ile sağlanır.

Tablolar arasında 3 farklı tipte ilişkiden söz edilebilir:

  • Bire-bir (one to one 1:1)
  • Birden-çoğa (one to many 1:M)
  • Çoktan-çoğa (many to many M:N)

Bire bir ilişkiler (1:1): Bu ilişkide, her iki tabloda ilişki kurulacak ortak bilgi alanı genellikle birincil anahtar (primary key field) ya da tekil anahtar alan (unique key field) olarak seçilir. TCDD bilet sistemini örnek alalım. İki adet tablo kullanalım. Yolcu tablosu ve bilet tablosu. Bu iki tablo arasındaki ilişki bire bir olur. Her yolcu yalnızca bir bilet satın alır ve her bileti yani koltuğu sadece bir kişi satın alabilir. İlişki kurulurken yolcu tablosuna mı yoksa bilet tablosuna mı ortak bilgi alanı eklemeliyiz? Eğer bilet tablosuna TCKIMLIK_NO bilgi alanı eklersek satılmayan koltuklar için “NULL” boş kayıt oluşturmuş oluruz. Bu istenen bir durum değildir. Yolcu tablosuna BILET_NO bilgi alanı eklersek her yolcu için bir bilet satın alınmış olacağı için herhangi bir “NULL” değeri yani boş kayıt oluşturmamış oluruz (s:90, Resim 5.1). Aslında bu iki tablonun tek bir tabloda birleştirilmesi gerektiği, bire bir ilişki kurmanın bir veritabanı tasarımcısı için çok kullanışlı olmadığı düşünülebilir. Bazı durumlarda bu kanı doğru olmakla birlikte bazı uygulamalarda bire bir ilişkinin veritabanı performansını arttırdığı gözlenmiştir.

Birden çoğa ilişkiler (1:M): Bu ilişkilerde ana tablonun bir kaydı, ikinci tablonun bir ya da birden fazla kaydı ile ilişkilidir. Bu sayede birden fazla tekrar eden kayıtların saklanmasında etkili bir depo alanı kullanımı sağlar. Bu ilişki tipi hiyerarşik veritabanı modelinin ortaya çıkmasını sağlamıştır. Örnek vererek açıklamak gerekirse bir kreşyuva için anne ve çocuk ilişkisini ele alalım. Örneğe göre ilişki kuracağımız tablolar anne ve çocuk tabloları olsun. Bir anne birden fazla çocuğunu kreşe getirmiş olabilir, diğer bir deyişle annenin birden fazla çocuğu olabilir. Ancak bir çocuğun birden fazla annesi olamaz. Buna göre tablolar arasında birden çoğa ilişki kurulmalıdır (s:90, Resim 5.2). Resimde Anne tablosundaki TCKIMLIK_NO bilgi alanı birincil anahtar alandır. Bu alan çocuk tablosunda yabancı anahtar alan olarak belirlenmiş ANNE_KIMLIK_NO bilgi alanı ile eşleştirilmiş ve tablolar arasında birden çoğa ilişki kurulmuştur. Bu ilişki yardımı ile annenin adı ve soyadı bilgileri veritabanında tekrarlanmadan anne tablosunda yalnızca bir kez yazılmıştır.

Çoktan çoğa ilişkiler (M:N): Bir tabloda birden fazla kayıt diğer tablodaki birden fazla kayıt ile ilişkili ise tablolar arasında çoktan çoğa ilişki kurulur. Çoktan çoğa ilişki kurabilmek için ek olarak ilişki tablosuna gereksinim vardır. Bu ilişkiyi açıklamak için öğrenci ve ders ilişkisini ele alalım. Üniversitede bir öğrenci birden fazla ders alabilir, bu duruma ek olarak bir derse birden fazla öğrenci katılabilir. Bu durum öğrenci ve ders tablolarının çoktan çoğa ilişkisi ile veritabanında tanımlanabilir.

Aynı anda birden fazla tablodan bilgi görüntüleyen sorgular oluşturarak, bu sorgu sonuçlarıyla formlar ve raporlar oluşturabilmek için tablolar arası ilişkilerin önceden kurulması gerekir. Bilgi tutarlılığını zorunlu kılarak ilişkisiz kayıtlar oluşmasının önlenmesi, birleştirme türünün ayarlanarak bir ilişkinin her bir tarafından hangi kayıtların bir sorgu sonucuna ekleneceğinin belirlenmesi gerekir.

Tablolar arasında ilişki kurarak , ilişkisel veri modeli oluşturulur. Tablolar arası ilişki, veritabanının daha hızlı sorgu yapmasını sağlar; veri-işlem süreçleri daha verimli olur. Böylece veriler güncelleştirilirken, ana verinin saklandığı tek bir tabloda güncelleme yapmak yeterli olur.

Tablolar arası ilişki oluşturulmadan önce, mantıksal sorular yardımı ile ilişki türü belirlenir. TCDD bilet örneğine göre mantık sorumuzu sorarsak; bir yolcu birden fazla koltukta oturabilir mi? Hayır. Bir koltukta birden fazla yolcu oturabilir mi? Hayır. Eğer her iki yanıt hayır ise ilişki bire bir ilişkidir.

Kreşteki anne-çocuk ilişkisi için mantıksal sorularımızı soralım. Bir annenin birden fazla çocuğu olabilir mi? Evet. Bir çocuğun birden fazla annesi olabilir mi? Hayır. Yanıtlardan birisi evet diğeri hayır ise ilişki birden çoğa kurulmalıdır. Bu ilişkide evet yanıtı verilen soru aynı zamanda ilişkinin yönünü belirlemektedir. Birden fazla çocuk cevabı anne tablosunun benzersiz kayıt içereceğini ve ilişkinin tek kayıt içeren tarafı olacağını ve çocuk tablosunun çok kayıt içereceğinin göstergesidir.

Son olarak bir öğrenci birden fazla ders alabilir mi? Evet. Bir derse birden fazla öğrenci girebilir mi? Evet. Yanıtların ikisi de evet ise, ilişki çoktan çoğa kurulmalıdır.

Veritabanı tasarım aşamasında önce problem ve probleme uygun çözüm belirlenir. İş süreçlerinin denetlendiği ve veri üretiminin optimize edildiği bir tasarım için sistem analizi yapılmalıdır. Sistem analizi; veritabanı tablolarının belirlenmesi, tablolardaki veri alanları ve veri tiplerinin seçilmesi, tablolar arası ilişkilerin kurulması, amaca uygun raporlamaların ve formların oluşturulması basamaklarından oluşur. Tasarım sonucunda süreci özetleyen veri modeli ortaya konulmalıdır.

Sorgulama

Tablolar arası karmaşık ilişkilerin söz konusu olduğu veritabanlarının tasarlanması ve yönetilmesi için IBM tarafında geliştirilmiş dile, Yapılandırılmış Sorgulama Dili (Structured Query Language-SQL) adı verilir. Genel itibariyle SQL;

  • Veritabanının tasarım özelliklerini belirlemek,
  • Tabloların ve ilişkilerin kurulmasını sağlamak,
  • Veritabanı kullanıcılarının yetkilendirilmesini ve erişimini kontrol etmek,
  • Veritabanı içerisine kayıtları eklemek,
  • Önceden eklenmiş kayıtları güncellemek ve silmek

gibi veritabanı yönetimi söz konusu olduğunda ihtiyaç duyulan bütün süreçlerin yönetilebilmesini sağlayan komutları içeren bir dildir. SQL sorgulama dili ile veritabanının yönetimine dair işlemler yapılabilir.

Öncelikle tasarım aşamasında veritabanının hangi tablolar ve hangi alanlardan oluşacağı, tasarlanan alanların içerdiği verilere ve sorgulanma özelliklerine bakılarak bu alanların hangi veri tipleri ile tanımlanacağı, tablolardaki hangi alanlara anahtar özelliği verileceği, hangi alanların ise indeksleme amacıyla kullanılacağı kararlarının verilmesi gerekir.

İkinci aşama veritabanına erişim yetkilerinin düzenlemesi aşamasıdır. Yani kullanıcıların ve veritabanı yöneticilerinin seviyeleri tanımlanarak gerekli seviyelerde veritabanına müdahale izinlerinin verilmesi gerekir. Veritabanında bulunan verilerin okunabilmesi, yeni verilerin eklenebilmesi, var olan verilerin değiştirilmesi ve hatta silinmesi çeşitli izinlere bağlı olmalıdır. Ayrıca kullanıcılar tarafından tabloların ve alanların eklenmesi ve değiştirilmesi de veritabanı yöneticisinin izni ile olmalıdır.

SQL’in veritabanı yönetim yeteneklerinin yanı sıra en önemli avantajı, adından da anlaşılacağı üzere güçlü sorgulama ve sorgulamalar ile oluşturulan raporlama özellikleridir. Tablolar arasındaki ilişkileri kullanan SQL, tek bir sorgulama komutuyla, birden fazla tabloyu aynı anda ele alarak ilgili tablolardaki elde edilen verileri tek bir sonuç olarak raporlayabilir.

Structured Query Language (SQL) komut tabanlı, yapısal veri kümeleri ve veri yapıları üzerinde işlem yapmayı sağlayan bir veritabanı dilidir. Komut tabanlı olması, komut yazıldıktan sonra veritabanına istek gönderilip çalıştırılması ve gelen sonucun gösterilmesi ilkesine dayanır. Veritabanında yapılacak işlemlere göre standartlaşmış kurallara bağlı olan SQL komut dizilimleri ile veritabanının işletimi sağlanır. Temel SQL sorgulama dili komutları şunlardır:

  • SELECT
  • INSER INTO
  • UPDATE
  • DELETE
  • WHERE

SELECT SQL’in en temel sorgulama komutudur. Tablolar ve aralarındaki ilişkileri göz önüne alarak istenilen sorgulara göre tablolardan ve istenen veri alanlarından verileri toparlayıp, raporlayan komuttur. Türkçe karşılığı “seçmek” olan SELECT komutunu tanımlamak için hangi tablo veya tablolardaki hangi alanının ya da alanlarının sorgulandığının belirtilmesi gerekir. En basit haliyle;

SELECT FROM ı> ı>

olarak tanımlanabilir. SQL komutunu genişleterek sorguya birden fazla alan eklenmek istendiğinde alan adları virgül ile birbirinden ayrılmalıdır. Tablodaki bütün veri alanlarının listelenmesi gerektiğinde bütün alan adlarının yan yana yazılması yerine * karakteri kullanılır (s:94, Resim 5.5c). Böylece tablonun tümü tek komut ile görüntülenebilir.

INSERT INTO komutu tablolara yeni kayıt eklemek için kullanılan komuttur. Türkçe karşılığı ‘içine ekle’ olan komutun temel ifadesi şu şekildedir;

INSERT INTO VALUES (Alanlara ait veriler) ı>

şeklinde düzenlenir. Buradaki VALUES ifadesi sayesinde tablodaki alanlara sırasıyla yeni kayıta ait veriler aktarılır. Sadece belirli alanlara ait veriler eklenecek ise veri eklenecek alanların tablo adından sonra parantez içerisinde tanımlanması gerekir. Böylece bazı alanlara ait veriler boş geçilebilir.

UPDATE eksik bırakılan alanlara yeni verilerin girilmesi ya da var olan verilerin değiştirilmesi için kullanılır. UPDATE komutunun Türkçe karşılığı ‘güncelleme’ olarak ifade edilir. UPDATE komutunda, INSERT komutundaki tablo ve alan adları ile eklenecek yeni verilere ek olarak, veritabanındaki hangi kaydın değiştirileceğinin de bildirilmesi gerekir.

Türkçe karşılığı ‘kayıt sil’ olan DELETE veritabanında tutulan kayıtların silinmesi işleminde kullanılır. Dikkat edilmesi gereken silinen kaydın tekrar yerine getirilemeyeceğidir. Hatalı kayıt silme işlemlerinin tekrar geri döndürülememesi nedeniyle, kayıt silme işlemi sırasında tedbir amaçlı geçici silme işlemi tekniği sık başvurulan bir yöntemdir. Bu yöntemde kullanıcılara kayıt silme yetkisi verilmez. Geçici silme yönteminde kayıtların DELETE komutu ile silinmesi yerine, her tabloya fazladan bir alan eklenerek bu alana belirli bir işaret konur. Veritabanı yöneticisi de belirli aralıklarla bu alanı kontrol ederek, DELETE komutu ile kesin silme işlemini yapar.

WHERE komutu veritabanında yapılan sorgulamalarda ve işlemlerde belirli özelliklere sahip kayıtların belirtilmesinde kullanılır. WHERE ifadesi ile SELECT komutunun kullanım örneği şöyledir:

SELECT * FROM ilçeler WHERE bağlı_olduğu_il = ‘Eskişehir’

SELECT komutunun işletilmesi sonucunda bütün tablodaki kayıtlar yerine sadece Eskişehir iline bağlı ilçeler listelenir. Burada karşılaştırma operatörü olarak kullanılan eşittir karakterine ve tırnak işaretine dikkat edilmesi gerekir. Eğer veri alanının veri türü metinsel (alfa-nümerik) ise, eşittir operatöründen sonra değer tırnak içinde yazılır. Eşittir operatörünün nümerik veri türünde bilgi alanı ile kullanımı ise doğrudan eşitliktir, değer tırnak içinde yazılmaz.

SELECT * FROM ilçeler WHERE plaka_kod = 26

Sorgu sonucu plaka kodu 26 olan ile ait ilçeler listelenir. Farklı kullanımlarından dolayı WHERE ifadesinden sonra kullanılacak veri alanının veri türüne dikkat edilmelidir.

WHERE sadece eşitlik durumunda değil, benzerlik, büyüklük, küçüklük vb. karşılaştırmalarda kullanılan bir komuttur. Veritabanında yapılan sorgulamalarda bazı özelliklere göre benzer kayıtların seçilmesi istenildiğinde WHERE komutu ile beraber LIKE operatörü kullanılmaktadır. Türkçe karşılığı ‘benzer’ olan LIKE ifadesi ile WHERE komutunun kullanım örneği şöyledir:

SELECT * FROM ilçeler WHERE bağlı_olduğu_il LIKE ‘E%’

ifadesi ile E harfi ile başlayan illerin ilçeleri listelenir. İfadede yer alan % işareti ‘bir veya birden fazla herhangi bir karakter gelebilir’ demektir. Örneğin aşağıdaki ifadede ismi ‘şehir’ ile biten illerin ilçeleri listelenir. Bu defa % işareti öne konularak sonu ‘şehir’ olan illere bağlı ilçeler listelenmektedir.

SELECT * FROM ilçeler WHERE bağlı_olduğu_il LIKE ‘%şehir’

Tek bir karakterin bilinmediği durumlar da ise ‘_’ alt çizgi karakteri kullanılır. Örneğin

SELECT * FROM ilçeler WHERE bağlı_olduğu_il LIKE ‘Eskişehir_’

ifadesi ile ‘Eskişehir’ ile başlayan toplam 9 karakterlik bütün il isimlerini içeren kayıtlarda sorgulama yapılır. Karşılaştırma operatörleri tablo şeklinde verilmiştir (s:98, Tablo:5.1).

Mantıksal operatörler, iki veya daha fazla koşulun belirtilmesine yardımcı olan ifadelerdir. Karmaşık koşullar ve sorgular mantıksal operatörler yardımıyla oluşturulur. Bu işlem tekil koşulları ve farklı nitelik karşılaştırmalarını birbirlerine bağlar. Mantıksal oparatörler şunlardır:

  • AND (ve)
  • OR (veya)
  • XOR (veya değil)
  • NOT (değil)
  • IsNull (boş)
  • IsNotNull (boş değil)

AND, iki farklı alanda aynı anda kısıtlama kriterlerinin uygulanması istenildiğinde WHERE komutunun arkasına yerleştirilen iki farklı kriter AND operatörü ile bağlanır

SELECT * FROM ilçe_nüfus

WHERE erkek_nüfus >= 3000 AND bağlı_olduğu_il = ‘Eskişehir’ifadesi ile Eskişehir iline bağlı ve erkek nüfus sayısı 3000 ve üzerindeki ilçeler sorgulanacaktır.

OR , iki farklı alanın herhangi birinin kısıtlama kriterlerine uyan kayıtları listelemek için WHERE komutunun arkasına yerleştirilen iki farklı kriter OR operatörü ile bağlanır.

SELECT * FROM ilçe_nüfus

WHERE erkek_nüfus >= 3000 OR bağlı_olduğu_il = ‘Eskişehir’

ifadesi ile Eskişehir iline bağlı ilçeler veya erkek nüfus sayısı 3000 ve üzerindeki ilçeler sorgulanacaktır.

IsNull, SQL de boş geçilmesine izin verilen alanlardaki eksik veya girilmemiş veriler Null (yokluk-boşluk) olarak ifade edilir. Bu sayede veritabanındaki kaydı boş olan alanlar sorgulanabilir. Örneğin

SELECT * FROM ilçe_nüfus WHERE erkek_ nüfus ISNULL

veya

SELECT * FROM ilçe_nüfus WHERE erkek_ nüfus = NULL

komutunun uygulanması ile erkek nüfus verisi girilmemiş ilçeler listelenir.

IsNotNull, SQL verilerin boş olmadığı kayıtları sorgulamak için IsNotNull (boş değil-veri var) ifadesi kullanılır. Bu sayede veritabanındaki veri girilmiş alanlar, yani bir değer girilmiş alanlar sorgulanabilir. Örneğin;

SELECT * FROM ilçe_nüfus WHERE kadın_ nüfus ISNOTNULL

veya

SELECT * FROM ilçe_nüfus WHERE kadın_ nüfus <> NULL

komutunun uygulanması ile kadın nüfus verisi bulunan ilçeler listelenir.

SELECT komutu ile veritabanındaki sorguya uygun kayıtlar, belirtilen bilgi alanına göre azalan veya çoğalan olarak sıralanır. Örneğin ilçe_nüfus tablosunda bulunan ilçeler sorgulandığında veritabanına kayıtlar eklendiği sırada sorgu sonucu listelenir. Burada sıralama kriteri birincil anahtardaki artış sırasıdır. Bu sorgulama sonucu eğer farklı bir alana göre sıralanmak istenir ise ORDER BY komutu ile sorgu sonucunun sıralanması istenen kriter belirtilir.

Bu tür sıralama işlemlerinin tek komutta yapılabilmesi açısından SELECT komutunun ardına eklenen ORDER BY komutu ile tek aşamada bu sıralama işlemi yapılabilir. ORDER BY komutuna ek olarak sıralama yönünün de belirtilmesi gerekir.

ASC (ascending order): Kayıtları istenilen alana göre, alan sayısal ise küçükten büyüğe ya da metinsel ise alfabetik olarak A’dan Z’ye sıralar. Türkçe anlamı ‘artan sırada’ demektir.

DESC (descending order): Kayıtları istenilen alana göre, alan sayısal ise büyükten küçüğe ya da metinsel ise alfabetik olarak Z’den A’ya ters sıralar. Türkçe anlamı ‘azalan sırada’ demektir.

Veritabanında tekrar eden verilerin sorgularda listelenmesi istenmediği zaman SELECT komutuna eklenen DISTINCT ifadesi Türkçe’de ‘farklı’ anlamına gelmektedir. Örnek olarak tablomuzdaki ilçelerin hangi illere bağlı olduğunun bilinmesi istenir ise;

SELECT bağlı_olduğu_il FROM ilçe_nüfus

şeklide bir komut ile sorgulama yapılabilir. Fakat bu tablodaki ilçe sayısı kadar birbirini tekrar eden bağlı olduğu il kayıtları ile karşılaşırız. Bu sorunu çözebilmek için SELECT ifadesinin arkasına eklenecek DISTINCT ifadesiyle gereksiz tekrarlar önlenerek daha sade sonuca ulaşabiliriz.

Veritabanlarında yapılan sorgulamalar sonucu kayıt sayısı çok fazla olan sonuç listeleri elde edilebilir. Bu listelerde birbirine benzer özellikteki kayıtların geleneksel yöntemlerle sayılması, toplanması vb. işlemleri yapmak oldukça zordur. Bu amaçla, birbirine benzer kayıtların gruplandırılarak sayılması, toplanması gibi işlemlerin sorgu komutlarının içerisinde yapılabilmesi işlemleri kolaylaştıracaktır. Ortak özelliği bulunan kayıtların gruplanması sayma, toplama vb. işlemlerinin yapılabilmesini kolaylaştıran SQL komutu GROUP BY komutudur.

SELECT COUNT(ilçe_no) AS iller_bağlı_ilçe_sayısı, bağlı_olduğu_il FROM ilçe_nüfus

GROUP BY bağlı_olduğu_il

Yukarıdaki SQL komutunda GROUP BY komutu, ilçeler tablosundaki ilçeleri bağlı oldukları illere göre gruplandırmıştır. Gruplandırma işleminden sonra bir ile bağlı kaç ilçe kaydı olduğu COUNT (ilçe_ no) komutu ile saydırılmıştır. Buradan anlaşılacağı üzere COUNT sayma komutudur. Sayım sonucunun görüntülenebilmesi için sanal bir bilgi alanı gerekir. Komutun sonucu sanal bilgi alanında göstermesi ve sayıların yanına illeri listeleyebilmesi için, AS iller_bağlı_ilçe_sayısı, bağlı_olduğu_il kullanılmıştır. GROUP BY operatörü ile sadece sayma işlemi değil, toplama, en yüksek, en düşük ve ortalama işlemleri de yapılabilir.

COUNT: Gruptaki kayıtları sayar.
SUM: Grupta gösterilen alandaki verileri toplar.
MAX: Grupta gösterilen alandaki en büyük değeri bulur.
MIN: Grupta gösterilen alandaki en küçük değeri bulur.
AVG: Grupta gösterilen alandaki verilerin ortalamasını hesaplar.

HAVING, GROUP BY komutunun yeteneklerini artırmak için eklenen ve Türkçe anlamı ‘sahiplik’ olan, WHERE komutundaki eşitlik, büyüklük, küçüklük gibi karşılaştırma kriterlerini kullanarak grup içinde süzme işlemi gerçekleştiren bir SQL operatörüdür.

Giriş

Veritabanlarının en vazgeçilmez özelliklerinden biri depolanan veriden hızlı bilgi elde edilebilmesidir. Bu özellik veritabanlarının sorgulanması ve analiz edilmesi ile mümkündür. Bilindiği üzere veritabanı sorgulaması ve analizi bütün Veritabanı Yönetim Sistemleri (VTYS) tarafından kullanılan Yapılandırılmış Sorgulama Dili (Structured Query Language-SQL) ile yapılmaktadır. Verilerden hızlı bilgi elde edebilmek için sorgulama aracının yanı sıra, veri yığınlarının ilişkili oldukları diğer veri yığınlarına çabuk erişilmesi gerekir.

İlişkisel veritabanı modeli (relational database model) ile verilerin yığınlar (kümeler) halinde işlenebileceği ve yığınlar arasında ilişkiler kurulabileceği görülmüştür. Mantık ve alt küme olgusunun veritabanı üzerine uygulanabilirliğini ortaya koyan ilişkisel veritabanı modeli, dayandığı bu matematiksel teori nedeni ile ilişkisel adını almaktadır. Kendinden önceki veritabanı modellerinin gelişmiş bir versiyonu olarak ifade edilebilen bu model oldukça yaygın kullanılan bir veritabanı modelidir.

Veritabanı kuramı ortaya atıldığında ilk geliştirilen model hiyerarşik veritabanı modelidir (hierarchical database model). Bu modelde, adından da anlaşılacağı üzere yalnızca birden çoğa bir ilişki söz konusudur. Zaman içerisinde farklı ilişkilerin de gerekliliği gündeme gelince, ağ veritabanı modeli (network database model) geliştirilmiş ve birden çoğa ilişkinin yanı sıra çoktan çoğa ilişki kurulabilmiştir. Ancak hiyerarşik veritabanı ve ağ veritabanı modellerinin esnek olamayışı, bu modellerde veriyi bilgiye dönüştürme sürecinde tablolar arası ilişkilerin tam olarak tanımlanamaması, ilişkisel veritabanı modelinin ortaya atılmasında tetikleyici bir etken olmuştur. İlişkisel veritabanı modelinin en önemli özelliklerinden biri anahtar alan kavramıdır. İlişkisel veritabanı modeli anahtar alanlar yardımı ile tablolar arasında ilişki kurulmasını sağlamış, özellikle diğer modellerden farklı olarak varlıklar arasındaki doğal ilişki olan bire bir (1:1) ilişkinin tablolar arasında kullanılmasına olanak tanımıştır.

Tablolar Arası İlişkiler

Birden çok farklı tabloda depolanan karmaşık veritabanı tasarımlarında tablolar arasında ilişkilerin kurulması gerekir. Tablolar arası ilişkiler veri tekrarını engelleyerek verimlilik artışı sağlar. İlişkiler her iki tabloda da bulunan ortak bilgi alanları üzerinden, anahtar alanlardaki verilerin eşleştirilmesiyle kurulur. Çoğu durumda (bire bir ilişki hariç), bu eşleştirme alanları, birinci tabloda benzersiz kayıt barındıran birincil anahtar alan (primary key field) ile ikinci tablodaki çoklu kayıt içeren yabancı anahtar alan (foreign key field) bağlantısı ile sağlanır.

Tablolar arasında 3 farklı tipte ilişkiden söz edilebilir:

  • Bire-bir (one to one 1:1)
  • Birden-çoğa (one to many 1:M)
  • Çoktan-çoğa (many to many M:N)

Bire bir ilişkiler (1:1): Bu ilişkide, her iki tabloda ilişki kurulacak ortak bilgi alanı genellikle birincil anahtar (primary key field) ya da tekil anahtar alan (unique key field) olarak seçilir. TCDD bilet sistemini örnek alalım. İki adet tablo kullanalım. Yolcu tablosu ve bilet tablosu. Bu iki tablo arasındaki ilişki bire bir olur. Her yolcu yalnızca bir bilet satın alır ve her bileti yani koltuğu sadece bir kişi satın alabilir. İlişki kurulurken yolcu tablosuna mı yoksa bilet tablosuna mı ortak bilgi alanı eklemeliyiz? Eğer bilet tablosuna TCKIMLIK_NO bilgi alanı eklersek satılmayan koltuklar için “NULL” boş kayıt oluşturmuş oluruz. Bu istenen bir durum değildir. Yolcu tablosuna BILET_NO bilgi alanı eklersek her yolcu için bir bilet satın alınmış olacağı için herhangi bir “NULL” değeri yani boş kayıt oluşturmamış oluruz (s:90, Resim 5.1). Aslında bu iki tablonun tek bir tabloda birleştirilmesi gerektiği, bire bir ilişki kurmanın bir veritabanı tasarımcısı için çok kullanışlı olmadığı düşünülebilir. Bazı durumlarda bu kanı doğru olmakla birlikte bazı uygulamalarda bire bir ilişkinin veritabanı performansını arttırdığı gözlenmiştir.

Birden çoğa ilişkiler (1:M): Bu ilişkilerde ana tablonun bir kaydı, ikinci tablonun bir ya da birden fazla kaydı ile ilişkilidir. Bu sayede birden fazla tekrar eden kayıtların saklanmasında etkili bir depo alanı kullanımı sağlar. Bu ilişki tipi hiyerarşik veritabanı modelinin ortaya çıkmasını sağlamıştır. Örnek vererek açıklamak gerekirse bir kreşyuva için anne ve çocuk ilişkisini ele alalım. Örneğe göre ilişki kuracağımız tablolar anne ve çocuk tabloları olsun. Bir anne birden fazla çocuğunu kreşe getirmiş olabilir, diğer bir deyişle annenin birden fazla çocuğu olabilir. Ancak bir çocuğun birden fazla annesi olamaz. Buna göre tablolar arasında birden çoğa ilişki kurulmalıdır (s:90, Resim 5.2). Resimde Anne tablosundaki TCKIMLIK_NO bilgi alanı birincil anahtar alandır. Bu alan çocuk tablosunda yabancı anahtar alan olarak belirlenmiş ANNE_KIMLIK_NO bilgi alanı ile eşleştirilmiş ve tablolar arasında birden çoğa ilişki kurulmuştur. Bu ilişki yardımı ile annenin adı ve soyadı bilgileri veritabanında tekrarlanmadan anne tablosunda yalnızca bir kez yazılmıştır.

Çoktan çoğa ilişkiler (M:N): Bir tabloda birden fazla kayıt diğer tablodaki birden fazla kayıt ile ilişkili ise tablolar arasında çoktan çoğa ilişki kurulur. Çoktan çoğa ilişki kurabilmek için ek olarak ilişki tablosuna gereksinim vardır. Bu ilişkiyi açıklamak için öğrenci ve ders ilişkisini ele alalım. Üniversitede bir öğrenci birden fazla ders alabilir, bu duruma ek olarak bir derse birden fazla öğrenci katılabilir. Bu durum öğrenci ve ders tablolarının çoktan çoğa ilişkisi ile veritabanında tanımlanabilir.

Aynı anda birden fazla tablodan bilgi görüntüleyen sorgular oluşturarak, bu sorgu sonuçlarıyla formlar ve raporlar oluşturabilmek için tablolar arası ilişkilerin önceden kurulması gerekir. Bilgi tutarlılığını zorunlu kılarak ilişkisiz kayıtlar oluşmasının önlenmesi, birleştirme türünün ayarlanarak bir ilişkinin her bir tarafından hangi kayıtların bir sorgu sonucuna ekleneceğinin belirlenmesi gerekir.

Tablolar arasında ilişki kurarak , ilişkisel veri modeli oluşturulur. Tablolar arası ilişki, veritabanının daha hızlı sorgu yapmasını sağlar; veri-işlem süreçleri daha verimli olur. Böylece veriler güncelleştirilirken, ana verinin saklandığı tek bir tabloda güncelleme yapmak yeterli olur.

Tablolar arası ilişki oluşturulmadan önce, mantıksal sorular yardımı ile ilişki türü belirlenir. TCDD bilet örneğine göre mantık sorumuzu sorarsak; bir yolcu birden fazla koltukta oturabilir mi? Hayır. Bir koltukta birden fazla yolcu oturabilir mi? Hayır. Eğer her iki yanıt hayır ise ilişki bire bir ilişkidir.

Kreşteki anne-çocuk ilişkisi için mantıksal sorularımızı soralım. Bir annenin birden fazla çocuğu olabilir mi? Evet. Bir çocuğun birden fazla annesi olabilir mi? Hayır. Yanıtlardan birisi evet diğeri hayır ise ilişki birden çoğa kurulmalıdır. Bu ilişkide evet yanıtı verilen soru aynı zamanda ilişkinin yönünü belirlemektedir. Birden fazla çocuk cevabı anne tablosunun benzersiz kayıt içereceğini ve ilişkinin tek kayıt içeren tarafı olacağını ve çocuk tablosunun çok kayıt içereceğinin göstergesidir.

Son olarak bir öğrenci birden fazla ders alabilir mi? Evet. Bir derse birden fazla öğrenci girebilir mi? Evet. Yanıtların ikisi de evet ise, ilişki çoktan çoğa kurulmalıdır.

Veritabanı tasarım aşamasında önce problem ve probleme uygun çözüm belirlenir. İş süreçlerinin denetlendiği ve veri üretiminin optimize edildiği bir tasarım için sistem analizi yapılmalıdır. Sistem analizi; veritabanı tablolarının belirlenmesi, tablolardaki veri alanları ve veri tiplerinin seçilmesi, tablolar arası ilişkilerin kurulması, amaca uygun raporlamaların ve formların oluşturulması basamaklarından oluşur. Tasarım sonucunda süreci özetleyen veri modeli ortaya konulmalıdır.

Sorgulama

Tablolar arası karmaşık ilişkilerin söz konusu olduğu veritabanlarının tasarlanması ve yönetilmesi için IBM tarafında geliştirilmiş dile, Yapılandırılmış Sorgulama Dili (Structured Query Language-SQL) adı verilir. Genel itibariyle SQL;

  • Veritabanının tasarım özelliklerini belirlemek,
  • Tabloların ve ilişkilerin kurulmasını sağlamak,
  • Veritabanı kullanıcılarının yetkilendirilmesini ve erişimini kontrol etmek,
  • Veritabanı içerisine kayıtları eklemek,
  • Önceden eklenmiş kayıtları güncellemek ve silmek

gibi veritabanı yönetimi söz konusu olduğunda ihtiyaç duyulan bütün süreçlerin yönetilebilmesini sağlayan komutları içeren bir dildir. SQL sorgulama dili ile veritabanının yönetimine dair işlemler yapılabilir.

Öncelikle tasarım aşamasında veritabanının hangi tablolar ve hangi alanlardan oluşacağı, tasarlanan alanların içerdiği verilere ve sorgulanma özelliklerine bakılarak bu alanların hangi veri tipleri ile tanımlanacağı, tablolardaki hangi alanlara anahtar özelliği verileceği, hangi alanların ise indeksleme amacıyla kullanılacağı kararlarının verilmesi gerekir.

İkinci aşama veritabanına erişim yetkilerinin düzenlemesi aşamasıdır. Yani kullanıcıların ve veritabanı yöneticilerinin seviyeleri tanımlanarak gerekli seviyelerde veritabanına müdahale izinlerinin verilmesi gerekir. Veritabanında bulunan verilerin okunabilmesi, yeni verilerin eklenebilmesi, var olan verilerin değiştirilmesi ve hatta silinmesi çeşitli izinlere bağlı olmalıdır. Ayrıca kullanıcılar tarafından tabloların ve alanların eklenmesi ve değiştirilmesi de veritabanı yöneticisinin izni ile olmalıdır.

SQL’in veritabanı yönetim yeteneklerinin yanı sıra en önemli avantajı, adından da anlaşılacağı üzere güçlü sorgulama ve sorgulamalar ile oluşturulan raporlama özellikleridir. Tablolar arasındaki ilişkileri kullanan SQL, tek bir sorgulama komutuyla, birden fazla tabloyu aynı anda ele alarak ilgili tablolardaki elde edilen verileri tek bir sonuç olarak raporlayabilir.

Structured Query Language (SQL) komut tabanlı, yapısal veri kümeleri ve veri yapıları üzerinde işlem yapmayı sağlayan bir veritabanı dilidir. Komut tabanlı olması, komut yazıldıktan sonra veritabanına istek gönderilip çalıştırılması ve gelen sonucun gösterilmesi ilkesine dayanır. Veritabanında yapılacak işlemlere göre standartlaşmış kurallara bağlı olan SQL komut dizilimleri ile veritabanının işletimi sağlanır. Temel SQL sorgulama dili komutları şunlardır:

  • SELECT
  • INSER INTO
  • UPDATE
  • DELETE
  • WHERE

SELECT SQL’in en temel sorgulama komutudur. Tablolar ve aralarındaki ilişkileri göz önüne alarak istenilen sorgulara göre tablolardan ve istenen veri alanlarından verileri toparlayıp, raporlayan komuttur. Türkçe karşılığı “seçmek” olan SELECT komutunu tanımlamak için hangi tablo veya tablolardaki hangi alanının ya da alanlarının sorgulandığının belirtilmesi gerekir. En basit haliyle;

SELECT FROM ı> ı>

olarak tanımlanabilir. SQL komutunu genişleterek sorguya birden fazla alan eklenmek istendiğinde alan adları virgül ile birbirinden ayrılmalıdır. Tablodaki bütün veri alanlarının listelenmesi gerektiğinde bütün alan adlarının yan yana yazılması yerine * karakteri kullanılır (s:94, Resim 5.5c). Böylece tablonun tümü tek komut ile görüntülenebilir.

INSERT INTO komutu tablolara yeni kayıt eklemek için kullanılan komuttur. Türkçe karşılığı ‘içine ekle’ olan komutun temel ifadesi şu şekildedir;

INSERT INTO VALUES (Alanlara ait veriler) ı>

şeklinde düzenlenir. Buradaki VALUES ifadesi sayesinde tablodaki alanlara sırasıyla yeni kayıta ait veriler aktarılır. Sadece belirli alanlara ait veriler eklenecek ise veri eklenecek alanların tablo adından sonra parantez içerisinde tanımlanması gerekir. Böylece bazı alanlara ait veriler boş geçilebilir.

UPDATE eksik bırakılan alanlara yeni verilerin girilmesi ya da var olan verilerin değiştirilmesi için kullanılır. UPDATE komutunun Türkçe karşılığı ‘güncelleme’ olarak ifade edilir. UPDATE komutunda, INSERT komutundaki tablo ve alan adları ile eklenecek yeni verilere ek olarak, veritabanındaki hangi kaydın değiştirileceğinin de bildirilmesi gerekir.

Türkçe karşılığı ‘kayıt sil’ olan DELETE veritabanında tutulan kayıtların silinmesi işleminde kullanılır. Dikkat edilmesi gereken silinen kaydın tekrar yerine getirilemeyeceğidir. Hatalı kayıt silme işlemlerinin tekrar geri döndürülememesi nedeniyle, kayıt silme işlemi sırasında tedbir amaçlı geçici silme işlemi tekniği sık başvurulan bir yöntemdir. Bu yöntemde kullanıcılara kayıt silme yetkisi verilmez. Geçici silme yönteminde kayıtların DELETE komutu ile silinmesi yerine, her tabloya fazladan bir alan eklenerek bu alana belirli bir işaret konur. Veritabanı yöneticisi de belirli aralıklarla bu alanı kontrol ederek, DELETE komutu ile kesin silme işlemini yapar.

WHERE komutu veritabanında yapılan sorgulamalarda ve işlemlerde belirli özelliklere sahip kayıtların belirtilmesinde kullanılır. WHERE ifadesi ile SELECT komutunun kullanım örneği şöyledir:

SELECT * FROM ilçeler WHERE bağlı_olduğu_il = ‘Eskişehir’

SELECT komutunun işletilmesi sonucunda bütün tablodaki kayıtlar yerine sadece Eskişehir iline bağlı ilçeler listelenir. Burada karşılaştırma operatörü olarak kullanılan eşittir karakterine ve tırnak işaretine dikkat edilmesi gerekir. Eğer veri alanının veri türü metinsel (alfa-nümerik) ise, eşittir operatöründen sonra değer tırnak içinde yazılır. Eşittir operatörünün nümerik veri türünde bilgi alanı ile kullanımı ise doğrudan eşitliktir, değer tırnak içinde yazılmaz.

SELECT * FROM ilçeler WHERE plaka_kod = 26

Sorgu sonucu plaka kodu 26 olan ile ait ilçeler listelenir. Farklı kullanımlarından dolayı WHERE ifadesinden sonra kullanılacak veri alanının veri türüne dikkat edilmelidir.

WHERE sadece eşitlik durumunda değil, benzerlik, büyüklük, küçüklük vb. karşılaştırmalarda kullanılan bir komuttur. Veritabanında yapılan sorgulamalarda bazı özelliklere göre benzer kayıtların seçilmesi istenildiğinde WHERE komutu ile beraber LIKE operatörü kullanılmaktadır. Türkçe karşılığı ‘benzer’ olan LIKE ifadesi ile WHERE komutunun kullanım örneği şöyledir:

SELECT * FROM ilçeler WHERE bağlı_olduğu_il LIKE ‘E%’

ifadesi ile E harfi ile başlayan illerin ilçeleri listelenir. İfadede yer alan % işareti ‘bir veya birden fazla herhangi bir karakter gelebilir’ demektir. Örneğin aşağıdaki ifadede ismi ‘şehir’ ile biten illerin ilçeleri listelenir. Bu defa % işareti öne konularak sonu ‘şehir’ olan illere bağlı ilçeler listelenmektedir.

SELECT * FROM ilçeler WHERE bağlı_olduğu_il LIKE ‘%şehir’

Tek bir karakterin bilinmediği durumlar da ise ‘_’ alt çizgi karakteri kullanılır. Örneğin

SELECT * FROM ilçeler WHERE bağlı_olduğu_il LIKE ‘Eskişehir_’

ifadesi ile ‘Eskişehir’ ile başlayan toplam 9 karakterlik bütün il isimlerini içeren kayıtlarda sorgulama yapılır. Karşılaştırma operatörleri tablo şeklinde verilmiştir (s:98, Tablo:5.1).

Mantıksal operatörler, iki veya daha fazla koşulun belirtilmesine yardımcı olan ifadelerdir. Karmaşık koşullar ve sorgular mantıksal operatörler yardımıyla oluşturulur. Bu işlem tekil koşulları ve farklı nitelik karşılaştırmalarını birbirlerine bağlar. Mantıksal oparatörler şunlardır:

  • AND (ve)
  • OR (veya)
  • XOR (veya değil)
  • NOT (değil)
  • IsNull (boş)
  • IsNotNull (boş değil)

AND, iki farklı alanda aynı anda kısıtlama kriterlerinin uygulanması istenildiğinde WHERE komutunun arkasına yerleştirilen iki farklı kriter AND operatörü ile bağlanır

SELECT * FROM ilçe_nüfus

WHERE erkek_nüfus >= 3000 AND bağlı_olduğu_il = ‘Eskişehir’ifadesi ile Eskişehir iline bağlı ve erkek nüfus sayısı 3000 ve üzerindeki ilçeler sorgulanacaktır.

OR , iki farklı alanın herhangi birinin kısıtlama kriterlerine uyan kayıtları listelemek için WHERE komutunun arkasına yerleştirilen iki farklı kriter OR operatörü ile bağlanır.

SELECT * FROM ilçe_nüfus

WHERE erkek_nüfus >= 3000 OR bağlı_olduğu_il = ‘Eskişehir’

ifadesi ile Eskişehir iline bağlı ilçeler veya erkek nüfus sayısı 3000 ve üzerindeki ilçeler sorgulanacaktır.

IsNull, SQL de boş geçilmesine izin verilen alanlardaki eksik veya girilmemiş veriler Null (yokluk-boşluk) olarak ifade edilir. Bu sayede veritabanındaki kaydı boş olan alanlar sorgulanabilir. Örneğin

SELECT * FROM ilçe_nüfus WHERE erkek_ nüfus ISNULL

veya

SELECT * FROM ilçe_nüfus WHERE erkek_ nüfus = NULL

komutunun uygulanması ile erkek nüfus verisi girilmemiş ilçeler listelenir.

IsNotNull, SQL verilerin boş olmadığı kayıtları sorgulamak için IsNotNull (boş değil-veri var) ifadesi kullanılır. Bu sayede veritabanındaki veri girilmiş alanlar, yani bir değer girilmiş alanlar sorgulanabilir. Örneğin;

SELECT * FROM ilçe_nüfus WHERE kadın_ nüfus ISNOTNULL

veya

SELECT * FROM ilçe_nüfus WHERE kadın_ nüfus <> NULL

komutunun uygulanması ile kadın nüfus verisi bulunan ilçeler listelenir.

SELECT komutu ile veritabanındaki sorguya uygun kayıtlar, belirtilen bilgi alanına göre azalan veya çoğalan olarak sıralanır. Örneğin ilçe_nüfus tablosunda bulunan ilçeler sorgulandığında veritabanına kayıtlar eklendiği sırada sorgu sonucu listelenir. Burada sıralama kriteri birincil anahtardaki artış sırasıdır. Bu sorgulama sonucu eğer farklı bir alana göre sıralanmak istenir ise ORDER BY komutu ile sorgu sonucunun sıralanması istenen kriter belirtilir.

Bu tür sıralama işlemlerinin tek komutta yapılabilmesi açısından SELECT komutunun ardına eklenen ORDER BY komutu ile tek aşamada bu sıralama işlemi yapılabilir. ORDER BY komutuna ek olarak sıralama yönünün de belirtilmesi gerekir.

ASC (ascending order): Kayıtları istenilen alana göre, alan sayısal ise küçükten büyüğe ya da metinsel ise alfabetik olarak A’dan Z’ye sıralar. Türkçe anlamı ‘artan sırada’ demektir.

DESC (descending order): Kayıtları istenilen alana göre, alan sayısal ise büyükten küçüğe ya da metinsel ise alfabetik olarak Z’den A’ya ters sıralar. Türkçe anlamı ‘azalan sırada’ demektir.

Veritabanında tekrar eden verilerin sorgularda listelenmesi istenmediği zaman SELECT komutuna eklenen DISTINCT ifadesi Türkçe’de ‘farklı’ anlamına gelmektedir. Örnek olarak tablomuzdaki ilçelerin hangi illere bağlı olduğunun bilinmesi istenir ise;

SELECT bağlı_olduğu_il FROM ilçe_nüfus

şeklide bir komut ile sorgulama yapılabilir. Fakat bu tablodaki ilçe sayısı kadar birbirini tekrar eden bağlı olduğu il kayıtları ile karşılaşırız. Bu sorunu çözebilmek için SELECT ifadesinin arkasına eklenecek DISTINCT ifadesiyle gereksiz tekrarlar önlenerek daha sade sonuca ulaşabiliriz.

Veritabanlarında yapılan sorgulamalar sonucu kayıt sayısı çok fazla olan sonuç listeleri elde edilebilir. Bu listelerde birbirine benzer özellikteki kayıtların geleneksel yöntemlerle sayılması, toplanması vb. işlemleri yapmak oldukça zordur. Bu amaçla, birbirine benzer kayıtların gruplandırılarak sayılması, toplanması gibi işlemlerin sorgu komutlarının içerisinde yapılabilmesi işlemleri kolaylaştıracaktır. Ortak özelliği bulunan kayıtların gruplanması sayma, toplama vb. işlemlerinin yapılabilmesini kolaylaştıran SQL komutu GROUP BY komutudur.

SELECT COUNT(ilçe_no) AS iller_bağlı_ilçe_sayısı, bağlı_olduğu_il FROM ilçe_nüfus

GROUP BY bağlı_olduğu_il

Yukarıdaki SQL komutunda GROUP BY komutu, ilçeler tablosundaki ilçeleri bağlı oldukları illere göre gruplandırmıştır. Gruplandırma işleminden sonra bir ile bağlı kaç ilçe kaydı olduğu COUNT (ilçe_ no) komutu ile saydırılmıştır. Buradan anlaşılacağı üzere COUNT sayma komutudur. Sayım sonucunun görüntülenebilmesi için sanal bir bilgi alanı gerekir. Komutun sonucu sanal bilgi alanında göstermesi ve sayıların yanına illeri listeleyebilmesi için, AS iller_bağlı_ilçe_sayısı, bağlı_olduğu_il kullanılmıştır. GROUP BY operatörü ile sadece sayma işlemi değil, toplama, en yüksek, en düşük ve ortalama işlemleri de yapılabilir.

COUNT: Gruptaki kayıtları sayar.
SUM: Grupta gösterilen alandaki verileri toplar.
MAX: Grupta gösterilen alandaki en büyük değeri bulur.
MIN: Grupta gösterilen alandaki en küçük değeri bulur.
AVG: Grupta gösterilen alandaki verilerin ortalamasını hesaplar.

HAVING, GROUP BY komutunun yeteneklerini artırmak için eklenen ve Türkçe anlamı ‘sahiplik’ olan, WHERE komutundaki eşitlik, büyüklük, küçüklük gibi karşılaştırma kriterlerini kullanarak grup içinde süzme işlemi gerçekleştiren bir SQL operatörüdür.

İlgili Makaleler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.