Veritabanı Notları
/*
{ VERİTABANI SQL DERS NOTLARI }
*/
--[[ Veritabanı oluşturma, Tablo Oluşturma, Değiştirme, Silme ]]--
--[[ Genel Veri Tipleri ]]--
/*
bigint = alınabilecek en yüksek tam sayı değer örnek 99999999999
int = orta seviyede alınacak tam sayı değer. örnek 500000
varchar(max) = alınabilecek metinsel max değer. örnek 'O 10 yaşında'
varchar(100) = 100 karakter alabilir.
date = sadece tarih 2016-05-26
datetime = tarih ve saat 2016-05-26 20:04:00
bit = boolean ifadedir 0 ve 1 değeri alır.
float = orta seviyede ondalık değer. 12.5000
real = yuksek seviyede ondalık değer. 12.500000000000000
*/
CREATE DATABASE database_Adi -- database oluşturur
CREATE TABLE tableAdi -- tablo ekler
CREATE ALTER tableAdi -- tablo değiştirmeye yarar
CREATE DROP tableAdi -- tabloyu siler.
ALTER TABLE tabloAdi -- kullanım örnekleri
ADD sutunAdi tipi -- sütun ekleme
ALTER COLUMN sütunAdi yeniTip -- değiştirme var olan sütunda değişiklik yapar.
DROP COLUMN sütunAdi -- sütun silme
DROP PRIMARY KEY sütunAdi -- sütundaki bir özelliği silme
/* Değiştirme Detay
ADD PRIMARY KEY(sütunAdi)
ADD FOREIGN KEY(sütunAdi) REFERENCES tabloAdi(sütunAdi)
ADD UNIQUE(sütunAdi)
ADD CONSTRAINT
*/
IDENTITY
-- IDENTITY(baslangıç_Sayısı, Artis_Sayısı)
-- Otomatik artım yapmak için kullanılır. MYSQL ifadesi olarak AUTO_INCREMENT diye biliriz
-- IDENTITY(1,1) anlamı bir den başlayıp birer birer artsın anlamındadır.
PRIMARY KEY ifadesi
--Birincil anahtar demektir. benzeri olamaz ve boş değer içeremez.
CREATE TABLE per ( id int IDENTITY(1,1) PRIMARY KEY) -- artımlı
CREATE TABLE per ( id int PRIMARY KEY) -- artımsız.
FOREIGN KEY ifadesi
--yabancı anahtar demektir. benzeri olabilir ve boş değer alabilir ama boş değerleri kıyaslamada atlanır.
CREATE TABLE per ( id int FOREIGN KEY REFERENCES tabloAdi(sütunAdi) )
UNIQUE
-- benzersiz demektir. birincil ile aynıdır tek farkı boş değer alabilir.
id int UNIQUE
CONSTRAINT
-- kısıtlama anlamındadır
CONSTRAINT keyAdi FOREIGN KEY(sutunAdi) REFERENCES tabloAdi(sutunAdi)
CONSTRAINT keyAdi PRIMARY KEY (sutunAdi1,sutunAdi2);
CONSTRAINT keyAdi CHECK (fiyat >= 1000 AND fiyat <= 2000)
DEFAULT -- herhangi sütunun default değerini atamak için kullanılır.
sayi int DEFAULT 100
(-- Tablo Örnekleri
CREATE TABLE ogrenciler(
ogr_no int not null primary key,
ogr_adi varchar(35),
bolum varchar(25)
)
CREATE TABLE notlar(
ogr_no int not null,
ders_kodu varchar(25) not null,
vize int,
final int,
constraint pkkey primary key (ogr_no,ders_kodu)
)
ALTER TABLE notlar
ADD final_tarih date
ALTER TABLE notlar
DROP COLUMN final_tarih
ALTER TABLE ogrenciler
ALTER COLUMN ogr_adi varchar(50)
--EXEC sp_RENAME 'denemeler.dky', 'id', 'COLUMN' // tablodaki column adını değiştirme
DROP DATABASE db_name
DROP TABLE table_name
ALTER TABLE PERSONEL -- primary key eklemek için not null olması gerekir.
ALTER COLUMN PERSONEL_ID int not null
ALTER TABLE PERSONEL -- primary key ekleme
ADD PRIMARY KEY(PERSONEL_ID)
ALTER TABLE alir
add constraint pkkey UNIQUE (cari_id,urun_id)
ALTER TABLE personel
ADD CONSTRAINT chk_mail CHECK (email IN ('@')) -- sadece @
ALTER TABLE personel
ADD CONSTRAINT chk_mail CHECK (email LIKE '%@%') -- içerisinde @ olmasını kontrol edicek.
ALTER TABLE urunler
add constraint pkkey FOREIGN KEY(urun_id) REFERENCES alir(urun_id)
-- örnekler test tablo
CREATE TABLE Musteri(
mus_id char(4) not null,
mus_ad varchar(40) null,
ili varchar(40) null,
ulke char(2) null,
adres varchar(30) null
)
CREATE TABLE PERSONEL(
PERSONEL_ID int,
AD varchar(10),
SOYAD varchar(10)
)
CREATE TABLE cari(
cari_id int primary key not null,
cari_adi varchar(35),
adres varchar(35),
telefon varchar(11)
)
CREATE TABLE urunler(
urun_id int primary key not null,
urun_ad varchar(35),
urun_fiyat varchar(35)
)
)
--[[ Select(Seçme),Insert(Ekleme),UPDATE(güncelleme),DELETE(Silme) ]]--
--Tek Tek seçim yapma
SELECT sutunAdi1,sutunAdi2 FROM tablo_Adi
--Birden fazla tablo seçip ve sütunları seçme
SELECT tablo1.ad, tablo2.fiyat FROM tablo1,tablo2
--Tüm sütunları seçim yapma
SELECT * FROM tablo_Adi
--Birden fazla tablo seçme
SELECT * FROM tablo1,tablo2
-- Takma isimle sütun çağırma
SELECT sütunAdi AS yeniSütunAdi FROM personel
SELECT id AS Sıra FROM personel
--Tek değer ekleme
INSERT INTO tabloAdi (sutunAdi1,sutunAdi2) VALUES (deger1,deger2);
--Birden fazla değer ekleme
INSERT INTO tabloAdi (sutunAdi1,sutunAdi2) VALUES
(deger1,deger2),
(deger1,deger2),
(deger1,deger2);
--Değer Güncelleme
-- Koşulsuz değer güncelleme tüm tabloda değişiklik yapar.
UPDATE tabloAdi SET adi='murat'
--Koşullu güncelleme belirtilen koşula göre güncellemeyi yapar.
UPDATE tabloAdi SET adi='murat' WHERE id=1;
--Değerleri Silme
DELETE FROM tablo_Adi -- tüm tablodaki verileri siler.
--Koşullu Silme sadece koşula göre tablodaki verilerin silme işlemi gerçekleşir.
DELETE FROM tablo_Adi WHERE id=1
--[[ BELİRLİ İFADELER ]]--
OR ifadesi
-- Veya anlamına gelir. Genel olarak şartlarda kullanılır.
WHERE isimler='ahmet' OR isimler='murat' -- ismi murat veya ahmet olanlar listelenir.
AND ifadesi
-- VE Anlamına gelir.
WHERE ad='ahmet' AND soyad='kıvanç' --sadece adı murat ve soyadı kıvanç olanları getirir.
NOT ifadesi
-- değildir anlamına gelir.
WHERE NOT ad='murat' -- adı murat olmayanları getir.
-- 2 değer arasında kontrol yapmak için
-- between arasında demektir
where notlar BETWEEN 50 AND 60
where notlar >= 50 AND notlar <= 60
-- is olduğu demektir is null boş olduğu sorar is not null boş olmadığını sorar not olumsuzluk belirtir.
IS NULL -- değer olup olmadığını sorgular boş ise true değilse false dönerir.
IS NOT NULL -- değerin dolu olmadığını sorgular dolu ise true değilse false
WHERE ad IS NULL -- sadece ismi boş olanları getir.
WHERE ad IS NOT NULL -- sadece ismi dolu olanları getir
IN(aranacakDizi) ifadesi
--isimler içerisinde ahmet ve murat varsa sadece onları getirecektir.
WHERE isimler IN('Ahmet','Murat')
Like ifadesi
'%bilgi%' -- içerisinde bilgi kelimesi geçen satırları getir.
'a%' -- baş harfi a olsun gerisi ne olursa olsun.
'%d' -- son harfi d olsun.
'_A_' -- içerisinde 3 harfli olacak ve 2 ci harfi A olan satırları getir.
WHERE ad Like '%ahmet%'
WHERE ad Like '_y__' -- örneğin tabloda ayşe varsa gelecektir.
(-- Örnekler
INSERT INTO personel (ad,soyad,tel) VALUES ('ahmet', 'xan', '22334455661')
DELETE FROM personel WHERE ad='ahmet'
SELECT * FROM personel
UPDATE personel SET ad='mehmet' WHERE ad='ahmet'
INSERT INTO personel (ad,soyad,telefon,email) VALUES ('asd','asd','sd', 'asd@')
UPDATE personel SET email='gecici@hotmail.com' WHERE email NOT LIKE '%@%' OR email IS NULL -- email girilmemiş olan yada @ olmayan emailleri getirir ve standart bir email adresine günceller
UPDATE personel SET dogumtarihi='01.01.1900' WHERE dogumtarih IS NULL -- doğum tarihi boş olan değerleri varsayılan dogum tarihini atar.
DELETE FROM personel WHERE ad like '%ur%' -- adında ur geçen kişileri sil.
DELETE FROM personel WHERE (YEAR(yas) - YEAR(GETDATE())) > 40 -- 2 tarih arasındaki farkı bulur
DELETE FROM personel WHERE DATEDIFF(YEAR,yas,GETDATE()) > 40 -- datediff 2 tarih arasındaki farkı bulur. datediff(hangi aralık, baslangıçTarih, bitişTarih)
SELECT * FROM ogrenci WHERE gorevi='muhendis' AND sehir='izmir'
SELECT * from ogrenci
where
not in (1,2); -- içersinde 1 ve 2 değeri olmayan
SELECT * from ogrenci
Where
ders_adi like "%btt%" -- içersiinde btt kelimesi geçen
SELECT * from ogrenci
Where
ders_adi like "btt%" -- başı btt olanları getir
SELECT * from ogrenci
Where
ders_adi like "a_" -- başı a ile başlayan 2 ci harfi ne olursa olsun | 2 harfli olmak zorunda
)
ORDER BY ifadesi
ORDER BY sutunAdi -- sayı yada alfabetik olarak sıralamak için kullanılır. Default asc dir.
ORDER BY sutunAdi ASC -- A,B,C.. 1,2,3,4...
ORDER BY sutunAdi DESC -- Z,Y,V.. 9999..,9998.. ...
--En düşük notlardan sıralama yapmak istediğimizde.
ORDER BY notlar ASC
--En yüksek notlardan sıralama yapmak istediğimizde.
ORDER BY notlar DESC
--isimleri alfabetik sırayla getirmek istediğimizde.
ORDER BY ad ASC
--isimleri alfabenin ters halinde sırayla getirmek istediğimizde.
ORDER BY ad DESC
-- Birden fazla sıralama yapılabilir.
ORDER BY ad ASC, fiyat DESC -- sıralama şekli ilk önce adları sıralayacak daha sonra fiyatı en yüksek olanı üste almaya çalışacaktır.
--Örneğin tablo değeleri
ayse 10
murat 50
murat 100
---------Çıktı
ayse 10 -- öncelik alfabetik sıralama olduğu için.
murat 100
murat 50
DISTINCT ifadesi
-- Tablomuzda Aynı isimlerden birden fazla var tekilleşitirmek istiyorsak DISTINCT ifadesini yazarız
SELECT DISTINCT adi FROM personel
SELECT DISTINCT * FROM personel
--Örneğin tabloda değerleri
ahmet
ahmet
murat
------Çıktı
ahmet
murat
GROUP BY ifadesi
/* Ön bilgi
GROUP BY sütunAdi //grup tekilleştirmesi yapar. örneğin Adı Murat Olanları hepsini ele alır.
SELECT adi FROM personel GROUP BY adi -- tabloda birden fazla murat ve ahmet varsa
bize satır olarak murat ve ahmet gelir sadece.
GROUP BY sütunAdi HAVING grubunŞartları
Burda karıştırılmaması gereken WHERE ifadesi
ÖRNEK: SELECT * FROM WHERE ad='murat' OR ad='ahmet' GROUP BY ad HAVING ad='ahmet'
bu örneğe göre ahmet veya murat çağır demişiz.
Daha sonra grup ile ad gruplamışız yani tekilleşti tüm murat ve ahmetler 2 satır oldu.
having ile sadece adı ahmet olanı göster dediğimiz için. grupta şart koşmuş oluyoruz.
bize sadece ahmetin sonucunu gösterecektir.
* SELECT işleminde takma ad verilebilir group da takma isim verilemez.
*/
--ÖRNEK: Bölüm ve göreve göre toplam maaşı getiren ve en yüksek maaş gösteren ve bölüme göre sıralayan sql kodu yazınız.
SELECT bolum,gorev, sum(maas) as 'Toplam Maaş', MAX(maas) as 'En Yüksek Maaş' FROM personel GROUP BY bolum, gorev ORDER BY bolum ASC
/*
yukardaki sorguya göre söyle tablomuz olsaydı.
bolum gorev maas
Bilgisayar Programcı 3000
Bilgisayar Programcı 1000
Üretim Hizmetli 1500
Üretim Hizmetli 2500
Bilgisayar Tasarımcı 3500
Bilgisayar Tasarımcı 1500
______________________________ Çıktı
Bolum gorev Toplam Maaş En Yüksek Maaş
Bilgisayar Programcı 4000 3000
Bilgisayar Tasarımcı 5000 3500
Üretim Hizmetli 4000 2500
*/
--birden fazla tablo seçimi
SELECT * FROM tablo1,tablo2
--birden fazla tablo seçip id göre kısıtlama yapma. Bir anlamda kesiştirme diyebiliriz join işlemi yapar.
SELECT tablo1.id, tablo2.id FROM tablo1,tablo2 WHERE tablo1.id == tablo2.id
--[[ Veritabanı Yetkilendirme ]]--
GRANT --izinler vermek için select,delete...
on -- tablolar
to -- kullanıcı adı deneme
GRANT create table to deneme, deneme2
DENY -- izin engellemek için
DENY create table to deneme, deneme2
REVOKE -- kullanıcılardan izinleri kaldırmak için
FROM -- kullanıcılardan
revoke all from deneme -- tüm izinler kaldır
revoke select on personel from deneme --denemdeki personel tablosundki select izinlerini kaldır
--[[ FONKSIYONLAR ]]--
AVG(sütunAdi) -- sütundaki değerlerin ortalamasını alır
COUNT(sütunAdi) -- sütuna göre kaç adet satır olduğunu döndürür -- COUNT(*) tüm sütunlar seçilir
MAX(sütunAdi) -- en yüksek sayıyı döndürür
MIN(sütunAdi) -- en küçük sayıyı döndürür
SUM(sütunAdi) -- sütun içindeki tüm değerleri toplar
POWER(x,y) --bir sayının kuvvetini alma
POWER(2,3) --2 nin 3 kuvvetini al.
ABS(-1.25) -- negatif değerleri pozitif değere döndürür mutlak değer denir.
SQRT(5) -- sayının karakökünü verir.
CONCAT('ahmet','bilir') -- ahmetbilir
MOD(x,y) -- 2 sayının birbirinden bölümünün kalanını verir.
MOD(7,2) --> 1 döner
substring(metin, baslangıç, alınacak_karakter_Sayısı); --alınacak karakter sayısı belirtilmezse başlangıç sayısından sonuna kadar alır.
substring('Murat', 2) -- urat
substring('Murat', 2,2) -- ur
left(metin, alınacak_karakter_sayısı)
LEFT('ahmet',1) -- a harfini yazar.
RIGHT(metin, alınacak_karakter_sayısı)
RIGHT('ahmet',1) -- t harfini yazar.
lower(sütunAdi) -- tüm harfleri küçültür.
upper(sütunAdi) -- tüm harfleri büyütür.
INITCAP(sütunAdi) -- İlk harfini büyük diğer harfleri küçüğe çevirir -- MURAT ÇAKMAK değer varsa Murat Çakmak yapar.
LEN(metin) -- metnin kaç karakterli olduğunu verir.
TRIM() -- sag ve sol boşlukları siler.
LTRIM() -- sadece sol boşlukları siler.
RTRIM() -- sadece sağ boşlukları siler.
REPLACE(degistilecek_Metin, degisecek_Bilgi,yeni_Deger)
REPLACE('Ahmet Burada', 'Ahmet', 'Murat'); -- Murat Burada
charindex(aranacak_bilgi,arama_yeri,arama_baslangıç_nokta)
charindex('ahmet', 'burada ahmet', 0); -- 8 değerini döndürür.
--Eğer değer bulunamazsa 0 değeri döner.
instr(arama_yeri,aranacak_bilgi)
instr('burada ahmet', 'ahmet') -- 8 değerini döndürür.
--Eğer değer bulunamazsa 0 değeri döner.
CEILING(sütunAdi) -- Yukarı yuvarlama işlemi yapar.
FLOOR(sütunAdi) -- Aşağı yuvarlama işlemi yapar.
--ROUND verilen değerin en yakın tam sayıya yuvarlama yapar.
--ROUND(deger, basamakSayi)
ROUND(748.58, -1) --negatif ise burda noktanın solundan ele alır yani 8. çıktı : 750.00
ROUND(748.58, -2) --negatif ise burda noktanın solundan ele alır yani 4. çıktı : 700.00
ROUND(748.58, -4) --negatif ise burda noktanın solundan ele alır. -4 basamağı bulamadığı için sonuç 0 olur.
ROUND(123.4545, 2) --pozitif ise noktandan sonra en sağdan ele alır 45 yuvarlar. 123.4500
GETDATE() -- Şuanki zamanın tarihini verir.
--[[ DÖNEM ÖDEVİ ]]--
(
--Soru 1 Tabloları ve ilişkileri oluşturma
CREATE TABLE arac(
aracno Int Primary Key IDENTITY(1,1),
model varchar(1000),
marka varchar(1000),
plaka varchar(1000),
fiyat int,
CONSTRAINT model CHECK (model >= 1900 AND model <= 9999),
CONSTRAINT plaka CHECK (plaka like '[0-9][0-9][ ][A-Z][A-Z][ ][0-9][0-9][0-9]' OR plaka like '[0-9][0-9][ ][A-Z][A-Z][ ][0-9][0-9][0-9][0-9]') -- 00 AA 000 - 99 ZZ 9999 arası kontrolü yapmaktadır.
);
CREATE TABLE musteri(
mno Int Primary Key IDENTITY(1,1),
madi varchar(1000),
msoyadi varchar(1000),
madres varchar(1000),
mtelefon varchar(1000)
);
CREATE TABLE satis(
satno Int Primary Key IDENTITY(1,1),
mno Int,
aracno Int,
sat_tarih date DEFAULT '01.01.1900',
sfiyat int not null,
FOREIGN KEY(mno) REFERENCES musteri(mno),
FOREIGN KEY(aracno) REFERENCES arac(aracno)
);
CREATE TABLE alim(
alimno Int Primary Key IDENTITY(1,1),
mno Int,
aracno Int,
alim_tarih date DEFAULT '01.01.1900',
afiyat int not null,
FOREIGN KEY(mno) REFERENCES musteri(mno),
FOREIGN KEY(aracno) REFERENCES arac(aracno)
);
--Soru 2 tablodaki verilen değerleri ekleme
INSERT INTO musteri (madi, msoyadi, madres,mtelefon) VALUES
('Turgut', 'Özseven', 'Turhal/Tokat', '03562222222'),
('Mustafa', 'Çağlayan', 'Meram/Konya', '05112111111'),
('Ahmet', 'Kara', 'Zile/Tokat', '03563333333'),
('Murat', 'Beyaz', 'Turhal/Tokat', '03565555555'),
('Elif', 'Kurt', 'Beşiktaş/İstanbul', '05781471414'),
('Ayşe', 'Uçar', 'Taşova/Amasya', '05386666666'),
('Bülent', 'Ayar', 'Turhal/Tokat', '03568888888');
INSERT INTO arac (model, marka, plaka, fiyat) VALUES
('2004', 'Fiat', '60 TT 6060', 16000),
('2000', 'Renault', '60 TT 6061', 14000),
('2007', 'Ford Focus', '60 TT 6062', 28000),
('2005', 'Volkswagen Golf', '60 TT 6063', 26000),
('1998', 'Opel Astra', '60 TT 6064', 9000);
INSERT INTO satis (mno, aracno, sat_tarih,sfiyat) VALUES
(1, 1, '2010-05-04', 17000),
(4, 5, '2010-06-01', 11000),
(7, 4, '2010-06-15', 27000),
(2, 1, '2010-07-02', 17500);
INSERT INTO alim (mno, aracno, alim_tarih,afiyat) VALUES
(3, 1, '2010-02-08', 15000),
(6, 1, '2010-04-12', 15500),
(2, 5, '2010-04-15', 9500),
(1, 2, '2010-05-15', 14000),
(5, 3, '2010-08-22', 26000);
--Soru3
--Soru : arac tablosundan model,marka,fiyat göstericek şekilde modeli 2004 den küçük olanları listelicek sql kodu yazınız.
--A Cevap
SELECT model,marka,fiyat FROM arac WHERE model < 2004
--Soru : arac tablosundan model,marka,fiyat göstericek şekilde modeli 2000 ve 2009 arasında olanları listelicek sql kodu yazınız.
--B Cevap
SELECT model,marka,fiyat FROM arac WHERE model >= 2000 AND model <= 2009
--Soru : satis tablosundan hepsini göstericek şekilde satış tarihi 2010.05.01 tarihinden büyük olan ve satış fiyatı 10.000 TL den büyük olanları listeleyecek sql kodu yazınız.
--C Cevap
SELECT * FROM satis WHERE sat_tarih > '2010-05-01' AND sfiyat > 10000 -- bu tabloya göre çıktı net görebilmek için tarihi 2010.06.01 bu şekilde test edilebilir.
--Soru : musteri tablosunun hepsini göstericek şekilde müşterinin adının içerisinde 'y' harfi geçen ve adresin başlangıcında Turhal adı olanları listeleyecek sql kodu yazınız.
--D Cevap
SELECT * FROM musteri WHERE madi like '%y%' AND madres like 'Turhal%' -- bu tabloyada göre çıktı için %m% olarak test edilirse görülür.
--Soru : Araç tablosun aracno,model,plaka,fiyat göstericek şekilde markası fiyat veya markası opel olan ve modeli 2000 den yüksek olanları listeyeleyecek şekilde sql kodunu yazınız.
--E Cevap
-- Bu tabloya göre Fiat Marea yazdığı için aşağıdaki çözüm olur.
SELECT aracno,model,plaka,fiyat FROM arac WHERE marka like '%Fiat%' OR marka like '%Opel%' AND model > 2000
-- Farklı bir tabloda direk olarak fiat yada opel yazıyorsa
SELECT aracno,model,plaka,fiyat FROM arac WHERE marka='Fiat' OR marka='Opel' AND model > 2000
)
/* Çalışma soruları
1.Müşteri tablosunda bulunan kayıtları Madi sütununa göre artan sırada listelemek için gerekl sql kodu yazınız.
2.Araç tablosunda bulunan kayıtları model sütununa göre azalan fiyat sütununa göre artan sırada listelemek için gerekli sql ifade yazınız.
3.Satışı yapılan araçların aracno,sat_tarih ve sfiyat bilgilerini seçerek sfiyat sütunu için isim olarak "Satış fiyatı" bilgisini kullanan sql ifadeyi yazınız.
4.Fiyatı 12.000 TL den fazla olan araçların bilgilerini fiyat sütununa göre azalan sırada listelemek için gerekli sql ifadeyi yazınız.
5.Satış fiyatı 10000 den fazla olan veya 4 nolu müşteriye satılan araçların bilgilerini listelemek için gerekli sql kodu yazınız.
6.Nisan 2010'dan sonra satılan araçların listelemek için gerekli sql ifadeyi yazınız.
7.Şubat 2010 ile Haziran 2010 arasında 10.000 tl den yüksek fiyata alınan araçların alış tarih, alış fiyatı ve arac no bilgilerini
en yeni tarihten en eski tarihe doğru ve en yüksek fiyattan en düşük fiyata doğru sıralayarak listeleyen sql ifadeyi yazınız.
8.10000 ile 20000 arasında fiyata satılan araçlardan 4 ve 2 nolu müşteriye yapılan satışların bilgilerini listelemek için gerekli sql kodunu yazınız.
9.Turhal'da ikamet eden müşterilere yapılan satışları listelemek için gerekli sql ifadeyi yazınız.
10.Tokat'ta ikamet eden ve telefonu içerisinde 6 içeren müşterileri listelemek için gerekli sql ifadeyi yazınız.
11.İsmi "A" ile başlayan müşterilerin adres ve telefon bilgilerini listelemek için gerekli sql ifade yazınız.
12."Opel" ve "Fiat" marka araçların model, marka ve fiyat bilgilerini marka sütununa göre atan sırada listelemek için gerekli sql kodu yazınız.
13.1998,2005 ve 2007 model araçların listelemek için gerekli sql ifadeyi yazınız.
*/
(--Cevaplar
-- 1.Soru
SELECT * FROM musteriler ORDER BY Madi ASC
-- 2.Soru
SELECT * FROM arac ORDER BY model DESC, fiyat ASC
-- 3.Soru
SELECT aracno,sat_tarih,sfiyat AS Satış Fiyatı FROM satis WHERE
-- 4.Soru
SELECT * FROM arac WHERE fiyat > 12000 ORDER BY fiyat DESC
-- 5.Soru
SELECT * FROM satis WHERE sfiyat > 10000 OR mno = 4
-- 6.Soru
SELECT * FROM satis WHERE '2010-04' > sat_tarih
-- 7.Soru
SELECT alim_tarih,afiyat,aracno FROM alim WHERE alim_tarih BETWEEN '2010-02' AND '2010-06' AND afiyat > 10000 ORDER BY alim_tarih,afiyat DESC
-- 8.Soru
SELECT * FROM satis WHERE sfiyat BETWEEN 10000 AND 20000 AND mno IN(4,2)
-- 9.Soru
SELECT * FROM satis,musteri WHERE satis.mno=musteri.mno AND musteri.madres Like '%Turhal%'
-- 10.Soru
SELECT * FROM musteri WHERE madres Like '%Tokat%' AND mtelefon Like '%6%'
-- 11.Soru
SELECT madres,mtelefon FROM musteri WHERE madi Like 'A%'
-- 12.Soru
SELECT model,marka,fiyat FROM arac WHERE marka='opel' or marka='fiat' ORDER BY marka ASC
-- 13.Soru
SELECT * FROM arac WHERE model IN (1998,2005,2007)
)
--{{ Veritabanı Notları II }}--
--Veritabanı seçme use databaseAdı
--Veritabanı Oluşturma
CREATE DATABASE databaseAdi on default
--Tablo oluşturma
CREATE TABLE tabloAdi(
--sutunAdi VeriTipi diğer parametreler
id int not null,
kitapNo INTEGER not null,
kitapAdi VARCHAR(karakterUzunlugu)
PRIMARY KEY (id)
)
DECLARE @degiskenAdi INT
--Değişken tanımlama DECLARE @degiskenAdi veritipi
--Değişkene değer atama SET @degiskenAdi = @atanacakdeger
--BLOK Oluşturma { } = begin end
--Ekrana Yazdırma print ' metin '
declare @sayi1 int, @sayi2 int
set @sayi1=100
set @sayi2=300
if(@sayi1 > @sayi2)
begin
print 'Birinci sayı ikinci sayıdan büyüktür'
end
else
begin
print 'İkinci sayı birinci sayıdan daha büyüktür'
end
-- While Döngüsü while(şart) // true olduğu sürece döner.
while(@sayi1 < 600)
begin
SET @sayi1+=1
print @sayi1
end
-- Sorguda değikene değer atama
declare @sayfaSayisi int
SELECT @sayfaSayisi=MAX(sayfaSayisi)
FROM Kitap
if(SELECT MAX(SayfaSayisi) FROM Kitap) >= 500)
-- IF / EXISTS
--{{
IF(ŞART)
begin
---yapılacaklar
end
ELSE
begin
---yapılacaklar
end
--}}
--{{
-- EXISTS varmı yokmu diye kontrol etmek için
IF EXISTS(SELECT * FROM kitap) -- eğer böyle bir tablo varsa if e girer.
IF NOT EXISTS(SELECT * FROM kitap) -- eğer böyle bir tablo yoksa if e girer.
--}}
--8
DECLARE @degiskenAdi Veritipi
SELECT veya SET ile değer atayabiliriz.
SET @degiskenAdi = atanacak_Deger
SET @adi = 'murat'
SET @tarih = '04.05.1996'
PRINT @adi
BEGIN END = {}
IF(sart)
BEGIN
--komutlar
END
ELSE
BEGIN
-- Komutlar
END
DECLARE @ortalama int
SELECT @ortalama = AVG(vize) FROM ogrenciler
IF(@ortalama >= 50)
BEGIN
PRINT 'SINIF DURUMU IYI'
END
ELSE
BEGIN
PRINT 'SINIF DURUMU KÖTÜ'
END
SELECT adi,soyadi,Durumu=
CASE
WHEN (ortalama >= 50) THEN 'GEÇTİ'
WHEN (ortalama < 50) THEN 'KALDI'
END
FROM ogrenciler
DECLARE @sayisi int
SET @sayici = 10
PRINT @sayici
WHILE (@sayici < 10)
BEGIN
SELECT @sayici = @sayici + 1
PRINT @sayici
END
--10
CREATE VIEW bilgi
AS
SELECT tablo1.sutun1, tablo2.sutun1, tablo2.sutun2 FROM tablo1
INNER JOIN table2 ON tablo1.sutun1 = tablo2.sutun1
--11
CREATE PROC/PROCEDURE procAdi(
@ids int,
@ad varchar(100)
)
AS
BEGIN
SELECT * FROM tablo1 INNER JOIN tablo2 ON tablo1.id = tabloe2.id
WHERE tablo1.sutun2 > 30
END
--12
CREATE FUNCTION fonksiyonAdi(
@parametre veritipi
//@degiskenAdi int = null
@sayi1 int,
@sayi2 int
)
RETURNS int //dönecek veritipi
AS
BEGIN
DECLARE @topla int
SELECT @topla = sayi1 + sayi2
RETURN @topla
END
--###########################
CREATE FUNCTION tabloGetir(
@id int
)
RETURNS TABLE
AS
BEGIN
RETURN SELECT * FROM tablo1 WHERE @kadi = @id
END
--13
CREATE PROCEDURE arttir(
@ids int,
@artim MONEY
)
AS
BEGIN
BEGIN TRY
BEGIN TRANSACTION
UPDATE hesaplar SET bakiye = bakiye + artim WHERE @id=@ids
--Eğer begin try kullanmıcaksak bunu kullanabiliriz.
/*IF(@@ERROR <> 0) -- 0 eşit değilse hata var demektir. 0 olduğunda başarılıdır.
ROLLBACK -- transactionu baştan başlıcak.*/
COMMIT
END TRY
BEGIN CATCH
PRINT @@ERROR + ' kodlu hatadan işlem yapılamadı.'
ROLLBACK
END CATCH
END