19 Mayıs 2014 Pazartesi

SQL'de INNER JOIN Kullanımı

  • INNER JOIN SQL de  varsayılan olarak kullanılan tablolaları bağlama işlemidir.
  • INNER JOIN birleştirilen tablolarda ilişkinin sağlandığı tüm kayıtları getirir.
NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 

Örnek Sorgu : 
SELECT productname AS 'Ürün Adı', companyname AS 'Şirket Adı' FROM products
INNER JOIN suppliers ON products.SupplierID = suppliers.SupplierID
(Hangi firmadan hangi ürünü aldığımızı iki farklı tablodan birleştirerek listeleyelim.) 


SQL'de Tablo Birleştirme ve JOIN


SQL'de bazı durumlarda birden fazla tablodan veri çekme ihtiyacı duyabiliriz. Bunun için tablolar arasında bir ilişki kurulması gerekmektedir. Bu ilişki JOIN ile sağlanır. JOIN ifadesi birden fazla tabloyu birbirine bağlayıp  bu tablolar üzerinde işlem yapmamıza olanak sağlar.

JOIN ifadesi ile hangi tabloları ve nasıl birleştireceğimizi ON ifadesi ile tabloların hangi alanlar üzerinden birleşeceğini belirtiriz.

Tablolar genelde Birincil Anahtar ve Yabancı Anahtar alanları üzerinden birleştirilselerde, gerektiğinde diğer herhangi bir alan da bunun için kullanılabilir. Fakat bu alanların aynı tür veri içerdiğinden emin olmalısınız.

Birincil Anahtar (Primary key), her kayıt için benzersiz bir değer taşıyan alandır. 

Örneğin, öğrenci kayıtlarının tutulduğu bir tabloda, öğrenci numarasının saklandığı alan birincil anahtar olarak seçilebilir. Zira öğrenciyle ilgili tüm bilgiler gerçekte onun numarası ile kodlanmıştır ve her öğrencinin numarası bir birinden farklıdır.

Tablolar birleştirilirken Primary Key - Foreign Key ikilisi kullanılır. Tablolar arası ilişkiler aynı zamanda Unique Index kullanılarakta yapılabilir. Fakat yaygın olarak PK - FK kullanılır.

Primary Key (Birincil Anahtar) : Her satırı tekil bir şekilde tanımlayan benzersiz anahtardır. Primary Key sayesinde tablolarda bulunan satırlar birbirlerinden farklı olur ve her satırın Primary Key değeri farklı atanır. Primary Key tek bir sütun olduğu gibi birden fazla sütundan da oluşabilir.

  • Primary Key olacak sütun asla boş değer almamalıdır.
  • Primary Key olacak sütun tekrarı olmayan kayıtlardan oluşmalıdır...
  • Primary Key sütunu olabildiğince küçük ve basit veri tipinde tanımlanmalıdır.

Foreign Key (Yabancı Anahtar) : Bir tablodaki sütunun başka tablodaki anahtara olan referansını belirler. Primary Key'den farklı olarak bir tabloda birden fazla Foreign Key olabilir.

Örnek Sorgularda kullandığım Northwind Veritabanı diyagramını inceleyerek PK - FK bağlantılarını görebilirsiniz (diyagram'ın ayrıntılı sürümünü indirmek için tıklayınız.)


SQL'de COMPUTE ve COMPUTE BY Kullanımı

  • COMPUTE sorgumuzdaki kolonları Aggregate Fonksiyonlar ile kullanmamızı sağlar.
  • COMPUTE tüm sonuç kümesini listeler ve bu listenin altında tek bir detay satırı görüntüler. 
  • Farklı olarak tek sorguda 2 tane sonuç listesi bize döndürür. 2.liste detay listesidir. 
  • COMPUTE ile kullanılan sütun SELECT ifadesinde yer almalıdır.
  • COMPUTE BY kullanarak daha detaylı gruplandırma da yapılabilir.
NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 

Örnek Sorgu 1:
SELECT productid, orderid, quantity FROM [Order Details]
ORDER BY productid, orderid COMPUTE SUM(quantity)

(Sipariş detayları (Order Details) tablosundaki tüm satırları listeler ve kayıt kümesinin sonuna tüm ürünlerin genel toplamını verir.)

Örnek Sorgu 2:
SELECT productid, orderid, quantity FROM [order details]WHERE orderid<10250 ORDER BY orderid,productid COMPUTE SUM(quantity) BY orderid COMPUTE SUM(quantity)

(Sipariş Detayları (Order Details) tablosundaki tüm satırları listeler ve her sipariş altına sipariş genel toplamını verir. Son olarak ise tüm siparişlerdeki genel toplam görüntülenir.)  

NOT : SQL Server 2008 RS sonrası sürümlerde COMPUTE ve COMPUTE BY çalışmamaktadır. MSDN makalelerinde COMPUTE ve COMPUTE BY için SQL Server 2008 RS sonrası sürümlerde kaldırılacağı ve yerine ROLLUP kullanılması tavsiye edilmektedir. Detaylı bilgi için tıklayınız.

GROUPING Fonksiyonu

  • SQL Server'da Fonksiyonlar, hesaplamalarda ve özellikle sistem hakkında bilgi almada yaygın olarak kullanılan araçlardır. Transact-SQL (T-SQL) programlama dilinde değişik kategorilerle adlandırılan fonksiyonlar vardır. Bunlardan en yaygını veriler üzerinde işlem yapan toplama ya da gruplama olarak adlandırabileceğimiz aggregate fonksiyonlarıdır. 
  • GROUPING Aggregate (Gruplama) Fonksiyonudur.
  • GROUP BY ile kullanılan ROLLUP ve CUBE ile elde edilen sonuç listesini GROUPING fonksiyonu daha kolay değerlendirip yorumlamamızı sağlar. 
  • Sütunlarda özet bilgiler için 1, detay bilgiler için 0 değeri görüntülenir.
NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 

Örnek Sorgu :
SELECT OrderID, GROUPING(OrderID), ProductID,GROUPING(ProductID), SUM(quantity) AS 'Toplam Sipariş'
FROM [order details] WHERE OrderID < 10250
GROUP BY OrderID, ProductID WITH CUBE ORDER BY OrderID, ProductID


Sorgumuzda sütunlara dikkat edelim. OrderID alanı NULL olarak görünen kayıtlar tüm siparişlerdeki ürünlerin toplamlarını göstermektedir.

18 Mayıs 2014 Pazar

Java SWITCH CASE Örnek


Dışardan girilen bir sayi için;
f:faktöriyel hesabı yapan,
i:girilen sayı kadar isim yazan
t:girilen sayıya kadar kaç tane tek var
y:girilen sayıya kadar kaç tane cift var

İşlemlerini yapan yapan programı switch case ile yazınız.
Program sonunda; Devam etmek istiyormusun(E/H) sorusuyla başa dönmelidir.
Faktöriyel döngüsü do while; isim yazdırma döngüsü while ile yazılmalıdır.
import java.util.Scanner;
public class SWITCHCASE {
private static Scanner giris;
public static void main (String Arg[])
{
 
    gidilecekYer: do {
 //---------------------
 int s,f=1;
 int u=1;
 int x,m;
 
 Scanner giris = new Scanner(System.in);
 System.out.println("islem yapilacak sayiyi giriniz:");
 s=giris.nextInt();
 
 System.out.println("\n\n(f) Faktoriyel Hesapla");
 System.out.println("(i) Girilen Sayi Kadar Isim Yaz");
 System.out.println("(t) Sayiya kadar kac adet tek sayi var");
 System.out.println("(y) Sayiya kadar kac adet cift sayi var");
 String a=giris.next();
 char z = a.charAt(0);
 
 switch (z) {
  case 'f':
   do
   {
   f=f*s;
   s--;
   }
   while (s!=1); //sayi 1 e esit degilse dön. yani do calissin.
   System.out.println("Faktoriyel Sonuc:"+f); 
   
 break;
  case 'i':
   m=1;
   while (m<s+1)
   {
    System.out.println("BAYRAKTAR\n");
    m++;
   }
 break;
  case 't':
   for(m=0;m<s+1;m++)
   {
    if(m%2==1)
    {
     System.out.println("tek sayi: "+m);
    }
   }
   break;
  case 'y':
   x=1;
   for(m=0;m<s+1;m++)
   {
    if(m%2==0)
    {
     System.out.println(x+".cift sayi: "+m);
     x++;
    }
   }
   break;
   
  default: System.out.println("Hatali Deger Girdin."); break;
    
 }
 //--------------
 System.out.println("Devam Etmek istiyor musunuz ? (e/h)");
 String x1=giris.next();
 char x2 = x1.charAt(0);
 
 if(x2=='e')
 {
  continue gidilecekYer; 
 }
 else
 {
 break;
 }
  } while(true);
 
}}

C Programlama SWITCH CASE Örnek

Dışardan girilen bir sayi için;
f:faktöriyel hesabı yapan,
i:girilen sayı kadar isim yazan
t:girilen sayıya kadar kaç tane tek var
y:girilen sayıya kadar kaç tane cift var

İşlemlerini yapan yapan programı switch case ile yazınız.
Program sonunda; Devam etmek istiyormusun(E/H) sorusuyla başa dönmelidir.
Faktöriyel döngüsü do while; isim yazdırma döngüsü while ile yazılmalıdır.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main(void)
{
    gidilecekYer: ;
    system("cls");       
    int s;
    int f=1;
 int u=1;
 int x,m;
 char z;

    printf ("Islem Yapilacak Sayiyi Giriniz: ");
    scanf("%d",&s);
 printf("\n\n(f) Faktoriyel Hesapla"); 
 printf("\n(i) Girilen Sayi Kadar Isim Yaz");
 printf("\n(t) Sayiya kadar kac adet tek sayi var");
 printf("\n(y) Sayiya kadar kac adet cift sayi var\n\n"); 
 
 scanf("%s",&z);
    
      switch (z) {
  case 'f':
   do
   {
   f=f*s;
   s--;
   }
   while (s!=1); //sayi 1 e esit degilse dönecek. do calisacak.
   printf ("Faktoriyel Sonuc: %d",f);
   break;
    case 1:
   printf ("1e");
   break;
        case 'i':
   m=1;
   while (m<s+1)
   {
   printf ("BAYRAKTAR\n");
   m++;
   }
   break;
      
        case 't':
   for(m=0;m<s+1;m++)
   {
    if(m%2==1)
    {
   printf("tek sayi: %d",m);
    }
   }
   break;
   
  case 'y':
   x=1;
   for(m=0;m<s+1;m++)
   {
    if(m%2==0)
    {
   printf(x+".cift sayi: %d",+m);
   x++;
    }
   }
   break;   
   
            default: printf("Hatali Deger Girdin"); break;
} 
   
   char x2; 
   printf("\n\nDevam Etmek istiyor musunuz ? (e/h)\n");
   scanf("%s",&x2); 
   
 
   if(x2=='e')
   {
               goto gidilecekYer;
} 
}

SQL'de WITH ROLLUP ve WITH CUBE Kullanımları

  • GROUP BY ile bir toplama işlevi kullandığımızda her farklı değer için sadece sonuç satırı görüntülenir. Gruplandırdığımız değerlerin detaylarını farklı komutlar kullanarak görüntüleyebiliriz.
  • ROLLUP Grup değerlerini özetlemek için kullanılır.
  • CUBE GROUP BY ile belirtilen sütunların tüm olası eşleşmelerini özetler.
  • CUBE komutunun ROLLUP'dan farkı bütün sütünlarında null ile ara toplamlarını vermesidir.
NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 

Örnek Sorgu 1: SELECT ProductID AS 'Ürün ID', OrderID AS 'Sipariş ID', SUM(quantity) AS 'Toplam Sipariş'  FROM [order details]  WHERE OrderID < 10250
GROUP BY OrderID, ProductID WITH CUBE ORDER BY OrderID, ProductID
(Sipariş ID 10250’den küçük olan kayıtların ve ürünlerin detaylı toplamlarını listeleyelim.)

Örnek Sorgu 2: SELECT ProductID AS 'Ürün ID',OrderID AS 'Sipariş ID', SUM(quantity) AS 'Toplam Sipariş'  FROM [order details] WHERE OrderID < 10250
GROUP BY ProductID, OrderID WITH ROLLUP ORDER BY ProductID, OrderID
(Sipariş ID 10250’den küçük olan kayıtların ve ürünlerin detaylı toplamlarını listeleyelim.)


17 Mayıs 2014 Cumartesi

SQL'de HAVING Kullanımı

  • Toplam fonksiyonlarını kullanırken kısıt girilmesi gerektiğinde WHERE komutunu kullanamayız. HAVING, GROUP BY ile elde edilecek satırları kısıtlamak için kullanılır.
  • Görev ve işlev bakımından WHERE gibi çalışır fakat WHERE gruplama işlemlerinden önce, HAVING ise GROUP BY'dan sonra kullanılır.
NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 

Örnek Sorgu : SELECT ProductID, SUM(quantity) AS total_quantity FROM [order details] GROUP BY ProductID HAVING SUM(quantity) > 1300
(Toplam sipariş miktarı 1300 adetten fazla olan ürünkodlarını listeleyelim.)




SQL'de GROUP BY Kullanımı

  • GROUP BY ile belirtilen sütun yada sütunlardaki aynı değere sahip satırları tek bir satırda birleştirmeyi sağlarız.
  • DISTINCT anahtar kelimesi yanlızca benzersiz satırları listelemek için kullanılmaktadır.
  • GROUP BY genellikle toplam fonksiyonlarıyla (Aggregate Function) kullanılır. 
  • GROUP BY ile belirtilen sütunlar SELECT ifadesinde de yeralmalıdır.
  • GROUP BY sorgularında kullanılan en yaygın toplama işlevleri MIN, MAX, SUM ve COUNT'dır.
NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 

Örnek Sorgu : SELECT ProductID AS 'Ürün ID', SUM(quantity) AS 'Toplam Sipariş' FROM [order details] GROUP BY ProductID
(Sipariş detayları tablosundan productid alanına göre gruplandırarak ve her grubun toplam sipariş miktarını belirterek listeleyelim.)



SQL'de WITH TIES Kullanımı

  • WITH TIES, ORDER BY ile sıralanan sonuçlarda son kayıt ile aynı değerde olan kayıtların da listelenmesini sağlar. Bu durumda sonuç belirtilen n sayısından daha fazla olabilir.
  • WITH TIES sadece ORDER BY ile birlikte kullanılmaktadır.

NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 

Örnek Sorgu 1: SELECT TOP 3 OrderID, ProductID, quantity FROM [order details] ORDER BY quantity DESC
(Sipariş detayları tablosundan (order details) en yüksek siparişi verilen 3 ürünü listeleyelim.)


TOP n ile çalıştırdığımız sorgularımızı eğer WITH TIES ile çalıştırırsak n den farklı sonuç listesi görebiliriz. Örnek Sorgu 1′de de görüldüğü gibi en çok satış yapılan ilk 3 ürünü sıraladık. Fakat sıradaki 6., 7. ürünler de 120′şer adet satıldıysa? Onlar listeye giremeyecek çünkü biz 3 satır görmek istediğimizi belirttik. Bu gibi durumlarda WITH TIES'e başvuruyoruz. Şimdi aynı sorguya WITH TIES uygulayalım ve sonuçları görelim.

Örnek Sorgu 2: SELECT TOP 3 WITH TIES OrderID, ProductID, quantity FROM [order details] ORDER BY quantity DESC
(Sipariş detayları tablosundan (order details) en yüksek siparişi verilen 3 ürünü listeleyelim.)

 

WITH TIES kullanımında önemli nokta örnek sorgumuzdaki ilk 3 değeri listeledikten sonra en son satıra ait quantity değeri daha varsa onlarıda getirmesidir. İlk sorguda 3 sonuçtan sonuncusunda quantity değerinin 120 olduğunu görmekteyiz. WITH TIES kullanılan sorguda quantity değeri 120 olan bütün değerlerin getirilmesini sağladık. 

SQL'de TOP n, TOP n Percent ve DISTINCT Kullanımları

İlk n Kaydın Görüntülenmesi - TOP n
  • Belirli sayıda satır çekmek için SQL'de TOP ifadesi kullanılır.
  • TOP n ifadesiyle tablonun baştan ilk n satırını çekebiliriz.
  • TOP n veya TOP n PERCENT anahtar kelimeleri ORDER BY  yan tümcesini ile birlikte kullanılmalıdır. Aksi halde listelenen verilerde WHERE ifadesi ile belirtilen koşula uyan kayıtlar rastgele dizileceğinden, istediğimiz sonucu elde edemeyebiliriz.
TOP n Kullanımı : SELECT TOP n * FROM <Tablo Adı>

NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 

Örnek Sorgu 1: SELECT TOP 10 OrderID,ProductID, quantity FROM [order details] ORDER BY quantity DESC
(Sipariş detayları tablosundan (order details) en yüksek siparişi verilen 10 ürünü listeleyelim.) 



Belli Yüzdeli Kayıtların Görüntülenmesi - TOP n Percent
  • Tablodaki kayıtların % n kadarı görüntülenebilir.
  • Örneğin tablomuzda 100 kayıt var ise TOP 10 Percent ifadesi ile bu kayıtların %10'u görüntülenir.
TOP n Percent Kullanımı : SELECT TOP n Percent * FROM <Tablo Adı>

Örnek Sorgu 2: SELECT TOP 5 Percent OrderID,ProductID, quantity FROM [order details] ORDER BY quantity DESC
(Sipariş detayları tablosundan (order details) en yüksek siparişi verilen ürünlerin %5'ini listeleyelim.) 



Tekrarsız Kayıtların Görüntülenmesi - DISTINCT

DISTINCT Kullanımı : SELECT DISTINCT <sütun adı> FROM <tablo adı> [WHERE <koşul>]
  • Bazen veriler arasındaki benzerlikleri kaldırarak sadece benzer olmayanları listeletmek isteyebiliriz. Böyle durumlarda SELECT DISTINCT sadece tek olan (unique) kayıtların sonuç listesinde yer almasını sağlar. 
  • Bir sütunda belirli bir kelime iki veya daha fazla sayıda tekrarlanıyor olabilir. Fakat DISTINCT ile her tekrarlanan kayıt sadece bir kez listelenir.  
  • DISTINCT SQL komutu SELECT komutu ile birlikte kullanılmaktadır.
Örnek Sorgu 3: SELECT DISTINCT City FROM Customers
(Müşteriler (Customers) tablosundaki  Şehir (City) sutunlarını listeleyelim. Ve aynı değerlerin tekrarlanmamasını sağlayalım.) 

1 Mayıs 2014 Perşembe

Linux mtr Komutu

mtr komutu, gitmek istediğimiz ip adresine ulaşıncaya kadar geçtiğimiz ağları tanımlamayı sağlayan komuttur. Kısaca mtr komutu ping ve traceroute komutlarının bir arada yapan bir komuttur. Bu komutun windows sistemlerdeki karşılığı tracert komutudur.

Örneğin terminal ekranımızdan  mtr –report www.google.com yazdığımız zaman karşımıza google.com adresine gidinceye kadar geçilen ağları tek tek listeler. Ayrıca veri paketleri alışverişi sırasında geçen süreyi ve detaylarıda bize verir.


--report parametresini yazmazsak karşımıza anlık olarak değişen bir tablo çıkar. Yukarıdaki resimde, www.google.com adresine gidene kadar geçtiğimiz ağ geçitleri ve anlık olarak gönderilen veri paketlerinin istatistikleri yer almaktadır.   

man mtr  komutuyla mtr komutunun kullanımı ve parametleri hakkında detaylı bilgi alabilirsiniz.

man mtr komutu çıktısı için tıklayınız.

Linux inxi Hardware Bilgilerinin Raporlanması

Bu yazımda sistem bilgilerinin raporlanmasına yönelik bir linux aracından bahsedeceğim. 

Linux işletim sisteminde Hardware bilgilerinin raporlanması için hazırlanmış bir çok araç bulunmasına rağmen "inxi"  linux dağıtımınlarının çoğunda sorunsuz çalışabilen birçok linux komutunu kullanarak bizlere detaylı raporlar sunan bir shell scriptidir.


Bir shell script olduğu için, bu scripti kullanıcılara ait programların olduğu dizine (usr/local/bin) koyarak, kurulumunu yapmış oluruz. Kullanabilmek için ek olarak gawk paketini de kurmamız gerekmekte.

Not : Kurulum Debian tabanlı anlatılmaktadır. RHEL tabanlı herhangi bir dağıtım kullanıyorsanız  sisteme pcutils paketini kurmanız gerekecektir.

inxi Kurulumu ve Kullanımı

Kurulum için uygulamamız gereken terminal komutu : 

# apt-get install gawk
# cd /usr/local/bin && wget -Nc smxi.org/inxi && chmod +x inxi

Tüm sistem bileşenleri ile ilgili özet bir bilgi almak için inxi’yi -F parametresini kullanıyoruz.

-f parametresi cpu bilgilerini flag’leri ile birlikte verir :


-r parametresi, linux dağıtımınızın paket yöneticisine ait repo bilgilerini verir :


inxi parametre listesinin tamamına buradan erişebilirsiniz
https://code.google.com/p/inxi/wiki/inxi

Copyright 2013-2017 | İbrahim BAYRAKTAR /dev/null Web Günlüğü