-- Tabloyu tasarladınız. iine veri girdiniz. sonra açıp tasarımı değiştirmek istediniz. kaydettiniz hata verir. bu hatayu engellemek için Tools-Options-Designer-Prevent saving changes ...... olan kısmın işaretini kaldır.
-- TRANSACT SQL (T-SQL)
-- Veri sorgulama dilidir.
-- T-SQL ile, veri çekme, veri kaydetme, güncelleme, silme, database oluşturma, tablo luşturma, silme v.s .... işlemler yapabiliriz.
-- VERİ ÇEKME İŞLEMİ (SELECT)
-- NOT : T-SQL büyük küük harfe duyarlı değildir.
-- NOT : Üst soldaki çekme kutudan çalışılan database in doğru database olduğundan emin olun. veya aşağıdaki gibi use ile belirtin
-- Bütün personellerimin bilgilerini listele :
use Northwind -- Northwind database i kullan
select * from Personeller
-- Personellerimin sadece Ad ve Soyadlarını listele :
select Adi,SoyAdi from Personeller
-- çekilen kolonlara alias tanımlama :
select Adi as isim,Soyadi as soyisim from Personeller
-- eğer kolon ismi içinde boşluk karakteri varsa :
-- tüm satış detayları bilgilerini getir :
select * from [Satis Detaylari]
-- NOT : select ifadesinden sonra * konularak tüm kolonlar çekilebilir. fakat performans açısından * koymak yerine, tüm kolonları teker teker yazmak daha avantajlıdır.
-- alias tanımlarken de araya boşluk koyacaksa [] içne almalıyız :
select Adi as [Personel İsmi],Soyadi as [Personel Soyismi] from Personeller
-- personellerimin ad ve soyadları ayrı ayrı gelmesin, tek kolonda gelsin.
select Adi + ' ' + SoyAdi as [AD SOYAD] from Personeller
-- METİNSEL TİPTEKİ verileri + ile birleştirerek getirebiliriz.
select IseBaslamaTarihi from Personeller
select Adi + ' ' + Soyadi + ' - ' + IseBaslamaTarihi from Personeller
-- yukarıda IseBaslamaTarihi datetime tipli olduğu için + ile birleşemez. bu tipi metinsel tipe çevirdikten sonra + ile birleştirebiliriz.
select Adi + ' ' + Soyadi + ' - ' + Convert(varchar(30),IseBaslamaTarihi,104) as tarihli from Personeller
-- Convert fonksiyonu ile tip dönüşümü yapılabilidiği gibi cast fonksiyonu ile de yapılabilir.
select Adi + ' ' + Soyadi + ' - ' + CAST(IseBaslamaTarihi as varchar(20)) as tarihli from Personeller
---------------------------------------------------------------
-- SORGUYA ŞART İFADESİ YAZMAK (WHERE)
-- personellerimin yaşadıkları şehirleri getir
select Adi,Soyadi,Sehir from Personeller
-- London şehrinde yaşayan personellerimi getir
select Adi,Soyadi,Sehir from Personeller where Sehir='London'
select Adi,Soyadi,Sehir,Ulke from Personeller where Ulke = 'USA'
-- Unvanı Sales Representative olan ve London da yaşayan ve UnvanEki Ms. olan personellerim
select Adi,SoyAdi,Unvan,Sehir from Personeller where Unvan = 'Sales Representative' and Sehir = 'London' and UnvanEki='Ms.'
-- UnvanEki Ms. ya da Mr. olan ve UK ülkesinde yaşayan personelelrim
select * from Personeller where UnvanEki = 'Ms.' or UnvanEki = 'Mr.' and Ulke = 'UK'
-- Robert King in tüm bilgilerini getir
select * from Personeller where Adi = 'Robert' and SoyAdi='King'
-- Id numarası 5 den küçük olan personellerim :
select Adi,Soyadi from Personeller where PersonelID < 5
-- 1993 den sonra işe başlayan personellerim :
-- eğer elimizde datetime tipli bir veri varsa bu veri içinde gün ay yıl saat ddakika saniye v.s bilgileri vardır. eğer bu bilgilerden bana sadece yıl, ay v.s lazımsa, tarih fonksyionları kullanarak bunu elde etmeliyiz.
select * from Personeller where year(IseBaslamaTarihi) > 1993
-- mayıs ayında doğan personellerim :
select * from Personeller where MONTH(DogumTarihi) = 05
-- doğum günü ayın 29 u olmayan personelelrim :
select * from Personeller where DAY(DogumTarihi) <> 29
-- <> eşit değil demektir
-- <= , >= , <> , =
-- doğum yılları 1950 ile 1965 arasındaki personelelrimi getir
select * from Personeller where YEAR(DogumTarihi) > 1950 and YEAR(DogumTarihi) < 1965
-- aralık belirten ifadeler yukarıdkai gibi yazılabileceği gibi aşağıdaki şekilde between kullanılarak da yazılabilir . between : arasında demektir
select * from Personeller where YEAR(DogumTarihi) between 1950 and 1965
-- yaşadığı şehir London,Tacoma,ya da Kirklan ya da olan personellerim :
select * from Personeller where Sehir = 'London' or Sehir = 'Tacoma' or Sehir = 'Kirkland'
-- yukarıdaki gibi or or or ifadelerini aşağıdaki şekilde in operatörü ile de yapabiliriz :
select * from Personeller where Sehir in ('London','Tacoma','Kirkland')
--------------------------------------------------------------
-- LIKE SORGULARI :
-- isminin baş harfi J olan personellerim
select Adi,SoyAdi from Personeller where Adi like 'J%'
-- isminin son harfi y olan personelelrim :
select Adi,SoyAdi from Personeller where Adi like '%y'
-- ismin,in son 3 harfi ert olan personelelrim .
select Adi,SoyAdi from Personeller where Adi like '%ert'
-- isminin ilk harfi r son harfi t olan personellerim :
select Adi,SoyAdi from Personeller where Adi like 'r%t'
-- aşağıdaki gibi de yapılabilir ancak gerek yok
select Adi,SoyAdi from Personeller where Adi like 'r%' and Adi like '%t'
-- isminin içinde an geçen personellerim :
select Adi,SoyAdi from Personeller where Adi like '%an%'
-- baş hari n olan içinde an geçen
select Adi,SoyAdi from Personeller where Adi like 'n%an%'
-- isminin ilk harfi a , 2. harfi farketmez 3. harfi d sonrakiler farketmez olan personellerim
select Adi,SoyAdi from Personeller where Adi like 'a_d%'
-- _ ile bir karakter ifade edebiliriz
-- ilk harfi m 2,3,4. harfler farketmez 5. harfi a sonrakiler farketmez
select Adi,SoyAdi from Personeller where Adi like 'm___a%'
-- ilk harfi m 2,3,4. harfler farketmez 5. harfi a 6. harfi r sonrakiler farketmez
select Adi,SoyAdi from Personeller where Adi like 'm___ar%'
-- baş harfi n ya da m ya da r olan personellerim
select Adi,SoyAdi from Personeller where Adi like '[nmr]%'
-- ilk iki harfi na ya da mi olanlar
select Adi,SoyAdi from Personeller where Adi like 'na%' or Adi like 'mi%'
-- adının içinde a ya da i geçen personellerim
select Adi,SoyAdi from Personeller where Adi like '%[ai]%'
-- baş harfi a ile k arasında herhangi bir harf olan personellerim
select Adi,SoyAdi from Personeller where Adi like '[a-k]%'
-- -- baş harfi a ile k arasında, 3 harfi n olan sonrakiler herhangi bir harf olan personellerim
select Adi,SoyAdi from Personeller where Adi like '[a-k]_n%'
-- ilk harfi a olmayan personellerim
select Adi,SoyAdi from Personeller where Adi like '[^a]%'
---------------------------------------------------------------
-- isminin karkater sayısı 5 olan persoellerim :
-- len fonksiyonu verilen kolonun karakter sayısını verir
select Adi,SoyAdi from Personeller where len(Adi) = 5
---------------------------------------------------------------
-- SIRALAMA (ORDER BY)
-- personleerim soyadlarına göre harf sırasıyla gelsin :
-- order by : şuna göre sırala.
select * from Personeller
select * from Personeller order by SoyAdi
-- NOT : order by varsayılan olarak küçükten büyüğe doğru sıralar (asc)
-- büyükten küçüğe sıralatmak için order by dan sonra desc yazmalıyız
select * from Personeller order by SoyAdi desc
-- personellerim doğum yıllarına sıralı gelsin :
select * from Personeller order by year(DogumTarihi) desc
-- personelelrim şehirlerine göre sıralansın, eğer aynı şehirde yaşayan personelelrim varsa, onlar da isimlerine göre tekrar sıralnasın. önce şehre göre, sonra ada göre sırla
select * from Personeller order by Sehir,Adi
-- doğum yılı 1960 dan büyük olan personellerimi soyisimlerine göre sırala
select * from Personeller where YEAR(DogumTarihi) > 1960 order by SoyAdi desc
-- NOT : order by sorgunun en son ifadesi olmalıdır.
---------------------------------------------------------------
-- AGGREGATE FONKSİYONLAR
-- AVG : ORTALAMA ALIR
-- MAX : EN BÜYÜK DEĞERİ BULUR
-- MIN : EN KÜÇÜK DEĞERİ BULUR
-- COUNT : TOPLAM SAYISINI VERİR
-- toplam kaç adet personelim var ?
select COUNT(PersonelID) as [Toplam Personel Sayısı] from Personeller
-- NOT : COUNT(KOLON_ADI) ifadesi o kolondaki toplam kayıt sayısını verir. NULL olan kayıtları saymaz.
select COUNT(*) from Personeller
-- NOT : COUNT(*) NULL kayıtları da sayar
-- en büyük Id numaralı personelimi getir
select MAX(PersonelID) from Personeller
-- Id si en küçük olan personelimin Id si kaç ?
select MIN(PersonelId) from Personeller
-- personel Id leimin ortalaması kaç ?
select avg(PersonelId) from Personeller
-- SUM : TOPLAMINI VERİR
select SUM(PersonelId) from Personeller
-- -- personel Id leimin ortalaması kaç ?
-- sorgu kısmında matematiksel işlemler de yapılabilir (+,-,*,/)
select (SUM(PersonelId) - 9) / (COUNT(PersonelID) - 1) from Personeller
---------------------------------------------------------------
-- GRUPLAMA İŞLEMLERİ (GROUP BY)