Created
August 24, 2020 06:24
-
-
Save NaCI/e1c658c8127d17e0a0b00decb75f95a8 to your computer and use it in GitHub Desktop.
MsSql Notlar
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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