1. GİRİŞ 2. YENİ TABLO EKLEME



Benzer belgeler
EXISTS VE NOT EXISTS fonksiyonları

TRIGGER. Trigger lar, tablo üzerinde tanımlanabilen ve bu tablo üzerinde bir işlem gerçekleştiğinde tetiklenen programlama ögeleridir.

Yukarıdakilerden hangileri DML (Data Manipulation Language) ile gerçekleştirilir?

SQL TRIGGERS (Tetikleyiciler)

Sayfa 1 / 8. Tabo yapıları

Bir çeşit prosedür. Ancak bu prosedür kendiliğinden çalışır. Çalışması için tabloya veri eklemek, veri silmek, veri değiştirmek yeterlidir.

Tetikleyiciler (TRIGGER) Tetikleyiciler ne zaman kullanılırlar. Ardı Sıra Tetikleyiciler (After Triggers) Örnek

Veri Tabanı SQL Server ve Management Studio kurulum linkleri:

1. Araçların tüm bilgilerini ve bağlı oldukları kiralama noktasının adres ve telefonunu içeren tam listesi:

Kullanıcı tanımlı fonksiyonlar SQL2000 ile gelen özelliklerden biridir. Fonksiyonlar tek bir değer veya tablo döndürmek için kullanılır.

SP_RENAMEDB eski_isim, yeni_isim VEYA SP_RENAMEDB 'eski isim', 'yeni isim'

Güz Yarıyılı MT 487 Bilgisayarda Veri Yapıları Final Çalışma Soruları

T.C GAZİ ÜNİVERSİTESİ BİLİŞİM ENSTİTÜSÜ YÖNETİM BİLİŞİM SİSTEMLERİ ANA BİLİM DALI MS SQL KOMUTLARI VE MS SQL KOMUTLARI İLE İLGİLİ UYGULAMALAR

MT487_2005guz_final_cevaplar (cevaplar vurgulu ve koyu yazılmıştır)

SQL veri tabalarına erişmek ve onları kullanmak için geliştirilmiş bir lisandır.

KULLANICI TANIMLI FONKSİYONLAR (Devam)

SQL FONKSİYONLARI SQL lisanında hesaplama ve sayma işlemlerinde kullanılmak üzere bir çok fonksiyon vardır.

20461C Querying Microsoft SQL Server Modül Seviye Belirleme Testi

SAKLI YORDAM (Stored Procedure) Sibel Somyürek

KULLANICI TANIMLI FONKSİYONLAR

KULLANICI TANIMLI FONKSİYONLAR (Devam)

VERİ TABANI ve YÖNETİMİ

2- Total de 8000 byte yer tutup 4000 karakter olarak kullanabildiğimiz tip aşağıdakilerden hangisidir?

Aşağıdaki tabloyu inceleyin. Sorgulama işlemlerini bu tabloya göre yapacağız.

Bu işleçlerin dışında, aşağıda belirtilen karşılaştırma işleçlerinden de yararlanılır.

Fonksiyonlar istenilen deger tipinde dönüs yapabilir. INT, VARCHAR deger döndürebileceğiniz gibi bir tablo da döndürebilirsiniz.

«BM364» Veritabanı Uygulamaları

Aşağıdaki şemaya dikkat edin. Sorgulamalarımızı genellikle bu şemaya göre yapacağız.

Veri Tabanı Programlamaya Giriş

Tablolar Arası İlşikiler ve Alan Özellikleri Siparis.musteri_no musteri.musteri_no Siparis.urun_kodu musteri.urun_kodu

SP_RENAMEDB eski_isim, yeni_isim VEYA SP_RENAMEDB 'eski isim', 'yeni isim'

8 Oracle da tablo yapısı içinde otomatik artan kolon yoktur. (identity kolon

Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü Veri Tabanı ve Yönetimi (BİL 301)

STORED PROCEDURE LER (Saklı Yordamlar)

TEMEL SQL SORGU ÖRNEKLERİ. Yukarıdaki sorguyu yazıp çalıştırdığımızda db_market adında bir veritabanı oluşturulur.

Aşağıdaki tabloyu inceleyin. Yeni kayıt girme, var olan bir kaydı silme veya güncelleme işlemlerini bu tabloya göre yapacağız.

Mysql Veritabanı Komutları

SQL'e Giriş. SELECT Deyimi. SQL Komutları. Yardımcı Deyimler

Sorgudan elde edilen değerin değişkenlere aktarılmasını sağlar. Sorgudan tek satır dönmesi gerekir. Çok satır dönerse hata verir.

Tavsiye Edilen Önhazırlık Temel SQL Server 2000 bilgisi edinmek.

SORGULAR. Öğr.Gör.Volkan Altıntaş

ACCESS PLATFORMUNDA SQL

SQL Stored Procedure

TESİ. indeks. söylenebilir?? bir ilişkidir d) Hiçbiri. veya somutlaştırılmış. düzeyidir? sağlayabilir? sına. d) Hepsi. olabilir? c) Verilerin d) Hepsi

5 SQL- Yapısal Sorgulama Dili. Veritabanı 1

Aşağıdaki şemaya dikkat edin. Sorgulamalarımızı genellikle bu şemaya göre yapacağız.

Veri Tabanı-I 9.Hafta

Kişiler tablosundan AD kolonu yusuf olan tüm satırları siler. ORDER BY deyimi bir tablodan SELECT ile seçilen verileri sıralamak için kullanılır.

Veri Tabanı ve Yönetimi

VERİ TABANI ve YÖNETİMİ

Oracle da kullanılan veri tipleri:

SQL Kod ile Tablo Oluşturma

VERİTABANI. SQL (Structured Query Language)

SQL e Giriş. Uzm. Murat YAZICI

Tablolar Arası İlşikiler ve Alan Özellikleri. Şekil 1. Magaza veritabanının tabloları ve tablolar arasındaki ilişkiler

Veritabanı sistemlerinde veri bütünlüğünü sağlayabilmek için CONSTRAINTS olarak adlandırılan bazı zorlayıcı ifadeler kullanılabilir.

Gruplama (aggregate) fonksiyonları bir dizi değer üzerinde hesaplama yaparlar ve bir sonuç

DAO İLE SQL KOMUTLARI. Sql komutlarını artık veri tabanında kullanmaktan başka çaremiz yok arkadaşlar. Şimdi bu sql derslerimize başlayalım.

Veritabanı Yönetim Sistemleri (Veritabanı Tasarımı) SQL (Structured Query Language)

BAYİLERİMİZE ÖZEL. 13 Ağustos İlgili Modül/ler : Genel. İlgili Versiyon/lar : ETA:SQL, ETA:V.8-SQL

Veritabanına Uygulanması

SQL PROGRAMLAMA. Bir batch, bir arada bulunan bir dizi SQL deyimidir. Batch ayıracı GO deyimidir.

-- işareti tek satırlık açıklamalarda kullanılır. Açıklama olarak yazılan satırın önüne konulması yeterlidir.

1. Hafta MS SQL Server 2008 Kurulum ve Tanıtımı BPR255 Veritabanı. Bu Derste Öğrenecekleriniz: Kurulum:

Bilgisayar Uygulamaları. MySql

Veri Tabanı Hafta Dersi

VERİTABANI ve YÖNETİMİ

EBE-368 Veri Tabanı Yönetim Sistemleri SQL

SQL Komutları (2) Uzm. Murat YAZICI

PostgreSQL ve PL/pgSQL

Sorgudan elde edilen değerin değişkenlere aktarılmasını sağlar. Sorgudan tek satır dönmesi gerekir, aksi durumda hata olur.

VERĐTABANI YÖNETĐM SĐSTEMLERĐ

3. Hafta Tablo İşlemleri BPR255 Veritabanı. Bu Derste Öğrenecekleriniz: 1. Tablo İşlemleri Kısıtlamalar (Constraints)

Data Programming SQL Language. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Veritabanı. SQL (Structured Query Language)

Elbistan Meslek Yüksek Okulu GÜZ Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU

VERİ TABANI YÖNETİM SİSTEMLERİ I

Microsoft SQL Server Sorgulama

IN ve NOT IN Tablodaki alan içeriklerine ulaşmak için IN deyimi kullanılır.

3. Hafta Tablo İşlemleri BPR255 Veritabanı Yönetim. Bu Derste Öğrenecekleriniz: 1. Tablo İşlemleri

1 - Adi A Harfi İle Biten Kişilerin Listesi İçin Hangisi Kullanılmalıdır? Select * From Kisiler Where Adi End A Select * From Kisiler Where Adi Like

Bölüm 4: DDL Veri Tanımlama Dili

6 Aritmetiksel Operatörler ve Hazır Fonksiyonlar

«BM364» Veritabanı Uygulamaları

TETİKLEYİCİ. Tetikleyici Ne Zaman Kullanılır? Çeşitli amaçlara uygun olarak tetikleyiciler kullanılabilir.

YAPISAL SORGULAMA DİLİ. BARIŞ ARIBURNU barisariburnu.com

ASP.NET CLASS KULLANARAK VERİTABANI İŞLEMLERİ

Öğr. Gör. Cansu AYVAZ GÜVEN VERİTABANI-II. Değişken Tanımlama Ve Akış Kontrol Deyimleri

Lıke Joker Karakterler, Is [not] Null, Order By, Group By, As

BMB202. Veritabanı Yönetimi Ders 6. SQL. Erdinç Uzun NKÜ Çorlu Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

BİLİŞİM TEKNOLOJİLERİ

Çok tablolu sorgulamalar

SQL Deyimleri. Öğr.Gör.Volkan ALTINTAŞ Volkanaltintas.com

Genel Kavramlar. Bilgisayar ortamında işlenebilecek durumda bulunan kayıtlar. Birbiri ile ilişkili veriler topluluğu ve veriler arası ilişkiler

SQL (Structured Query Language) kendisi bir programlama dili olmamasına rağmen bir çok kişi tarafından programlama dili olarak bilinir.

VERİTABANI Veritabanı Yönetimi

PostgreSQL ve PL/pgSQL

Birden Çok Tabloda Sorgulama (Join)

Pursaklar İMKB Teknik ve Endüstri Meslek Lisesi

Transkript:

İÇİNDEKİLER 1. GİRİŞ 2. YENİ TABLO EKLEME 1. COULOMN NAME 2. DATA TYPE 3. ALLOW NULLS 3. ANAHTAR (IDENTİTY) KOLON 4. İNSERT İNTO 5. SELECT, FROM, WHERE, VALUES, SET, UPDATE, AS, GROUP BY, ORDER BY, TOP, PERCENT, HAVING, BEGIN, RETURN, END 6. DELETE 7. SQL FONKSİYONLARI ( MONTH, REVERSE, SUBSTRİNG, LEFT, RİGHT, CHARİNDEX, UPPER ) 8. SQL JOIN 1.CROSS JOİN 2.ENNER JOİN 3. OUTER JOİN ( LEFT / RİGHT ) 9. TABLOLAR ARASI İLİŞKİLER 1. ANAHTAR 2. YABANCI ANAHTAR (FORİGN KEY) 3. UNİON 10. KÜMELEŞME FONSİYONLARI 1. COUNT 2. MAX 3. SUM 11. CREATE VIEW

12. ALTER VIEW 13. DATEDIFF 14. INDEX 1.DROP 2.ALTER 15. TEMPLATE EXPLORER 16. SAKLI YORDAMLAR (STORED PROCEDURE) 1. SUB 2. STORED PROCEDURE 3. CREATE PROC 4. ALTER PROC 5. IF - ELSE 17. KULLANICI TANIMLI FONKSİYONLAR 1. SKALER DEĞERLİ FONKSİYONLAR 2. TABLO DEĞERLİ FONKSİYONLAR 18. TETİKLEYİCİLER (TRIGGER) 1. ALTER TRIGGER 1. INSERT 2. DELETE 3. UPDATE 2. INSTEAD OF TRIGGER

Market örneği. GİRİŞ İlişkisel veri tabanı: Şehir ilçeler bağlantısı örneğini sadece bu sayede yapabiliriz. SQL 2005 güzel bir program. En son 2008 sürümü çıktı. SQL Structured Query Language kelimelerinin ilk harflerinden oluşur. MS SQL Server ücretli, fakat experss sürümü ücretsiz. ORACLE programıda gelmiş geçmiş en iyi programlardan birtanesi. Program yıllık kiralanıyor ve pahalı. MySql ve Postgre programları tamamen ücretsiz. SQL Structured Query Language kelimelerinin ilk harflerinden oluşur. Bu dersimizde SQL lisanını öğreneceğiz. Örnek: Git bana şu bilgiyi bul, değiştir veya sil. Şu iki tabloyu ilişkilendir ve istediğim bilgileri bana göster.

Tablolar Tablo dediğimiz şey 2 boyutlu bir matris. Kolonları ve satırları var. A B C D tables ın üzerine sağ tıkla ve new table tıklayarak o dizinde yeni tablo açabilirsin. Yeni tablo ekle yi tıkladıktan sonra aşağıdaki pencere açılacaktır.

Burada; 1. Coulomn name 2. Data type 3. Allow nulls Seçenekleri gelecektir. 1. Coulomn name: Vereceğinizi ismin girişinin yapıldığı yerdir. Türkçe karakterler kullanmamaya çalışın ve isimleri verirken Sehir, IpNo, Kolon_Ad gibi yazım formatlarını kullanmanız yararınıza olacaktır. 2. Data type: Burada, yeni açmış olduğunuz kolona girilecek verilerin tiplerini belirtmelisiniz. Örnek : sütun isimleri x ve y olan iki sutunun bütün satılarına veri olarak 1 i giriniz. Yeni tablo açı tıkla Adı:x Adı:y 2 satır ve 2 sütuna 1 1 gir Kırmızı ünlem işareti çıkıyor Çünkü satırları birbirinden ayıramıyor. Veri tabanında herhangi iki satırı birbirinden ayırt edecek bir kolana gerek vardır. İki tane aynı isim olduğunda tc numarası veya öğrenci numarası birbirinden ayıt etmeye yarıyor. Bu nedenle bu tür bir kimlik gerekiyor. Acsess te bu anahtarı otamatik olarak soruyor. Çünkü bu program daha düşük düzeyde bilgisi olanlar için yazılmıştır. Acsees de bu uyglamayı yap! Ama sql server asla bunu teklif etmez. Bunu yapmanın birçok yolu var. Tc no veya okul numarası bu amaçla kullanılabiliyor. Öğrenci numarasının bir mantığı var : 2006911416 Bu verilen numara isim sırası giriş yılı ve fakülte gibi bilgileri içeriyor.

Bunun gibi bir anahtarı biz belirleyebiliyoruz. Ama aynı zamanda sql bunu otomatik olarak da belirleyebilir Identify (kimlik) kolon IDENTİTİY BU KOLONU NUMARLANDIRIR. IDENTİTY ICREMENT: (DELTA DERSEK) NUMARALANDIRMA KAÇAR KAÇAR ARTARAK DEVAM EDECEĞİNİ BELİRTİR IDENTİTİY SEED (KİMLİĞİN ÇEKİRDEĞİ): ( S DERSEK) NUMARALANDIRMA İŞLEMİNİN HANGİ SAYIDAN BAŞLAYACAĞINI GÖSTERİYOR. S, S+DELTA,S+2DELTA ŞEKLİNDE GİDECEKTİR.

5 İLE BAŞLAYIP 7 ŞER ARTACAKTIR. KİMLİK KOLONUNA YAZI YAZMAYA İZİN VERMİYOR. BİR SATIRI SİLELİM YENİ BİR SATIR EKLEDİĞİMİZDE ACABA 12 NUMARASINI TEKRAR VERECEK Mİ? HAYIR ASLA AYNI NUMARAYI BİR DAHA VERMEZ. YAPILAN NUMARALANDIRMAYI DEĞİŞTİRMEK İSTERSEK NE OLUR? EN SON KALDIĞI NUMARADAN İTİBAREN YENİ ARTIRIMI DEVAM ETTİRMEYE BAŞLAR. AYNI NUMARAYI TEKRAR VERME OLASILIĞI OLABİLİR. AMA SQL BU KOLONU ANAHTAR OLARAK SEÇMEDİĞİMİZ İÇİN İTİRAZ ETMEYEBİLİR. TABLODA YAZILAN VERİLER SATIR DEĞİŞTİRMEDEN COMİT ETMEZ (AL BU VERİYİ GİT DİSKE YAZ İŞLEMİ). *ESC TUŞU İLE YAZDIĞIMIZI YOK EDEBİLİRİZ. VERİLERİ DİSKE SIRAYLA YAZMIYOR. BİR AĞAÇ VAR ONUN ÜZERİNDE YAPRAKLAR VAR VE VERİLERİ BU YAPRAKLAR ÜZERİNE YAZIYOR.

VERİLERİ KİMLİK NUMARALARINA GÖRE SIRALATABİLİRİZ. ID.. NO YAPTIĞIMIZ ZAMAN KİMLİK KOLONUNA VERİ GİRİŞİ YAPABİLİRİZ.

KİMLİK KOLONUNU ANAHTAR YAPTIK. ARTIK O KOLONA AYNI VERİ GİRİLDİĞİNDE BİZİ UYARACAK VE ENGELLİYECEK. IDENTİTY KOLONU HER ZAMAN TABLONUZA KOYUN BU KOLONU İNT YAPARSANIZ 2 MİLYAR VERİ GİREBİLİRSİNİZ. BİR KOLONU IDENTİTİY OLARAK SEÇTİĞİNDE İZİN VERMİYOR ÇÜNKÜ VCHAR(METİN) METİNLER KARAKTERLER OLAMAZ. İNT VEYA OLMALI. İNSERT İNTO DEYİMİ

BU TABLOMA BU KOLONLARINA BU DEĞERLERİ GİR DEMEKTİR. KOLON SAYISIYLA DEĞER SAYISI AYNI OLMALI İKİNCİSİ İ. KOLON İLWE İ. DEĞER AYNI TİPTE OLMALI INSERT INTO TABLO_ADI VALUES (DEĞER1, DEĞER2,...) BU ŞEKİLDE DE YAZILABİLİR BEN ÜŞENGECİN BİRİYİM İDENTİTY KOLONA VERİ GİRİLEMEZ BU NEDENLE BU YÖNTEM BİRAZ RİSKLİ INSERT INTO KİMLİKLİTABLO (X, Y) VALUES ('AHMET', 'VELÝ') KİMLİK TABLOSUNA YENİ BİR SATIR EKLİYORUM ADI BİRİNCİ KOLON AHMET, İKİNCİ KOLON VELİ OLSUN HATA VERMİYOR AMA İDENTİTY Yİ KALDIRIRSAK HATA VERECEKTİR. ÇÜNKÜ 4 KOLON VAR AMA 3 VERİ GİRİLİYOR

INSERT INTO KİMLİKLİTABLO SELECT 'AYÞE','FATMA', 1 BAŞKA TABLODAN KENDİ TABLOMUZA VERİ AKTARABİLİRİZ INSERT INTO KİMLİKLİTABLO (X, Y) SELECT IL.ILKOD, ILCE.ILCEAD FROM ILCE INNER JOIN IL ON ILCE.ILKOD=IL.ILKOD WHERE IL.ILKOD=1 UPDATE ŞU KOLONUN DEĞERİNİ ŞU YAP, BU KOLONUN DEĞERİNİ ŞU YAP OPENTABLE DE BİR TABLE AÇIP ORADAKİ BİR KOLONA VERİ GİRDİĞİMİZDE KALEM ÇIKAR O ONA UPDATE EDİYOR ANLAMINDADIR ÖR: KIMLIKTABLOSU NDA MEHMET KOLONUNDAKİ KİMLİK 41 SATIRINI MEHMET YAP UPDATE KİMLİKTABLOSU SET AD='MEHMET' WHERE KIMLIK=41

PROGRAM ÇALŞTIĞINDA UPDATE KİMLİKTABLOSU SET AD='MEHMET' WHERE KİMLİK=41 SELECT * FROM KİMLİKTABLOSU OLARAK DEĞİŞİR

UPDATE KİMLİKTABLOSU SET AD='MEHMET' --WHERE KİMLİK=41 SELECT * FROM KİMLİKTABLOSU WHERE YAZMAZSAK AD SÜTUNUNUN TAMAMI MEHMET OLUR.. EĞER YEDEK ALMAZSAK BU YANLIŞI YAPARSAK SONUÇLARI ÇOK KÖTÜ OLABİLİR UPDATE KİMLİKTABLOSU SET AD='HASAN' WHERE KİMLİK>=41 AND KİMLİK<=60 SELECT * FROM KİMLİKTABLOSU KODU İLE BELİRLİ VERİ ARALIĞINI DEĞİŞTİREBİLİRİZ

DELETE DEYİMİ: DELET FROM KİMLİKTABLOSU TABLONUN İÇİNİ TAMAEN SİL DELETE FROM KİMLİKTABLOSU WHERE KİMLİK=25 SELECT *

FROM KİMLİKTABLOSU

SQL FONKSİYONLARI

AMERİKA VE İNGİLTEREDE ÖNCE AY SONRA GÜN OKUNUR SELECT MONTH(CONVERT(DATETIME,'07.09.2009',104)) SANA VERİLEN TARİHİ ALMANCA YAZILMIŞ GİBİ DÜŞÜN ONA GÖRE TARİHİ BELİRT

SELECT REVERSE('AHMET') --TERSTEN YAZMA ÝÞLEMÝNÝ YAPIYOR

CÜMLEYİ FRANSIZCA GÖR DEMEK CI: CASE INSENTİTIVE: BÜYÜK KÜÇÜK HARFE ALDIRMADAN KARŞILAŞTIR AC:ACCENT SENSITIVE: NOKTALI HARFLERE DİKKAT ET

SQL JOİN CROSS JOIN ENNER JOIN OUTER JOIN -LEFT / RIGHT CROS JOIN İKİ VEYA DAHA FAZLA KULLANILAN KARTEZYEN ÇARPIMI DİSAİN NEW QUERY (SAĞ TIKLA) SELECT A_TABLO.N, A_TABLO.AD, B_TABLOSU.N AS TABLOBNİNNSİ, B_TABLOSU.F FROM A_TABLO CROSS JOIN B_TABLOSU SELECT * FROM A_TABLO SELECT * FROM B_TABLOSU SELECT FROM A.N, A.AD, B.N AS B_DEN_GELEN_N, B.F A_TABLO AS A CROSS JOIN B_TABLOSU AS B A_TABLO=A OLMUŞ OLDU. INNER JOIN SELECT SELECT LİSTEN FROM A INNER JOIN B ON KOŞUL

ÖNCE AXB Yİ OLUŞTUR VE BUNLARIN İÇİNDEN ON DAN SONRA GELEN KOŞULA UYGUN OLANLARIN LİSTESİ. SELECT FROM A.AD, B.N AS B_DEN_GELEN_N, B.F A_TABLO AS A INNER JOIN B_TABLOSU AS B ON A.N = B.N

SELECT FROM IL.ILKOD, IL.ILAD, ILCE.ILCEKOD, ILCE.ILCEAD ILCE INNER JOIN IL ON ILCE.ILKOD = IL.ILKOD

LEFT OUTER JOIN SELECT SELECT LİSTESİ FROM A LEFT OUTER JOIN B ON KOÞUL

SAĞ TIKLA VE, SELECT ALL FROM A TABLO SEÇ. SELECT FROM A_TABLO.N, A_TABLO.AD, B_TABLOSU.N AS EXPR1, B_TABLOSU.F A_TABLO LEFT OUTER JOIN B_TABLOSU ON A_TABLO.N = B_TABLOSU.N A TABLOSUNUN TAMAMINI B İÇİN KOŞULU SAĞLAYANLARIN KENDİLERİNİ, KOŞULU SAĞLAMAYANLAR İÇİN NULL GETİRİYOR. SORU: İL TABLOSUNDA OLUPTA HİÇBİR İLÇESİ OLMAYAN KAÇ TANE İL VAR? SELECT FROM IL.ILKOD, IL.ILAD IL LEFT OUTER JOIN ILCE ON IL.ILKOD = ILCE.ILKOD

WHERE (ILCE.ILKOD IS NULL) ANAHTAR A EV B TABLOSUNDA N SÜTUNUNU ANAHTAR YAPARSAK OTOMATİK İKİSİNİ BİRLEŞTİRİYOR. FORIGN KEY (YABANCI ANAHTAR): BİR BAŞKA TABLONUN ANAHTARINA BAŞVURUP ONU SAKLIYOR.

UNION SELECT L1,L2,,LN FROM.. UNION SELECT R1,R2,,RN FROM [UNION SELECT S2,S2,,SN FROM ] UNİON DA GEÇEN SELECT LİSTELERİNDEKİ KALAN SAYILARIN OLMALIDIR. AYNI SELECT 1 AS A, 2 AS B UNION SELECT 1 AS A, 2 AS B UNION SELECT 3 AS A, 4 AS B VERİLERDEN AYNI OLANARI SİLİYOR.

SELECT N, AD FROM DBO.A_TABLO UNION SELECT N,F FROM DBO.B_TABLOSU DAİMA İLK YAZDIĞIMIZ İSİMLERİ SEÇER. (N,AD N,F AMA LİSTEDE N,AD VAR) SELECT 1 AS A, 'AHMET' AS B

UNION SELECT 1 AS A, 2 AS B AYNI İBDİKSLİ KOLONLAR AYNI TİPTE OLMALIDIR. SELECT 1 AS A, 2 AS B UNION ALL SELECT 1 AS A, 2 AS B UNION ALL HEPSİNİ GÖSTERİYOR KÜMELEŞME FONSİYONLARI SELECT COUNT (KOLON_ADİ) [,R1,,RN] FROM TABLOLAR [WHERE KOŞUL] [GROUP BY R1,,RN] [HAVING KOŞUL] [ORDER BY ] COUNT

BU TABLOLARDAN ELDE EDİLEN SATIR SAYISINI LİSTELER SELECT FROM COUNT(*) AS EXPR1 ILCE INNER JOIN IL ON ILCE.ILKOD = IL.ILKOD MAX SELECT MAX(N) FROM B_TABLO

SUM SORU: İSTANBUL İLİNİN KAÇ İLÇESİ VAR?

SELECT COUNT(*) FROM IL INNER JOIN ILCE ON IL.ILKOD = ILCE.ILKOD WHERE IL.ILKOD=34 SORU : IL ADINA GÖRE İLÇE SAYMA! SELECT COUNT(*) FROM IL INNER JOIN ILCE ON IL.ILKOD = ILCE.ILKOD WHERE IL.ILAD='BATMAN' SORU: BÜTÜN İLLERİN İLÇE SAYILARINI YAZAN PROGRAM? SELECT COUNT(*), IL.ILAD FROM IL INNER JOIN ILCE ON IL.ILKOD = ILCE.ILKOD GROUP BY IL.ILAD

SELECT SUM(TAHSİLAT) AS TOPLAMTAHSİLAT, N FROM HARCLARTABLOSU GROUP BY N HAVING SUM(TAHSİLAT)=0 SELECT * FROM DBO.HARCLARTABLOSU

SELECT SUM(TAHSİLAT) AS TOPLAMTAHSİLAT, N FROM HARCLARTABLOSU GROUP BY N HAVING SUM(TAHSİLAT)<=500 SELECT * FROM DBO.HARCLARTABLOSU

SORU: 10 DAN FAZLA İLÇESİ OLAN İLLERİ BULUNUZ?

SELECT FROM COUNT(*) AS ILCESAY, IL.ILAD IL INNER JOIN ILCE ON IL.ILKOD = ILCE.ILKOD GROUP BY IL.ILAD HAVING (COUNT(*) > 10) SORU: A_TABLO TABLOSU İKİ KOLONDAN OLUŞMAKTADIR N: İNT AD: VARCHAR(20) BU TABLOYA DAHA ÖNCE 1000000 VERİ GİRİLMİŞTİR. ÖNCE ANAHTAR OLMAKLA BİRLİKTE ŞİMDİ N KOLONU TABLONUN ASIL ANAHTARI YAPMAK GEREKMEKTEDİR. BU AMAÇLA TABLO DİSİNG MODUNDA AÇILMIŞ VE N KOLONLU ANAHTAR OLARAK İŞARETLENMİŞTİR. FAKAT DEĞİŞİKLİK KAYDEDİLEK İSTENDİĞİNDE N KOLONUNUN BENZERSİZ VERLER İERMEDİĞİ HATA MESAJI ALINMAKTADIR. DURUMU DÜZELMEK AMACIYLA BU N LERİN BİLİNMESİ GEREKMEKTEDİR. BU N LERİ BULAN BİR SQL YAZINIZ? SELECT COUNT(*) AS SAY, N FROM A_TABLO GROUP BY N

HAVING (COUNT(*) > 1) 03.11.09 CREATE VIEW DEYİMİ VİEW: DİSK ÜZERİNE TANIMI DIŞINDA YAZILMAYAN BİR SANAL TABLO OLARAK DÜŞÜNÜLEBİLİR.

SELECT İ HER SEFERİNDE YAZMAK YERİNE SAKLAMAK İSTEYEBİLİRİZ. BİR SELECT DEYİMİ GİBİ YAZILDIKTAN SONRA BU DEYİMİN BİR YERE SAKLANMASINI DİLEYEBİLİRSİNİZ. VİEW OLUŞTURULMASI: CREAT VIEW VADI AS SELECT DEYİM KULLANIM ŞEKLİ: SELECT FROM V.ADI

CREATE VIEW V_IL_ILCE AS SELECT B.ILKOD, B.ILAD, A.ILCEKOD, A.ILCEAD FROM ILCE AS A INNER JOIN IL AS B ON A.ILKOD = B.ILKOD YAPMIŞ OLDUĞUMUZ BU KOMUTU BİRYERE KAYDETTİ.

DAHA ÖNCE SEÇTİĞİMİZ TABLONUN KOLONLARINIDA BİZE GÖSTERİYOR. SORU: ADLARI TEKRAR EDEN İLÇELERİN TEKRAR ETME SAYISINI SÖYLEYEN BİR SQL YAZINIZ. SELECT COUNT(*) AS ILCE_SAYISI, ILCEAD FROM ILCE

GROUP BY ILCEAD HAVING (COUNT(*)>1) SORU: İLÇELERİN HANGİ İLLERDEN OLDUKLARINI GÖSTEREN BİR PROGRAM YAZINIZ? SELECT COUNT(*) AS ILCE_SAYISI, ILCE.ILCEAD, IL.ILAD, ILCE.ILKOD AS EXPR1, ILCE.ILCEKOD FROM ILCE INNER JOIN IL ON ILCE.ILKOD = IL.ILKOD GROUP BY ILCE.ILCEAD, IL.ILAD, ILCE.ILKOD, ILCE.ILCEKOD HAVING (COUNT(*) > 1)

SELECT COUNT(*) AS ILCE_SAYISI, ILCE.ILCEAD, IL.ILAD, ILCE.ILKOD AS EXPR1, ILCE.ILCEKOD FROM ILCE INNER JOIN IL ON ILCE.ILKOD = IL.ILKOD GROUP BY ILCE.ILCEAD, IL.ILAD, ILCE.ILKOD, ILCE.ILCEKOD --HAVING (COUNT(*) > 1) ÇİFTLERE GÖRE GRUPLADIĞIMIZ İÇİN ÇİFLERDEN AYNI OLAN VARMI DİYE SAYIYOR ODA BİRDEN BÜYÜK OLAMAYACAĞI İÇİN TABLO BOŞTU. AMA EN ALLTAKİ HAVİNG KOMUTUNU ALMAZSAK PROGRAMI ÇALIŞACAKTIR. BUNU ÇÖZMENİN EN İYİ YOLU BİR TANE VİEW YAZMAKTIR. CREATE VIEW V_TEKRAR_EDEN_ILCELER AS SELECT COUNT(*) AS ILCE_SAYISI, ILCEAD FROM ILCE GROUP BY ILCEAD HAVING (COUNT(*) > 1)

SELECT İ YAZILMIŞ VE BİR YERE YAZILMIŞ BEKLİYOR SELECT FROM V_TEKRAR_EDEN_ILCELER

SELECT V_TEKRAR_EDEN_ILCELER.ILCE_SAYISI, V_TEKRAR_EDEN_ILCELER.ILCEAD, IL.ILKOD, IL.ILAD FROM V_TEKRAR_EDEN_ILCELER INNER JOIN ILCE ON V_TEKRAR_EDEN_ILCELER.ILCEAD = ILCE.ILCEAD INNER JOIN IL ON ILCE.ILKOD = IL.ILKOD ORDER BY V_TEKRAR_EDEN_ILCELER.ILCEAD

ÖRNEK: YENİ TABLO OLUŞTURUYORUZ. INSERT INTO KIMLIK (TC_KIMLIK_NO,AD,SOYAD,NUFUS_ILKOD,DOGUM_TARIHI,DOGUM_ILKOD) VALUES (28141232345,'ALİ','ÇETİNKAYA',51,'01.05.1981',51) SELECT * FROM KIMLIK

YENİ DATABESE YÜKLEME: EKSTRA BİLGİ TASK-RESTORE_DATABASE FROMDEVİCE TABLOYU GÖSTER ALTTAN SEÇ OK DERSEN ÇALIŞMAZ. OPTİONS OVERWRİTE THE.. SEÇ OK DERSEN YÜKLE. ALTER VIEW :ÖNCE YAPILAN VİEW İ DEĞİŞTİRMEK SORU: ADI V_KIMLIK OLAN BİR VİEW YAZINIZ? BU VİEW KIMLIK TABLOSUNDAN GELEN VERİLERİ IL TABLOSU İLE (İL TABLOSUNDAN 2 TANE GEREKECEK) BAĞLAYARAK KİMLİK BİLGİLERİNİ NUFUS İLİNİN ADINI VE DOĞUM İLİNİN ADINI GETİRSİN.

SELECT V_KIMLIK.TC_KIMLIK_NO, V_KIMLIK.AD, V_KIMLIK.SOYAD, V_KIMLIK.NUFUS_ILKOD, V_KIMLIK.DOGUM_TARIHI, V_KIMLIK.DOGUM_ILKOD, IL.ILAD, IL_1.ILAD AS EXPR1 FROM V_KIMLIK INNER JOIN IL ON V_KIMLIK.NUFUS_ILKOD = IL.ILKOD INNER JOIN IL AS IL_1 ON V_KIMLIK.DOGUM_ILKOD = IL_1.ILKOD SORU: ADI AYNI OLANLARIN SAYISI NEDİR?

SELECT COUNT(*) AS EXPR1, AD FROM KIMLIK GROUP BY AD SORU: EN ÇOK X.. İSMİ HANGİ İLDE VAR? ALTER VIEW V_MAX_ALI_IL AS SELECT TOP (100) PERCENT COUNT(*) AS SAY, IL.ILAD FROM KIMLIK INNER JOIN IL ON KIMLIK.DOGUM_ILKOD = IL.ILKOD WHERE (KIMLIK.AD = 'ALİ') GROUP BY IL.ILAD ORDER BY SAY SELECT SAY, ILAD FROM V_MAX_ALI_IL WHERE (SAY = (SELECT MAX (SAY) FROM V_MAX_ALI_IL

SORU(1): KULLANICI VE KULLANICI BİLGİLERİNİ GÖSTEREN BİR SQL PROGRAMI YAZINIZ? SELECT KULLANICI.IPTAL_TAR, KULLANICI.BAS_TAR, KULLANICI.KULLANTUR, KULLANICI.ADRES, KULLANICI.TEL_NO, KULLANICI.SOYAD, KULLANICI.AD, KULLANICI.KULLAN_NO, KULLAN_BILGI.KULLANAD, KULLAN_BILGI.GECIKMECEZA, KULLAN_BILGI.ODUNC_SURE FROM KULLANICI INNER JOIN KULLAN_BILGI ON KULLANICI.KULLANTUR = KULLAN_BILGI.KULLANTUR

SORU(2): KİTAPLARDAN YAZARLARI HENÜZ GİRİLMEMİŞ OLANLARIN LİSTESİ? SELECT FROM WHERE K.KITAP_NO, K.KITAP_AD, K.ISBN KITAP K LEFT OUTER JOIN YAZARLAR Y ON K.KITAP_NO = Y.KITAP_NO (Y.KITAP_NO IS NULL) SORU (8): AŞAĞIDAKİ BİLGİLER TAŞIYAN KİTABI KITAP TABLOSUNA GİREN BİR SQL YAZINI? KİTABIN ADI: ADIM-ADIM SQL SERVER, ISBN=123456, KOPYA SAYISI:3, RESERVE:0 VERİLERİNİ GİRECEK. INSERT INTO KITAP(KITAP_AD, ISBN, KOPYA_SAY, RESERVE) VALUES('ADÝM-ADÝM SQL SERVER','123456','3','0')

SORU(9): 8. SORUDA GİRİLEN KİTABIN KITAP_NO SU 6 DIR. BU KİTABI YAZAR_NO SU 3 OLAN YAZAR YAZDIĞINA GÖRE YAZARLAR TABLOSUNA GEREKLİ VERİYİ GİREN BİR SQL YAZINIZ? SORU(3): '01.01.2008' TARİHİNDE ÖDÜNÇ VERİLEN KİTAPLAR VE KULLANICILAR? SORU(10): 2004415027 KULLAN_NO NUMARALI KULLANICI 5KITAP_NO NUMARALI KİTABI 01.01.2008 TARİHİNDE ÖDÜNÇ ALMAK İSTİYOR. BU KİTABIN ALINABİLİR OLDUĞUNU VARSAYALIM. BU KULLANICI İÇİN ODUNC TABLOSUNA BU ODUNÇ ALMA İŞLEMİNİ YANSITAN VERİYİ GİREN BİR SQL YAZINIZ? INSERT INTO ODUNC(KITAP_NO, KULLAN_NO, BASLA_TARIH, BITIS_TARIH) --VALUES(5,2004153027,'01.01.2008','') --BİTİÞ TARİHİ KULLANÝCÝYA GÖRE DEÐİÞTİÐİ İÇİN DİREK GİREMEYİZ! SELECT 5, 2004153027, '01.01.2008', DATEADD(DAY, B.ODUNC_SURE,'01.01.2008') FROM KULLANICI AS K INNER JOIN KULLAN_BILGI AS B ON K.KULLANTUR = B.KULLANTUR SELECT * FROM ODUNC

SORU(4): ÖDÜNÇ VERME TARİHİ BİTTİĞİ HALDE HALEN GERİ GETİRİLMEYEN KİTAPLARIN VE KULLANICILARIN LİSTESİ SELECT X.KULLAN_NO, X.AD, X.SOYAD, K.KITAP_AD, K.ISBN, A.BASLA_TARIH, A.BITIS_TARIH, A.IADE_TARIH, A.CEZA FROM ODUNC AS A INNER JOIN KULLANICI AS X ON A.KULLAN_NO = X.KULLAN_NO INNER JOIN KITAP AS K ON A.KITAP_NO = K.KITAP_NO WHERE (A.BITIS_TARIH < GETDATE()) AND (A.IADE_TARIH IS NULL)

SORU(5): 2005153008 NUMARALI KULLANICI (VARSA) İADE ETMEDİĞİ HER BİR KİTAP İÇİN UYGULANACAK CEZA SELECT B.GECIKMECEZA * DATEDIFF(DAY, A.BITIS_TARIH, GETDATE()) AS CEZA, A.KITAP_NO FROM ODUNC A INNER JOIN KULLANICI B ON A.KULLAN_NO = B.KULLAN_NO INNER JOIN KULLAN_BILGI B ON B.KULLANTUR = B.KULLANTUR WHERE (A.BITIS_TARIH < GETDATE()) AND (A.IADE_TARIH IS NULL) AND (A.KULLAN_NO = 2005153008) DATEDIFF: SELECT DATEDIFF(DAY,'11.10.2009',GETDATE()) --TARİHLER FARKINI HESAPLAYAN FONKSİYON --DAY, MOUNTH, HOUR, SECOND OLARAKTA FARKINI ALABİLİRİZ. SORU(6): İADE EDİLMEYEN KİTAPLAR İÇİN UYGULANACAK CEZALARI KULLANICILARA VE KİTAPLARA GÖRE VEREN BİR V_CEZALAR İSİMLİ BİR VIEW YAZINIZ?

CREATE VIEW V_CEZALAR AS SELECT B.GECIKMECEZA * DATEDIFF(DAY, GETDATE(), A.BITIS_TARIH) AS CEZA, A.KITAP_NO, B.KULLAN_NO FROM ODUNC A INNER JOIN KULLANICI B ON A.KULLAN_NO = B.KULLAN_NO INNER JOIN KULLAN_BILGI B ON B.KULLANTUR = B.KULLANTUR WHERE (A.BITIS_TARIH < GETDATE()) AND (A.IADE_TARIH IS NULL) SORU(7): YUKARIDAKİ V_CEZALAR SANAL TABLOSUNU KULLANARAK ÖDENECEK TOPLAM CEZALARI KİŞİLERE GÖRE VEREN ADI V_TOPLAMCEZA OLAN BİR VIEW CREATE VIEW V_TOPLAMCEZA AS SELECT SUM(CEZA) AS TOPLAM_CEZA, KULLAN_NO FROM V_CEZALAR GROUP BY KULLAN_NO INDEX (VERİ_TABANI_DERSİ_NOTLARI5) 24.11.2009 DİĞERLİMKİ ELİNİZDE BİR SÖZLÜK VAR. O SÖZLÜĞÜN İÇİNDE MALİYET KELİMESİNİ BULMAYA ÇALIŞIYORUZ. SÖZLÜĞÜ ORTADAN AÇIYORUZ. NE TARAFA M HARFİ DÜŞÜYORSA O TARAFTA ORTAYI AÇIYORUZ. MALİYET KELİMESİNİ BİRKAÇ SEFERDEN SONRA KOLAYCA BULABİLİYORUZ. BİLGİSAYARDA İKİLİ ARAMA ALGORİTMASI VARDIR. SIRALI BİR DİZİDE HARHANGİ BİR ŞEYİ ARAKEN KULLANIYORUZ. DİZİYİ İKİYE BÖL ALTTA KALIYORSA ALTI İKİYE BÖL İKİ ÜZERİ 60 ÇOK BÜYÜK BİR SAYIDIR. BU KADAR VERİNİN OLDUĞU BİR DİZİDE BU YÖNTEMİ KULLANARAK 60 DENEMEDEN SONRA İSTEDİĞİNİZİ BULABİLİRSİNİZ.

Y KOLONU İÇİN BANA BİR İNDEKS TUT: BU YÖNTEM KULLANILARAK MUAZZAM BİR HIZDA ARAMALAR YAPILABİLİR. SİPARİŞLER SAĞ TIK DİZAYN SAĞ TIK İNDEXES/KESY TIKLA SİAPRİŞLER SAĞ TIK, SCRİPT TABLE AS TIKLA CREAT TO NEW QUERY

SAĞ TIKLA YENİ İNDEX YAP AĞAIDAKİ DEĞİŞİKLİKLERİ YAP

İKİNCİ SATIRA DİSKE YAZAMAM IX İNDEKS TABLOSUNDA BİR HATA YAPTIM BUNA MÜSAADE EDEMEM.

İNDEX İ SİLMEK İSTİYORSAK DROP YAZIYORUZ DROP TABLE TABLO_AD TEMPLATE EXPLORER:

ALTER: DEĞİŞİKLİK YAP DEMEK. ALTER TABLE DEYİMİ BİR TABLONUN KOLONLARI NA EKLEME, KOLONLARDAN BAZI LARI NI SİLME, KOLONLAR ÜZERİNDE KISITLAMALAR VEYA İNDEX TANI MLAMA DA KULLANILIR. ALTER TABLE DERLER_TABLOSU ADD SAAT İNT DEFAULT (0) NOT NULL

ALTER TABLE DERSLER ADD KREDİ REAL DEFAULT (0) NOT NULL SAKLI YORDAMLAR (STORED PROCEDURE) (DERS NOTLARI 7) SUB BİR PROGRAMI PARÇALARA BÖLMEYE YARAR. İŞİ GÖREV TAKSİMİMİ YAPARAK DAĞITMAKTIR. YADA HEP AYNI ŞEKİLDE YAPILAN İŞLERİ BİR YERE

TOPLAYIP BİR DEFADA BU İŞLERİ BİR ARAYA TOPLAYIP HIZLI BİR ŞEKİLDE YAPMAMIZI DA SAĞLAYABİLİR. VİSUAL BASİC DE BUNLAR KULLANILIR. SQL SERVER DADA BU YAPILABİLİR. BU İŞLEM İÇİN SQL DE YAPILANLARI ÖĞRENECEĞİZ. MODÜLER PROGRAMLAMA YAPMAMIZI SAĞLAR. İŞLEMLERİN DAHA HIZLI YAPILMASINI SAĞLARLAR. AĞ TRAFİĞİNİ AZALTIR. GÜVENLİK ARACI OLARAK KULLANILABİLİR. STORED PROCEDURE

SX_ASAL SAĞ TIKLA ÖZELLİKLERİ TIKLA PERMİSSİONS DAN AYARLARI YAPILABİLİR. CREATE PROC [ EDURE ] SAKLI _YORDAM_ADI [ ; SAYI ] [ { @GİRDİ DATA_TİPİ } [ = DEFAULT ] [ OUTPUT ] ] [,...N ] AS SQL_DEYİMLERİ KENDİMİZE YENİ BİRTANE YAZALIM. DERSLER TABLOSUNU ÖNÜMÜZE GETİRSİN.

CREATE PROC SX_DERSLER AS SELECT * FROM DERSLER EXEC SX_DERSLER (ÇALITRMA KOMUTU) EXEC SX_DERSLER MT121 YAZARSAK TABLODA MT121 DERSLERİ GELİR. DBO.SX_DERSLERE SAĞ TIKLA MODFİY DE AÇILAN KOMUTLARI DEĞİŞTİR. ALTER: DEĞİŞİKLİK YAP DEMEK ALTER PROC [DBO].[SX_DERSLER] @D İNT AS SELECT * FROM DERSLER WHERE DONEM=@D D DEĞİŞKEN DEĞİKEN OLDUĞUNU ANLAMASI İÇİN BŞINA @ KOYUYORUZ. EXEC SX_DERSLER 1

CREATE PROC SX_DERSGIR @DONEM INT, @KOD VARCHAR(6), @GRUP INT, @AD VARCHAR(60), @SAAT INT, @KREDI REAL AS INSERT INTO DERSLER (DONEM,DERS,GRUP,DERSIN_ADI,SAAT,KREDI) VALUES(@DONEM, @KOD, @GRUP,@AD,@SAAT,@KREDI) ÇALIŞTIRMMAK İÇİN : EXEC SX_DERSGIR 1,'MT487',1,'SQL SERVER',4,3 INDEX YAPTIĞIMIZ İÇİN AYNI PROGRAMI BİRDAHA ÇALIŞTIRDIĞIMIZDA HATA VERMESİ LAZIM:

KULLANICI BÖYLE BİR MESAJLA KARŞILAŞIRSA NE OLDUĞUNU ANLAMAZ. BU PROSEDÜRÜN DOĞRU ÇALIŞIP ÇALIŞMADIĞINI ANLAYACAK BİR KOD YAZILMALI VE İKAZ ETMELİ. STORED PROCEDURE, BİR YANDAN VERİ GİRERKEN BİR YANDAN DA KONTROL YAPMA ŞANSI VERİYOR BİZE. ALTER PROC [DBO].[SX_DERSGIR] @DONEM INT, @KOD VARCHAR(6), @GRUP INT, @AD VARCHAR(60), @SAAT INT, @KREDI REAL AS IF EXISTS( SELECT * FROM DERSLER WHERE DONEM=@DONEM AND KOD=@KOD AND GRUP=@GRUP ) BEGIN SELECT 'GIRMEK ISTEDIGINIZ DERS ZATEN VAR!' RETURN -1 END INSERT INTO DERSLER (DONEM,KOD,GRUP,DERSIN_ADI,SAAT,KREDI) VALUES(@DONEM, @KOD, @GRUP,@AD,@SAAT,@KREDI) RETURN 0 NOT: RETURN (HATA NUMARASI) ÖR: RETURN -1 : -1 NUMARALI HATA MESAJI NOT: BAŞKA VERİ TABANINA BAŞVURULACAĞI ZAMAN TABLO İSMİ SAISLEMLER.DBO.SX_DERSGIR ŞEKLİNDE GİRİLİR.

STORED PROCEDURES ÜZERİNE SAĞ TIKLAYIP EXCUTE DERSEK GELEN TABLOYUDA DOLDURARAK EKLEYEBİLİRİZ.

01.12.2009 STORED PROCEDURE DERSİNE TEKRARI IF KOŞUL (KOŞUL DOĞRUYSA YAP) ELSE (KOŞUL DOĞRU DEĞİLSE YAPILACAK İŞLEMLER) IF KOŞUL BEGIN ( YAPILACAK İŞLEMLER) END ÖRNEK: DERSLER ARASINDAN DÖNEM DERS VE GRUBU VERİLEN BİR DERSİ SİLEN BİR YORDAM YAZINIZ. CREATE PROC SX_DERSSIL @DONEM INT, @KOD VARCHAR(6), @GRUP INT AS IF NOT EXISTS( SELECT * FROM DERSLER WHERE DONEM=@DONEM AND KOD=@KOD AND GRUP=@GRUP ) BEGIN SELECT 'SÝLMEK ISTEDIGINIZ DERS YOK!' RETURN -1 END

DELETE FROM DERSLER WHERE DONEM=@DONEM AND KOD=@KOD AND GRUP=@GRUP RETURN 0 CREATE PROC SX_DERSDEGIS @ID INT, @DONEM INT, @GRUP INT, @KOD VARCHAR(6), @AD VARCHAR(60), @SAAT INT, @KREDI REAL AS UPDATE DERSLER SET DONEM=@DONEM, GRUP=@GRUP, KOD=@KOD, DERSIN_ADI=@AD, SAAT=@SAAT, KREDI=@KREDI WHERE ID=@ID ÇALIŞTIRMAK İÇİN: EXEC SX_DERSDEGIS 2,1,1,MT400,GEOMETRI,3,4 --@ID, @DONEM, @GRUP, @KOD, @AD, @SAAT, @KREDI ORNEK:DEĞİŞİKLİK YAPILAN DERSİN AYNISINDAN VARSA BU DERSİN OLDUĞU UYARISINI VEREN PROGRAM CREATE PROC SX_DERSDEGIS2 @ID INT, @DONEM INT, @GRUP INT, @KOD VARCHAR(6), @AD VARCHAR(60), @SAAT INT, @KREDI REAL AS IF EXISTS( SELECT * FROM DERSLER WHERE DONEM=@DONEM AND KOD=@KOD AND GRUP =@GRUP AND ID<>@ID)

BEGIN SELECT 'BU DEÐÝÞÝKLÝK YAPILAMAZ. ÇÜNKÜ AYNI DONEMDE BOYLE BÝR DERS VAR' RETURN -1 END UPDATE DERSLER SET DONEM=@DONEM, GRUP=@GRUP, KOD=@KOD, DERSIN_ADI=@AD, SAAT=@SAAT, KREDI=@KREDI WHERE ID=@ID NOT: DERSLER TABLOSUNDAN DERSİN ADI KOLONU SAÇMA AYNI KODLA FARKLI İSİMLER YAPILABİLİR. BUNU ÖNELEMEK İÇİN DERS ADI VE DERS KODU FARKLI TABLODA OLUŞTURULMALI. ÖRNEK: YENI TABLO OLUŞTURMA: CREATE TABLE DERSLERBILGI( [BILGIID] [İNT] IDENTITY(1,1) NOT NULL, [KOD] [VARCHAR](6) COLLATE TURKİSH_CI_AS NOT NULL, [DERSIN_ADI] [VARCHAR](50) COLLATE TURKİSH_CI_AS NOT NULL, [SAAT] [İNT] NOT NULL DEFAULT ((0)), [KREDI] [REAL] NOT NULL DEFAULT ((0)), CONSTRAINT [PK_DERSLERBILGI] PRIMARY KEY CLUSTERED ( [BILGIID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO

SET ANSI_PADDING OFF ÖRNEK ASAL SAYI BULAN PROSES ÖRNEK: VERİLEN SAYININ ASAL OLUP OLMADIĞINI BULAN PROGRAM YAZINIZ? ALTER PROC [DBO].[SX_DERSGIR] @DONEM INT, @KOD VARCHAR(6), @GRUP INT, @AD VARCHAR(60), @SAAT INT, @KREDI REAL AS IF EXISTS( SELECT * FROM DERSLER WHERE DONEM=@DONEM AND KOD=@KOD AND GRUP=@GRUP ) BEGIN SELECT 'GIRMEK ISTEDIGINIZ DERS ZATEN VAR!' RETURN -1 END INSERT INTO DERSLER (DONEM,KOD,GRUP,DERSIN_ADI,SAAT,KREDI) VALUES(@DONEM, @KOD, @GRUP,@AD,@SAAT,@KREDI) RETURN SCOPE_IDENTİTY()

08.12.2009 KULLANICI TANIMLI FONKSİYONLAR A)SKALER DEĞERLİ FONSİYONLAR CREATE FUNCTION FONKSİYON_ADI (PARAMETRELER) RETURNS FONKSİYONUN_DEĞERİNİN_TİPİ AS BEGIN FONKSİYONUN İŞLEVİNİ PROGRAMLAYAN SATIRLAR RETURN FONKSİYONUN_DEĞERİ END CREATE FUNCTION FN_KARE (@X INT) RETURNS INT AS BEGIN RETURN @X*@X END SELECT DBO.FN_KARE(5)

ÇALIŞTIRMAK İÇİN BAŞINA DVO YAZDIK. BU FONKSİYONUN KİME AİT OLDUĞUNU BİLMEK İSTİYOR. DVO YAZMAZSAK BU FONKSİYONU SİSTEM FONKSİYONU OLARAK DÜŞÜNÜR. DATA BASE OLDER UN OLUŞTURDUĞU FONKSİYON (VERİ TABANI SAHİBİNİN KULLANDIĞI FONSİYONLAR) SAISLEMLER İÇİNDEKİ FONKİSYONU KULLANIR. SELECT MT487_OGR21.DBO.FN_KARE(5) 21. MASADAKİ DATA BASE DEKİ FONKSİYONU ÇALIŞTIRIR. SET X=1 YADA SELECT X=1 DİYEBİLİRZ. BİR DEĞİŞKENE DEĞERİ BÖYLE ATAYABİLİRİZ. DİĞER PROGRAMLARDA TİPİ PROGRAMIN KENDİSİ KENDİ KENDİNE ÇEVİREBİLİR. AMA BU HATA YAPMAMIZI SAĞLAYABİLİR. İYİ DİLLERDE MUTLAKA TİPİNİ BELİRLENMESİ İSTENİR. SQL DE DE TİP GİRMEK MECBURİDİR. CAST: ROLLER CAST(@YIL AS VARCHAR(4)) ÖRNEK: VERİLEN BÜYÜK KÜÇÜK KAREKTERLERİ DÜZELTEN FONKSİYON: ALTER FUNCTION [DBO].[FN_DUZELT](@AD VARCHAR(50)) RETURNS VARCHAR(50) AS

BEGIN IF @AD IS NULL OR @AD='' RETURN '' IF LEN(@AD)=1 RETURN UPPER(@AD) END SET @AD=UPPER(LEFT(@AD,1))+LOWER(SUBSTRİNG(@AD,2,LEN(@AD))) RETURN @AD SELECT DBO.FN_DUZELT('YUSUF') B) TABLO DEĞERLİ FONKSİYONLAR 1) INLİNE TABLO DEĞERLİ FONKSİYONLAR: CREATE FUNCTION FONKSİYON_ADI (PARAMETRELER) RETURNS TABLE AS RETURN ( BİR SELECT DEYİMİ ) ÖRNEK: ILKODU GİRDİĞİMİZDE İLÇELERİ GETİREN BİR FONSİYON YAPINIZ. CREATE FUNCTION FN_ILIN_ILCELERI (@ILKOD INT) RETURNS TABLE AS RETURN(SELECT ILCEKOD, ILCEAD FROM ILCE WHERE (ILKOD = @ILKOD)) ÇALIŞTIRIRKENDE BİR VIEW GIBI TABLO DEGERLI FONKSIYONLARI AŞAĞIDAKİ GİBİ ÇALIŞTIRABİLİYORUZ.

SELECT FROM ILCEKOD, ILCEAD FN_ILIN_ILCELERI('34') ÖRNEK: AYNI FONSİYONDA İL ADINIDA GETİRESİN İSTERSEK. SELECT KISMINI TARA DESİGN QUERY YAP VE İLKODLARINI BAĞLA VE TAMAM DE. ALTER FUNCTION FN_ILIN_ILCELERI (@ILKOD INT) RETURNS TABLE AS RETURN(SELECT ILCE.ILCEKOD, ILCE.ILCEAD, IL.ILAD FROM ILCE INNER JOIN IL ON ILCE.ILKOD = IL.ILKOD WHERE (ILCE.ILKOD = @ILKOD)) CREATE FUNCTION FN_ILCELER(@ILKOD INT) RETURNS @T TABLE(ILKOD INT, ILAD VARCHAR(20), ILCEAD VARCHAR(20), ILCEKOD INT) AS BEGIN INSERT INTO @T(ILKOD, ILAD, ILCEAD, ILCEKOD) VALUES (@ILKOD, 'ÝSTANBUL','BAKIRKÖY',3) SET @ILKOD=@ILKOD+1 INSERT INTO @T(ILKOD, ILAD, ILCEAD, ILCEKOD)

END VALUES (@ILKOD, 'ANKARA','ÇANKAYA',4) RETURN ÇALIŞTIRMAK İÇİN: SELECT * FROM FN_ILCELER(34) ÖRNEK: GİRDİĞİNİZ SAYIDAN KÜÇÜK TEK TAMSAYILARI GÖSTEREN PROGRAM YAZALIM CREATE FUNCTION FN_TEKSAYILAR(@N INT) RETURNS @T TABLE (I INT) AS BEGIN DECLARE @J INT SET @J=1 WHILE @J<=@N BEGIN INSERT INTO @T(I) VALUES (@J) SET @J=@J+2 END RETURN END SELECT * FROM FN_TEKSAYILAR(5)

ÖRNEK: BİR TABLODAKİ ÖĞRENCİ KREDİ VE NOT ÇİZELGELERİNİ KULLANARAK GNO HESAPLAYAN PROGRAM YAZINIZ. ID KREDI NT DERS INT REAL REAL INT CREATE FUNCTION FN_GNO(@ID INT) RETURNS REAL AS BEGIN DECLARE @TK REAL, @X REAL SET @TK =(SELECT SUM (KREDI) FROM KARNE WHERE ID=@ID) SET @X= (SELECT SUM (KREDI*NT) FROM KARNE WHERE ID=@ID) RETURN @X/@TK END ÇALIŞTIRMAK İÇİM: SELECT DBO.FN_GNO(1)

ÖRNEK: ÖYLE BİR INLINE DEĞERLİ FONKSİYON YAZINKİ CREATE FUNCTION FN_KARNE(@ID REAL) ID KREDI NT DERS GNO TABLOSUNU DOLDURSUN. CREATE FUNCTION FN_KARNE(@ID INT) RETURNS TABLE AS RETURN( SELECT ID, KREDI, NT, DERS, DBO.FN_GNO(@ID) AS GNO FROM KARNE WHERE (ID = @ID)) ÇALIŞTI: SELECT * FROM DBO.FN_KARNE (1) NOT:PROGRAM HER SATIRDA GNO HESAPLAR. BUDA BÜYÜK PROGRAMLARDA ÇOK BÜYÜK SORUN OLUŞTURUR. ACABA GNO YU BİR DEFA HESAPLAYAN BİR PROGRAM YAZABİLİRMİYİZ?

BUNU YAPMAK İÇİN BİR PRESEDÜR YAZMAMIZ LAZIM! CREATE PROCEDURE SX_KARNE @ID INT AS DECLARE @GNO REAL SET @GNO = DBO.FN_GNO(@ID) SELECT ID, KREDI, NT, DERS,@GNO AS GNO FROM KARNE WHERE (ID = @ID) ÇAŞILIR: EXEC SX_KARNE 1 OLUŞAN BU TABLOYU BİR SELECT CÜMLESİNDE KULLANABİLMEMİZ LAZIM. NORMALDE FONSİYONLA YAPTIĞIMIZ TABLOYU KULLANABİLİRİZ. AMA BU PROSEDÜRÜ ASLA BİR SELECT CÜMLESİNDE KULLANAMAYIZ. CREATE FUNCTION FN_KARNE2 (@ID INT) RETURNS @T TABLE (ID INT, KREDI REAL,NT REAL, DERS INT, GNO REAL) AS BEGIN DECLARE @GNO REAL SET @GNO = DBO.FN_GNO(@ID) INSERT INTO @T (ID, KREDI, NT, DERS,GNO ) SELECT ID, KREDI, NT, DERS,@GNO AS GNO FROM KARNE WHERE (ID = @ID) RETURN END ÇALIŞTIR: SELECT * FROM DBO.FN_KARNE2 (2)

ARTIK BU TABLOUYU İNNER JOIN YAPABİLİRİM BAŞKA TABLOYLA BAĞLAYABİLİRİM. SELECT FN_KARNE2_1.KREDI, FN_KARNE2_1.NT, FN_KARNE2_1.DERS, FN_KARNE2_1.GNO, SINIF.ADSOYAD, SINIF.CINS, SINIF.BOLUM FROM DBO.FN_KARNE2(2) AS FN_KARNE2_1 INNER JOIN SINIF ON FN_KARNE2_1.ID = SINIF.ID 15.12.2009 TETİKLEYİCİLER (TRIGGER) BİR TABLO HAKKINDA YAZILAN GİZLİ (BİLG. ÖNÜNDE OTURULUYARSA SAKLI DEĞİL) BİR YORDAMDIR. A) AFTER TRIGGER B) INSTEAD OF TRIGGER

A) ALTER TRIGGER: BELİRLİ BİRŞEYLER OLDUKTAN SONRA HAREKETE GEÇ VE BİRŞEYLER YAP. INSERT, DELETE, UPDATE İŞLEMLERİ GERÇEKLEŞTİKTEN SONRA İŞLEME GİREN PROGRAMLAR. B) INSTEAD OF TRIGGER: BELİRLİ BİR İŞLEM YAPILMADAN BİR BAŞKA İŞLEMİN YAPILAMSINI SAĞLAYAN TRIGGER LARDIR. ÖRNEK: BU ÖRNEKTE ÖNCELİKLER ÜÇ TABLO OLUŞTURALI M. MÜŞTERİLER, KİTAPLAR VE SATIŞLAR: CREATE TABLE MÜŞTERİLER ( MÜŞTERİNO İNT IDENTITY (1, 1) NOT NULL, AD NVARCHAR (20), SOYAD NVARCHAR(20) ) GO CREATE TABLE ÜRÜNLER ( ÜRÜNNO İNT IDENTITY (1, 1) NOT NULL, ÜRÜNAD NVARCHAR (255), STOK İNT ) GO CREATE TABLE SATI ŞLAR ( FİŞNO İNT IDENTITY (1, 1) NOT NULL, MÜŞTERİNO İNT, ÜRÜNNO İNT, ADET İNT, TARİH SMALLDATETİME ) GO INSERT INTO DBO.URUNLER VALUES ('CETVEL','30') SELECT * FROM MUSTERİLER SELECT * FROM URUNLER CREATE TRIGGER SATİSGİR_STOKGUNCELLE ON SATİSLAR FOR INSERT AS UPDATE URUNLER SET STOK=A.STOK-İ.ADET FROM URUNLER A INNER JOIN INSERTED İ ON A.URUNNO=İ.URUNNO

İKİ ADET SATIŞ INSERT INTO SATİSLAR(MUSTERİNO, URUNNO, ADET, TARİH) VALUES (1,1,50,GETDATE()) INSERT INTO SATİSLAR(MUSTERİNO, URUNNO, ADET, TARİH) VALUES (1,2,10,GETDATE()) BU BİR ALTER TRIGGER İ. GERÇEKLEŞTRİLEN İŞLEM EĞER YANLIŞSA ÖRNEĞİN SOKTAN DAHA FAZLA SATIŞ YAPILIRSA ALTER TRIGGER SATİSGİR_STOKGUNCELLE ON SATİSLAR FOR INSERT

AS DECLARE @ADET INT, @STOK INT SELECT @ADET=İ.ADET, @STOK=A.STOK FROM URUNLER A INNER JOIN INSERTED İ ON A.URUNNO=İ.URUNNO IF @ADET>@STOK BEGIN ROLLBACK TRANSACTION END ELSE UPDATE URUNLER SET STOK=A.STOK-İ.ADET FROM URUNLER A INNER JOIN INSERTED İ ON A.URUNNO=İ.URUNNO ALTER TRIGGER SATİSGİR_STOKGUNCELLE ON SATİSLAR FOR INSERT AS DECLARE @ADET INT, @STOK INT SELECT @ADET=İ.ADET, @STOK=A.STOK FROM URUNLER A INNER JOIN INSERTED İ ON A.URUNNO=Ý.URUNNO IF @ADET>@STOK BEGIN ROLLBACK TRANSACTION RAISERROR ('GİRİLEN ÜRÜNLERDEN BİRİ STOKDAN FAZLA',16,1) END ELSE UPDATE URUNLER SET STOK=A.STOK-İ.ADET FROM URUNLER A INNER JOIN INSERTED İ ON A.URUNNO=Ý.URUNNO

SATILAN MAL ADETİ STOKTAN FAZLA OLDUĞU İÇİN YAZDIĞIMIZ HATA MESAJINI VERDİ VE TABLOYU DEĞİŞTİRMEDİ. CREATE TRIGGER SATİSSİL ON SATİSLAR FOR DELETE AS DECLARE @URUNNO INT, @ADET INT SELECT @URUNNO=A.URUNNO, @ADET=D.ADET FROM URUNLER A INNER JOIN DELETED D ON A.URUNNO=D.URUNNO UPDATE URUNLER SET STOK=STOK+@ADET WHERE URUNNO=@URUNNO BİR TABLODAN BİRŞEYİ DELETE EDECEKSEK ÖNCE ONU DELETED ADLI BİR TABLOYA KOYUYOR SONRA DELETE EDİYOR. İŞLEM BİTENE KADAR ORADA TUTUYOR. BU SAYEDE YAPTIKLARIMIZI İPTAL ETMEK İÇİN GERİ DÖNÜŞ SAĞLIYOR.

DELETE FROM SATİSLAR WHERE FİSNO=2 SATIŞTAN SONRA UPDATE TRIGGER YAPMAK ÇOKTA KOLAY DEĞİL. CREATE TRIGGER SATİSGUNCELLE ON SATİSLAR FOR UPDATE AS DECLARE @STOK İNT, @URUNNO İNT DECLARE @ESKİADET İNT, @YENİADET İNT SELECT @STOK=A.STOK, @ESKİADET=D.ADET, @YENİADET=İ.ADET, @URUNNO=A.URUNNO FROM URUNLER A INNER JOIN DELETED D ON D.URUNNO=A.URUNNO INNER JOIN İNSERTED İ ON İ.URUNNO=A.URUNNO UPDATE URUNLER SET @STOK=@STOK+@ESKİADET-@YENİADET WHERE URUNNO=@URUNNO

SATIŞLARDAN 5 NOLU FİŞİN SATIŞ ADETİNİ 20 YAPALIM: ÖRNEK: BİR INSTEAD OF INSERT ÖRNEĞİ VERELİM. CREATE TRIGGER SG ON CALİSMA_TRİGGER INSTEAD OF DELETE AS UPDATE CALİSMA_TRİGGER SET SİLMEGİRİSİMİ=GETDATE() WHERE N İN (SELECT N FROM DELETED)

SİLMİŞ GÖRÜNÜYOR AMA SİLMEMİŞ SİLMEYE KALKIŞTIĞI KİŞİNİN YANINA TARİH DÜŞÜYOR. CREATE TRIGGER IG ON CALİSMA_TRİGGER INSTEAD OF INSERT AS SET IDENTITY_INSERT CALİSMA_TRİGGER OFF INSERT INTO CALİSMA_TRİGGER(AD) SELECT AD FROM İNSERTED SET IDENTITY_INSERT CALİSMA_TRİGGER ON INSERT INTO CALİSMA_TRİGGER (N, AD) VALUES (5,'HASAN') Y İndeks Y (sutunu sıralı halde)

BEGIN TRANSACTION: SQL HELP İ KULLANARAK KULLANIMINA BAK! 22.12.2009 SINAV PROGRAMI YAPIMI. Z6: ARALARINDA ASAL SAYILAR 5, 7, 11 1: 5 İLE ÇARP 6 MODÜLÜNÜ AL- 5 2: 10 3:3 4:8 5: 1.... GİBİ SAYILARIN PERMİTASYONU İLE BİR KARIŞTIRMA İŞLEMİ YAPIYOR. RANDOM YÖNTEMİNİN BİR BASİT ŞEKLİ. DB.OPEN: BAĞLANACAĞI ADRESİ GÖSTERİYOR. PROVİDER: DATA SAĞLAYICI DEMEK