SQL files in https://1drv.ms/f/c/f6f972875b3c55b3/EphA9J7gNcZArhE3_saL9CsB9e8rv8hblsz2L-z8YgG69g
create database GelisSin
use GelisSin
create table Turler (TurID int primary key, TurAdi nvarchar(50))
create table Filmler (FilmID int primary key, FilmAdi nvarchar(100) not null, Sure time, Tur int foreign key(Tur) references Turler(TurID))
create table Seanslar (SalonNo int, Tarih date, Saat time, FilmID int foreign key (FilmID) references Filmler(FilmID), Primary Key(SalonNo, Tarih, Saat))-- Birden fazla Primary Key belirtildi 3 s?t?nda ayn? anda ayn? kaydedilememsi i?in.
create table Biletler (ID int primary key, Tarih date, Saat time, Salon int, Film int foreign key(film) references Filmler(FilmID), KoltukNo nvarchar(5))
drop table Seanslar --Düzenleme için silindi
--Her bir tabloya ikişer kayıt ekleyelim
insert into Turler(TurID, TurAdi) values (001, 'Dram')
insert into Turler(TurID, TurAdi) values (002, 'Bilim Kurgu')
insert into Filmler (FilmID, FilmAdi, Sure, Tur) values (247824, 'Y?ld?zlararas?', '01:30:00', 002)
insert into Filmler (FilmID, FilmAdi, Sure, Tur) values
--2.Hafta
use Ticaret
-- Ürünler Tablosundaki adı T ile başlayan ürün bilgierini listeleyelim.
select * from Urunler where UrunAdi like '%T'
-- Ürünler tablosundaki birim fiyatı 20 ile 50 arasında olan ürünlerin ad ve tedarikci bilgilerini listeleyelim
select UrunAdi, TedarikciID from Urunler where BirimFiyati between 20 and 50
-- Ürünler tablosundaki birim fiyatı 20 nin altında ve 50 nin üzerinde olan ürünlerin ad ve fiyatlarını listeleyelim.
select UrunAdi, BirimFiyati from Urunler where BirimFiyati <20 or BirimFiyati >50
-- Ürün adı C ile L harfleri arasındaki harflerden biriyle başlayanların bilgilerini listeleyelim.
select * from Urunler where UrunAdi like '[C-L]%'
-- Kategorisi 3,5,8 olanların bilgilerini listeleyelim.
select * from Urunler where KategoriID in (3, 5, 8)
-- Tedarikçisi 2,3,4 olmayanların bilgilerini listeleyelim.
select * from Urunler where TedarikciID not in (2, 3, 4)
-- Hedef stok düzeyi 20 nin üzerinde olan ürünlerin ortalama fiyatlarını listeleyiniz.
--select * from Urunler avg where HedefStokDuzeyi >20 --Yanlış
select avg(BirimFiyati)as 'Ortalama' from Urunler where HedefStokDuzeyi >20
-- 6.Kategoride ki en yüksek ve en düşük fiyatlı ürünü bulnunuz.
select * from Urunler where KategoriID = 6 and BirimFiyati = (select max (BirimFiyati) from Urunler where KategoriID = 6)
select * from Urunler where KategoriID = 6 and BirimFiyati = (select min (BirimFiyati) from Urunler where KategoriID = 6)
select min (BirimFiyati)as 'En Düşük Fiyat', max(BirimFiyati)as 'En Yüksek Fiyat' from Urunler where KategoriID=6
-- 2 nolu tedarikçiden alınan ve YeniSatisi sıfır olan ürünlerin toplam fiyatını bulunuz.
select sum (BirimFiyati) from Urunler where TedarikciID=2 and YeniSatis in (0) --hem = hem () kullanılabilir.
use Ticaret
-- Müşteriler tablosundaki müşteri adıunın ilk 2 harfi
-- Şirket adının son 3 harfi
-- Müşteri unvaının 5 6 ve 7. karakterlerinin
-- Posta kodunun son 2 kararkteri ile üretilen kodun müşteri ad soyad bilgisiyle beraber Müşteri Kod sütun ismiyle listelenmesini istiyorum (left - right ve substring kodu ile)
select * from Musteriler
select MusteriAdi, left(MusteriAdi,2)+right(SirketAdi,3)+SUBSTRING(MusteriUnvani, 5, 3)+right(PostaKodu,2) as MusteriKod from Musteriler
select MusteriAdi, charindex('a',MusteriAdi) from Musteriler
-- "CHARINDEX" Sütunda bulunan verilerde belirli karakterleri aramak için kullanılır. Aranan karakteri soldan sağa doğru arar ilk bulduğu karakterin kaçıncı karakter olduğunu verir. Geri kalana bakmaz.
select REVERSE(MusteriAdi) from Musteriler
-- Belirtilen sütundaki değerleri tersten yazdırır.
select LEN(MusteriAdi) from Musteriler
-- Sütundaki verinin kaç karakter olduğunu verir. (Boşluklarda dahildir)
select REPLACE(MusteriAdi,'a','xxx') from Musteriler
-- Belirtiğim sütunda istediğim karakterlerin istediğim şekilde görüntülenmesini sağlıyor
select GETDATE()
-- Sistem tarihini verir.
select * from Personeller
select DATEPART(day, IseBaslamaTarihi) as 'Gün' from Personeller
select IseBaslamaTarihi, DATEPART(DAY, IseBaslamaTarihi) as 'Gün' from Personeller
select IseBaslamaTarihi, DATEPART(MONTH, IseBaslamaTarihi) as 'Ay' from Personeller
select IseBaslamaTarihi, DATEPART(YEAR, IseBaslamaTarihi) as 'Yıl' from Personeller
select IseBaslamaTarihi, DATEPART(WEEK, IseBaslamaTarihi) as 'Hafta' from Personeller --Yılın kaçıncı haftası olduğunu gösterir.
select IseBaslamaTarihi, DATEPART(WEEKDAY, IseBaslamaTarihi) as 'Kaçıncı Günü' from Personeller --Haftanın kaçıncı günü olduğunu gösterir
select IseBaslamaTarihi, DATEPART(QUARTER, IseBaslamaTarihi) as 'Çeyrek' from Personeller --Yılın kaçıncı çeyreği olduğu bilgisini bana verir.
-- DATEPART(day/week/weekday/month/year/quarter): Tarih veritipindeki sütundan tarihin istenilen kısmını listelemeye yarar.
select DATEDIFF(YEAR, IseBaslamaTarihi, getdate()) as 'Yıl' from Personeller
select DATEDIFF(MONTH, IseBaslamaTarihi, getdate()) as 'Ay' from Personeller
select DATEDIFF(WEEK, IseBaslamaTarihi, getdate()) as 'Hafta' from Personeller
select DATEDIFF(DAY, IseBaslamaTarihi, getdate()) as 'Gün' from Personeller
-- DATEDIFF: iki tarih arasındaki farkı alır. 4 parametresi vardır: day, week, month, year.
select * from Musteriler
select COUNT(*) from Musteriler -- Musteriler tablosundaki en fazla kayıt girilien tabloyu verir.
select COUNT(SirketAdi) from Musteriler -- ŞirketAdi sütununa kaç kayıt olduğunu verir.
select COUNT(Bolge) from Musteriler -- Bolge sütununa kaç kayıt girildiğini gösterir.
-- Count: Belirtlen Sütundaki verilerin sayısını verir. Kaç satıra veri girişi yapıldığını döndürür. Null değerlerle ilgilenmez, var olup olmamasıyla ilgilenir.
select distinct Ulke from Musteriler -- Hangi ülkelerden Müşterilerin olduğunu gösterir.
select COUNT(distinct Ulke) from Musteriler
-- Distinct: Belirtilen sütundaki farklı verileri lsiteler. Tekrar eden verileri yalnızca bir kez listeler.
-- Sorular
--1- Satışlar tablosunda her bir satışın kaç gün sonra ödendiğini bulunuz.
select DATEDIFF(DAY,OdemeTarihi, GETDATE(DAY,SatisTarihi)) from Satislar
--2- Satış detayları tablosunda satıra farklı ürünleri listeleyiniz.
select count(Distinct UrunID) as 'Farklı Ürünler' from [Satis Detaylari]
--3- Satışlar tablosunda hangi müşterilere satış yapıldığını listeleyiniz.
select distinct MusteriID from Satislar
--4- Satışlar tablosunda 5 nolu personelin yaptığı satışların hangi aylarda sevk edildiğini bulunuz.
select distinct DATEPART(MONTH, SevkTarihi) as 'Ay' from Satislar where PersonelID=5
--5- Satışlar tablosunda Venezuela'ya yapılan satışların satıştan kaç gün sonra sevk edildiğini bulunuz.
select DATEDIFF(DAY, SatisTarihi, SevkTarihi) as 'Gün' from Satislar where SevkAdresi='Venezuela'
--6- Satışlar tablosundaki sevk şehirlerinin en uzun isme sahip olanının kaç karakterden oluştuğunu bulunuz.
select max(len(SevkAdresi)) as 'Karakter Sayısı' from Satislar
--7- Satışlar tablosundaki her bir satış için; SevkAdresinin 2, 3, 4. karkterleri, PostaKodunun ilk 2 rakamı, MusteriID'nin ilk harfi, Odeme ayı, MusteriID'nin 3.harfi, Sevk yılı birleşiminden oluşan bir satış kodu üretiniz.
select substring(SevkAdresi,2,3)+left(SevkPostaKodu,2)+left(MusteriID,1)+DATEPART(MONTH,OdemeTarihi)+substring(MusteriID,3,1)+DATEPART(YEAR,SevkTarihi) as 'Satış Kodu' from Satislar
use Ticaret
-- 4.Hafta
--Upper, Lower, replace, sub query
select * from Urunler
select UrunAdi from Urunler
select UrunAdi, LOWER (UrunAdi), UPPER(UrunAdi) from Urunler
select REPLACE(UrunAdi, 'A', '***') from Urunler
select REPLACE(UrunAdi, 'A', '') from Urunler
select REVERSE(urunadi), urunadi from urunler
--sub query (alt sorgu): Bazı durumlarda sorgularda kullanılan koşul ifadeleri statik(sabit) bir değer değilde başka bir sorgunun döndürdüğü sonuçlar olabilir. Bu durumda ikinci sorgu alt sorgu olarak adlandırılır.
select * from urunler where KategoriID=5
select * from kategoriler
-- Produce kategorisindeki ürünleri listeleyiniz.
--select * from Kategoriler where KategoriAdi = 'Produce'
select * from urunler where KategoriID=7
select kategoriID from Kategoriler where KategoriAdi like 'Produce%'
select * from Urunler where KategoriID=(select KategoriID from Kategoriler where KategoriAdi like 'Produce%')
select * from Musteriler
-- London'da yaşayan müşterilere yapılan satışların satışID'lerini listeleyin
select * from Satislar
select MusteriID from Musteriler where Sehir like 'London%'
select MusteriID, satisID from Satislar where MusteriID in (select MusteriID from Musteriler where Sehir like 'London%')
-- Müşeter Adı Antonio olan müşterileriyşe yuapılan sayışiları listele
select MusteriID from Musteriler where MusteriAdi like 'Antonio%' --ANTON
select * from satislar where MusteriID like 'Anton%'
select * from satislar where MusteriID like (select MusteriID from Musteriler where MusteriAdi like 'Antonio%')
-- SORULAR --
-- 1. Urunler tablosundaki en yüksek fiyatı bularak, bu fiyatla aynı fiyata satılmış olan ürünlerin satış bilgilerini listeleyininiz.
select MAX(BirimFiyati) from Urunler
select * from [Satis Detaylari] where BirimFiyati like (select MAX(BirimFiyati) from Urunler)
-- 2. 5 ID'li personelin satış yaptığı müşteri adlarını listeleyiniz.
select * from Satislar
select MusteriID from Satislar where PersonelID = 5
-- 3. 11000 satışID'sindeki ürünlerin isimlerini listeleyiniz.
select * from [Satis Detaylari] where SatisID = 11000
-- Doğum yılı 1963 olan personelin yaptığı satışları listeleyiniz.
select * from Personeller where DogumTarihi like '1963%'
select * from Satislar where PersonelID in (select PersonelID from Personeller where DogumTarihi like '1963%')
-- 5.Hafta
use Ticaret
-- ceiling, floor, round, isnull, coalesce, nullif, charindex
-- ceiling, floor, round: Float değerlerle işlem yapmak için kullanılır. Virgülden sonraki (ondalıklı ksıım) üzerinde işelem yapmak için kullanılır.
select Birimfiyati from Urunler
/*
select Birimfyati,
CEILING(BirimFiyati) as yukarı yuvarla,
FLOOR(BirimFiyati) as aşağı yuvarla,
ROUND(BirimFiyati, 1) as BirBasamak,
ROUND(BirimFiyati, 0) as Yuvarla,
from Urunler
*/
select Birimfiyati, CEILING(BirimFiyati) as yukarıyuvarla, FLOOR(BirimFiyati) as aşağıyuvarla, ROUND(BirimFiyati, 1) as BirBasamak, ROUND(BirimFiyati, 0) as Yuvarla from Urunler
select BirimFiyati from [Satis Detaylari]
SELECT BirimFiyati from [Satis Detaylari] where UrunID = 18
SELECT FLOOR(BirimFiyati) from [Satis Detaylari] where UrunID = 18
SELECT FLOOR(BirimFiyati) from [Satis Detaylari] where UrunID = 18
SELECT SUM(FLOOR(BirimFiyati)) from [Satis Detaylari] where UrunID = 18
-- Satışlar tablosundaki nakliye ücretlerinin en yüksek 5 tanesini aşağı yada yukarı yuvarlayarak tam sayı haline getiriniz.
SELECT NakliyeUcreti from Satislar
SELECT TOP 5 NakliyeUcreti from Satislar
SELECT TOP 5 ROUND(NakliyeUcreti, 0) from Satislar
SELECT TOP 5 ROUND(NakliyeUcreti, 0) from Satislar ORDER BY NakliyeUcreti DESC
use Ticaret
-- Satýþlar tablosunda "Lara" Sevk Bölgesine yapýlan satýþlarýn yapýldýðý Müþterilerin adlarýný BÜYÜK HARF olarak listeleyen kodu yazýnýz.
select UPPER(MusteriAdi) from Musteriler where MusteriID in (select MusteriID from Satislar where SevkBolgesi like 'Lara%')
-- YeniSatis deðeri 0 (Sýfýr) olan ürünlerin Tedarikçi adlarýný listeleyen kodu yazýnýz.
select MusteriAdi from Tedarikciler where TedarikciID in(select TedarikciID from Urunler where YeniSatis=0)
-- Þubat ayý doðumlu personelin/personellerin yaptýðý satýþlarýn ID'lerini veren kodu yazýnýz.
select SatisID from Satislar where PersonelID in(select PersonelID from Personeller where 2=DATEPART(month, DogumTarihi))
-- Personel Ad, Soyad ve yaþ bilgilerini (Güncel Tarih-Doðum Tarihi) yaþa göre artan sýrada sýralayýnýz.
select Adi, Soyadi, DATEDIFF(year, DogumTarihi, getdate()) as Yas from Personeller order by Yas asc
-- Müþterilerin yaþadýklarý farklý þehirleri listeleyen kodu yazýnýz.
select distinct Sehir from Musteriler