21 Mart 2017 Salı

SQL Çalışma Zamanı

Yapacağımız sorgular için yarışma adında bir database oluşturuyoruz ve bu database il, Uye, Soruturu, Soru ve İstatistik tablolarından oluşuyor. Birincil ve ikincil anahtarlarımız doğru bir şekilde oluştursak sorgu sırasında hata alma şansımız azalır. Buna dikkat etmek gerekir.


Create Database Yarisma 
use Yarisma  

Create Table İl 
(
İlPNo int Primary Key,
İlAdi varchar(30),

)
Create Table Uye
(
UNo int Primary Key identity (1,1),
UAdi varchar(30)NOT NULL,
UASoyadi varchar(30)NOT NULL,
UBTrh datetime Null,
İlPNo int foreign key references İl(İlPNo),
USifre varchar(30)NOT NULL DEFAULT('123abc'),
GirSay int Default(0),
Sonpuan int
)
Create Table SoruTur
(
STNo int Primary Key identity (1,1),
StAdi varchar(30)NOT NULL,

)

Create Table Soru
(
SNo int Primary Key identity (1,1),
SBaslik varchar(30)NOT NULL,
C1 varchar(2),
C2 varchar(2),
C3 varchar(2),
C4 varchar(2),
C5 varchar(2),
STNo int foreign key references SoruTur(STNo),
SPuan int NOT NULL,
UNo int foreign key references Uye(UNo),

)
Create Table İstatistik
(
UNo int foreign key references Uye(UNo),
AldTrh datetime,
ToplamPuan int,

)
-------------------------------------------------------------------------------

Alter İfadesini Kullanmak


--Tabloya yeni bir sutun ekleme için kullanılır.

alter table Uye add UAdres varchar(30)

-- Tabloda bulunan bir sutunun değişken türünü değiştirir.

alter table uye alter column uadresi int


-- Tabloda buluna bir sutunu siler
alter table Uye drop column UAdres
-------------------------------------------------------------------------------

Drop İfadesini Kullanmak

--Nesne, tablo veya veri tabanını siler.
Drop Database Okul
Drop Table Öğrenci

Truncate Table ogrenci(tablonun tüm içeriğini siler.)
Delete Table ogrenci(istenilen kayıtları siler)
delete from Uye where UNo=10 gibi...
------------------------------------------------------------------------------

DML (Veri İşleme Dili)


1)SELECT İfadesi



 select * from Uye --> Uye tablosunu listeler.
 select UAdi,UASoyadi from Uye  --> Uye tablosunda UAdi,UASoyadi  sütunları listelenir.

a)WHERE ifadesi (koşul ifadesi)

select * from Uye where İlPNo<9  -->İlPNo'su  9 dan küçük olan Uyler listelenir.

b)AND,OR ifadesi

 select * from Uye where İlPNo<9 and USifre>=15    -->  İlPNo' su 9'dan küçük ve USifre 15'e eşit veya büyük olanlar listelenir.
 select * from Uye where İlPNo<9 or USifre>=15     -- herhangi bir koşul sağlanırsa listelenir

c) IN, NOT IN ifadesi

-- Fazla şartın bulundugu sorgularda kullanılarak or yapısından kurtulabiliriz.
select  uadi,usoyadi,ilpno from uye where ilpno IN(1,3,4) --> Burada sadece ilpno'su 1,3,4 olan uyelerin uadi,usoyadi,ilpno bilgileri listelenir.

 select * from İl where  İlPNo NOT IN(1,2,3,4) --> İlPNo 1,2,3,4 olmayan uyelerin tüm bilgileri listelenir.

d) LİKE ifadesi

-- Kayıt arama esnasında kullanılır.
select * from Uye where UAdi LIKE('____M')  -->    Beşinci harfi M olan üyeleri listeler
select * from Uye where UAdi LIKE('____a_')  -->   Beşinci harfi A olan uyeleri listeler.
select * from Uye where UAdi LIKE('%M')       -->    Son harfi m olan
select * from Uye where UAdi LIKE('M%')       -->    Baş Harfi M olan ueleri listeler
select * from Uye where UAdi LIKE('%M%')    -->    İçerisinden M harfi geçen uyeleri listeler
select * from Uye where UAdi LIKE('B____')    -->   Beş harfli Baş harfi B olan üyeleri listeler.
-------------------------------------------------------------------------------------------------------

2) INSERT İfadesi


-- Tablolara yeni veri girmek için kullanılır.


 insert into il values(20,'denizli') --> il tablosuna pilaka no su 20 olan denizli ilini  ekledik. Parantez içerisini tabloda kullanılan sutun kadar doldurabiliriz.
 insert into il values(11,'Bilecik')
Select * from il --> eklendiğini görmek için il tablosunu listeliyoruz.


--------------------------------------------------------------------------------------------

3)UPDATE ifadesi  


-- Tabloda bulunun kayıtları değiştirmek güncellemek için kullanılır.

 update  il set iladi='ankara' where ilpno=6 --> plakası 6 olan şehrin ismini ankara yapıYoruz. set terimiyle değiştirmek istedİğimiz sÜtun üzerindE işlem yapıyoruz.

------------------------------------------------------------------------------------------------------------


4)DELETE ifadesi

--Tablonun içerisindeki kayıtların tamamını veya belirli koşula uyanları siler.


delete from Soru where SNo=10  --> SNo' su 10 olan soruyu siler.
delet from Uye where UNO=5     --> UNO 'su 5 olan üyeyi siler.
------------------------------------------------------------------------------------------------------------


DCL (Veri Kontrol Dili)


1) GRANT ifadesi

--Kullanıcıya çeşitli izinler vermek için kullanılır.

 grant all on yarisma to user1                    -->  user1 kullanıcısına tüm izinleri verir.
 grant create table on yarisma to user2      -->  user2 kullanıcısına tablo oluşturma izni verir.

2)DENY ifadesi

-- Kulanıcının veritabanı ve veritabanındaki nesleler üzeindeki çeşitli işlemleri yapmasını engellemek için kullanılır.
 deny all on yarisma to user1 -->  user1 kullanıcısının tüm izinlerini kapatır.
 deny create table on yarisma to user1 -->  user1 kullanıcısından tablo oluşturma yetkisini elinden alırız.
 deny insert, delete, update,select on yarisma to user1 --> insert, delete, update ve select işlemlerini user1 kullanamaz.

 3)REVOKE ifadesi


-- Engellenen tüm ifadeleri kaldırır.
 revoke all from public
 revoke select on yarisma from public -- secim için engellenen yetkileri kaldırır.


-----------------------------------------------------------------------------------------------------------------

TEK TABLO İÇİNDE SORGULAMALAR


1) DISTINCT 

--Tekrarlanan satır ve sütünları engeller

Select distinct UAdi From Uye

SORGU SONUCUNU SIRALAMA

--2 ORDER BY>>>> tabloda kayıtların sıralanmasını sağlar.


Select UNo From Uye order by UNo asc --> asc üyeleri UNo 'suna göre küçükten büyüğe sıralar.

Select UNo From Uye order by UNo desc --> desc üyeleri UNo 'suna göre büyükten küçüğe sıralar.


BETWEEN, AND yapısı

--Birden fazla şartı sıralar

Select *from Uye where UAdi LIKE 'B%' or UNo between 5 and 7 -- Baş harfi Bile başlayan veya UNo 'su 5 ile 7 arasında olan üyeleri listeleriz.

AS ifadesi 

-- Sütüna takma isim vermek için veya ismini değiştirmek için

Select UAdi AS "üyeadı" from Uye --> UAdi  sütununun adını as ifadesiyle üyeadi olarak değiştirdik.


----- Sütünlar üzerinde aritmetiksel işlemler--------


Select SPuan, Spuan+10 as "name" from Soru --> Burada soru tablosunun SPuan sütununu ve  SPuan 'a 10 ekleyerek as ifadesiyle sütunun ismini name yaparak listeledik.

--------------Sütunların birleştirilmesi--------------


Select UNo, (UAdi  +' '+ UASoyadi) as "adsoyad" from Uye -->UNo ile birlikte adsoyad İsimli yeni oluşturulan sütunun altında UAdi ve UASoyadi birleştirerek  Uye tablosunun istenilen sütunları listelenmiştir.

Koşula bağlı sorgulamalarda where ve order by kullanılacaksa önce where yazılmalı


Select *from Uye where UNo>=3 order by UNo --> UNo' su 3'e eşit ve büyük olanları küçükten büyüğe sıralar.

------------FONKSİYONLAR-----------


1) SUBSTRİNG()  Fonksiyonu

-- Veri kümesi içindeki bilgilerin başlangıç olarak belirtilen pozisyondan başlayarak belirtilen karakter sayısı kadar alınmasını sağlar.

select uno, substring(uadi,2,4) as "yeniad" from uye --> yeniad sütunu altında uadi yani üye adının 2. harfinden 4. harfine kadar olan karakterleri listeler.



2 )LOWER(), UPPER() Fonksiyonları 

 Lower verilerin değeri küçük harfe, upper ise büyük harfe çevirir.

Select UPPER(İlAdi) from İl --> Listelenen il adlarının bütün karakterleri Büyük harf olur.
Select lower(İlAdi) from İl -->Listelenen il adlarının bütün karakterleri küçük harf olur.

3) TRIM() , RTRIM() , LTRIM() Fonksiyonları

-- Boşlukları kaldırır.

select ltrim(uadi) as uadi, usoyadi from uye --> uye adının solundaki yani başındaki boşlukları siler.
select rtrim(uadi) as uadi, usoyadi from uye --> uye adının sağındaki yani sonundaki boşlukları siler.


4 LEN() , LENGTH() Fonksiyonları

-- Karakter sayısını bulma
select uadi,len(uadi) as "karakter sayısı" from uye --> Üye adlarının karakter sayılarını "karakter sayısı" sütunu altında listeler.


5) REPLACE() Fonksiyonları

--Yer değiştirmek için kullanılır.

select uadi,usoyadi, replace(uadi,'sezer','osman') as "lakap" from uye --> sezer ismi osman ismiyle değitirilecek.


6) REVERSE() Fonksiyonları

--Tersten yazdırma işlemleri için kullanılır.
select uadi,reverse(upper (uadi)) from uye --> uadi' nın karakterlerini büyük harfe çevirip tersten yazdırdık.

7) ABS()  Fonksiyonu

Mutlak değer alma işlemi
Select ABS(-1.25) as "mutlak_değer_karşılığı" --> "mutlak_değer_karşılığı" isimli sütunun altında 1.25 yani sayının mutlak değeri verilecektir.


8) FLOOR(), CEILING(),ROUND() Fonksiyonları

-- Aşağı-Yukarı ve en yakın değere yuvarlama işlemlerini yaparlar.
Select FLOOR(1.256) --> Aşağıya yuvarlar. Yani yeni değer 1 olur.
Select CEILING(1.256)-->Yukarıya yuvarlar. Yani yeni değer  2 olur.
Select round(1.26,1) -->  Verilen sayısal ifadeyi yuvarlamak için kullanılır. Yuvarlama işlemi 5 ten küçük değerler için aşağı, 5 ve 5 ten büyük değerler için yukarı yönlü yuvarlama olur. Sonuç olarak yeni değer 1.30 olur.

9) POWER() Fonksiyonu

--Üst alma işlemlerini yapmak için kullanılır.
select power(2,3) --> yani 2 üstü 3 = 8 sonucunu döndürür.

10) SQRT() Fonksiyonu

Karekök almak için kullanılan fonksiyondur.

Select sqrt(4) --> 2 sonucunu döndürür.

11) SUM() Fonksiyonu

Toplam bulma fonksiyonu olarak kullanılır.

select sum(Spuan) from soru -- Soru tablosundaki listelenen Spuan'ların toplamını  döndürür.


12) AVG() Fonksiyonu

Ortalama değer hesaplama fonksiyonu olarak kullanılır.

Select round(AVG(Spuan),1) from Soru -->  ortalaması alınan Spuan'ların yuvarlama işleminden sonra listele.

13) Max(),Min() Fonksiyonları

Select MAX(Spuan) from Soru -->En yüksek Spuan listeler.
Select MIN(Spuan) from Soru -->En düşük Spuan'ı listeler.


14) Count() Fonksiyonu

-- Satır sayısını bulur.
Select count(Spuan) from soru --> Alt alta kaç satır olduğunu dönderir.

15) GETDATE 

--Güncel saat bilgisini verir.

select GETDATE()
select DATEPART(YEAR,GETDATE())
select DATEPART(DAY,GETDATE())
select DATEPART(HOUR,GETDATE())
select DATEPART(MINUTE,GETDATE())


1)  GROUP BY

GRUPLANDIRMA İŞLEMİNDE KULLANILAN FONKSİYONLAR


a) AVG() 

--Ortalamaya göre gruplandırma.

select  UNo,AVG(SPuan) as ort from Soru where UNo>=3 Group By UNo order by UNo desc

b) Count() 

Grupların içerdikleri satır sayısını verir.

select  UNo,Count(SPuan) as satirsayisi from Soru Group By UNo

select  UAdi,Count(UAdi) as satirsayisi from Uye Group By UAdi

c) Max() 

Gruptaki sütünün maxını bulur.

select  UNo ,MAX(SPuan) as maxı from Soru Group By UNo

d) Min()

Gruptaki sütünün minimumunu bulur.

select  UNo ,MIN(SPuan) as mini from Soru Group By UNo


---------Birden fazla sütuna göre gruplandırma---------

select  SBaslik,UNo ,MAX(SPuan) as maxı,MIN(SPuan) as mini from Soru Group By UNo,SBaslik

Gruplandırma koşul ifadeleri (Having )

HAVING Group By dan sonra order by dan önce kullanılır.

select  SBaslik ,(max(SPuan) -min(SPuan)) as Fark from Soru Group By SBaslik Having (max(SPuan) -MIN(SPuan))>5



------------------------Birden Fazla Tablo Üzerinde Sorgulama--------------------

A) Tablolara Takma İsim Kullanma

select distinct uyem.UAdi,sorum.SBaslik from uye uyem,soru sorum where uyem.UNo=sorum.UNo


select distinct  Uye.UNo,Soru.SNo,Soru.C1 from Uye ,Soru  where Uye.Uno=Soru.UNo and soru.C1='a'  and Uye.UNo in (select Uno from Soru)


Trigger Nedir?

Veritabanı tablolarında bazı olaylar meydana geldiğinde çalışan küçük kod parçalarına trigger denir. Bu olaylardan daha önce DML  konusunda bahsetmiştik. Listeleyecek olursak bu olaylar aşağıdakilerdir:

  • Insert 
  • Select
  • Update
Trigger oluşturmak:

CREATE TRIGGER trigger_adi
 ON tablo_adi
 AFTER veya INSTEAD OF (INSERT veya UPDATE veya DELETE)
 AS
 Sql ifadeler

Trigger enable/disable yapmak:

disable trigger trigger_adı On tablo_adı
enable trigger trigger_adı On tablo_adı


Delete Trigger

Burada kullanicilar tablosundaki silinen verilerimizi yeni bir tabloya yani silinenkullanicilar tablosuna trigger yardımıyla ekledik.

use deneme
create trigger tr_silinenkullanici on kullanicilar
After delete
As
Begin
Declare @ID int 
Declare @kadi nvarchar(50)
Declare @sifre nvarchar(50)
Declare @adi varchar(50)
Declare @soyad nvarchar(50)
Declare @yetki nvarchar(50)
Select @ID=kId from deleted
Select @kadi=k_adi from deleted
Select @sifre=sifre from deleted
Select @Adi=kadi from deleted
Select @soyad=ksoyadi from deleted
Select @yetki=yetki from deleted
Insert into silinenkullanicilar values(@ID,@kadi,@sifre,@adi,@soyad,@yetki)
End




Insert Trigger 


Tablo üzerindeki kayıt ya da kayıtlarda güncelleme olduğunda devreye girecek olan triggerdir. INSERT ve DELETE triggerden biraz farklıdır. Farkı ise UPDATE trigger devreye girdiğinde Inserted sahte tablosu asıl tablodaki kayıtlardan, düzenlenmiş kayıtların kopyasını, Deleted sahte tablosu ise kayıtların düzenleme işleminden önceki hallerini tutar.

satisyap  tablosuna veri eklediğimiz zaman yani insert ile ürün eklendiği zaman 
devreye girecek triggerımız stok tablosundaki verilerimizin sayısını azlatacaktır.


create trigger tr_stokazaltir on satisyap 
after insert
as 
begin
declare @urunId int 
declare @satinaladet int 
declare @satiurun int 
select @urunId=satisurun, @satinaladet=satisadet from inserted
update urunler set adet=adet-@satinaladet
where urunId=@urunId
end
















Hiç yorum yok:

Yorum Gönder