-- SELECT --
use Filmler
-- Filmler veritabanını kullan
--: yorum satırı, *: tüm sütunlar, select: nelerin döneceği, from: hangi tablodan
select * from Film
select id, adi, yapimyili, yonetmen_id, gisesi from Film
-- SQL sorgularında sadece ihtiyacımız olan sütunları getirmekte fayda var.
-- Bir tablo kendi kendine de ilişki kurabilir.
select id as [Film ID], adi as [Film Adi], yapimyili as [Yapim Yili], yonetmen_id as YonetmenID,
gisesi as [Gisesi] from Film
-- as ile yapılan işlem alias tanımlama'dır. sütunlara alias tanımlayabildiğimiz gibi alias'ları
-- tablolara da tanımlayabiliriz.
select adi + ' ' + soyadi as oyuncuadisoyadi, dogumtarihi from Oyuncu
-- metinsel ifadeler tek tırnakla ifade edilir. burda adi ile soyadi sütunlarını arada boşluk ile
-- birleştiriyoruz, oyuncuadisoyadi isimli bir sütuna alias vererek dogumtarihi ile birlikte çekiyoruz.
-- Not: SQL Server Profiler ile SQL Server'da yaptığımız bütün işlemleri görebiliyoruz!
select adi + ' ' + soyadi as oyuncuadisoyadi, CONVERT(varchar(10), dogumtarihi, 104) as oyuncudogumtarihi
from Oyuncu
-- CONVERT(neye çevireceği, neyi çevireceği, formatı)
-- 104: tarih formatı (Alman tarih formatı)
select CAST(id as varchar(5)) + ' - ' + adi + ' ' + soyadi as oyuncu from Oyuncu
-- CAST(neyi çevireceği as neye çevireceği)
select * from Oyuncu order by adi
-- order by: sütun adına göre sıralama, default'u ascending (asc)
select * from Oyuncu order by adi desc
-- descending (desc)
select * from Oyuncu 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.
select * from Oyuncu order by 2
-- 2: sütun adı (adi)
select * from Oyuncu order by 3 desc
-- 3: sütun adı (soyadi)
select COUNT(*) from Oyuncu
select COUNT(adi) as toplamfilm from Film
-- COUNT(sütun adı) veya COUNT(*): row sayısını verir
select COUNT(dogumtarihi) from Oyuncu
-- COUNT(sütun adı): NULL olanları saymaz
select MAX(gisesi) as [En Cok Gise] from Film
-- MAX(sütun adı): o sütundaki verilerden en büyük değeri ver
select MIN(gisesi) as [En Az Gise] from Film
-- MIN(sütun adı): o sütundaki verilerden en küçük değeri ver
select SUM(gisesi) as [Toplam Gise] from Film
-- SUM(sütun adı): o sütundaki verilerin toplamını ver
select AVG(gisesi) as [Ortalama Gise] from Film
-- AVG(sütun adı): o sütundaki verilerin ortalama değerini ver
select top 5 * from Oyuncu
-- TOP sayı sütun adı: ilk beş kaydı getirir
select top 5 * from Oyuncu order by 1 desc
-- Burda order by desc'den dolayı son 5 kaydı getirir
-- Eğer tablo veya sütun adlarında boşluk varsa [] kullanılması gerek!
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
use master
select * from Filmler.dbo.Film
-- dbo: schema
use Filmler
select * from Oyuncu where id = 5
select * from Oyuncu where id = '5'
-- id'si 5 olan kayıtları getir. ikisi de çalışır, kendi kendine convert yapar (where clause'unun içinde)
select * from Oyuncu where id != 5
select * from Oyuncu where id <> 5
select * from Oyuncu where not id = 5
-- id'si 5 olmayan kayıtları getir
select * from Oyuncu where id < 4 order by id desc
select * from Oyuncu where id > 4 -- 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
-- where: şart belirtir
/* Yorum satırı 1
* Yorum satırı 2
* Yorum satırı 3
* Yorum satırı 4
*/
select * from Oyuncu where id >= 2 and id <= 4
select * from Oyuncu where id < 2 or id > 4 -- 1. sorgu
select * from Oyuncu 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
/*
Koşul 1 and Koşul 2 Sonuç Koşulu Örnek Tabloda Aranan Veriler Örnek Tablodan Dönen Sonuç Verileri
id >= 3 id <= 5
1 (true) 1 (true) 1 (true) 3, 4, 5 3, 4, 5
1 (true) 0 (false) 0 (false) 11 Veri dönmez
0 (false) 1 (true) 0 (false) 2 Veri dönmez
id > 5 id < 3
0 (false) 0 (false) 0 (false) 4 Veri dönmez
*/
/*
Koşul 1 or Koşul 2 Sonuç Koşulu Örnek Tabloda Aranan Veriler Örnek Tablodan Dönen Sonuç Verileri
id >= 3 id <= 5
1 (true) 1 (true) 1 (true) 3, 4, 5 3, 4, 5
1 (true) 0 (false) 1 (true) 11, Diğer veriler 11, Diğer veriler
0 (false) 1 (true) 1 (true) 2, Diğer veriler 2, Diğer veriler
id > 5 id < 3
0 (false) 0 (false) 0 (false) 4 Veri dönmez
*/
select * from Oyuncu where id < 2 and id > 4
-- veri dönmez
select * from Oyuncu where adi = 'Sigourney' and soyadi = 'Weaver' and dogumtarihi = '1949-10-08'
select * from Oyuncu where (adi = 'Sigourney' and soyadi = 'Weaver') or adi = 'Zoe'
-- adı Sigourney ve soyadı Weaver olan veya adı Zoe olan kayıtları getir
select * from Oyuncu where (adi = 'Sigourney' and soyadi = 'Weaver') or (adi = 'Zoe' and soyadi = 'Saldana')
-- adı Sigourney ve soyadı Weaver olan veya adı Zoe ve soyadı Saldana olan kayıtları getir
select * from Oyuncu where ((adi = 'Sigourney' and soyadi = 'Weaver') or (adi = 'Zoe' and soyadi = 'Saldana')) and dogumtarihi > '1970-01-01'
-- adı Sigourney ve soyadı Weaver olan veya adı Zoe ve soyadı Saldana olan ve doğum tarihi 01.01.1970'ten büyük olan kayıtları getir
-- eğer koşullarda hem and hem de or kullanılıyorsa ilgili koşullar mutlaka paranteze alınmalıdır
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
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
select * from Tur where id between 2 and 4
select * from Film where yapimyili is NULL
select * from Film where yapimyili is not null
select * from Film where adi = 'Avatar'
select * from Film where adi like 'Avatar'
-- üstteki iki sorgu aynı sonucu verir çünkü like içerisinde % kullanılmazsa = gibi davranır
select * from Film where adi like 'a%'
-- a ile başlayan sonu ne olursa olsun getir
select * from Film where adi like '%ata%'
-- içinde ata geçenleri getir, başı ve sonu önemli değil
select * from Film where adi like '%de'
-- sonu de ile bitenleri getir
select * from Film where adi like 'yar%'
-- yar ile başlayanları getir
select * from Film where adi not like 'yar%'
-- yar ile başlamayanları getir
select * from Film where adi like '%tık'
-- tık ile bitenleri getir
select * from Film where adi like '%at%'
-- içinde at geçenleri getir
select * from Film where adi like '%av%'
-- içinde av geçenleri getir, başında veya sonunda geçse de veri döner
select * from Film where adi like '___r%'
-- ilk 3 karakteri ne olursa olsun 4. karakteri r olan ve sonrası ne olursa olsun getir
-- (sonunda hiçbir şey de olmayabilir, birşeyler de)
select * from Oyuncu where adi like '[jr]%' order by adi
-- r veya j ile başlayan kayıtları getir
select * from Oyuncu where adi like '[j-r]%' order by adi
-- baş harfi j ve r arasındaki karakterlerle başlayanları getir
select * from Oyuncu where adi like '[r-j]%' order by adi
-- [] içindeki karakterler sıralı olmalı yoksa boş tablo döner
select * from Oyuncu where adi like '[rj]_[^c]%e'
-- r ya da j harfinden biri ile başlayacak, ikinci harf önemli değil, üçüncü c olmayacak
-- ve arada ne geçerse geçsin son harfi e olacak
-- burda karakterleri 1'den saymaya başlıyoruz
select 'Çağıl' + ' ' + 'Alsaç' AdıSoyadı
select 1 + 2 + 3 as Toplam
-- select her zaman bir tablo ile kullanılmaz, istenilen veriler yazılıp ihtiyaca göre üzerinde işlemler yapılarak çekilebilir
select adi, soyadi, 'Oyuncu' [Tablo Adı] from oyuncu
-- select ile adi ve soyadi ile birlikte 'Oyuncu' metinsel verisini de tablo adı olarak getir