Sayfalar

5 Eylül 2019 Perşembe

SQL KEYWORDS


USE
Kullanılacak VeriTabanını Belirleme

USE  "Database"
USE Northwind


-----------------------------------------------------*--------------------------------------------------------------------

SELECT 

 Belirli Propertiesleri yada Tüm Propertiesi Listeleme

SELECT Column1,   Column2    FROM "DataBase
SELECT MusteriID, MusteriAdi FROM Musteriler

SELECT * FROM "DataBase"
SELECT * FROM  Musteriler

-----------------------------------------------------*--------------------------------------------------------------------

WHERE

Filtreleme yapar.

SELECT * FROM "DataBase" WHERE (filter)
SELECT * FROM Musteriler WHERE Age>20

Fonkisyonu filtre olarak kullanma

Select * From Employees Where YEAR( Employees.HireDate)>=1994 and Month(HireDate)>3

-----------------------------------------------------*-----------------------------------------------------------------

INSERT 

Yeni kayıt Ekler.

INSERT (Column1, Column2, Column3) SET ('Value1, Value2, Value3)

INSERT Employees( LastName,FirstName,Title) VALUES('Habil','Gür','Manager')

* Null alanlar için mutlaka null değer yollanmalıdır.
* Kolonun veri tipinde ve uzunluğunda veri gönderilmelidir.
* Idendity kolonlarına değer gönderilemez.

-----------------------------------------------------*--------------------------------------------------------------------

ORDER BY

Kayıtları sıralar...

SELECT * FROM "DataBase" ORDER BY (Column1, Column2)  ASC | DESC

SELECT * FROM Employees  WHERE City IS NOT NULL ORDER BY City,PostalCode ASC

-----------------------------------------------------*--------------------------------------------------------------------

UPDATE  *** WHERE yazmadan kullanılmaz!! Aksi Halde Tüm Kayıtlar Updatelenir!!!

Kayıtlara yeni alanlar ekler....

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;


UPDATE Employees
SET TitleOfCourtesy='Mr', BirthDate='1978/08/28',HireDate='2012/07/02',City='İstanbul'
WHERE EmployeeID=10

-----------------------------------------------------*--------------------------------------------------------------------

DELETE  *** WHERE yazmadan kullanılmaz!! Aksi Halde Tüm Kayıtlar Updatelenir!!!

Kayıtlara yeni alanlar ekler....

DELETE FROM table_name  
WHERE condition;

DELETE FROM  Employees
WHERE EmployeeID=10

-----------------------------------------------------*--------------------------------------------------------------------

SELECT TOP

Bir Tabloda ki en üst kayıtları sıralar...


SELECT TOP number|percent column_name(s)
FROM table_nameWHERE condition;  


SELECT TOP 3 * FROM Employees

SELECT TOP 50 PERCENT * FROM Employees  



-----------------------------------------------------*--------------------------------------------------------------------

 AVG,  MIN, MAX, COUNT

SELECT COUNT -  SUM - AVG - MIN - MAX (column_name)
FROM table_name



SELECT
 AVG(o.ProfitLoss) AvgPL,
 SUM(o.ProfitLoss) SumPL,
 MIN(o.ProfitLoss) MınPL,
 MAX(o.ProfitLoss) MaxPL,
 Count(o.ProfitLoss) ClosedORder

FROM [Order] o 



-----------------------------------------------------*--------------------------------------------------------------------

 LIKE

SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;  




LIKE Operator Description
WHERE CustomerName LIKE 'a%' Finds any values that start with "a"
WHERE CustomerName LIKE '%a' Finds any values that end with "a"
WHERE CustomerName LIKE '%or%' Finds any values that have "or" in any position
WHERE CustomerName LIKE '_r%' Finds any values that have "r" in the second position
WHERE CustomerName LIKE 'a__%' Finds any values that start with "a" and are at least 3 characters in length
WHERE ContactName LIKE 'a%o' Finds any values that start with "a" and ends with "o"


-----------------------------------------------------*--------------------------------------------------------------------

 IN

Where içerisinde birden fazla parametre kullanılmasını sağlar


SELECT column1, column2, ...
FROM table_name
WHERE columnName IN (column1, cloumn2)  


SELECT * FROM IsGucu
WHERE Ad IN ('Mehmet','Habil','Günay')
ORDER BY Ad ASC



-----------------------------------------------------*--------------------------------------------------------------------

 BETWEEN

Belirli bir aralıkta seçilen değerleri verir. Numara, text yada tarih olabilir.  Belirtilen değerleride sonuca dahil eder.

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2; 
--BOYLARI 1.60 VE 1.70 ARASINDA OLAN ÇALIŞANLAR
SELECT * FROM IsGucu
WHERE Boy BETWEEN 165 AND 170

--BOYLARI 170 VE 171 HARİCİNDE Kİ TÜM ÇALIŞANLAR
SELECT * FROM ISGUCU
WHERE BOY NOT BETWEEN 170 AND 171

--BOYLARI 170 VE 180 ARASINDA OLAN VE BEDENİ 42, 43 OLMAYAN ÇALIŞANLAR
SELECT * FROM ISGUCU
WHERE BOY BETWEEN 170 AND 180
AND NOT BEDEN IN(42,44)

-- DOĞUM TARİHİ 78 VE 80 ARASINDA OLMAYAN ÇALIŞANLAR
SELECT * FROM ISGUCU
WHERE DogumTarihi NOT BETWEEN '1978-01-01' AND '1980-01-01' 





-----------------------------------------------------*--------------------------------------------------------------------

GROUP BY

Genellikle select kısmında bir kolon ve  bir Aggregate fonksiyonu  var ise kullanılır. Aynı türden verilerin gruplanmasına yarar.

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)ORDER BY column_name(s); 

-- Kategorilere göre Ürünlerin Toplam Stok Düzeyi
SELECT U.KategoriID, SUM(U.HedefStokDuzeyi) FROM Urunler U
GROUP BY U.KategoriID


-----------------------------------------------------*--------------------------------------------------------------------

HAVING

The HAVING clause was added to SQL because the WHERE keyword could not be used with aggregate functions.

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)HAVING conditionORDER BY column_name(s);


SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;


-----------------------------------------------------*--------------------------------------------------------------------

INNER JOIN 

İki yada daha fazla tablonun ilişkili kolonu üzerinden kesişimi, ortak kümesini verir.
Üç tablo birleştirirken önce ilişkisel olan iki tablo birleştirilir, oluşan bu tablo ile de üçüncü tablo birleştirilir. Sonrasında bu tablo üzerinden Where GroupBy, Having ve OrderBy komutları ile filtreleme uygulanır.

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;

INNER JOIN table2
ON table1.column_name = table2.column_name;



-- Nancy adlı personelin 1997 yılından sonraki satış yaptığı Müşteri Listesi

SELECT P.Adi,S.SatisID,S.SatisTarihi,M.MusteriAdi FROM  Personeller P
INNER JOIN Satislar S ON P.PersonelID=S.PersonelID
INNER JOIN Musteriler M ON M.MusteriID= S.MusteriID
WHERE P.Adi='NANCY' AND YEAR(S.SatisTarihi)>=1997 


Alternatif olarak inner Joın yapısını kullanmdan tabloların kesişim noktasını aşağıdaki gibi alabiliriz.

SELECT P.Adi,P.SoyAdi, SUM(SD.BirimFiyati*SD.Miktar) Total FROM Personeller P
JOIN Satislar S ON S.PersonelID= P.PersonelID
JOIN [Satis Detaylari] SD ON SD.SatisID= S.SatisID
GROUP BY P.Adi,P.SoyAdi


SELECT P.Adi,SUM(SD.BirimFiyati*SD.Miktar) FROM Personeller P, [Satis Detaylari] SD, Satislar S 

WHERE P.PersonelID=S.PersonelID AND SD.SatisID=S.SatisID
GROUP BY P.Adi

 

-----------------------------------------------------*--------------------------------------------------------------------

LEFT JOIN  

İfadenin solunda kalan tablonun tüm elemanlarını getirir ve ifadenin sağındaki tablodan da eşleşenleri getirirken, eşleşmeyen satırlarda ise 'null' döndürür.

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;


-----------------------------------------------------*--------------------------------------------------------------------

RIGHT JOIN  

İfadenin sağında kalan tablonun tüm elemanlarını getirir ve ifadenin solundaki tablodan da eşleşenleri getirirken , eşleşmeyen satırlarda ise 'null' döndürür.

SELECT column_name(s)
FROM table1

RIGHT JOIN table2
ON table1.column_name = table2.column_name;



-----------------------------------------------------*--------------------------------------------------------------------

UNION 

UNION operator  bir yada daha fazla Select sorgusunun sonuçlarını alt alta  getirmek için kullanılır.
Union sadece tekrar etmeyen değerleri döndürür.
Joınler tabloları yanyan UNIONLAR alt alta getirir.
  • Her bir select tablosunun KOLON sayıları aynı olmalı
  • Kolonlar aynı data tipine sahip olmalıdır.
  • Select ifadelerindeki kolonların sıralaması aynı olmalıdır.
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2



UNION ALL ise tekrarlayan kayıtlarıda döndürür.

SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2


-----------------------------------------------------*--------------------------------------------------------------------

EXISTS

EXIST, bir sorgudan sonucun dönüp dönmediğini belirten bir sql cümleciğidir. "EXIST" kullanımı "IN" kullanımı ile aynı sonucu verir. Ancak "EXIST" kullanımı performans açısından çok hızlıdır. EXIST cümleciğinin geri dönüş tipi True veya False şeklindedir. İçerisine aldığı subquery'den herhangi bir sonuç geriye dönüyorsa TRUE hiç bir kayıt geri dönüşü yoksa False döndürür. Yani karşılaştırma yaparken True sonucunu aldığı anda döngüden çıkar. IN ise, ana sorgudan gelen her kaydı kontrol etmek için IN içerisinde bulunan alt sorgudaki tüm kayıtları kontrol eder.

SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition); 


SELECT * FROM Tedarikciler T
WHERE EXISTS( SELECT * FROM Urunler U WHERE T.TedarikciID=U.TedarikciID AND BirimFiyati<20)


-----------------------------------------------------*--------------------------------------------------------------------

ANY

ANY ve ALL operatörleri genellikle WHERE yada HAVING ile kullanılırlar.
ANY operatörü herhangi bir SubQuery değeri şart ile uyumlu ise true döner
ALL operatörü eğer tüm SubQuery değerleri şart ile uyumlu ise true döner

SELECT column_name(s)
FROM table_name
WHERE column_name operator ANY / ALL
(SELECT column_name FROM table_name WHERE condition);  



SELECT U.UrunAdi
FROM Urunler U
WHERE U.UrunID = ANY (SELECT SD.UrunID  FROM [Satis Detaylari] SD WHERE SD.Miktar = 10);

-----------------------------------------------------*--------------------------------------------------------------------

SELECT INTO

Select Into ile bir tabloyu yeni bir tabloya tüyle aktarabiliriz..
Fakat bu yöntem ile aktarılan verilerde bir Primary Key kolonu yoksa , ayrıca bir Primary key oluşturulmaz

SELECT *
INTO newtable
FROM oldtableWHERE condition


SELECT * INTO CustomersBackUpTable
FROM Customers 


Yada sadece belirli alanları aktarabilriz...


SELECT C.Id, C.Name, C.Surname INTO CustomersBackUpTable
FROM Customers  C


Birden fazla tablodan dönen sonuçları aktarabiliriz.

SELECT Customers.CustomerName, Orders.OrderID
INTO CustomersOrderBackup2017
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;  



-----------------------------------------------------*--------------------------------------------------------------------

CASE WHEN THEN END

 Kolon çekilirken belirlenen filtre yada şarta göre kolon düzenlenir.


CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    WHEN conditionN THEN resultN
    ELSE result
END



SELECT P.Adi,P.SoyAdi,
CASE
WHEN P.UnvanEki= 'Mr.' THEN 'Bay'
WHEN P.UnvanEki= 'Mrs.' OR P.UnvanEki= 'Ms.' THEN 'Bayan'
ELSE P.UnvanEki
END AS Unvan
FROM Personeller P


-----------------------------------------------------*--------------------------------------------------------------------

WITH

Karmaşık sorguları çekerken with komutu ile sorguyu bir değişkene atayıp sorgudan gelen ve lazım olan kolonları tanımlamak süreti ile yeni bir tablo gibi kullanmaya yarar.

(?) Bu özelliğin çalışması için The Importance of Database Compatibility Level in SQL Server set to 90 olması gerek 2017 'de çalışmıyor.


-----------------------------------------------------*--------------------------------------------------------------------

IF
Eğer sorguda aranan true dönerse etkilenen row'lar olacağı için  etkilenen row sayısını kontrol edip IF döngülerini buna göre kurgulayabiliriz.


-- TABLODA HABİL GUR İSİMLİ BİR KAYIT VAR MI KONTROL ET . YOK İSE VT'NA KAYDET..

DECLARE @ISIM nvarchar(max) = 'HABIL'
DECLARE @SOYISIM nvarchar(max) = 'GUR'

SELECT P.Adi FROM PERSONELLER P WHERE P.Adi=@ISIM AND P.SoyAdi=@SOYISIM
IF(@@ROWCOUNT>0)  *(etkilenen satır var mı bak)
    PRINT 'VAR'
ELSE
    BEGIN
        PRINT 'YOK'
        INSERT Personeller (Adi,SoyAdi) VALUES(@ISIM,@SOYISIM)
    END

















MVC LOADING TOO SLOW ISSUE