Skip to content

Instantly share code, notes, and snippets.

@NaCI
Created August 24, 2020 06:24
Show Gist options
  • Save NaCI/e1c658c8127d17e0a0b00decb75f95a8 to your computer and use it in GitHub Desktop.
Save NaCI/e1c658c8127d17e0a0b00decb75f95a8 to your computer and use it in GitHub Desktop.
MsSql Notlar
NOTLAR
Data Manipülasyon Komutları (Select, Insert, Update, Delete, ...)
Veritabanı Manipülasyon Komutları (Create, Alter, Drop, ...)
SELECT
Use VeritabanıAdı
Select sütun1, [sütun adı 2], sütun3 From tablo1
INSERT
Insert Into TabloAdi (sütun1, sütun2) Values (value1, value2)
Tarih için (1990-12-21) ya da (19901221)
UPDATE
Update TabloAdi SET Column1=Value1, Column2=Value2… Where <Conditions>
NOT : DATEDIFF(YEAR, ‘1989-10-10’, GETDATE()) // verilen tarihin bugün ile yıl farkını alır
YEAR,MONTH,DAY,HOUR,MINUTE
DELETE
Delete From TabloAdi Where<Conditions>
TRUNCATE
Tabloyu ilk haline çevirir (delete’ten farkı id değerleri (auto increment alan) de sıfırlanır)
Truncate Table TabloAdi
WHERE
Select * From TabloAdi Where City=‘İSTANBUL’
Şartlar
=, <> (eşit değildir), >, <, >=, <=,
BETWEEN (Age Between 20 And 30),
LIKE (Name Like ‘%Ali%'),
IN (City IN (‘Istanbul’, ‘Bursa’, ‘Ankara')),
NOT LIKE,
NOT IN
Select * From TabloAdi WHERE NOT City=‘İzmir’ (İzmir olmayan şehirleri getirir)
NOT : (- - yorum satırı yapmak için kullanılır - iki tire ardarda)
DISTINCT
Tekrar eden satırları tekilleştirir
Select Distinct kolon1, kolon2 From TabloAdi Where<Conditions>
ORDER BY
Select kolon1, Kolon2 From TabloAdi Where<Conditions> ORDER BY Kolon1 Asc, Kolon2 DESC
Alternatif kullanım : ORDER BY 1 -> ilk kolonu sıralar
TOP KOMUTU
Select TOP N Kolon1, Kolon2 From TabloAdi Where<Conditions>
Select TOP 100
Select TOP 50 PERCENT -> %50yi getirir
AGGREGATE FUNCTIONS
(SUM, MIN, MAX, AVG, COUNT)
SELECT COUNT(*), MIN(AMOUNT), SUM(AMOUNT), AVG(AMOUNT) FROM (TabloAdi)
GROUP BY
SELECT Kolon1, Kolon2,
SUM(PRICE),COUNT(ID)
FROM TabloAdi
GROUP BY Kolon1, Kolon2
Aggregate function olan bir sorguda Select sonrası sütun çağrılmak istenirse GROUP BY kullanılmak zorundadır. Yoksa sorgu hata verir
NOT: ALIAS kullanımı = MIN(TOTALPRICE) AS MINPRICE gibi (AS olmadan direk isim yazarak da kullanılabilir)
NOT : CONVERT(DATE, MyDateTimeData) AS CONVERTEDDATE
ilk parametre DATE, TIME, DATETIME olabilir - tarih için
Select Convert(DATE, MyDateTime) as Date2, *
başta date2 gelir ardından diğer sütunlar gelir
NOT : DATEPART(MONTH, ‘2019-08-02’) -> bu komut ay numarasını döndürür
NOT : Group By kullanımında virgüllü kullanımda sıra önemli. Daha önce yazılan değer ilk gruplanır sonra diğerleri gruplanır
SELECT City, COUNT(DISTINCT CustomerName) AS UniqueCustomerName, COUNT(*) ItemCount FROM Sales Where MonthName = ’01.Ocak’ GROUP BY CITY ORDER BY CITY
HAVING KULLANIMI
Condition olarak aggregate function kullanmamız gerektiğinde HAVING kullanılır. Where içinde aggregate function kullanılırsa hata döner
SELECT City, SUM(TotalPrice)
FROM TabloAdi
GROUP BY City
HAVING SUM(TotalPrice) > 40000
AND ile birleştirilebilir
VERİ TİPLERİ
NOT : Tabloda kolon isimleri ve veri tipleriniz belirleme işine normalizasyon denir
BigInt -> -+2^63
Int -> -+2^31 (2 küsür milyar)
SmallInt -> 2^15 (32,767)
TinyInt -> 0 - 255
Bit -> 0 - 1
Decimal -> -+10^38 (Kullanımı decimal(18,2) virgülden sonrası) toplam 18 digit olabilir, ondalıkla beraber
Money -> -+ 922 trilyon (Virgülden sonra 4 digit koyar) toplam 18 digit decimal(18,4) gibi
SmallMoney -> -+ 214,748.3647
Float -> -2.23308 2.23308 (esnek)
Real -> Salla
char(10) -> her karakter 1 byte (0-255) (belirlenen limite sonuna kadar tamamlar)
nchar(50) -> her karakter 2 byte (belirlenen limite sonuna kadar tamamlar boşuna yer kaplar)
ntext -> (sonuna kadar tamamlamaz, metin boyutu kadar alır)
nvarchar(50) -> (sonuna kadar tamamlamaz, metin boyutu kadar alır)
nvarchar(MAX) -> (sonuna kadar tamamlamaz, metin boyutu kadar alır)
text -> (sonuna kadar tamamlamaz, metin boyutu kadar alır)
varchar(50) -> (sonuna kadar tamamlamaz, metin boyutu kadar alır)
varchar(MAX) -> (sonuna kadar tamamlamaz, metin boyutu kadar alır)
sabit uzunlukta alanlar için char daha iyi çünkü arama daha performanslı (tc kimlik numarası gibi)
diğer durumlarda varchar olmalı
nvarchar -> n unicode’un kısaltması (çince vs. ifadeler vs bu sayede görülebilir) diğer n’ler için de aynı
(max) lar ise 2 gb’a kadar veri tutabilir. Diğer tiplerde n için max 4000 karakter n olmayanlar için 8000 karakter olur
Text ve ntext eskiden kullanılıyormuş attık kullanılmıyor
date -> 0001-01-01 <-> 9999-12-31 | 4 byte
Smalldate -> 1900-01-01 <-> 2079-06-06 | 3 byte
datetime -> 1753-01-01 00:00:00.000 <-> 9999-12-31 23:59:59.997 8 Byte
datetime2 -> 0001-01-01 00:00:00.000 <-> 9999-12-31 23:59:59.999
Time -> 00:00:00.000 <-> 23:59:59.999 | 5 Byte
Varbinary(MAX) -> veritabanında dosya saklamak için kullanılıyor
uniqueidentifier -> dünyada tek (guid)
ForeignKey
Delete Rule : Cascade : silme yaparken ilgili tablolardan da satırı siler
Set Null : silme yapar ilgili tablolardaki alanı null’a çeker
Set Default : Set Null aynı
Create Table
CREATE TABLE TabloAdi (Id INT IDENTITY(1,1), CustomerName VARCHAR(60))
IDENTITY(1,1) -> 1’den başlar 1’er 1’er artır
DROP TABLE TabloAdi
İki Tablodan Veri Çekme
SELECT Users.*, Address.AddressText FROM Users, Address WHERE Users.Id=Address.Id
Alias Kullanımı
SELECT U.*, A.AddressText FROM Users U, Address A WHERE U.Id=A.Id
İkiden Fazla Tablo Kullanımı
İkinin kullanımı ile aynı
NOT : GROUP BY, aggregation function olmaksızın da kullanılabilir
JOIN
İki veya daha fazlayı tabloyu birleştirmek için artık JOIN komutu kullanılır
SELECT U.*, A.AddressText, C.Country FROM Users U
JOIN Address A ON A.UserId=U.Id
JOIN Countries C ON C.Id=A.CountryId
NOT : Sade JOIN kullanımı INNER JOIN’e tekabül eder
INNER JOIN
2 kümenin kesişimini verir. Her iki tabloda da var olan sonuçları döner sadece
LEFT JOIN
İlk tablodaki tüm değerler döner, kesişimdeki datalar gelir
RIGHT JOIN
İkinci tablodaki tüm değerler döner, kesişimdeki datalar gelir
FULL JOIN
İki tablodan da tüm elemanları getirir (kesişim değil birleşim gibi)
SELECT U.*, A.AddressText FROM Users U
LEFT JOIN Address A ON A.UserId=U.Id
(Users tablosunun tamamı ve varsa address karşılıkları gelir)
NOT: / işareti SELECT altında kullanılabiliyor
SELECT SUM(TotalPrice)/SUM(TotalCount) AS Ortalama FROM TabloAdi
gibi
CASE-WHEN KULLANIMI
SELECT DATEPART(MONTH, DateTimeData) AY, SUM(SatisTutarData)
CASE
WHEN DATEPART(MONTH, DateTimeData)=1 THEN ‘Ocak’
WHEN DATEPART(MONTH, DateTimeData)=2 THEN ‘Şubat’
END AS AyAdi
FROM TabloAdi
GROUP BY DATEPART(MONTH, DateTimeData)
SUBQUERY
SELECT içinde SELECT çağırılır AS ile kolon isimlendirilir
Efektif değil mümkünse JOIN daha iyi
SELECT ITM.ITEMCODE AS URUNKODU,
(
SELECT TOP 1 DATEPART(MONTH, O.DATE_) AS AY
FROM ORDERDETAILS OD
INNER JOIN ORDERS O ON OD.ORDERID=O.ID
WHERE OD.ITEMID = ITM.ID
GROUP BY DATEPART(MONTH, O.DATE_)
ORDER BY SUM(AMOUNT) DESC
) AS ENCOKSATILANAY
FROM ITEMS ITM
ORDER BY ITM.ITEMNAME
NOT : Subquery Select altında olmak zorunda değil, Where altında da olabilir
SELECT * From TabloAdi
WHERE Id NOT IN
(SELECT ItemId FROM DigerTabloAdi)
SET STATISTICS IO ON
sorgunun performansını gösterir
STRING FONKSIYONLARI
SELECT ASCII(‘A’) -> 65 döner
SELECT CHAR(65) -> A döner
SELECT SUBSTRING(‘ALI VELI’, 1, 4) -> ‘ALI ‘
SELECT SUBSTRING(UserName_, LEN(UserName_), 1) -> UserName datasının son karakterini döndürür
SELECT CHARINDEX(‘A’, ‘HALILAL’) -> 2
SELECT CHARINDEX(‘A’, ‘HALILAL’, 3) -> 6 (3. satırdan itibaren arar)
SELECT CONCAT(‘ALI’, ‘VELI’) -> ALIVELI
SELECT CONCAT_WS(‘+’, ‘ALI’, ‘VELI’) -> ALI+VELI (ilk parametre seperatorü belirler)
SELECT FORMAT(GETDATE(), ‘d’, ‘en-us’) -> 10/18/2018 (Büyük D olsaydı tarihi text olarak verirdi - thursday, october 18, 2018 gibi)
SELECT LEFT(‘ALI VELI’, 3) -> ALI
SELECT RIGHT(‘ALI VELI’, 3) -> ELI
SELECT TRIM(‘ ALI VELI ‘) -> 'ALI VELI’ (LTRIM, RTRIM)
LOWER - UPPER - REVERSE
SELECT REPLICATE(‘A’, 10) -> AAAAAAAAAA
SELECT REPLACE(‘ALI VELI’, ‘ALI’, ‘ALI AHMET’) -> ALI AHMET VELI
NOT : DECLARE @ diyerek değişken tanımlanabilir
DECLARE @CUMLE AS VARCHAR(MAX)
SET @CUMLE = ‘Lorem Ipsum ….'
SELECT @CUMLE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment