Veri Okyanusunda Yolculuk: HR Şeması İle Uygulamalı SQL(SELECT)

Sayfalar

  • Ana Sayfa
  • SQL
  • Oracle

13 Ocak 2013 Pazar

HR Şeması İle Uygulamalı SQL(SELECT)

Merhaba Arkadaşlar! Kısaca SQL'in ne olduğuna bakalım: Bilindiği üzere ilişkisel veritabanı yönetim sistemleri ilk olarak 1970 yılında Dr. E. F. Codd tarafından ortaya çıkarılmıştır. Codd'un ifade ettiği ilişkisel veritabanı modeli için SQL ilk defa IBM firması tarafından geliştirilmiştir. 1979'da ise günümüzdeki Oracle firması (o zamanlar Relational Software'di) SQL'i ilk ticari uygulama olarak piyasaya sürmüştür. Böylece SQL artık ilişkisel veritabanı yönetim sistemleri için bir standart haline gelmiştir ve tüm yönetim sistemlerinde SQL dil desteği olmak durumundadır. (SQL ile ilgili diğer temel bilgiler için buradan ulaşabilirsiniz.) SQL ilk çıkarıldığı zamanlar SEQUEL yani Structred English Query Language olarak bilinirken artık Structred Query Language olarak isimlendirilmektedir. SQL deyimleri büyük-küçük harf duyarlı olmayıp SQL cümlesinin sonuna noktalı virgül (;) konur. SQL yazarken dikkat edilecek hususlar aşağıdaki gibidir:
  • SQL cümleleri birden fazla satırı kapsayabilir
  • Okunulabilirlik açısından satırlar girintilerle belirlenir.
  • SQL Developer kullanıyorsanız (;) kullanmanıza gerek olmayabilir ancak SQL*Plus'ta (;) kullanmanız gerekmektedir.
  • SQL'deki temel kelimeler satırlara bölünemez yada kısaltılamaz.
SQL Developer gibi arayüz kullanıcıları SQL ile haşır neşir olmayabilir ancak arka planda çalışan kodlar SQL kodlarıdır. Bu yüzden veritabanına erişim için mutlaka SQL kullanmak durumundasınız. SQL; veritabanındaki bilgileri sorgulamak, üzerlerinde işlem yapmak ve yeni veritabanı nesneleri oluşturmak gibi pek çok görev için geliştirilmiş yapısal sorgulama dilidir. Girişi çok uzatmadan hemen deyimleri uygulamak için kullanacağımız örnek HR şemasından bahsedelim. Örnek HR Şeması: Önceki yazımızda da bahsettiğimiz gibi bu kullanıcı şeması HR kullanıcısı ile birlikte üzerinde uygulama yapabilmemiz için hazır halde gelmektedir. Bu kullanıcıyı nasıl aktif edip bu tablolara nasıl erişeceğimizi bir önceki yazımızda açıklamıştık. Şimdi kullanıcının sahibi olduğu tabloların genel yapısına bir göz atalım: Tablolar ve ilişkileri yukarıda açıkça görülmektedir. İnsan Kaynakları-Human Resources (HR) şemamızda 7 adet tablo mevcuttur. Bu tablolar hakkında bilgi edinmek istiyorsanız DESCRIBE komutunu aşağıdaki gibi kullanabilirsiniz: describe JOBS; Name Null Type ------------------------------ -------- ------------------------- JOB_ID NOT NULL VARCHAR2(10) JOB_TITLE NOT NULL VARCHAR2(35) MIN_SALARY NUMBER(6) MAX_SALARY NUMBER(6) 4 rows selected Bu komutla tablodaki sütunların ismine, NULL kısıtının olup olmadığına, veri tiplerinin ne olduğuna ulaşabilirsiniz. Yine tablolar hakkında bilgi edinmek için SQL Developer'dan HR şemasını inceleyebilirsiniz. Bu açıdan burada şu tablo şunu tutar, bu tablo şununla ilişkilidir şeklinde açıklama yapmanın yersiz olduğunu düşünüyorum. Çünkü amacımız sorguları ve ne yaptıklarını anlamak. İlk deyimimizle başlayalım: SELECT Deyimi SELECT deyimi en çok kullanılan deyim olup temel olarak veritabanı tablolarından veri çekme işlemini yapmamızı sağlar. Sorgunun genel yapısı aşağıdaki gibidir: SELECT *|{[DISTINCT] sütunadlari|expression [takmaismi],...} FROM tabloismi; Biraz açıklayacak olursak; | ifadesinin "veya" anlamında kullanıldığını hatırlatalım. Yani SELECT deyiminden hemen sonra ya * kullanılır ya da sütun isimleri belirlenir.Eğer * kullanılırsa tablonun tüm sütunları sonuç olarak getirilir. Bu istenmiyorsa, ilgilenilen sütunlarun isim isim belirlenmesi gerekir. SELECT * FROM COUNTRIES; COUNTRY_ID COUNTRY_NAME REGION_ID ---------- ---------------------------------------- ------------- AR Argentina 2 AU Australia 3 BE Belgium 1 BR Brazil 2 CA Canada 2 CH Switzerland 1 ... 25 rows selected Şeklinde çıktı alınır. (Çıktının tamamını belirtmedim) SELECT country_name, regıon_ıd FROM COUNTRIES; COUNTRY_NAME REGION_ID ---------------------------------------- ---------------------- Argentina 2 Australia 3 Belgium 1 Brazil 2 Canada 2 Switzerland 1 China 3 Germany 1 ... 25 rows selected Her iki kullanıma da bu şekilde örnek verebiliriz. Aynı sorguyu aşağıdaki gibi de çalıştırabilirsiniz ki bu çalıştırma şekli birden fazla tablo ile çalışıldığı durumlarda tercih edilir. Böylelikle aynı isimde sütunlar barındırabilen tablolarla birbirlerine karıştırmadan aynı anda işlem yapabilirsiniz: SELECT countries.country_name, countries.regıon_ıd FROM COUNTRIES; SQL'de Aritmetik İfadeler: Sütun isimlerinin belirtildiği SELECT kısmında aritmetik operatörler (*, /, -, +) ile işlemler yapmanız ve bu işlemlerin sonuçlarını sorgu sonuçlarınızda görmeniz mümkündür. Örnek kullanım olarak employees tablosundaki tüm işçilerin maaşlarına 500 zam yapıldığındaki durumu görmek istersek şu sorguyu yazmak gerekecektir: SELECT first_name, salary, salary + 500 FROM employees; Çıktı da aşağıdaki gibi olacaktır: FIRST_NAME SALARY SALARY+500 -------------------- ---------------------- --------------------- Donald 2600 3100 Douglas 2600 3100 Jennifer 4400 4900 Michael 13000 13500 Pat 6000 6500 Susan 6500 7000 Hermann 10000 10500 Shelley 12008 12508 William 8300 8800 ... 107 rows selected Bu şekilde sütunlarla istediğiniz karmaşıklıkta aritmetik işlem yaptırabilirsiniz. Tabii her yerde olduğu gibi burada da işlem önceliklerine dikkat etmek durumundasınız. Parantezler kullanarak bu öncelikleri istediğiniz biçimde yönetebilirsiniz. Getirilen sonuca dikkat ederseniz aritmetik hesaplama yaptırdığımız hayali sütunun ismi SALARY+500 olarak belirlenmiş. Bu okunabilirliği kötü yönde etkileyen bir faktördür. Bunu nasıl düzelteceğimizi ve istediğimiz ismi nasıl vereceğimizi öğreneceğiz. Örneğin aynı sorguyu aşağıdaki gibi yazsaydık ne olurdu? SELECT first_name, salary, salary + 500 as "Zamlı Maaş" FROM employees; Bu kullanıma takma isim verilmesi deniyor. Böylelikle daha okunabilir sonuçlar elde edebilirsiniz. Eğer takma isminiz birden fazla kelimeden oluşuyorsa yada büyük-küçük harf duyarlıysa yukarıdaki gibi çift tırnak "" içerisinde ifade etmelisiniz. Yukarı kullanıldığı gibi AS ifadesini kullanmak zorunda değilsiniz ancak bu yazdığınız SQL deyimini standart hale gitirir. Aksi halde tırnaklara ihtiyacınız yok demektir. Yukarıdaki sorgunun sonucu aşağıdaki gibi görünür: FIRST_NAME SALARY Zamlı Maaş -------------------- ---------------------- --------------------- Donald 2600 3100 Douglas 2600 3100 Jennifer 4400 4900 Michael 13000 13500 ... 107 rows selected NULL Değerler: Var olmayan, bilinmeyen, atanmamış ve uygulanamayan değerler olarak ifade edilirler.NULL değerler boşluk karakteri yada 0 değildir! Eğer NULL değer içeren bir sütunda aritmetik işlem yaparsanız NULL olan satırların işlem sonucu yine NULL olur. SELECT deyiminde eğer çekilen satırlar NULL ise; boş olarak görünürler. Bu anlatılanlara örnek olarak aşağıdaki sorgu verilebilir: SELECT last_name, 12*salary*commission_pct as komisyon FROM employees; LAST_NAME KOMISYON ------------------------- ------------------------ OConnell Grant Whalen ... Russell 67200 Partners 48600 Errazuriz 43200 Cambrault 39600 Zlotkey 25200 ... 107 rows selected komisyon olarak yazılan takma ismin KOMISYON olarak görüntülenmesinin sebebi çift tırnak kullanmamamızdır. Yukarıdaki sonuçta hesaplanmayan satırların NULL olduklarını anlıyoruz. Sütunları Birleştirme: Sonuçları ihtiyacınız doğrultusunda şekillendirmenize yarayan bir başka kolaylık da sonuçta çekilen sütunları birleştirerek görüntüleme opsiyonudur. İki dikey çubuğu || birleştirilecek olan sütunların arasına yerleştirmeniz yeterlidir. Örneğin çalışanların isim ve soy isimlerini birleştirip ad sütunu olarak göstermek istersek şu sorgu işimizi görür: SELECT last_name || first_name AS isim FROM employees; ISIM --------------------------------------------- AbelEllen AndeSundar AtkinsonMozhe AustinDavid BaerHermann BaidaShelli BandaAmit BatesElizabeth ... 107 rows selected Burada isim ve soy isimlerin arasında boşluk olmadığı için okunabilirlik biraz düşüyor. Bununda bir çözümü var. Sorguyu aşağıdaki gibi değiştirirsek durum düzelecektir. SELECT last_name || ' ' || first_name AS isim FROM employees; ISIM ---------------------------------------------- Abel Ellen Ande Sundar Atkinson Mozhe ... 107 rows selected Peki sonucu "Abel'in soy ismi Ellen" şeklinde görmek istersek nasıl bir sorgu yazmalıyız? Bu kez devreye q'[]' operatörünün kullanımı giriyor. Sorguyu aşağıdaki gibi değiştirirsek istenen sonuca ulaşılır: SELECT last_name || q'['in soy ismi ]' || first_name AS isim FROM employees; ISIM ---------------------------------------------------------- Abel'in soy ismi Ellen Ande'in soy ismi Sundar Atkinson'in soy ismi Mozhe Austin'in soy ismi David ... 107 rows selected Böylelikle çıktınızı formatlayarak okunabilirliğe artı yönde etkide bulunabilirsiniz. SELECT deyimi ile ilgili son mevzu ise DISTINCT anahtar sözcüğüdür. Diyelim ki tablonuzda bir bölümün ismi birden fazla kez zikredildi ve sorgunuzda da bu bölümle ilgili gereksiz yere birden çok kez sonuç getirildi. Bunu nasıl elimine edersiniz? İfadenin kullanım tarzı aşağıdaki gibidir: SELECT DISTINCT department_name FROM departments; Bu tabloda bölüm isimleri tekrarı söz konusu olmasa da sorgunun nasıl kullanılacağını göstermiş olduk :) SELECT deyimi bundan ibaret. Daha karmaşık sorgulara geçmeden önce öğrenmemiz gereken bir kaç konu daha var. Umarım faydalı olmuştur. Yeni sorgularda görüşmek üzere hoşçakalın!

Hiç yorum yok:

Yorum Gönder

Sonraki Kayıt Önceki Kayıt Ana Sayfa Kaydol: Kayıt Yorumları (Atom)

Hakkımda

Fotoğrafım Muhammed COŞTAN Her insan; doğumu ve ölümü de dahil bu ikisi arasında yaşadıklarıyla birer veri dünyasıdır. Bu veriler olmadan her şey anlamsız ve karmaşıktır. Fakat veriler insan eli değmeden anlamlı hale gelemez ve bilgilerin karıştığı bir okyanustan öteye geçemez. Bu okyanusu anlaşılır hale getirmek de yine onu oluşturanların elindedir. Bunu ilke edinerek çıktığım bu yolda veriler okyanusunu anlamlı parçalarla işlemek ilk hedefim! Profilimin tamamını görüntüle

Ne Var Ne Yok?

  • ▼  2013 (18)
    • ▼  Ocak (16)
      • Şema Nesnelerinin Yönetimi ve Silinen Tabloları Ku...
      • Veri Sözlüğü ve Kullanıcı Erişim Hakları
      • Hiyerarşik Sorgulama
      • ROLLUP ve CUBE İle İstatistik Oluşturma
      • HR Şeması İle Uygulamalı SQL(Şema Nesneleri)
      • HR Şeması İle Uygulamalı SQL(DDL)
      • HR Şeması İle Uygulamalı SQL(DML ve Veri Tutarlılığı)
      • HR Şeması İle Uygulamalı SQL(Küme Operatörleri)
      • HR Şeması İle Uygulamalı SQL(Alt Sorgular)
      • HR Şeması İle Uygulamalı SQL(JOIN)
      • Datawarehouse Türkiye Eğitimleri Başlıyor!
      • HR Şeması İle Uygulamalı SQL(Fonksiyonlar ve Grupl...
      • HR Şeması İle Uygulamalı SQL(WHERE)
      • HR Şeması İle Uygulamalı SQL(SELECT)
      • SQL Developer Kullanımı
      • RapidMiner'da K-Means İle Kümeleme Çalışması

Từ khóa » Hr şeması