Anasayfa / Yazılım / SQL / SQL SELECT Kullanımı

SQL SELECT Kullanımı

SELECT deyimini SQL Server’dan veri çekmek amacı ile kullanırız. SELECT deyiminin ardından listelemek istediğimiz verilerin nerede olduğunu belirtir şekilde ifadeler kullanırız. Şimdi SELECT’in örnek kullanımlarına değinmek istiyorum. SQL Server Management Studio ortamımı çalıştırdım ve yeni bir Query penceresi üzerinde çalışmalarımı gerçekleştiriyorum, üzerinde çalıştığımız veritabanı da Adventureworks veritabanı.

Şimdi bir SELECT deyiminin ardından rasgele yazı yazacağım ve onun geriye döndürüldüğünü göstermek istiyorum.

SELECT 'İsmail'
SELECT 5

Sorguyu çalıştırdğımda, bunun sonucunda geriye SQL Server İsmail ve 5 sonucunu döner, çünkü burada yaptığım işlem sadece SELECT sorgusunun ardından bu öğeleri seç demek. Herhangi bir veritabanı üzerinde herhangi bir tablodan veri çekmedim. Göstermek istediğim sonuç olarak veriler nasıl görünüyor bunu göstermek. Birde dikkat edilmesi gereken nokta bakın string değer için tırnak işaretleri arasında değeri belirtirken sayı için bunu direkt olarak yazdım. Eğer ‘5’ yazsa idim aslında bu da bir string türünde değer olurdu. Tabi SQL Server’da string değerin karşılığı varchar, nvarchar gibi tiplerdir. Data tiplerine daha sonra değineceğim.

121201

Peki bir tablodan nasıl veri okuruz, veri çekeriz? Üstte yaptığımız gibi bir işlemi yapma ihtiyacı duymayız. Biz daha çok verilerimizi veritabanımızdaki tablolar üzerinden çekeriz. Solda Adventureworks veritabanı üzerinde çalıştığımızı kontrol ettikten sonra;

121202

yeni bir query penceresi açıyorum. Şimdi bir tablo üzerinden veri çekeceğiz. Bunun için yine SELECT deyimini kullanıyoruz. Ancak bir kalıbımız mevcut.

SELECT , FROM <şemaAd>.;

Bu şekilde bir kalıbımız mevcut. Öncelikle SELECT deyimimiz ardından hangi bilgileri istiyorsak bunların kolon başlıkları adı ardından FROM deyimi ve sonrası da ilgili tablo ve şema bilgisi. Şimdi aşağıdaki sorguyu çalıştıralım;

SELECT FirstName, LastName FROM Person.Person

Sonuç olarak;

121203

Görüldüğü gibi Person.Person tablosundan FirstName ve LastName kolonlarındaki bilgileri listeledik. 19972 adet kayıt listelendi.

Şimdi daha önce SQL servis 2008 kullananlar bu schema (şema) nereden çıktı diyebilirler, daha önceki kullanımlarda FROM deyiminden sonra tabloAdı gelmekte idi. Eğer siz veritabanı üzerinde bir takım tabloları, ortak tabloları gruplama yapmak isterseniz bunları 2012 üzerinde yapabiliyorsunuz. Böylelikle veritabanınız daha düzenli bir hal alıyor. Ve aynı grup içinde aldığınız tablolara bir ön ad veriyorsunuz yani bir şema (schema) adı veriyorsunuz. Bizim üzerinde çalıştığımız Database üzerinde de tablolar gruplanmış dolayısı ile bizde schema kullanıyoruz. Yoksa elbetteki gruplama yapılmamış bir veritabanı üzerinde From deyiminden sonra tablo adını yazmanız yeterlidir. Yani veritabanı tasarlarken schema yapmaya gerek yok, böyle bir zorunluluk yok, ama yapılması tavsiye edilir. Özellikle büyük projelerde iyi olur. Şöyle düşünün, bir e-ticaret web siteniz var bir sürü müşteriniz, üyeniz var bunları veritabanında kişi tablosunda tuttunuz. Ayrıca çalışanlarınız da var bunlarda her bir bireyi temsil ediyor. Müşteriye ait verileri müşteri grubunda, çalışanlara ait verileri çalışan grubunda ayırarak veritabanınızın daha doğru bir yapıda olmasını sağlayabilirsiniz.

Şimdi aşağıdaki sorguyu çalıştıralım;

SELECT * FROM Person.Person

Geri dönen sonuçlar; 121204

Bu sorgu sonucunda Person şeması altında Person tablosu içindeki tüm veriler tüm kolonlar dahil olmak üzere listelendi. Eğer bir tablo üzerindeki tüm alanların listelenmesini istiyor isek bu sorguda olduğu gibi * karakterini kullanırız. Bu karakter asterisk olarak adlandırılır.

Bu sorgu biçimini genelde pek kullanmayız nedeni şudur, uygulamalarımız içinde eğer bir tablodaki tüm verileri listeleme gibi duruma ihtiyacımız yok ise ve hatta tablonun diyelim ki 10 alanından (kolondan) sadece 9 u bize lazım olsa, aman sql sorgum kısa olsun bir tane fazladan kolon veri olarak gelsin, ben onu kullanıcıya göstermesem de olur, arka planda veritabanından aktarılır gibi bir yanlış düşünce sahibi olmayınız. Satırlarca veriniz olduğu bir durumda gereksiz veri çekimi, sorguda gereksiz alan çekimi uygulamanızın, web sitenizin performansını olumsuz derecede etkileyecektir. Yani mümkün olduğunda gerektiği kadar gerektiği kolonları sorgulamanızda çekiniz. Bir kolondan ne çıkar, sorgu deyimim de 9 kolonu yazmaktansa bir * karakteri koyayım hepsini çekeyim demeyiniz.

SQL Server üzerinde SELECT sorgu deyimini yazmanın bir diğer yoluda (tabi biz programcılar pek tercih etmeyiz 🙂 )
hazır bir şekilde SQL SELECT scripti oluşturmaktır. Bunuda adım adım gerçekleştirelim.

1) Object Explorer alanında, database ve daha sonra Adventureworks veritabanının yanındaki artı (+) simgesine tıklayarak alanı genişletin.
2) Tabloları yanındaki artı (+) işaretine basarak genişletin.
3) Örneğin Person.Person tablosu üzerinde sağ tıklayın
4) Script Table As > Select To > New Query Editor Window deyiniz.

121205

Bu işlemi yaptıkdan sonra bir yeni Query alanında şöyle bir kod çıkar.

USE [AdventureWorks2012]
GO

SELECT [BusinessEntityID]
      ,[PersonType]
      ,[NameStyle]
      ,[Title]
      ,[FirstName]
      ,[MiddleName]
      ,[LastName]
      ,[Suffix]
      ,[EmailPromotion]
      ,[AdditionalContactInfo]
      ,[Demographics]
      ,[rowguid]
      ,[ModifiedDate]
  FROM [Person].[Person]
GO

Görüldüğü gibi bizim yazdığımız SELECT sorgusu ile aynı mantıkta, ufak tefek farklılıklar var. Nedir bunlar, yeni bir QUERY penceresi olduğu için USE deyimi var, USE deyimi ile hangi veritabanı kullanılacak bunu belirtiriyoruz. Daha sonra GO diyoruz yani ilgili veritabanına git. Daha sonra SELECT diyoruz ve ilgili tablonun tüm kolon adları seçiliyor. Daha sonra yine bir FROM var ve sonra varsa schema ve tablo adı. Sonra da kodun sonu için bir GO daha. Birde ek olarak veritabanı, kolonlar, tablo adı, schema adı gibi alanlar için köşeli parantez ile açma ve kapama var. Otomatik olarak scirpt üretildiğinde SQL server bunu ekler. Aynen bu kodlar tamamen seçilip execute edilirse sonuç olarak Person.Person tablosundaki tüm veriler listelenecektir. Yani bizim

 SELECT * FROM Person.Person

deyimimiz sonucu aldığımız veriler ile aynı.. Biz Use ve GO kullanmadık çünkü query penceremiz zaten o veritabanı altında çalışmakta idi. Eğer orada çalışmasa idi bizde en başta Use deyip daha sonra veritabanı adını girip daha sonra GO demeli idik.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir