FROM etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
FROM etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

29 Aralık 2012 Cumartesi

58. SELECT INTO Deyiminin Kullanılması

  • SELECT INTO ile ilgili veritabanı üzerindeki verilerle kopya veritabanı oluşturabiliriz.
  • Kullanım durumlarına değinirsek  örneğin tablomuza değişiklik yapmadan önce yedekleyebiliriz.
  • Ayrıca bütün bir veritabanını kopyalamak yerine istediğimiz verileri içeren yeni bir kopya oluşuturup onu yedekleyebiliriz.

SÖZ DİZİMİ;

SELECT kolon_ad(ları) INTO [yeni_veritabanı.]yeni_tablo_adı
FROM ilgili_veritabanı

ÖRNEK:

SELECT * INTO Animals.dbo.Kuslar_Yedek FROM Animals.dbo.Kuslar
 

1 Aralık 2012 Cumartesi

T-SQL'de sp_rename System Prosedürünün Kullanılması

  •  SQL de nesnelerimizin adlarını değiştirmek için sp_rename sistem procedürünü kullanılırız.
SÖZ DİZİMİ:

exec sp_rename @object_name, @new_object_name, @object_type

1-) Tablo adının değiştirilmesi 

SELECT object_id('Birds')
exec sp_rename  'Birds','Kuslar'


SELECT object_id('Birds')
SELECT * FROM Birds
Invalid Object Name 'Birds' hatası döndürecektir.

SELECT * FROM Kuslar
Sorgusunu çalıştırarsınız, Birds tablosundan taşıdığımız kolonları göreceksiniz.
İçerisinde data olduğu için kayıtlı verileri görebilirsiniz.



2-) Kolon adının değiştirilmesi : 

  • Biraz önce create ettiğimiz ve adını Kuslar olarak değiştirdiğimiz tablonun name kolonunu Adı olarak değiştirelim..
  • sp_rename prosedürünün bizim şimdiye kadar kullanmadığımız, default u 'object' olan bir parametresi daha var.  
  • Kolonlar, sysobjects de yer almazlar ve birer database objesi değillerdir ve tablo ismi olmadan da birşey ifade etmezler. 
  •  x tablonun y kolonu diye saklanırlar ve çağırılırlar.  Bu yüzden ismini değiştirdiğimiz nesnenin kolon tipinde olduğunu ve hangi tabloya ait olduğunu  da söylememiz gerekir.
exec sp_rename 'Kuslar.Name','Adı','COLUMN'

Kuslar tablomuza ait olan name isimli kolonu Adı olarak değiştirdik.

SELECT * FROM Kuslar
sorgusunu çağırarak kolon adının değiştiğini görebiliriz.


3-) Index değerinin değiştirilmesi
  • sp_rename ile indexleri de yeniden adlandırabiliriz.
 exec sp_rename 'Kuslar.BirdId', 'KusNo','INDEX'


NOT: sp_rename ile syscomments de bulunan text alanındaki nesne ismini değiştiremeyiz.
Bu yüzden 'function','stored procedure','trigger' ve 'view' gibi programlanabilir nesneler için sp_rename i kullanmamalıyız.
Bu tür nesneler için sp_rename yerine önce bu nesleri drop(silme) edip sonra istediğimiz yeni isim ile yeniden create(oluşturma) edebiliriz.

NOT: Oluşturulan her bir nesne nin bir id si vardır ve sql serverda nesneler id leri ile saklanırlar.
object_id system function ını kullanarak objenin id sini öğrenebilir ve varolup olmadığından da böylecek emin olabiliriz.
object_id (objectname) null döndürüyorsa o isimde nesne ilgili database de yok demektir.

12 Ağustos 2012 Pazar

SQL Server'da Stored Procedure

  • SQL ifadeleri SQL Serverda Stored Procedure olarak saklanmaktadır. 
  • Basit örneklemek gerekirse " SELECT * FROM Birds " ifadesini saklayabiliriz. Ama büyük yapılarda kullanılan Stored Procedureler daha komplekstir. 
  • Stored Procedure'ler birden fazla tablonun farklı JOIN işlemleri ile bağlanmasıyla ve parametreli veya parametresiz değerlerin WHERE koşullarıyla kısıtlanmasıyla istenilen sonuça hızlı ve sade bir şekilde ulaşmamızı sağlar.

ÖRNEK:
CREATE PROCEDURE Person_Selection
@yas INT

AS

IF(Yas> 19)
SELECT * FROM Person WHERE Yas > @yas ORDER BY Yas
ELSE
SELECT * FROM Person WHERE Yas> @yas and Eriskin=1 ORDER BY Yas

GO

21 Temmuz 2012 Cumartesi

45. DELETE Kullanımı

  • DELETE ifadesi tablomuzdaki bir veya birden fazla kayıdın silinmesini sağlar. 
  • Eğer koşul belirtmessek bütün kayıtları tablomuzdan siler. O yüzden DELETE ifadesini kullanırken dikkat etmeli ve BEGIN TRANSACTİON ..yapısını kullanmamız önem arz etmektedir.
SÖZ DİZİMİ: DELETE FROM Table
                       WHERE <Sütun_Adı>=<Koşul_Değeri>

ÖRNEK: Sorgumuzda Employees tablumuzdaki bir kayıdı silmek isteyelim.

SORGU: SELECT * FROM Employees
                DELETE FROM Employees WHERE EmployeeID=10
                SELECT * FROM Employees

Ders 46'ya Geçebilirsiniz.

44. UPDATE Kullanımı

  • UPDATE deyimi tablomuzda bulunan verileri güncellemek, değiştirmek için kullanılır.
SÖZ DİZİMİ:
         UPDATE <tablo adı>
         SET <sütun adı>= <yeni değer>
         WHERE <sütun adı> = <eski değer> 

ÖRNEK: Sorgumuzda Çalışan tablomuzda bir kaydımızı güncellemek isteyelim. 'Margaret' isimli çalışanın terfi aldığını düşünürsek gerekli güncellemeyi yapalım. 2 tane aynı SELECT sorgusunu farklı görmek için koydum.

SORGU:SELECT * FROM Employees
   UPDATE Employees SET Title='Sales Manager' WHERE EmployeeID=4
   SELECT * FROM Employees



Ders 45' e Geçebilirsiniz.


3 Temmuz 2012 Salı

42. INSERT...SELECT Kullanımı

  • Bir sorgunun sonuç kümesini yeni bir tabloya kayıt olarak atmak istersek INSERT... SELECT yapısını kullanırız. 
  • Bu durumda dikkat etmemiz gereken 2 durum vardır:
  1. Değer girdiğimiz alanın default(varsayılan) bir  değerinin olup olmadığına,
  2. Tablonun alanlarının boş(NULL) değere izin verip vermediğine dikkat etmeliyiz. Eğer NULL değere izin vermiyorsa gerekli veri tipinde mutlaka değer göndermeliyiz.
ÖRNEK: Sorgumuzda çalışanlarında birer müşteri olduğu göz önünde bulundurularak müşteri tablosuna kaydedilmesi istenmektedir.

SORGU: INSERT customers
SELECT SUBSTRING(firstname,1,2)+SUBSTRING(lastname,1,3)
,lastname, firstname, title, address, city
,region, postalcode, country, homephone, NULL
FROM employees


Ders 43'e geçebilirsiniz.

41.SQL INSERT.. VALUES Kullanımı

  • INSERT ifadesini VALUES ile birlikte kullanarak istediğimiz tabloya yeni kayıt atabiliriz. 
  • Dikkat etmemiz gereken eklediğimiz verilerin eklediğimiz tablodaki sütün tanımlamalarına uyumlu olması yani VARCHAR tipinideki bir sütuna INTEGER değeri yazmamalıyız.
ÖRNEK: Sorgumuzda Nakliyatçı firma listemize yeni bir firma ekleyelim. ShipperID değerini girmedik. Çünkü ShipperID sütunu Primary Key olarak tanımlanmış. Yani default olarak 1 arttırım ile otomatik kayıt atmaktadır.

SORGU:SELECT * FROM Shippers
INSERT Shippers(CompanyName,Phone)
VALUES('IstanbulKargo','(0232) 456-89-89')
SELECT * FROM Shippers


Ders 42'ye geçebilirsiniz.

17 Haziran 2012 Pazar

40.SUBQUERİES- EXISTS ve NOT EXISTS Kullanımı

  • Bazı durumlarda sorgu sonucu dönen listeyle ilgili değilde herhangi bir değer dönüp dönmediyle ilgileniriz. 
  • İşte böyle durumlarda EXISTS ve NOT EXISTS kullanırız. 
  • EXISTS ve NOT EXISTS kullanımı TRUE veya FALSE değerleri döndürür.
Örnek: Birinci sorguda ‘3/05/1997’ ve '4/05/1997' tarihleri arasında sipariş almış olan çalışanlar EXIST işlevi yardımıyla tespit edilip, bilgileri listelenmiştir. Aynı sonuca tabloları JOIN ile birleştirerek te ulaşabiliriz. İkinci sorgudaki DISTINCT ifadesi her çalışanın tekbir kez görüntülenmesini sağlar.

Sorgu-1:
SELECT EmployeeId,LastName,FirstName
FROM Employees AS e
WHERE EXISTS
(SELECT * FROM Orders AS o
     WHERE e.EmployeeId=o.EmployeeId
    AND o.OrderDate BETWEEN '3/5/1997' AND '4/5/1997') 


Sorgu-1:
SELECT DISTINCT FirstName,LastName, e.Employeeid
FROM
Orders AS o
INNE
R JOIN Employees AS e
ON
o.Employeeid =e.Employeeid
WHERE
o.OrderDate BETWEEN '3/5/1997' AND '4/5/1997'


Ders 41' e geçebilirsiniz.

39. SUBQUERIES-HAVING Dönüşümü

  • İlişkili alt sorgularla elde ettiğimiz sonuçları aynı zamanda HAVING işlemi ile de elde edebiliriz. Bu bize kullanım çeşitliliği sağlar.
Örnek: İnceleyeceğimiz iki örnekte aynı kategorideki ürünlerden birim fiyatı ortalama birim fiyatından yüksek olan ürünleri kategoriye göre listelenmesini istiyoruz. İlk örneğimizde herhangi bir dönüşüm yapmadan gerekli koşullarımızı sağlıyoruz.

Sorgu:
SELECT ProductName,CategoryID,UnitPrice FROM Products AS p1
    WHERE p1.UnitPrice>(SELECT AVG(UnitPrice) FROM Products AS p2 WHERE p1.CategoryId=p2.CAtegoryId)
    ORDER BY CategoryId




Örnek: Bu örneğimizde INNER JOIN ve HAVING kullanarak aynı sonucu listeliyoruz.

Sorgu:
SELECT p1.ProductName,p1.CategoryID,p1.UnitPrice FROM Products AS p1
    INNER JOIN Products AS p2 WITH (NOLOCK) ON p1.CategoryID=p2.CategoryID
    GROUP BY p1.ProductName,p1.CategoryID,p1.UnitPrice
    HAVING p1.UnitPrice>AVG(p2.UnitPrice)
    ORDER BY p1.CategoryId


Ders 40 'a geçebilirsiniz.

4 Haziran 2012 Pazartesi

38. SUBQUERIES - JOIN Dönüşümü

  • Genel olarak ilişkili alt sorguları birer JOIN ifadesi yerine de kullanabiliriz. 
  • Aralarında sadece kullanım olarak farklılık bulunmaktadır. 
  • Sonuç olarak ise iki sorgudan da aynı sonucu elde ederiz.
Örnek: İlk sorgumuzda çalışanların hitap şekillerini 2 sorguda birbirine eşit olmayanların karşılaştırmasını yaptık. Yani IN ile bir liste alıp bunu kendi içinde eşit olmayanlarla karşılaştırdık.

Sorgu:
SELECT  DISTINCT E1.TitleOfCourtesy FROM Employees AS E1
WHERE E1.City IN
(SELECT E2.City FROM Employees AS E2 WHERE E1.TitleOfCourtesy<>E2.TitleOfCourtesy)



Örnek: Bu sorgumuzda üstteki örneğin JOIN işlemiyle yapılmış halidir.

Sorgu:
SELECT DISTINCT E1.TitleOfCourtesy FROM Employees AS E1
INNER JOIN Employees AS E2 WITH (NOLOCK) ON E1.City=E2.City
WHERE E1.TitleOfCourtesy<>E2.TitleOfCourtesy



Ders39'a Geçebilirsiniz.

29 Mayıs 2012 Salı

37. SUBQUERIES-İlişkili Alt Sorgular

  • Aslında iç sorgular ve dış sorgular belirli bir alan yani sütun üzerinden ilişkili ve birbirlerine bağlıdır. 
  • Bunu genelde WHERE koşulu üzerinden sağlarız.
Örnek: Aşağıdaki örneğimizde her bir ürün için verilmiş en yüksek sipariş miktarını listelemekteyiz.

Sorgu: 
SELECT DISTINCT ProductId,Quantity
FROM [order details] AS ord1
WHERE Quantity=( SELECT MAX(Quantity)FROM [order details] AS ord2
                  WHERE ord1.productid=ord2.productid )
ORDER BY ProductId

Ders 38'e geçebilirsiniz.

26 Mayıs 2012 Cumartesi

36. SUBQUERIES-Sonuç Listesinin Deyim Olarak Kullanılması

  • Sorgularımızda başka bir sorguyu deyim yani yeni bir parametre olarak kullanabiliriz. 
  • Bu amaç için kullanacağımız sorgu ya tek satır sonuç döndürmeli yada tek bir sütun değer listesi döndürmeli.
  • Bir değerler listesi geri döndüren sorgular IN anahtar kelimesi içeren WHERE yantümcesi yerine kullanılabilir. 
Örnek: Sorgumuzda ortalamayı bulup satılan ürünlerimiz ayrıntılı birim fiyatlarını ve bu birim fiyatlarının genel ürün potansiyelinde ortalama ürün fiyatına oranla durumunu göstermekte. Burda alt sorguları kullanarak daha anlaşılabilir sorgu yazabiliriz.

Sorgu: 
SELECT ProductName,UnitPrice,UnitsinStock,
(SELECT AVG(UnitPrice) FROM Products) AS Average,
UnitPrice-(SELECT AVG(UnitPrice) FROM Products) AS Difference
FROM Products 



Ders 37' geçebilirsiniz.

25 Mayıs 2012 Cuma

35. SUBQUERIES-Sonuç Listesinin Tablo Olarak Kullanılması

  • Sorgularımızda FROM dan sonra tanımladığımız tablo bağlanıtısı yerine tablo değilse sorgu yazabiliriz. 
  • Sonucunda da ilerde bahsedeceğim TEMP TABLE kullanmış oluruz. 
  • Dönen sonuç listesi temp tablo gibi kullanılıp AS ile ad verilip sütunlarını istediğimiz gibi kullanabiliriz.
Örnek: Sorgumuzda Çalışan tablomuzdan bize lazım olanları alıyoruz. Daha anlaşılabilir hale getirip temp tablomuzu kullanarak yeni bir sorguya bağlıyoruz.

Sorgu: 
SELECT Calisan.Kimlik, Calisan.Isim, Calisan.Soyad FROM
(SELECT EmployeeID AS Kimlik,LastName AS Soyad,FirstName AS Isim FROM Employees)
 AS Calisan


Ders 36'ya geçebilirsiniz.

33. UNION Kullanımı

  • Bazen sonuç kümesinin tek olmasını isteriz. 
  • Yani birden fazla yazdıgımız SELECT sorgularından dönen sonuç listeleri sorgu sayısı kadardır. 
  • Bunu tek bir sonuç listesinde döndürmek için UNION kullanırız. 
  • Görüntülenecek olan tablolar aynı veritüründe aynı sayıda ve aynı düzendeki sütunlardan oluşmalıdır.

Örnek: Aşağıdaki örnekte Çalışanlar (Employees) tablosu ve Yön(Region) tablosu verileri birleştirilmiştir. Birinci sorgunun SELECT ifadesindeki takma adın görüntülendiğine dikkat edin.

Sorgu: 
SELECT EmployeeID,City FROM Employees UNION
SELECT RegionID,RegionDescription FROM Region



Ders 34 'e geçebilirsiniz.

22 Mayıs 2012 Salı

32. SELF-JOINS Kullanımı

  • Bir tablonun kendisiyle JOIN işlemine tutulmasına SELF-JOIN işlemi denir. 
  • Tablodaki aynı değerleri içeren farklı kayıtlar mevcutsa bunları listeleyebilmek için kendisiyle birleştiririz.  
  • Bir tablo içinde bulunan satırlar arasında referans ilişkisi varsa, o tablo için farklı takma adlar (alias) kullanılarak JOIN sorguları gerçekleştirilebilir. 
  • Çok kullanılan bir yöntem değildir.
 Örnek: Aşağıdaki sorgumuzda aynı tabloyu kendisiyle birleştirdik. Daha çok SELF-JOIN işlemini aynı değerleri olan farklı kayıtlar üzerinde işlem yaparken kullanmalıyız. Örnekte basitce aynı tablo içi kıyaslama yaptık. SicilNo olarak her çalışanın altında olan çalışanları listeledik.

Sorgu: 
SELECT a.employeeid AS SicilNo,a.lastname,a.title
,b.employeeid AS AltSicilNo, b.lastname ,b.title
FROM employees AS a
INNER JOIN employees AS b
ON a.title=b.title
WHERE a.employeeid < b.employeeid
ORDER BY a.employeeid



Ders 33'e geçebilirsiniz.

20 Mayıs 2012 Pazar

31. İkiden Fazla Tablonun Birleştirilmesi

  • Büyük sorguların yazıldığı durumlarda ikiden fazla tablonun belirli kısıtlamalarla birleştirilmesi gerekebilir. 
  • JOIN işlemiyle birleştirilen tablolar bir başka tabloya aradaki ortak sütunlar üzerinden bağlanabilir.
Örnek: Aşağıdaki örnekte Sipariş Detayları(Order Details) tablosunu ara tablo şeklinde kullanarak, Siparişler (Orders) ve Ürünler(Products) tablosundan gerekli bilgileri görüntülenmiştir. Bir sipariş birden fazla ürünü içerebilir ve bir ürün birden fazla siparişte yer alabilir. Sonuç kümemizde Sipariş Detayları (Order Details) tablosundan hiçbir alan görüntülemesekte sorguda kullanmalıyız.

Sorgu:
SELECT OrderDate,ProductName FROM Orders AS O
INNER JOIN [Order Details] AS OD ON O.Orderid=OD.Orderid
INNER JOIN Products AS P ON OD.Productid=P.Productid
WHERE OrderDate BETWEEN '7/8/96' AND '7/9/96'
ORDER BY OrderDate

Ders 32'ye geçebilirsiniz.

30. OUTER JOIN- CROSS JOIN Kullanımı

  • CROSS JOIN işlemiyle bağladığımız bütün tablolar herhangi bir kısıtlamaya uğramadan olası tüm eşleşmeler sonuç listesinde gösterilir. 
  • Belirli bir ortak alan belirtmeye gerek yoktur.
Örnek: Sorgumuzda 8 tane kategori çeşidi bulunmaktadır. CROSS JOIN yaptığımızda Region tablosuna ait 4 kayıt herbir Çeşit kayıdına bağlanır. Yani 32 tane kayıt listelenir. Çünkü tablolar arası herhangi bir ortak eşleşme tanımlanmamıştır.

Sorgu: SELECT * FROM Categories CROSS JOIN Region


Ders 31'e geçebilirsiniz.

17 Mayıs 2012 Perşembe

29. OUTER JOIN-RIGHT JOIN Kullanımı

  • Birleştirdiğimiz ikinci tablodaki bütün kayıtları sonuç listesinde görmek istediğimiz zaman RIGHT JOIN... ON... işlemini kullanırız. 
  • Böyle bir durumda ise ilk tabloda eşleşmeyen kayıtlar NULL(boş) olarak döner. 
  • Ayrıca birleştirdiğimiz tabloların yazım sırasını değiştirirsek LEFT JOIN ... ON .... işlemiyle aynı sonucu elde etmiş oluruz.

Söz dizimi:
SELECT <sütun ad(lar)ı>
FROM <ilk_tablo>
RIGHT JOIN <ikinci_tablo>
ON <birinci_tablo>.<anahtar alan> = <ikinci_tablo>.<anahtar_alan>

Örnek: Aşağıdaki örnekte tüm müşteriler ve verdikleri siparişler listelenmiştir.Böylece hem müşteri üzerinden her bir müşterinin verdiği siparişleri ve ayrıntılı müşteri bilgilerine ulaşıyoruz.Ayrıca temel bilgi olarak sirapiş tablosuna müşteri tablosunu bağladığımızı siparişlere göre eşleşen müşteri bilgilerinin geldiğini görüyoruz.
Sorgu:
SELECT * FROM Orders AS O
RIGHT OUTER JOIN Customers AS C ON C.CustomerId=O.CustomerID


Ders 30 ' a geçebilirsiniz.



14 Mayıs 2012 Pazartesi

28. OUTER JOIN-LEFT JOIN Kullanımı

  • LEFT veya RIGHT OUTER JOIN ifadeleri ilişkili alanda birbiriyle eşleşenlerin yanında eşleşmeyen kayıtları da listeler. 
  • JOIN koşuluna uymayan satılar NULL(boş) değer olarak görüntülenirler. 

LEFT JOIN

  • LEFT OUTER JOIN ile yazımdaki ilk tablonun tüm satırları listelenir ve diğer tablo ile eşleşmeyen alanlar NULL(boş) değer ile gösterilir. 
  • Eğer tabloların sorgudaki sırası değişirse aynı sonucu elde edebilmek için RIGHT OUTER JOIN kullanılır.
Söz dizimi:     SELECT <sütun_ad(lar)ı> FROM <ilk_tablo>
LEFT JOIN <ikinci_tablo>
ON <ilk_tablo>.<anahtar_alan> = <ikinci_tablo>.<anahtar_alan>
ÖRNEK: Aşağıdaki sorgunun SELECT kısmında iki sütun tekbir sütun adı altında birleştirilmiştir. Çalıştırıldığında çalışanın tam adı ve müşterilerden aldığı siparişler ve tarihleri listelenecektir.
SORGU:
SELECT Employees.FirstName+' '+Employees.LastName AS Name,OrderID,OrderDate
FROM Employees
LEFT JOIN Orders ON Employees.EmployeeID=Orders.EmployeeID



Ders 29'a geçebilirsiniz.

13 Mayıs 2012 Pazar

27. INNER JOIN Kullanımı

  • SQL de varsayılan (default) olarak kullanılan tablolaları bağlama işlemidir. 
  • Bağlanan tablolarda sadece ilişkili kayıtlar listelenir.
Örnek: Sorgumuzda hangi firmadan hangi ürünü aldığımızı bulmak istiyoruz. Bunun için iki farklı tabloyu birleştirip istediklerimiz SELECT ediyoruz. SELECT * FROM... yaparak da listenen tüm verileri görebilir, istediklerimizi alabiliriz. Diğer bir konuda AS kullanma sebebim daha büyük sorgularla uğraştığımızda bilmeniz gereken bir spde (Stored Procedure) bir tabloya 2 veya daha fazla sorgu cekmeniz gerekebilir. Bunun için ayrı ayrı nesne gibi düşünüp (p,s) gibi üzerinde işlemler yapmak size daha anlaşılabilirlik ve kolaylık sağlayacaktır.

Sorgu:
SELECT ProductName,CompanyName
FROM
Products AS p
INNER JOIN
Suppliers  AS s ON s.Supplierid=p.Supplierid

Ders 28'e geçebilirsiniz.