15 Aralık 2010 Çarşamba

C# : Kalıtım (Inheritance)

Kalıtım ile ilk oluşturduğumuz sınıfın özelliklerini, ikinci olarak oluşturacağımız sınıfın özelliklerine atarız. Bir sınıftan başka bir sınıf üreterek sınıflarda ki  ortak olan özellikleri tek bir sınıfta toplamış oluruz. Kalıtımın yapılabilmesi için ilk sınıftaki nesnelerin public veya protected ile oluşturulmuş olması gerekir. C# ' de bu şekilde türeyen bir çok sınıf mevcuttur. Nesnelerin türediği sınıfı base Sınıf olarak adlandırırız.

Örneğin; Araba adında bir sınırf oluşturalım ve nesneleri tanıtalım.

namespace Uygulama1
{
    class Araba
    {
        public string ArabaMarka;
        public string ArabaModel;
        public string ArabaRenk;
        public int ArabaYil;
        public int KapiSayisi;

        public void ArabaGoster()
        {
            Console.WriteLine("Araba Özellikleri ; \nMarkası: {0}\nModeli: {1}\nRengi:{2}\nYılı:{3}\nKapı Sayısı:{4}", ArabaMarka, ArabaModel, ArabaRenk, ArabaYil,KapiSayisi);
        }
    }
   
   //  Aşağıda ise Arabul sınıfını, ilk oluşturduğumuz Araba sınıfından türeterek oluştururuz. Araba sınıfında bulunan nesneler böylelikle ArabaBul sınıfına aktarılmış oldu.

class ArabaBul : Araba
    {
        public int fiyat;
        public void fiyatGoster()
        { Console.WriteLine("Fiyatı : {0}", fiyat); }
    }

    class Program
    {
        static void Main(string[] args)
        {

            ArabaBul Araba = new ArabaBul();
            Araba.Marka = "Audi";
            Araba.Model = "A6";
            Araba.Renk = "Siyah";
            Araba.Yil = 2010;
            Araba.KapiSayisi = 4;
            Araba.ArabaGoster();
            Araba.fiyatGoster();
            Console.Read();
        }
    }
}

3 Aralık 2010 Cuma

Sql Server' da Fonksiyonlar

Fonksiyonlar, değer döndüren program birimidir. Yerleşik fonksiyonlar dışında bizimde tanımlayacağımız fonksiyonlar vardır. Kullanıcı tanımlı fonksiyon "0" veya birden fazla değer alabilir. İstenilen değer tipinde dönüş yapabilirler. INT; VARCHAR değer döndürebileceği gibi bir tablo da döndürebilir. Output parametrelere destek vermezler.Sabit fonksiyonlar gibi tek bir değer döndürebilirler.

1- Scalar Functions () : Tek bir değer döndürebilirler.


CREATE FUNCTION fn_UrunSayisi()
RETURNS int
AS BEGIN
  DECLARE @UrunSayisi int

  SELECT @UrunSayisi = COUNT(*)
  FROM Production.Product

  RETURN @UrunSayisi
END

Oluşturduğumuz bu fonksiyon production tablosunda ki product yani ürünlerin toplam kaç tane olduğunu saymaya yarar.

Fonksiyonu çağırmak için kullandığımız T-SQL komutu ise ;

SELECT dbo.fn_UrunSayisi()

1 Aralık 2010 Çarşamba

Seninki kaç santim? - Greenpeace

Seninki kaç santim? - Greenpeace



C# : Nesneye Yönelik Programlama, Classes, Objects, Methods, Events


C# dili tam anlamıyla nesne tabanlı biri dildir. Bu dil içerisinde Class (sınıf) kavramının önemli bir yeri vardır.

Class yapısı herhangi bir nesnenin program içerisindeki kalıbı olarak düşünülebilir. Bu kalıp nesnenin tüm özelliklerini tutup, program içerisinde değişik yerlerde kullanımını sağlar. Class yapıları nesne yönelimli yazılım dillerinin temel yapılarından biridir ve yazılımcılar için değişik avantajları vardır.

1. Yazılan bir class ayni program içerisinde veya başka programlarda birçok kez kullanılabilir.
2. Yazılım ve test sürecilerini kısaltır.
3. Kod organizasyonunu sağlayıp hataların bulunmasını kolaylaştırır.
4. Kod üzerindeki yapılacak olan değişikliklerin kolaylaşmasını sağlar.

Nesneye yönelik programlama uygulamaları nesneler kullanarak yani bir çok nesnenin bir araya gelmesi ile oluşturularak yapılır. Yani kullandığımız yordamları direk uygulama koduna yazmayıp, sınıflar içine yazarak ve bu sınıflardan türettiğimiz nesneler üzerinden çağırarak yaparız.

Örneğin;  Animal adında bir class oluşturup olacak özelliklerini girelim.


namespace ClassLibrary1
{
    class Animal
    {
        public string Turu;
        public string Adi;
        public int Yas;
        public int BacakSayisi;
        public int Boyu;
        public int Uzunlugu;
        public string Rengi;
    }
}

Yukarıda Animal adında bir class oluşturduktan sonra özelliklerini tanıplayıp türlerini (int, string, bool) tanıttık.

namespace ClassLibrary1
{
    class myClass
    {
         public void Test1()
        {
            Animal OkulunKedisi;
            OkulunKedisi = new Animal();
            OkulunKedisi.Turu="Kedi";
            OkulunKedisi.Adi="Tombul Kedi";
            OkulunKedisi.Rengi = "Siyah & Beyaz";
            OkulunKedisi.BacakSayisi = 4;
            OkulunKedisi.Uzunlugu = 35;
            OkulunKedisi.Boyu = 25;
    }
    }
}

Bu kod da ise ilk önce "Animal OkulunKedisi;" diyerek  Animal classında OkulunKedisi adında bir nesne ile çalışacağımızı belirttik. Ardından da "OkulunKedisi = new Animal();" ile OkulunKedisi adında bir nesne ekledik ve daha önceden belirttiğimiz değerlerini girdik.

Public : Foknsiyona sınıf içinden ve sınıf dışından erişime izin verir.
Private : Bu erişim belirteci işaretlenen öğeye sadece sınıfın içinden erişilebileceği anlamına gelir.
Protected: Bu erişim belirteci işaratelenen ögeye sadece sınıfın içinden erişilebileceği fakat alt sınıflara aktarılabileceği anlamına gelmektedir.

Metotlar kontrollerin (Button, Label, Textbox...) yapabileceği işlemlerdir. Programın herhangi bir yerinde kullanmak için belirli bir işi yerine getirmek amacıyla tasarlanmış kod parçalarıdır.

 private void button1_Click(object sender, EventArgs e)
        {

            textBox1.Clear();
            //Textbox1 kontrolünün text'ini temizler.

            textBox1.Focus();
            //Textbox1 kontrolüne odaklanır.
        }
    }
}

Metotlar parametrelerle veya parametresiz çağırılabilirler. Parametreyle çağırmak, metodun girilen değere göre işlem yapacağını belirler.  Örneğin;

class Class1
    {
        int Topla(int Sayi1, int Sayi2)
        {
            int Sonuc;
            Sonuc = Sayi1 + Sayi2;
            return Sonuc;
        }
    }
}
Kontrollerin bazı ortak metodları vardır. Mesela;

BringToFont : Üst üste duran kontroller arasından en öne gelir.
SendToBack : Üst üste duran kontrollerin en arkasına gönderilir.
Hide : Kontrolün görünmesini engeller.
Show : Kontrolün görünmesini sağlar.

Olaylar kontrollerin cevap evrebileceği eylemlerdir.Bir olay gerçekleşeceği zaman yapılacak işlem, ilgli olayın metoduna yazılır.  Örneğin; bir Button kontrollü Click olayına, bir Texbox'taki yazının değişmesi sağlanabilir. Button1 isimli kontrolün üzerine tıklandığı zaman gerçekleştirmek istenen eylemler Button1_Click metoduna yazılır.

Click : Kontrol üzerine tıklandığı zaman tetiklenen olaydır.
MouseDown : Fere, kontrolün üzerindeyken herhangi ir tuşa basıldığı zaman gerçekleşen olaydır.
MouseUp : Fare, kontrolün üzerindeyken basılan tuş bırakıldığı zaman çalışır.
Enter : kontrol seçildiği veya üzerine odaklanıldığı zaman gerçekleşen oalydır.

12 Kasım 2010 Cuma

SQL Server'da View

İlişkisel veritabanlarında bilgiler tablolarda saklanır. Bu tabloların kesişimleri ve  birleşimleri ile View'ler oluşturulabilir. View'lerda veri tutulmaz. Sadece tabloların bir görünümüdür. View aslında sanal bir tablodur.
Bir view iki tablonun birleşimi olabilir.

View'lar birden fazla tablodan daha kolay veri almak için kullanılır. Program içinde yazılan kod daha basit olur. Yine tablolardaki bazı sütünlar gizlenebilir. View'lar ile sadece istediğimiz bilgilere ulaşabiliriz. Böylelikle bizi gereksiz bilgilerden kurtarmış olur. View'ler bir çeşit istatistik olarakta kullanılabilir. Bir tabloda kaç üye var gibi bilgiler bir view'e yazılabilir. Örneğin;














1. tablomuz öğrenci isimlerinin tutulduğu Ogrenciler tablosu olsun. 2. tablomuz ise sınıf adlarının tutulduğu Siniflar tablosu olsun. Öğrencilerin hangi sınıfta olduğu isimleriyle birlikte SinifID alanlarıyla birleştirilerek tek bir tabloda gösterilebilir.



Select o.*,s.*
From Ogrenciler o
Join Siniflar s on o.SinifID=s.SinifID

10 Kasım 2010 Çarşamba

Stored Procedure


Stored Procedure’ler database server üzerinde saklanan SQL cümlecikleridir. Parametreler alabilirler ve size sonuçlar döndürebilirler. Avantajları arasında DB server üzerinde olmasından dolayı daha hızlı çalışmaları, sadece ilk çalışmalarında derlenmeleri sonraki çalışmalarda derlenmemeleri (bu da neden hızlı olduğunu açıklıyor) SQL cümlecikleri ve programlama dilleri ile yazdığımız kodları birbirinden ayrıştırmamızı sağlaması sayılabilir.
Store Procedure  veritabanı üzerinde saklanan yordamlardır.  Yordamlar dışarıdan parametre alabilir ve geriye veri veya bilgi gönderebilirler.
Fonksiyon yazmamızın bir nedeni, yazılan kodun birden fazla kez kullanımını sağlamaktır. Bir kere yazdıktan sonra derlenir ve istediğimiz kadar çağırabiliriz.
Store Procedure'de isimlendirme yapılırken genellikle spProsedürAdı şeklinde yapılması, okunabilirliği arttırır.
Begin-End arasında kalan yer kapsam anlamına gelir. Buradaki anlamı Procedure içindeki kapsamı gösteriyor. Aynı şekilde While döngüsü, If koşulu  kullanmak istediğimizde Begin - End ile kapsamı belirtebiliriz.
Çalıştırma yaparken ise EXEC ProsedürAdı veya EXECUTE  ProsedürAdı komutlarını kullanarak yapabiliriz.

CREATE PROCEDURE UrunleriGetir @CategoryID int
   AS BEGIN

   SELECT *
   FROM
     Production.Product P
   WHERE
     P.ProductCategoryID = @CategoryID 

    END

    EXEC UrunleriGetir @CategoryID = 1

Yukarıda  Urunleri ekrana getirmek amaçlı bir prosedür oluşturmuş olduk. Tanıttığımız parametrenin değeri Product tablosundaki ProductCtaegoryID' ye eşit olursa bize o ürünün  tüm bilgilerini gösterecektir.
Parametre, SQL kodunuzdaki değişkenlerin atanmasında kullanılır. Kullanımı zorunlu değildir, ama programcının işini çok kolaylaştırır. Parametre alan bir fonksiyon yazmak istediğimizde ise prosedür adından sonra parantez içinde parametreleri veririz. Fakat parametre verirken @ işaretini kullanılır. Ayrıca parametrelere varsayılan değerde atama yapılabilir.

Geriye değer döndüren prosedürlerde out veya output kullanılır. Bu kelimeleri kullanarak, hangi parametrenin değer döndürdüğünü SQL SERVER'a tanıtırız.
SQL SERVER içinde değişken tanımlamak için DECLARE anahtar kelimesini kullanılır.

SP’ler şu faydaları sağlar:

1. Uygulamanın getirdiği bazı iş kuralları prosedür içinde tanımlanabilir. Bir kez oluştuktan sonra bu kurallar birden çok uygulama tarafından kullanılarak daha tutarlı bir veri yönetimi sağlanır. Ayrıca bir fonksiyonelliğin değişmesi ihtiyacı doğduğunda her uygulama için değişiklik yapmak yerine, sadece bir platformda değişiklik yapılır.


2. Tüm prosedürler üstün performansla çalışır ancak birden fazla çalıştırılacak olan prosedürler sorgulama planları procedure cache içinde saklandığından daha da hızlı çalışırlar.

3. Stored Procedure’ ler SQL Server start ettikten sonra otomatik olarak çalıştırılmak üzere ayarlanabilirler.

4. Stored Procedure’ ler harici olarak kullanılırlar. Uygulama tarafından çağrılmak zorundadırlar. Otomatik devreye giremezler.

5. Stored Procedure’ lerın içinde SQL sorgulama diline ek olarak T-SQL komutlarını kullanabiliriz.

6. Kullanıcının bir tabloya erişim izni olmasa bile o tablo üzerinde işlem yapan bir stored procedure’ ü kullanma izni olabilir.




15 Ekim 2010 Cuma

SQL' de Union ve Union All Kullanımı

Union Deyimi SQL' de iki tablodan birden kayıt çekmek için kullanılır. Ancak çekilecek kolonların aynı veri tipinden olması gerekir. Ayrıca, çeklen veriler birbirinden farklı olmalıdır. Aynı olanlardan verilerden yalnızca birisini seçer.

Örneğin; Okul adında bir veritabanı ve bunun içine de 2 adet sınıf tablosu oluşturalım.

CREATE DATABASE Okul

CREATE TABLE Sinif2(OgrenciAdiSoyadi Varchar(100))
INSERT INTO Sinif2( OgrenciAdiSoyadi)
VALUES('Gökhan Yılan')
INSERT INTO Sinif2( OgrenciAdiSoyadi)
VALUES('Nurdan Kuzey')
INSERT INTO Sinif2( OgrenciAdiSoyadi)
VALUES('Emine Küçük')

CREATE TABLE Sinif3(OgrenciAdiSoyadi Varchar(100))
INSERT INTO Sinif3( OgrenciAdiSoyadi)
VALUES('Gökhan Yılan')
INSERT INTO Sinif3( OgrenciAdiSoyadi)
VALUES('Nurdan Kuzey')
INSERT INTO Sinif3( OgrenciAdiSoyadi)
VALUES('Duygu Şahin')
INSERT INTO Sinif3( OgrenciAdiSoyadi)
VALUES('Emir Alma')
INSERT INTO Sinif3( OgrenciAdiSoyadi)
VALUES('İlknur Bay')

Bu iki sınıfta ki öğrencileri bir arada görüntülemek için Union komutunu kullanabiliriz;


SELECT *
FROM  Sinif3
UNION
SELECT
*

FROM Sinif2
ORDER BY OgrenciAdiSoyadi


Bu kod bize sınıflarda ki öğrencilerin ismini getirir. Fakat aynı isimde olan öğrencilerin ismi sadece bir defa gelir. Hepsini görüntülemek için ise Union All komutunu kullanabilirz;

SELECT *
FROM Sinif3
UNION ALL
SELECT
*

FROM Sinif2
ORDER BY OgrenciAdiSoyadi

ORDER BY Union ile oluşturulan sorgularda sadece son koşul da kullanılabilir. İlk sorgu da kullanılması bize hata vermesine neden olur.

13 Ekim 2010 Çarşamba

Sub Query

Subquery kısaca iç içe SELECT sorguları yazmak demektir. SQL dilinde  sütun değerlerini başka bir SELECT ifadesi sonucuyla karşılaştırmamıza olanak verir. SELECT ifadesi ile WHERE ifadesinin içine yeni bir SELECT ekleyerek bunu gerçekleştirebiliriz. Bir alt sorguda ka ilk SELECT komutu "dış sorgu", ikinci SELECT ifadesi ise " iç sorgu" yu oluşturur. İç sorgular her zaman ilk önce değerlendirilmelidir çünkü dış sorgular iç sorguların değerlerini kullanmaktadırlar.

Alt Sorgularda aşağıdaki operatörleri kullanabiliriz.
• Karşılaştırma Operatörleri
• IN Operatörü
• EXISTS Fonksiyonu
• ANY ve ALL Operatörleri


SELECT SC.SubCategoryName,P.*
FROM Production.Product P
JOIN (SELECT SC.ProductSubcategoryID,SC.Name SubCategoryName
      FROM Production.ProductSubcategory SC
      WHERE Name IN ('Road Frames','Mountain Frames')
      ) SC ON SC.ProductSubcategoryID = P.ProductSubcategoryID 

Yukarıda ki kod bir SubQuery'dir. İç içe yazılmış Join ve Selectlerden oluşur. Alt sorguda Name alanı Road Frames ve Mountain Frames olan verilerin ProductSubcategoryID ve Name alanlarıyla ilk sorguda da  tüm alanları joinle bağlayarak ekrana getirir.

SELECT *
FROM Production.Product P
WHERE P.ProductSubcategoryID
IN (
    SELECT ProductSubcategoryID
    FROM Production.ProductSubcategory
    WHERE Name IN ('Road Frames','Mountain Frames')
    )


Yukarıda ki kodun sonucu, ilk örnekte Joinle yapılan kodla aynıdır. Burada alt sorguda ilk sorgu ile ikinci sorguyu WHERE ve IN komutları ile bağlamıştır. Alt sorgu da Name alanında ki Road Frames ve Mountain Frames olan verilerin ProductSubcategoryID ilk sorguda ki  ProductSubcategoryID ile aynıysa tüm alanları ekrana getirecektir.

SELECT *
FROM Production.Product P
WHERE EXISTS (SELECT *
              FROM Production.ProductSubcategory SC
              WHERE Name IN ('Road Frames','Mountain Frames')
              AND P.ProductSubcategoryID =SC.ProductSubcategoryID
              )

Exists ile oluşturduğumuz bu kodda diğer iki kod ile aynı sonucu verir. Alt sorguda verilen komut gerçekleşiyorsa ilk sorgu ile birleştirip bizlere sonucu getirir.

SQL' de Opereatörler ve Fonksiyonlar


A)Karşılaştırma Operatörleri

Değişken veya değerleri doğrudan aritmetiksel büyüklük kıyaslama işaretlerini kullanarak karşılaştırma yapan operatörlerdir.

( ) İşlemleri gruplandırmak ve işlem önceliğini belirleme
= Belirtilen değere eşit olanlar
> Belirtilen değerden küçük olanlar
< Belirtilen değerden büyük olanlar
!=,^=,<> Belirtilen değere eşit olamayanlar
>= Belirtilen değerden büyük ya da eşit olanlar
<= Belirtilen değerden küçük ya da eşit olanlar
IN Bir grup değer içinde olanlar
NOT IN Bir grup değer içinde olmayanlar
ANY Verilen bir koşula uygun olarak, bir grup içindeki değerlerden birini belirler
ALL Verilen bir değeri bir liste içindeki tüm değerlerle karşılaştırır.
BETWEEN x AND y x ve y değeri arasındaki değerleri belirler
NOT BETWEEN x AND y x ve y değeri arasında olmayan değerleri belirler. Yani x’den küçük, y’den büyük değerler.
IS NULL Null (yokluk) değerine sahip olanları tanımlar
IS NOT NULL Null değerine sahip olmayanları tanımlar
EXISTS Kendisine bağlı sorgulama sonucunda en az bir satır bulunabilirse TRUE değerini alır.
LIKE Belirli bir kalıba uygun olan bilgileri tanımlar

SELECT FirstName,LastName
FROM Person.Contact
WHERE FirstName='Don'

Bu kod ile Person.Contact tablosunda ki FirstName alanı Don olan kayıtların FirstName ve LastName alanları seçmiş oluruz.

SELECT FirstName,LastName
FROM Person.Contact
WHERE FirstName <'Don' ORDER BY FirstName ASC

Bu kod ile Person.Contact tablosunda ki FirstName alanı Don olan kayıtlardan öncekiler A'dan başlayarak sıralı olarak seçilmiş olur.

SELECT *
FROM Production.Product
WHERE Color='Black' AND ListPrice BETWEEN 500 AND 1000

Bu kod da Production.Product tablosunda ki Color alanı Black olan ve ListPrice alanı 500 ile 1000 arasında olan verileri ekrana getirir.

B)Aritmetik Operatörler

 Matematiksel işlemlerde kullanılan kodlardır.

( )İşlemleri gruplandırmak ve işlem önceliğini belirtmede
+Toplama
-Çıkarma
*Çarpma
/Bölme
% ( Mod )Bölme işleminde kalan


C)Mantıksal Operatörler

İki yada daha fazla ifade arasında kullanılırlar. Sonucun doğru yada yanlış olmasına göre işlemler yapılır.

( )İşlemleri gruplandırmak ve işlem önceliğini belirtmede
ANDHer iki koşulda doğruysa işlem yapılır
ORKoşullardan biri doğruysa işlem yapılır
NOTKoşulun yanlış olması durumunda işlem yapılır


D) SQL Fonksiyonları

AVGBelirlenen bir alan içerisindeki verilerin aritmetik ortalamasını alır
SUMBelirlenen alandaki verilerin toplanmasını sağlar
MAXBelirlenen alandaki en büyük değerin bulunması sağlar
MINBelirlenen alandaki en küçük değerin bulunması sağlar
ROUNDBelirlenen alandaki sayının virgülden sonraki kısmının yuvarlatılmasını sağlar
SQRTBelirlenen alandaki değerin karakökünün alınmasını sağlar
SUBSTRBelirlenen alandaki değerin istenilen karakterleri seçilebilir


SELECT COUNT(ListPrice) 'Ürün Sayısı'
FROM Production.Product

Bu kod ile tabloda ki ListPrice alanında ki toplam veri sayısını Ürün Sayısı alanında görüntüleriz.

SELECT MAX(ListPrice) 'En Büyük'
FROM Production.Product

Bu kod ile tabloda ki ListPrice alanında ki en büyük değere sahip olan veriyi görüntülemiş oluruz.

SELECT MIN(ListPrice) 'En Küçük'
FROM Production.Product

Kodu ise Max'ın tersine en küçük değere sahip olan veriyi bulur ve ekrena getirir.

SELECT SUM(ListPrice) 'Toplam'
FROM Production.Product

Kodu ListPrice alanında ki verilerin toplam değerini ekrana getirir.

SELECT AVG(ListPrice) 'Ortalama'
FROM Production.Product

Bu kod ise  ListPrice alanında ki verilerin ortalamasını alır.

7 Ekim 2010 Perşembe

Primary Key & Foreign Key

Primary Key benzersiz bir tablodaki her satırı tanımlamak için kullanılır.Birincil anahtar, bir tablo üzerinde bir veya birden çok alan ile oluşabilir. Birden fazla alanı birincil anahtar olarak oluşturulduğunda buna Composite key (birleşik anahtar) denir.Birincil anahtar kısıtlayıcısınıı neredeyse her tabloda kullanırız. Bu bize hız kazandırır. Primary Key olan alanlar Null değerler olamaz ve bu bölüme aynı değerler girilemez. Genel de otomatik olarak artan değerler için geçerlidir.Otomatik artan değerler Identity komutu ile sağlanır. Identity komutundan sonra işlemin kaçtan başayacağı ve kaçar kaçar artacağı belirtilir. Identity(1,3) 1'den başlayacağını ve 3'er 3'er artacağını gösterir bize.

Örneğin; Bir ilçe tablosu oluşturalım ve içerisine IlceAdi, IlAdi,PostaKodu alanlarını ekleyelim. Buraya gireceğimiz verilerde farklı şehirlere ait aynı isimli caddeler olabilir. Yapacağımız sorgularda bu karışıklığı önlemek amacıyla tablomuzdaki IlceAdi ve IlAdi alanlarını birlikte secerek Primary Key olarak işaretliyoruz. Yapılacak sorgularda bu iki alan birlikte kısıtlanmış olarak çalışacaklardır.









Primary Key'i oluşturulmamış bir tabloya sonradan tablo özelliklerinden ya da Alter komutu ile bunu  ekleyebiliriz. Örneğin; Customer adında bir tablo oluşturalım ve CustomerID, FirstName, LastName alanlarını ekleyelim. CustormerID alanına otomatik artma özelliğini verelim. 

CREATE TABLE Customer(
CustomerID int identity(1,1) NOT NULL,
FirstName varchar(50) NOT NULL,
LastName varchar(50) NOT NULL
)

Primary Key eklemeden oluşturmadığımız bu tabloda CustomerID alanını aşağıdaki kod ile Primary Key yapabiliriz.

ALTER TABLE Customer ADD PRIMARY KEY (CustomerID)

Kod olarak oluşturduğumuz bir tabloda, birincil anahtar olmasını istediğimiz alanın yanına Primary Key yazarak o alanın anahtar olan olduğunu belirtebiliriz.


CREATE TABLE Accounts(AccountID int PRIMARY KEY NOT NULL,
             Name varchar(20) NOT NULL,
             [Description] varchar(100) NOT NULL

Ya da el ile oluşturduğumuz tablolarda birincil anahtar olacak alanın yanına sağ tıklayıp Primary Key'i seçerekte bu işlemi yapabiliriz.








Foreign Key bir tabloya girilebilecek değerleri başka bir tablonun bir belli alanında yer alabilecek veri grubu ile sınırlandırmaya ve en önemlisi de ilişkilendirmeye yarar. Bir tabloya foreign key eklediğimizde referans edilen ve referans eden iki tablo arasında bir ilişki kurulur. Bir tablo için foreign key ayarlanmışsa bu tabloya girilecek her kaydın referans edilen tablodaki kayıtla eşleşmesi gerekir. Eğer foreign key olan kolon null değerler alabiliyorsa eşleşmeye bakılmaz.

Kod olarak oluşturacağımız bir Foreign Key'de ilk önce tabloda FK oluşturacağımız alanın adını yazdıktan sonra REFERENCES komutunu yazarız. Bu komuttan sonra ise bağlamak isrtediğimiz tablonun adını ve parantez içinde de bağlayacağımız alanı yazarak oluştururuz.

CREATE TABLE SentMessages
(SentMessageID int NOT NULL PRIMARY KEY,
AccountID int NOT NULL REFERENCES Accounts(AccountID),
MessageID int NOT NULL,
Recipient int NOT NULL REFERENCES Contacts(ContactID)

Oluşturduğumuz tabloda birden çok Foreign Key kullanabilirz. FK olan alanlar, farklı tablolar ile ilişkilendirilmiştir.

FK oluşturduğumuz bir tablodaki bir alanı iki ayrı tabloda birleştirici alan olaarak kullanabiliriz. Mesela yukarıda olan örnekte SentMessages tablosundaki RecipientID alanını FK olarak ayarlayarak Contacts tablosundaki ContactID alanı ile birleştirmişiz. SentMesseges tablosundaki RecipientID alanı ile bir başka tabloda FK oluşturmak istersek ALTER komutunu kullanmamız gerekecek.

ALTER TABLE dbo.SentMessages ADD CONSTRAINT
                         FK_SentMessages_Messages
                         FOREIGN KEY(RecipientID)
                         REFERENCES dbo.Messaages(MessageID)

Yukarıda ki örnekte Alter Table komutundan sonra FK'nın oluşacağı tabloyu yazdıktan sonra yapacağımız işlemi yani FK bir kısıtlayıcı olduğu için Add Constraint diyerek belirttik. FK_SentMessages_Messages ise yapacağımız işin adı olarak belirtildi. Bu koddan sonra ise işin özellikleri yani Foreign Key yazarak SentMessages tablosundaki hangi alan ile bağlayacağimızı belirtip REFERENCES komutundan sonrada Messages tablosunda ki MessageID alanıyla bağlayacağımızı belirttik.

El ile oluşturacağımız Foreign Key'lerde ise oluşturduğumuz tablonun Key alanına sağ tıkladığımızda yeni FK ekle bölümünden yapabiliriz. Burada PK olacak tabloyu ve o tablodaki bağlanacak alan ile FK olacak tablomuzu ve alanını girmemiz gerekir.





1 Ekim 2010 Cuma

Inner Join ve Outer Join

1-      Inner Join
 
Tablo birleştirmek için kullanılan yöntemdir. Her iki tabloda da eşleşen ortak alanların
olması gerekir.

 

Birleştirme işlemi sadece iki tablo için kısıtlı değildir. En fazla 256 adet tabloyu JOIN
işlemine tabi tutabiliriniz.

SELECT Adi,Soyadi,VermeTarihi,VermeSuresi
FROM Uye U JOIN Odunc O
ON U.UyeNo=O.UyeNo

2-      Outer Join
 
Inner Join, iki veya daha fazla tablodaki ilişkili bulunan satırları listelerken Outer Join,
tabloda ilişkili olmayan satırları da gösterecektir.

Yani tablodaki tüm satırlar gösterilecektir. Ancak, ilişkisi olmayan satırlarda
değer NULL olarak gösterilir.

 
Kullanışlarına göre Join-Tipi farklılık göstermektedir. 3 tip Join-Tipi vardır.

A)   LEFT OUTER JOIN: Bu kelimenin solundaki tablo, belirleyici tablodur ve bu
kullanım, bir ilişkisi bulunsun veya bulunmasın birinci tablodaki bütün satırları
listeleyecektir. İkinci tabloda ise ilişkili satırlar listelenecektir. Eğer bir ilişki
bulunmuyorsa sağdaki tablo verileri NULL olarak gösterilir.

SELECT Uye.*,Odunc.*
FROM Uye U LEFT JOIN Odunc O
ON U.UyeNo=O.UyeNo


B)   RIGHT OUTER JOIN: Bu kelimenin sağındaki tablo belirleyici tablodur ve
bu kullanım bir ilişkiye ait olsun veya olmasın ikinci tablodaki bütün satırları
gösterecektir. Birinci tabloda ise ilişkili satırlar listelenecektir. Eğer bir ilişki
bulunmuyorsa soldaki tablo verileri NULL olarak listelenir.
 
SELECT Adi,Soyadi,VermeTarihi,VermeSuresi
FROM Uye U RIGHT JOIN Odunc O
ON U.UyeNo=O.UyeNo
  

C)   FULL OUTER JOIN: Left ve Right Outer Join’de karşılıklı olarak eşit satırı
olmayan satırlar da listelenir. FULL OUTER JOIN, LEFT ve RIGHT OUTER
JOIN’in birleşim kümesidir.

SELECT Adi,Soyadi,VermeTarihi,VermeSuresi
FROM Uye U  FULL JOIN Odunc O
ON U.UyeNo=O.UyeNo

3-      Cross Join

Her iki tabloyu çapraz olarak birleştirir. Yani, ilk tablodaki her bir satır için ikinci tablodaki her satır sonuç olarak döner.

Örneğin; A ve B tablosu oluşturalım. A' ya sayı değerler, B' ye ise harf değerleri girelim ve Cross Join olarak birleştirelim.
                                     

CREATE TABLE A(Numara int)
INSERT INTO A(Numara)
VALUES (1),(2),(3)

CREATE TABLE B(Harfler varchar(4))
INSERT INTO B(Harfler)
VALUES ('a'),('b'),('c'),('d')

SELECT *
FROM A CROSS JOIN B