Untitled

 avatar
unknown
plain_text
3 years ago
9.3 kB
0
Indexable
use E_Commerce
select Colors.ColorName,Sizes.SizeName from Colors cross join Sizes

select convert(varchar,ct.ContractDate,103),ct.Subject,ct.Details, u.Fullname 
as 'imzalayan',u2.Fullname as 'Onaylayan'  from Contracts ct
  join Users u on ct.imzalayan= u.ID 
join Users u2 on u2.ID= ct.onaylayan

use Northwind
select e.LastName, e.FirstName,e.EmployeeID, e.ReportsTo,er.FirstName 
from Employees e left join Employees er on e.ReportsTo=er.EmployeeID
 

 select LastName, FirstName, convert(varchar,BirthDate,103) as BirthDate,
 case when datepart(year,Birthdate)<1950 then 'Silent Generation'
	  when datepart(year,Birthdate)>=1950 and datepart(year,Birthdate)<1970 then 'Baby Boomers'
	  when datepart(year,Birthdate)>=1970 and datepart(year,Birthdate)<1980 then 'X Gen'
	  when datepart(year,Birthdate)>=1980 and datepart(year,Birthdate)<1995 then 'Y Gen'
	  when datepart(year,Birthdate)>=1995  then 'Z Gen'
	 
end as Generation
 from Employees order by Generation
 --insert komutu tabloya satır ekler
 /*insert into tabloadı (alan1,alan2,alan3,...,alanx)
			values(değer1,değer2,değer3,...,değerx)
			
			insert ifadelerinde into kelimesi opsiyoneldir
			alan adlarının tamamı yazılmak zorunda değildir ama zorunlu alanlar
			yazılmalıdır
			Autoidentity özelliği olan alanlara değer yazılmaz
			alan sayısı ile gönderilen değerlerin sayısı eşit olmalı ve değerler aynı sıra
			ie eşleşmelidir

			


			
			*/
INSERT INTO Categories (CategoryName)
VALUES ('Akşam')

/*
UPDATE komutu, satır veya satırlardaki değerleri güncelleme işlemi yapar
UPDATE tabloadı SET alan1=deger1, alan2=deger2.....
WHERE koşul
UPDATE ifadelerinde where kısmı opsiyoneldir, olmasa da çalışabilir ama dikkat edilmelidir
alan adı seçiminde özgürüz, istediğimiz kadar alanı değer belirtmek suretiyle değiştirebiliriz.
autoidentity alanların değerleri değiştirilemez
*/
UPDATE Categories SET CategoryName='Akşamcılar'
WHERE CategoryID=18

--DELETE
DELETE Categories
WHERE CategoryID=18

DBCC CHECKIDENT('Categories',RESEED,8)-- İÇİNDE VERİ OLAN TABLODA EN YÜKSEK ID VERİLİR,
--1FAZLASINDAN DEVAM EDER
DBCC CHECKIDENT('Categories',RESEED,0)-- İÇİNDE VERİ OLAN TABLODA 0 VERİLİR,
--1'den DEVAM EDER
SELECT IDENT_CURRENT('Categories')

---Alter komutu nesnelerde(tabloi view, stored proc., function, role, user, login, database) değişiklik yapar
USE BigKahunaBurger
ALTER TABLE Customers
ADD Notes varchar(100)

ALTER TABLE	Customers
DROP COLUMN Notes

ALTER TABLE Customers
ALTER COLUMN Notes varchar(1200) --veri türünü değiştirir

DROP TABLE Customers --bağlantılı(referanslı) tablolar silinemez

/*
GRANT
REVOKE
DENY*/

GRANT INSERT ON Customers TO bekir;

REVOKE SELECT ON Customers TO bekir;

DENY SELECT ON Customers TO bekir;

grant select on Orders to AA

grant select on Customers to StandartCalisan
grant select on Foods to StandartCalisan
/*
sql'e yeni bir kişi gelecek adı sezen
bu kişi Northwind veritabanında sadece categories ve employees tablolarında select işlemi yapabilecek

ek olarak bi grup(şarkıcılar) kullanıcıya tüm tablolar için insert ve update yetkisi verilecek
bi kullanıcı daha tanımlanacak adı nilüfer, kendi yetkilerini direkt şarkıcıar olarak alacak ama suppliers tablosunda işlem yapamayacak
bi de kayahan olacak bu kişi tüm yetkilerini şarkıcılardan alacak ve ek olarak tüm tablolara select yapabilecek
*/
grant select on Categories to Sezen 
grant select on Employees to Sezen 
deny delete on Suppliers to Nilüfer
deny update on Suppliers to Nilüfer
deny select on Suppliers to Nilüfer
revoke select on CustomerCustomerDemo to sarkicilar
revoke select on CustomerDemographics to sarkicilar
revoke select on Customers to sarkicilar
revoke select on Employees to sarkicilar
revoke select on EmployeeTerritories to sarkicilar
revoke select on [Order Details] to sarkicilar
revoke select on Orders to sarkicilar
revoke select on Products to sarkicilar
revoke select on Region to sarkicilar
revoke select on Shippers to sarkicilar
revoke select on Suppliers to sarkicilar
revoke select on Territories to sarkicilar

grant select on CustomerCustomerDemo to Kayahan
grant select on CustomerDemographics to Kayahan
grant select on Customers to Kayahan
grant select on Employees to Kayahan
grant select on EmployeeTerritories to Kayahan
grant select on [Order Details] to Kayahan
grant select on Orders to Kayahan
grant select on Products to Kayahan
grant select on Region to Kayahan
grant select on Shippers to Kayahan
grant select on Suppliers to Kayahan
grant select on Territories to Kayahan

-- Login->user 
				-->Role

deny select on Categories to Alex
grant update on Employees to Alex
--tüm kullanıcılar başlangıçta 0 yetkiye sahiptir, hiçbir işlem yapamazlar
-- kullanıcılara direkt kendilerine veya roller üzerinden roller verilebilir
--örneğin db_datawriter rolüne atanan bir kullanıcı tüm tablolarda insert, update,delete
--yapabilir
--özel olarak bir kullanıcıda rodle verilen yetkiyi ezen yetki verilebilir, örneğin ek bir
--select hakkı tanınabilir
--deny işlemi diğer bütün işlemleri ezer ve yetkiyi tamamen kaldırır, yok eder


create view vw_ProductWCategories 
as
select ProductName, isnull(CategoryName,'-') as CategoryName
from Products as p
left join Categories c on c.CategoryID=p.CategoryID

alter view vw_ProductWCategories 
as
select ProductName, isnull(CategoryName,'-') as CategoryName, p.UnitPrice
from Products as p
left join Categories c on c.CategoryID=p.CategoryID

drop view [vw_ProductWCategories]

select * from vw_ProductWCategories


grant select on vw_ProductWCategories to student
--scalar fonksiyon bir şey hesaplayıp değer döndürür


/*create*/alter function dbo.CalculatedRisk(@ProductID int)
RETURNS varchar(50)
as
begin
	declare @ToplamSatis AS int, @ToplamStok AS int, @myReturn AS varchar(50)
	
	select @ToplamStok=UnitsInStock from Products where ProductID=@ProductID
	select @ToplamSatis=sum(Quantity) from [Order Details] where ProductID= @ProductID

	if @ToplamSatis/20 > @ToplamStok
		begin
			SET @myReturn = 'Risksiz'
		end
	else
		begin
			set @myReturn = 'Riskli'
		end
	return @myReturn
end

select ProductID,ProductName, dbo.CalculatedRisk(ProductID) as 'Risk Durumu' from Products order by ProductID





SELECT SUM(Quantity)
FROM [Order Details]
WHERE ProductID=5

SELECT p.ProductID, p.ProductName, SUM(od.Quantity)
FROM Products p LEFT JOIN [Order Details] od ON p.ProductID=od.ProductID
GROUP BY p.ProductName,p.ProductID

CREATE FUNCTION dbo.SumSales(@ProductID int)
RETURNS int
AS
BEGIN
	DECLARE @toplam AS int
	SELECT @toplam=SUM(Quantity)
	FROM [Order Details]
	WHERE ProductID=@ProductID
	RETURN @toplam
END
 select ProductName, dbo.SumSales(ProductID) from Products

 --rezervasyon
 /* oda ve masalar -> kaynak tipleri (kat bilgisi/ oda mı masa mı/no )
 kullanıcılar (çalışanlar/ üyeler)
 rezervasyon yap/ iptal et*/
 select convert(varchar, r.StartDateofStay,103) as 'StartDateofDay', 
convert(varchar, r.StartDateofStay,108) as 'StartTimeofStay',s.Status,m.MemberFullName,a.AreaNo 
from Reservations r join Areas a on r.AreaId=a.ID 
join Members m on m.ID=r.MemberId 
join Statuses s on s.ID=r.StatusId

set dateformat dmy
select a.AreaNo, s.Status , f.KatNo, a.AreaNo
from  Areas a join Reservations r on r.AreaId=a.ID 
join Members m on m.ID=r.MemberId 
join Statuses s on s.ID=r.StatusId
join Floors f on f.ID=a.FloorId
where  a.ID not in (select ID
from Reservations
where  convert(varchar, StartDateofStay,103) = '11/12/2021' and StatusId=1)


select count(a.AreaNo) as sayı, f.KatNo, at.AreaTypeName
from Areas a join Floors f on a.FloorId= f.ID
join AreaTypes at on at.ID=a.AreaTypeId
where a.ID
not in (
select ID
from Reservations
where  convert(varchar, StartDateofStay,103) = '11/12/2021')
group by AreaTypeName, f.KatNo

select   top 1 count (StatusId) as adet, m.MemberFullName from Reservations r 
join Members m on r.MemberId= m.ID

group by m.MemberFullName
order by count(StatusId)Desc


-------------------------!!!!!!!!!!!!!!!!!!!!!!!!!!--------------------------
select MemberFullName, 0 as Adet
from Members
where ID not in (select MemberId from Reservations)

union
select m.MemberFullName, count(*) as Adet
from Reservations r
join Members m on m.ID= r.MemberId 
group by m.MemberFullName
Having Count(*)<2

-----------------------!!!!!!!!!!!!!!!!!!!!!!!!!!!!--------------------------
/*
use Northwind
select t.CompanyName, t.CompanyType
from (select CompanyName, 'Shipper' as CompanyType from Shippers
union
select CompanyName, 'Supplier' as CompanyType from Suppliers) as t
order by t.CompanyType, t.CompanyName

*/

select MemberId,StartDateofStay,EndDateofStay,
DATEDIFF(d,StartDateofStay,EndDateofStay) from Reservations 
where DATEDIFF(hour,StartDateofStay,EndDateofStay)>20


select * from Reservations

select MemberId,sum(DATEDIFF(hour,StartDateofStay,EndDateofStay)) as 'toplam saat' 
from Reservations 
group by MemberId
having sum(DATEDIFF(hour,StartDateofStay,EndDateofStay))>20