-- SELECT: Bir veritabanındaki bir veya daha fazla tablo üzerinden veri sorgulamak ve getirmek için kullanılır.
use Filmler -- Filmler veritabanını kullan
-- *: tüm sütunlar, select: nelerin döneceği, from: hangi tablodan
select * from Film
select Id, adi, yapimyili, yonetmenId, gisesi from Film
-- SQL sorgularında sadece ihtiyacımız olan sütunları getirmekte fayda var.
-- select ile getirilen bir sütun adı as veya as kullanmadan geçici olarak değiştirilebilir (alias). Bu işleme aliasing denir.
-- Sütunlara alias tanımlayabildiğimiz gibi alias'ları tablolara da tanımlayabiliriz, yani sorguda kullandığımız
-- isimlerini geçici olarak değiştirebiliriz.
-- Eğer arada boşluk karakteri ile alias tanımlanmak isteniyorsa [] arasına sütun adı yazılmalıdır.
select Id as [Film ID], adi as [Film Adi], yapimyili [Yapim Yili], yonetmenId YonetmenID, gisesi [Gisesi] from Film
-- SQL'de metinsel ifadeler tek tırnakla ifade edilir. Burada adi ile soyadi sütunlarını arada boşluk ile
-- birleştiriyoruz (concatenation), yonetmenadisoyadi isimli bir sütuna alias vererek dogumtarihi ile birlikte çekiyoruz.
select adi + ' ' + soyadi as yonetmenadisoyadi, dogumtarihi from Yonetmen
-- select ile çekilen veriler bir veya birden çok sütun üzerinden order by kullanılarak sıralanabilir.
-- order by ile asc, ascending yani artan veya desc, descending yani azalan sıralama yapılabilir.
-- Default'u yani yazılmadığında varsayılanı ascending (asc)'dir.
select * from Yonetmen order by adi -- artan sıralama
select * from Yonetmen order by adi desc -- azalan sıralama
select * from Yonetmen order by adi, soyadi
-- önce adi sütununa göre artan sıralama yapar, sonra adi sütununa göre sıraladıklarını soyadi sütununa göre artan sıralar.
select * from Yonetmen order by adi, soyadi desc
-- önce adi sütununa göre artan sıralama yapar, sonra adi sütununa göre sıraladıklarını soyadi sütununa göre azalan sıralar.
-- Bir tablodaki kayıt (satır) sayısını getirmek için SQL'in count fonksiyonu kullanılır.
select COUNT(*) from Film
select COUNT(adi) as toplamfilm from Film -- count(*) yerine count(sütun adı) da kullanılabilir.
select COUNT(dogumtarihi) from Yonetmen -- count(sütun adı): NULL olanları saymaz.
-- Bir tablodaki sayısal veri tipindeki bir sütunun maksimum değeri max fonksiyonu ile getirilebilir.
select MAX(gisesi) as [En Cok Gise] from Film -- MAX(sütun adı): o sütundaki verilerden en büyük değeri ver.
-- Bir tablodaki sayısal veri tipindeki bir sütunun minimum değeri min fonksiyonu ile getirilebilir.
select MIN(gisesi) as [En Az Gise] from Film -- MIN(sütun adı): o sütundaki verilerden en küçük değeri ver.
-- Bir tablodaki sayısal veri tipindeki bir sütunun verilerinin toplamı sum fonksiyonu ile getirilebilir.
select SUM(gisesi) as [Toplam Gise] from Film -- SUM(sütun adı): o sütundaki verilerin toplamını ver.
-- Bir tablodaki sayısal veri tipindeki bir sütunun verilerinin ortalaması avg fonksiyonu ile getirilebilir.
select AVG(gisesi) as [Ortalama Gise] from Film -- AVG(sütun adı): o sütundaki verilerin ortalama değerini ver.
-- Bir tablodaki veriler top ile sıralamaya göre baştan kaç kayıt çekileceği belirtilerek getirilebilir.
select top 3 * from Yonetmen -- TOP sayı sütun adı: ilk üç kaydı getirir.
select top 3 * from Yonetmen order by Id desc -- order by desc'den dolayı son üç kaydı getirir.
select top 1 * from Film order by Id -- film tablosundaki ilk kaydı getirir.
select top 1 * from Film order by Id desc -- film tablosundaki son kaydı getirir.
-- Eğer başka bir veritabanı üzerinden çalışılıyorsa, örneğin master, Filmler veritabanındaki Film tablosuna
-- veritabanı.dbo.tablo şeklinde ulaşılabilir, dbo tablonun şemasıdır (schema).
use master
select * from Filmler.dbo.Film
-- WHERE: Sorgu için koşul (şart) veya koşullar (şartlar) belirtmek için kullanılır. Belirtilen koşul veya koşullara uyan satırlar etkilenir.
-- Update, delete ve select sorgularında kullanılır. Birden çok koşul için and (ve) ile or (veya) operatörleri kullanılabilir.
-- Bir koşulun değilini almak için de not operatörü kullanılır.
-- Where koşulundaki sütunlar ile =, !=, >, <, >= ve <= operatörleri kullanılabilir.
use Filmler
select * from Film where Id = 5 -- id'si 5 olan filmi getir.
select * from Film where Id != 5 -- id'si 5 olmayan filmleri getir.
select * from Film where not Id = 5 -- id'si 5 olmayan filmleri getir.
select * from Film where Id < 4 order by Id desc -- id'si 4'ten küçük olan filmleri id'ye göre azalan şekilde getir.
select * from Film where Id > 4 -- id'si 4'ten büyük olan filmleri id'ye göre artan şekilde getir.
-- id'ye göre artan sıralama için order by id yazmaya gerek yoktur
-- çünkü id primary key ve index olduğundan otomatikman id'ye göre artan sıralı gelir.
select * from Yonetmen where Id >= 2 and Id <= 4 -- id'si 2 ile 2'den büyük ve 4 ile 4'den küçük yönetmenleri getir.
-- id'si 2'den küçük veya 4'ten büyük yönetmenleri getir.
select * from Yonetmen where Id < 2 or Id > 4 -- 1. sorgu
select * from Yonetmen where not (Id >= 2 and Id <= 4) -- 2. sorgu
-- Üstteki iki sorgu aynı sonucu verir çünkü 1. sorgu 2. sorgunun değil operatörü parantez içerisindeki koşullara dağıtılmış halidir.
-- WHERE ile birden çok koşul kullanımı:
-- Aşağıdaki sorgularda parantez içinde Koşul 1 ve Koşul 2, parantez dışında da and'den sonra aranan veriler yazılmıştır.
select Id from Yonetmen where (Id >= 2 and Id <= 4)
select Id from Yonetmen where (Id >= 2 and Id <= 4) and Id = 2 -- *
select Id from Yonetmen where (Id >= 2 and Id <= 4) and Id = 3 -- *
select Id from Yonetmen where (Id >= 2 and Id <= 4) and Id = 4 -- *
select Id from Yonetmen where (Id >= 2 and Id <= 4) and Id = 5 -- **
select Id from Yonetmen where (Id >= 2 and Id <= 4) and Id = 1 -- ***
select Id from Yonetmen where (Id > 4 and Id < 2) and Id = 3 -- ****
/*
Koşul 1 and Koşul 2 Sonuç Koşulu Yonetmen Tablosunda Aranan Veriler (id) Yonetmen Tablosundan Dönen Sonuç Verileri (id)
id >= 2 id <= 4
1 (true) 1 (true) 1 (true) 2, 3, 4 * 2, 3, 4
1 (true) 0 (false) 0 (false) 5 ** Veri dönmez
0 (false) 1 (true) 0 (false) 1 *** Veri dönmez
id > 4 id < 2
0 (false) 0 (false) 0 (false) 3 **** Veri dönmez
*/
select Id from Yonetmen where (Id >= 2 or Id <= 4)
select Id from Yonetmen where (Id >= 2 or Id <= 4) and Id = 2 -- *
select Id from Yonetmen where (Id >= 2 or Id <= 4) and Id = 3 -- *
select Id from Yonetmen where (Id >= 2 or Id <= 4) and Id = 4 -- *
select Id from Yonetmen where (Id >= 2 or Id <= 4) and Id = 5 -- **
select Id from Yonetmen where (Id >= 2 or Id <= 4) and Id = 1 -- ***
select Id from Yonetmen where (Id > 4 or Id < 2) and Id = 3 -- ****
/*
Koşul 1 or Koşul 2 Sonuç Koşulu Yonetmen Tablosunda Aranan Veriler (id) Yonetmen Tablosundan Dönen Sonuç Verileri (id)
id >= 2 id <= 4
1 (true) 1 (true) 1 (true) 2, 3, 4 * 2, 3, 4
1 (true) 0 (false) 1 (true) 5 ** 5
0 (false) 1 (true) 1 (true) 1 *** 1
id > 4 id < 2
0 (false) 0 (false) 0 (false) 3 **** Veri dönmez
*/
-- SELECT sorgu örnekleri:
select * from Yonetmen where adi = 'James' and soyadi = 'Cameron' and dogumtarihi = '1954-08-16'
-- adı James ve soyadı Cameron ve doğum tarihi 06.08.1954 olan yönetmenleri getir.
-- Eğer aşağıdaki örneklerde olduğu gibi birden çok and ve or operatörü kullanıldığında
-- mutlaka öncelikli koşul veya koşullar için parantez kullanılmalıdır.
select * from Yonetmen where (adi = 'James' and soyadi = 'Cameron') or adi = 'Ridley'
-- adı James ve soyadı Cameron olan veya adı Ridley olan yönetmenleri getir.
select * from Yonetmen where (adi = 'James' and soyadi = 'Cameron') or (adi = 'Ridley' and soyadi = 'Scott')
-- adı James ve soyadı Cameron olan veya adı Ridley ve soyadı Scott olan yönetmenleri getir.
select * from Yonetmen where ((adi = 'James' and soyadi = 'Cameron') or (adi = 'Ridley' and soyadi = 'Scott')) and dogumtarihi > '1950-01-01'
-- adı James ve soyadı Cameron olan veya adı Ridley ve soyadı Scott olan ve doğum tarihi 01.01.1950'den büyük olan yönetmenleri getir.
select * from Tur where Id = 1 or Id = 3 or Id = 5
select * from Tur where Id in (1, 3, 5)
-- in (değerler): küme içerisinden seçim yapar, değerleri parantez içindeki parametreler olanları getir.
-- id'si 1 veya 3 veya 5 olan türleri getir.
-- id'si 1, 3, 5 kümesi içerisinde olan türleri getir.
select * from Tur where Id not in (1, 3, 5)
-- not in (değerler): küme dışından seçim yapar, değerleri parantez dışındaki parametreler olanları getir.
-- id'si 1 ve 3 ve 5 olmayan türleri getir.
-- id'si 1, 3, 5 kümesi dışında olan türleri getir.
select * from Tur where Id between 2 and 4
-- id'si 2 (dahil) ve 4 (dahil) arasındaki türleri getir.
select * from Film where yapimyili is NULL
-- yapım yılı null olan filmleri getir. where koşulunda yapimyili = null yazılmaz.
select * from Film where yapimyili is not null
-- yapım yılı null olmayan filmleri getir. where koşulunda yapimyili != null yazılmaz.
select * from Film where adi = 'avatar'
-- adı avatar olan filmleri getir.
-- Veritabanı collation'ı TURKISH_CI_AS
-- yani TURKISH: Türkçe, CI: case insensitive, büyük küçük harf duyarsız ve AS: accent sensitive, aksan duyarlı (bizim için önemsiz)
-- olduğundan Avatar veya avatar koşulu aynı sonucu döner.
select * from Film where adi like 'avatar'
-- içerisinde tamamen avatar geçen filmleri getir. adi = 'avatar' ile aynı sonucu döner yani like = operatörü gibi davranır.
select * from Film where adi like 'a%'
-- adı a ile başlayan sonu ne olursa olsun filmleri getir. % yerine herhangi bir veya daha fazla karakter gelebilir demektir.
select * from Film where adi like '%ata%'
-- içinde ata geçen filmleri getir, başı ve sonu önemli değil. ata başında veya sonunda geçse de veri döner.
select * from Film where adi like '%ar'
-- sonu ar ile biten filmleri getir.
select * from Film where adi not like '%ar'
-- sonu ar ile bitmeyen filmleri getir.
select distinct yapimyili from Film where yapimyili is not null order by yapimyili desc
-- null olmayan yapım yıllarını yapım yılına göre azalan sırada çoklayan satırları teke düşürerek getir.
select 'Çağıl' + ' ' + 'Alsaç' AdıSoyadı
-- Çağıl Alsaç AdıSoyadı sütununu döner.
-- select her zaman bir tablo ile kullanılmaz, istenilen veriler yazılıp ihtiyaca göre üzerinde işlemler yapılarak çekilebilir.
-- Burada olduğu gibi from ile herhangi bir tablo kullanılmadan da select ile istenilen veri dönülebilir.
select 1 + 2 + 3 as Toplam
-- 6 Toplam sütununu döner.
select adi, soyadi, 'Yönetmen' [Tablo Adı] from yonetmen
-- adi ve soyadi ile birlikte 'Yönetmen' metinsel verisini de tablo adı olarak getir.
-- yonetmen: SQL sorgularında tablo adları ile sütun adları büyük küçük harf duyarsız şekilde yazılabilir.
-- Ancak i harfine dikkat etmek gerekir. Örneğin eğer sütun adı Id tanımlandıysa id ile select sorgusu yazmak hata verir.