-- BU İŞARETLER SQL İFADELERİ ARASINDA AÇIKLAMA SATIRI ANLAMINA GELİR -- SQL İFADELERİ İLE DATABASE OLUŞTURMA: CREATE DATABASE MARKET -- CREATE DEYİMİ; DATABASE, TABLE, PROCEDURE, VIEW, TRIGGER vb. -- DATABASE YAPILARINI OLUŞTURMAK İÇİN KULLANILIR. -- YENİ BİR DATABASE OLUŞTURMAK İÇİN YUKARIDAKİ KODU -- EN TEMEL YAPI OLARAK KULLANABİLİRSİNİZ. GO -- GO DEYİMİ KENDİSİNDEN BİR ÖNCEKİ TÜM KODLARI VEYA KENDİSİNDEN ÖNCEKİ -- GO DEYİMİNE KADAR OLAN KODLARI ÇALIŞTIRMAK İÇİN KULLANILIR -- TÜMLEŞİK SQL İFADELERİNİ ÇALIŞTIRMAK İÇİN ARALARDA KULLANILABİLİR, -- ANCAK DML (Data Manipulation Language) DİLLERDE ARKA ARKAYA YAZILAN İFADELER -- İÇİN KULLANILMASI GEREKLİ DEĞİLDİR, KULLANILMASA DA OLUR. -- SQL (STRUCTED QUERY LANGUAGE - YAPISAL SORGULAMA DİLİ) VERİTABANI ÜZERİNDEKİ -- İŞLEMLER VE SORGULAMALAR İÇİN KULLANILIR. -- SQL KENDİ İÇERİSİNDE DDL VE DML OLARAK İKİYE AYRILIR -- DDL (DATA DEFINATION LANGUGE) : DDL İFADELERİ OLUŞTURMA VE GÜNCELLEME İŞLEMLERİ -- İÇİN GEÇERLİ BİR TANIMLAMADIR. -- DML (DATA MANIPULATION LANGUAGE) : DML İFADELERİ İSE DATABASE ÜZERİNDEKİ SORGULAMA -- VE GÖRÜNTÜLEME İŞLEMLERİ İÇİN GEÇERLİDİR. USE MARKET -- USE DEYİMİ BİR DATABASE ÜZERİNDE SEÇİM İŞLEMİ YAPAR. -- SQL SERVER ÜZERİNDEKİ DATABASELERDEN HERHANGİ BİRİNİN SEÇİLİ OLMASINI SAĞLAR -- SQL İFADELERİ SEÇİLİ OLDUKLARI DATABASE ÜZERİNDE YÜRÜTÜLÜRLER CREATE DATABASE MARKETING ON( NAME=MARKETING_DAT, FILENAME='c:\MARKETING.MDF', SIZE=10, MAXSIZE=50, FILEGROWTH=50 ) LOG ON( NAME=MARKETING_LOG, FILENAME='c:\MARKETING.LDF', SIZE=10, MAXSIZE=50, FILEGROWTH=5 ) -- NAME : OLUŞTURULACAK DATABASE İÇİN SANAL BİR İSİM VERİR -- FILENAME: OLUŞTURULACAK DATABASE İÇİN DOSYA SİSTEMİNDEKİ ADINI VERİR -- SIZE : OLUŞTURULACAK DATABASE İÇİN BAŞLANGIÇ BOYUTU VERİLİR -- MAXSIZE: OLUŞTURULACAK DATABASE İÇİN EN BÜYÜK BOYUT SINIRI VERİLİR -- FILEGROWTH: OLUŞTURULACAK DATABASE İÇİN DOSYA BÜYÜME MİKTARI VERİLİR. -- SQL 2005 ÜZERİNDE TEMEL VERİTABANLARI SANAL İSİMLELER KONTROL EDİLİR VE -- OLUŞAN VERİTABANINA AİT İKİ TEMEL DOSYA BULUNUR. BUNLAR .MDF VE .LDF DOSYALARIDIR -- MDF DOSYASI ASIL VERİTABANI DOSYASIDIR. LDF DOSYASI İSE GEÇİCİ KAYITLARIN TUTULDUĞU -- DOSYALARDIR. BİR LDF AŞAĞI YUKARI MDF DOSYASI KADAR YER KAPLAYABİLİR. -- BİR SQL İFADESİ YÜRÜTÜLÜRKEN ORTAYA ÇIKACAK HATALI DURUMLARIN SONUCU OLARAK -- VERİ KAYBI YAŞANMAMASI İÇİN, VERİTANINDA BİRÇOK İŞLEM YAPILMADAN ÖNCE LOGLANIR, -- İŞLEM BAŞARILI BİR ŞEKİLDE TAMAMLANIRSA LOG DOSYASINDA KAYIT SİLİNİR, EĞER BAŞARILI -- BİR ŞEKİLDE BİTMEZSE LOG DOSYASINDA TUTULAN İŞLEM DETAYLARI İLE BİRLİKTE GERİ ALINIR USE MASTER -- SEÇİLİ BİR DATABASE ÜZERİNDEN KENDİ KENDİNİ KALDIRMA İŞLEMİ YAPILAMAZ -- BU NEDENLE FARKLI BİR DATABASE SEÇİLMİŞTİR DROP DATABASE MARKET -- DROP DATABASE İLE VERİTABANI SİSTEMDEN KALDIRILIR DROP DATABASE MARKETING CREATE TABLE KISILER( ID BIGINT, AD VARCHAR(20), SOYAD VARCHAR(20), ADRES NVARCHAR(300) ) SELECT * FROM KISILER -- YILDIZ İŞARETİ TABLO ALANLARININ TÜMÜNÜ GÖSTERMENİZİ SAĞLAR -- BELİRLİ ALANLARI GÖSTERMEK İÇİN AŞAĞIDAKİ KODU YAZINIZ SELECT ID,AD,ADRES FROM KISILER -- GÖSTERİLEN TABLO ALANLARINI İSTEDİĞİMİZ BİR İSİMLE GÖSTERMEK İSTERSEK SELECT ID AS [NUMARA ALANI], AD AS [KİŞİ ADI] FROM KISILER -- AS ÖZELLİĞİ İLE İLGİLİ ALANIN GÖRÜNÜŞTE NASIL GÖRÜNMESİ GEREKTİĞİNİ YAZARSINIZ -- EĞER YAZILAN SÜTUN ADI BOŞLUK İÇERİYORSA KÖŞELİ PARANTEZ İÇERİSİNDE YAZILIR, SELECT ID AS NUMARA FROM KISILER -- BOŞLUK İÇERMEYEN ALANLAR İÇİN NORMAL YAZIM VEYA TEK TIRNAK --İÇERİSİNDE YAZIM GEÇERLİDİR -- BİR TABLOYA VERİ EKLEMEK İÇİN INSERT DEYİMİNDEN YARARLANILIR INSERT INTO KISILER VALUES(1,'SERDAR','TÜRKEL','PENDİK') -- TÜM ALANLARA VERİ GİRMEK İÇİN KULLANILIR -- EĞER BELİRLİ ALANLARA VERİ GİRİLECEKSE, INSERT INTO KISILER(AD,ADRES) VALUES('ALİ','VELİ') -- SADECE BELİRLİ ALANLARA VERİ GİRİLECEKSE; DİĞER ALANLARIN NULL DEĞER KABUL ETMESİ, -- BELİRLİ BİR SINIRLAMAYA TABİ TUTULMAMASI, OTOMATİK DEĞER ALMASI VEYA VARSAYILAN -- BİR DEĞERE SAHİP OLMASI GEREKİR. EĞER HERHANGİ BİR ALAN İÇİN BU ŞARTLAR -- GERÇEKLEŞMİYORSA; O ZAMAN O ALAN BOŞ GEÇİLMEMELİDİR. -- EĞER BELİRLİ BİR ALAN GÜNCELLENMEK İSTENİYORSA UPDATE KISILER SET AD='YENİ AD', SOYAD='YENİ SOYAD' -- TABLODAKİ TÜM SATIRLAR İÇİN AD VE SOYAD ALANLARININ TAMAMI AYNI VERİ İLE DEĞİŞİR -- EĞER TABLODAKİ SATIRLAR SİLİNMEK İSTENİYORSA DELETE FROM KISILER -- TABLODAKİ TÜM SATIRLARI SİLER. DROP TABLE KISILER -- KISILER İSİMLİ TABLOYU VERİTABANINDAN KALDIRIR. -- [ WHERE YAN TÜMCESİ ] -- -- WHERE YAN TÜMCESİ SINIRLAMA İÇİN KULLANILIR -- ÖRNEĞİN TÜM SATIRLARI DEĞİLDE SADECE BELİRLİ SATIRLARIN SİLİNMESİ GEREKİYORSA -- VEYA BELİRLİ SATIRLARIN GÜNCELLENMESİ GEREKİYORSA KULLANILABİLİR SELECT * FROM KISILER WHERE ID=1 -- SADECE ID'Sİ 1 OLAN SATIRLARI GÖSTERİR DELETE FROM KISILER WHERE AD='ALİ' -- SADECE AD KISMI ALİ OLANLAR İÇİN SİLME İŞLEMİ YAPAR -- KARŞILAŞTIRMA OPERATÖRLERİ -- < , > , <= , >= , <> (EŞİT DEĞİL), = USE MARKETING go CREATE TABLE URUN( ID BIGINT NOT NULL IDENTITY(1,1) NOT FOR REPLICATION, urunAdi VARCHAR(20) NOT NULL, urunTuru VARCHAR(20) NOT NULL, urunfiyati MONEY NOT NULL ) go CREATE TABLE DEPO( ID BIGINT NOT NULL IDENTITY(1,1) NOT FOR REPLICATION, urunID BIGINT, adet INT, durum BIT ) go CREATE TABLE SATIS( ID BIGINT NOT NULL IDENTITY(1,1) NOT FOR REPLICATION, urunID BIGINT NOT NULL, adet INT NOT NULL, kdv TINYINT NOT NULL ) -- NOT NULL : İLGİLİ SÜTUNUN BOŞ GEÇİLEMEYECEĞİNİ BELİRTİR -- IDENTITY(n,m): n DEĞERİNDEN BAŞLAYIP m KADAR ARTARAK -- NUMARA VERİLMESİNİ SAĞLAR, -- NOT FOR REPLICATION : AYNI DEĞERİ SADECE BİR DEFA OLUŞTURUR go ALTER TABLE URUN ADD CONSTRAINT CONST_URUN_PR PRIMARY KEY(ID) go -- BİR TABLONUNUN ÖZELLİKLERİ ÜZERİNDE İŞLEMLER YAPILACAKSA, -- VEYA SÜTUNLARI ÜZERİNDE EKLEME ÇIKARMA VE TİP DEĞİŞTİRME -- İŞLEMLERİ YAPILACAKSA, ALTER DEYİMİNDEN YARARLANILIR. -- BİR TABLODA BULUNAN SÜTUNLARDAN BİRİ SATIRLARI BOYUNCA, -- AYNI DEĞERİ BİR DAHA ALMAYACAK ŞEKİLDE DEVAM EDİYORSA, -- ÖRNEĞİN BİR KİŞİNİN TC KİMLİK NUMARASI GİBİ, EŞSİZ NUMARAYA -- SAHİP OLAN ALAN BENZERSİZ OLARAK ADLANIR VE İLGİLİ TABLO -- İÇİN BENZERSİZ VERİLERE SAHİP SÜTUN BİRİNCİL ANAHTAR -- (PRIMARY KEY) OLARAK TANIMLANABİLİR. PRIMARY KEY ÖZELLİĞİNE -- SAHİP BİR SÜTUN SATIRLARI BOYUNCA TEKRAR ETMEYEN VERİLERİ -- KABÜL EDER. AYRICA PRIMARY KEY ÖZELLİĞİNE SAHİP OLAN BİR -- TABLO VERİTABANI ÜZERİNDE OTOMATİK OLARAK KÜMELİ BİR -- ŞEKİLDE DİZİNLENİR(İNDEX). VERİ TABANLARI ÜZERİNDE YAPILAN -- HERHANGİ BİR SORGULAMA ÖNCELİKLE BİRİNCİL ANAHTARLARI VE -- DİZİNLENMİŞ DİĞER SÜTUNLARI TARAR, BU NEDENLE EN SIK -- KULLANILAN BENZERSİZ ALAN BİRİNCİL ANAHTAR YAPILMALIDIR. -- BİRİNCİL ANAHTARLAR KENDİLERİNİ DECLARATİF OLARAK BAŞKA -- TABLOLAR İÇİN KOŞABİLİRLER. BİR TABLODAKİ BİRİNCİL, ANAHTAR -- BİR BAŞKA TABLODAKİ BİR SÜTUN İÇİN SINIRLAMA GETİREBİLİR -- BU DURUMDA İKİNCİ TABLODAKİ SINIRLAMA GETİRİLEN TABLO ALANI -- İKİNCİL ANAHTAR OLARAK ADLANDIRILIR. BİRİNCİL ANAHTAR -- ÜZERİNDE TANIMLANMAYAN BİR VERİ İKİNCİL ANAHTAR ÜZERİNDE -- GİRİLEMEZ. ANCAK İKİNCİL ANAHTARDAKİ(FOREIGN KEY) ALANLARA -- BİRİNCİL ANAHTAR SÜTUNUNDA BULUNAN VERİLERDEN BİRDEN FAZLA -- GİRİLEBİLİR. EĞER BAŞKA BİR TABLO İLE İLİŞKİDE BULUNAN -- BİR SÜTUNA SAHİP İSENİZ, TABLO SİLME İŞLEMİ GİBİ YAPILACAK -- İŞLEMLER İÇİN ÖNCELİKLE İLİŞKİLERİN KALDIRILMASI -- GEREKMEKTEDİR. SELECT * FROM URUN ALTER TABLE URUN DROP CONSTRAINT CONST_URUN_PR -- BİR TABLO ÜZERİNDEN ÖZLLİK KALDIRILACAKSA -- DROP CONSTRAINT YAN TÜMCESİ KULLANILIR ALTER TABLE URUN DROP COLUMN ID -- BİR TABLODAN SÜTUN KALDIRILACAKSA -- DROP COLUMN KULLANILIR ALTER TABLE URUN ADD ID BIGINT NOT NULL IDENTITY(1,1) NOT FOR REPLICATION CONSTRAINT ILISKI_ADI PRIMARY KEY -- BİR TABLOYA SÜTUN EKLENECEKSE ADD YAN TÜMCESİ KULLANILIR -- TABLO YARATMA SIRASINDA BİRİNCİL ANAHTAR TANIMLAMASI CREATE TABLE ORNEK( ID VARCHAR(20) NOT NULL CONSTRAINT CONST_OZELLIK PRIMARY KEY, SUTUN1 BIGINT ) -- İKİNCİL ANAHTARLAR YARATILIRKEN BİRİNCİL ANAHTARLARDAN -- BİRİNİ REFERANS GÖSTERMEK ZORUNDADIRLAR. BİRİNCİL ANAHTAR -- GÖSTERMEYEN BİR İKİNCİL ANAHATAR YARATILAMAZ. ALTER TABLE DEPO ADD CONSTRAINT FG_DEPO_URUN_001 FOREIGN KEY(urunID) REFERENCES URUN(ID) -- DEPO TABLOSUNDAKİ urunID İSİMLİ ALANI URUN TABLOSUNDAKİ -- ID ALANI İLE İLİŞKİLENDİRDİK, İKİ ALANIN İLİŞKİLENEBİLMESİ -- İÇİN İKİ ALANINDA VERİ TÜRÜ VE BOYUTLARI AYNI OLMALI -- DAHA ÖNCEDEN GİRİLMİŞ VERİLERE SAHİP İSELER, VERİLERİN -- TUTARLI OLMASI GEREKİR. INSERT INTO URUN VALUES('ANAKART','BİLGİSAYAR',140) INSERT INTO URUN VALUES('RAM','BİLGİSAYAR',60) INSERT INTO URUN VALUES('EKRAN KARTI','BİLGİSAYAR',40) INSERT INTO URUN VALUES('MP3 ÇALAR','DİJİTAL',100) SELECT * FROM URUN SELECT * FROM DEPO INSERT INTO DEPO VALUES(1,10,1) INSERT INTO DEPO VALUES(2,20,0) --INSERT INTO DEPO VALUES(453,10,1) --URUN TABLOSUNDA 453 NUMARALI BİR ÜRÜN BULUNMADIĞINDAN --VERİLERİN GİRİŞİNDE BİR UYARI İLE KARŞILAŞILACAKTIR DELETE FROM DEPO WHERE urunID=2 DELETE FROM URUN WHERE ID=2 -- İLİŞKİLİ TABLOLARDA SATIRLAR SİLİNİRKEN ÖNCELİKLE -- İLİŞKİLİ OLDUĞU TABLODAKİ VERİLERİ SİLİNİR. DAHA SONRA DA -- ASIL VERİ SİLİNİR. ALTER TABLE DEPO DROP CONSTRAINT FG_DEPO_URUN_001 --DEPO ÜZERİNDEKİ İLİŞKİ SİLİNİR ALTER TABLE DEPO ADD CONSTRAINT FG_DEPO_URUN_001 FOREIGN KEY(urunID) REFERENCES URUN(ID) ON UPDATE CASCADE ON DELETE CASCADE --YENİ İLİŞKİ DÜZENLENİR. --ON UPDATE CASCADE VE ON DELETE CASCADE SAYESİNDE, --BİR PRIMARY KEY ALANINDAKİ SATIR SİLİNDİĞİNDE --İLGİLİ ALAN İLE İLİŞKİ DİĞER TABLOLARDAKİ --SATIRLARDA SİLİNİR. BÖYLELİKLE ÖNCE İKİNCİL ANAHTARDAKİ --VERİLERİN SİLİNMESİNE GEREK KALMAZ. BU OLAYLAR GÜNCELLEME --VE SİLME İŞLEMLERİNDE GEÇERLİ OLUR. DELETE FROM URUN WHERE ID=1 SELECT * FROM DEPO SELECT * FROM URUN -- URUN TABLOSU VE DEPO TABLOSUNDAKİ ID'Sİ 1 OLAN TÜM SATIRLAR -- SİLİNİR. CREATE TABLE SUBE1(ID BIGINT NOT NULL IDENTITY(1,1) CONSTRAINT PR_SUBE1_001 PRIMARY KEY, SUBE_AD VARCHAR(20), URUN_AD VARCHAR(20), URUN_ADET TINYINT, TRANSFER_DURUM BIT ) CREATE TABLE SUBE2(ID BIGINT NOT NULL IDENTITY(1,1) CONSTRAINT PR_SUBE2_002 PRIMARY KEY, SUBE_AD VARCHAR(20), URUN_AD VARCHAR(20), URUN_ADET TINYINT, TRANSFER_DURUM BIT ) INSERT INTO SUBE1 VALUES('ANKARA','ANAKART',100,0) INSERT INTO SUBE1 VALUES('ANKARA','EKRAN KARTI',100,0) INSERT INTO SUBE1 VALUES('ANKARA','RAM',100,1) INSERT INTO SUBE1 VALUES('ANKARA','CD-RW',100,0) INSERT INTO SUBE2 VALUES('İSTANBUL','ANAKART',0,0) INSERT INTO SUBE2 VALUES('İSTANBUL','EKRAN KARTI',0,0) INSERT INTO SUBE2 VALUES('İSTANBUL','RAM',100,1) SELECT * FROM SUBE1 WHERE URUN_AD IN( SELECT URUN_AD FROM SUBE2 ) AND TRANSFER_DURUM=1 -- IN FONKSİYONU İÇERİSİNDEKİ DÖNEN SONUÇ LİSTESİNE -- EŞİT OLAN ALANLARIN GÖSTERİMİNİ SAĞLAR UPDATE SUBE1 SET URUN_ADET=0 WHERE ID=3 ALTER TABLE SUBE2 DROP COLUMN TRANSFER_DURUM INSERT INTO SUBE2 SELECT SUBE_AD,URUN_AD,URUN_ADET FROM SUBE1 WHERE TRANSFER_DURUM=0 UPDATE SUBE2 SET SUBE_AD='İSTANBUL' SELECT * FROM SUBE1 SELECT * FROM SUBE2 INSERT INTO SUBE2 SELECT SUBE_AD,URUN_AD,URUN_ADET FROM SUBE1 WHERE TRANSFER_DURUM=0 -- sube1 tablosundaki SUBE_AD,URUN_AD,URUN_ADET alanlarını -- Transfer_durum sütunu 0 olanlar için, -- sube2 tablosuna ekleyen ve sube1 tablosundaki -- transfer_durum sütunu 1 ve urun_adet sütununu 0 yapan -- sql ifadesini yazınız. -- BİR MESAJLAŞMA SİSTEMİNİN VERİTABANI TASARIMI YAPILACAKTIR -- 1)İSTENİLEN ŞARTLAR: -- A)KULLANICI İSTEKLERİ: --kullanıcı istediği kadar mesaj yazmak ister --kullanıcı mesajı ne zaman yazdığını bilmek ister --kullanıcı mesajına başlık yazmak ister, -- B)SİSTEM YÖNETİCİSİNİN İSTEKLERİ: --kayıtlı olmayan kullanıcıların mesaj bırakmasını --engellemek ister --silinen kullanıcı mesajlarnın kalmasını ister --mesajın yazılmış olduğu tarihin otomatik olarak --yazılmasını ister --hangi kullanıcının kaç tane mesaj yazdığınız --bilmek ister --toplam yazılan mesaj sayısını bilmek ister --tüm mesajları yazılış tarihine göre görmek ister CREATE TABLE kullanicilar ( kullanici VARCHAR(20) NOT NULL CONSTRAINT PK_001 PRIMARY KEY, sifre VARCHAR(20) NOT NULL, aktif BIT NOT NULL DEFAULT 0 ) CREATE TABLE mesajlar ( mesajID BIGINT IDENTITY(1,1) NOT FOR REPLICATION, kullanici VARCHAR(20) NOT NULL CONSTRAINT FG_001 FOREIGN KEY REFERENCES kullanicilar(kullanici), baslik VARCHAR(100) NOT NULL, mesaj NVARCHAR(500) NOT NULL, tarih DATETIME DEFAULT GETDATE() ) INSERT INTO kullanicilar VALUES('admin','admin','') INSERT INTO kullanicilar VALUES('user','user',1) INSERT INTO kullanicilar VALUES('quest','quest',0) SELECT * FROM kullanicilar INSERT INTO mesajlar(kullanici,baslik,mesaj) VALUES('admin','java','jdk1.6 çok güzel') INSERT INTO mesajlar(kullanici,baslik,mesaj) VALUES('user','java','jdk1.6 hiç güzel değil') INSERT INTO mesajlar(kullanici,baslik,mesaj) VALUES('admin','java','DE GET EŞİNE HAA') INSERT INTO mesajlar(kullanici,baslik,mesaj) VALUES('quest','C#','bi de buna bakın') INSERT INTO mesajlar(kullanici,baslik,mesaj) VALUES('user','c#','ben ona bakalı yıllar oldu') INSERT INTO mesajlar(kullanici,baslik,mesaj) VALUES('admin','C#','C ile karıştırmayasan') SELECT * FROM mesajlar SELECT COUNT(kullanici) AS [mesaj adeti], kullanici,baslik FROM mesajlar GROUP BY kullanici,baslik HAVING kullanici='admin' SELECT COUNT(*) FROM mesajlar SELECT * FROM mesajlar ORDER BY tarih DESC --DESC AZALAN SIRALAMA YAPAR --ASC ARTAN SIRALAMA YAPAR CREATE TABLE satislar( ID BIGINT IDENTITY(1,1) NOT FOR REPLICATION, ad VARCHAR(20) NOT NULL, model VARCHAR(20) NOT NULL, marka VARCHAR(20) NOT NULL, adet TINYINT NOT NULL, fiyat MONEY NOT NULL ) INSERT INTO satislar VALUES('araba','c4','citroen',10,23000) INSERT INTO satislar VALUES('araba','c2','citroen',10,20000) INSERT INTO satislar VALUES('ototbüs','BNZ1','mercedes',20,43000) INSERT INTO satislar VALUES('ototbüs','BNZ2','mercedes',4,51000) INSERT INTO satislar VALUES('ototbüs','BNZ3','mercedes',5,80000) INSERT INTO satislar VALUES('araba','focus','ford',12,23000) INSERT INTO satislar VALUES('araba','almera','ford',13,23000) INSERT INTO satislar VALUES('araba','mirca','toyota',21,45400) INSERT INTO satislar VALUES('araba','matrix','toyota',32,22000) INSERT INTO satislar VALUES('araba','avansis','toyota',7,63000) SELECT marka,ad,SUM(adet) AS TOPLAM FROM satislar GROUP BY marka,ad WITH ROLLUP select * from satislar UPDATE satislar SET ad='otobüs' WHERE ID=10 UPDATE satislar SET ad='uçak' WHERE ID=9 SELECT marka,ad,SUM(adet) AS TOPLAM FROM satislar GROUP BY marka,ad WITH CUBE SELECT * FROM kullanicilar SELECT * FROM mesajlar -- JAVA KONUSU İLE MESAJ YAZANLARIN kullanici adi, şifresi, aktifliği -- VE YAZIDIĞI MESAJI GÖSTEREN SQL İFADESİNİ YAZINIZ. SELECT kul.kullanici,kul.sifre,kul.aktif,mes.mesaj FROM kullanicilar as kul JOIN mesajlar as mes ON(kul.kullanici=mes.kullanici) WHERE mes.baslik='JAVA' SELECT * FROM MESAJLAR CREATE TABLE ankara( ID BIGINT IDENTITY(1,1) NOT FOR REPLICATION CONSTRAINT PK_002 PRIMARY KEY, ad NCHAR(20) NOT NULL, adet TINYINT NOT NULL, fiyat MONEY NOT NULL ) CREATE TABLE istanbul( ID BIGINT NOT NULL CONSTRAINT FK_001 FOREIGN KEY REFERENCES ankara(ID), bolum NCHAR(20) NOT NULL, gorevli NCHAR(20) NOT NULL ) INSERT INTO ankara VALUES('MALİ DEFTER',10,12) INSERT INTO ankara VALUES('BİLGİSAYAR',5,21) INSERT INTO ankara VALUES('EĞİTİM KİTABI',7,52) INSERT INTO ankara VALUES('KASA',43,35) INSERT INTO ankara VALUES('KALEM',879,96) SELECT * FROM ankara INSERT INTO istanbul VALUES(1,'MUHASEBE','ALİ') INSERT INTO istanbul VALUES(2,'SİSTEM','SALİM') INSERT INTO istanbul VALUES(2,'MUHASEBE','VELİ') SELECT * FROM istanbul -- JOIN,INNER JOIN,LEFT JOIN,RIGHT JOIN,CROSS JOIN SELECT a.ID, a.ad, a.adet, a.fiyat, i.bolum, i.gorevli FROM ankara AS a JOIN istanbul AS i ON (a.ID=i.ID) SELECT a.ID, a.ad, a.adet, a.fiyat, i.bolum, i.gorevli FROM ankara AS a LEFT JOIN istanbul AS i ON (a.ID=i.ID) SELECT a.ID, a.ad, a.adet, a.fiyat, i.bolum, i.gorevli FROM ankara AS a CROSS JOIN istanbul AS i CREATE TABLE ocak_2006( ID BIGINT IDENTITY(1,1) NOT FOR REPLICATION CONSTRAINT PK_003 PRIMARY KEY, ad NCHAR(20) NOT NULL, adet INT NOT NULL, fiyat MONEY NOT NULL ) CREATE TABLE ocak_2007( ID BIGINT IDENTITY(1,1) NOT FOR REPLICATION CONSTRAINT PK_004 PRIMARY KEY, ad NCHAR(20) NOT NULL, adet INT NOT NULL, fiyat MONEY NOT NULL ) INSERT INTO ocak_2006 VALUES('ANAKART',4,234) INSERT INTO ocak_2006 VALUES('EKRAN KARTI',96,12) INSERT INTO ocak_2006 VALUES('RAM',78,45) INSERT INTO ocak_2006 VALUES('İŞLEMCİ',74,96) INSERT INTO ocak_2006 VALUES('MONİTÖR',93,37) INSERT INTO ocak_2006 VALUES('KASA',48,21) INSERT INTO ocak_2007 VALUES('EKRAN KARTI',85,96) INSERT INTO ocak_2007 VALUES('EKRAN KARTI',55,99) INSERT INTO ocak_2007 VALUES('RAM',45,78) INSERT INTO ocak_2007 VALUES('FLASH DİSK',28,19) INSERT INTO ocak_2007 VALUES('CD-ROM',3,12) INSERT INTO ocak_2007 VALUES('CD-RW',9,45) INSERT INTO ocak_2007 VALUES('DVD-RW',15,36) INSERT INTO ocak_2007 VALUES('DVD-ROM',47,52) INSERT INTO ocak_2007 VALUES('ETHERNET',58,14) INSERT INTO ocak_2007 VALUES('MODEM',68,96) INSERT INTO ocak_2007 VALUES('ADSL',14,24) SELECT * FROM ocak_2006 SELECT * FROM ocak_2007 SELECT s6.ad,s6.adet,s6.fiyat,s7.adet,s7.fiyat FROM ocak_2006 AS s6 JOIN ocak_2007 AS s7 ON(s6.ad=s7.ad) SELECT s6.ad,s6.adet,s6.fiyat,s7.adet,s7.fiyat FROM ocak_2006 AS s6 LEFT JOIN ocak_2007 AS s7 ON(s6.ad=s7.ad) SELECT s6.ad,s6.adet,s6.fiyat,s7.ad,s7.adet,s7.fiyat FROM ocak_2006 AS s6 RIGHT JOIN ocak_2007 AS s7 ON(s6.ad=s7.ad) SELECT s6.ad,s6.adet,s6.fiyat,s7.ad,s7.adet,s7.fiyat FROM ocak_2006 AS s6 LEFT OUTER JOIN ocak_2007 AS s7 ON(s6.ad=s7.ad) SELECT COUNT(*) FROM ocak_2007 SELECT MAX(fiyat) FROM ocak_2007 SELECT MIN(fiyat) FROM ocak_2007 SIN -> SİNÜS COS -> COSINUS COT -> COTANJAT TAN -> TANJANT SUM -> TOPLAMA AVG -> ORTALAMA ATAN -> ARCHTANJANT ASIN -> ARCHSİNUS ACOS -> ARCHCOSİNÜS MIN -> EN KÜÇÜK MAX -> EN BÜYÜK COUNT -> SATIR SAYAR PRINT CHAR(66) -> SAYISAL İFADENİN KARAKTER KARŞILIĞI PRINT -> EKRAAN BİR YAZI YAZAR PRINT CHAR(39)+'SERDAR TÜRKEL'+CHAR(39) PRINT ASCII('A')-> ASCII KODUNU VERİR SELECT CHARINDEX('RAM',ad,0) AS sonuc FROM ocak_2006 -- CHARINDEX(ARANAN,SUTUN,BAŞLANGIÇ)-> -- BELİRTİLEN SÜTUN ÜZERİNDE BİR KELİMENİN BULUNDUĞU SÜTUNU VERİR PRINT LEFT('SERDAR TURKEL',5) PRINT LEN('SERDAR TURKEL') PRINT RIGHT('SERDAR TURKEL',3) PRINT LTRIM(' SERDAR TURKEL ') PRINT RTRIM(' SERDAR TURKEL ') PRINT LOWER('SERDAR TURKEL') PRINT UPPER('serdar turkel') PRINT REVERSE('SERDAR') PRINT SUBSTRING('SERDAR TURKEL',3,3) SELECT PATINDEX('%A%',ad) AS sonuc FROM ocak_2006 --KELİMENİN GEÇTİĞİ KARAKTER SIRASI PRINT STUFF('SDAR',2,0,'ER') PRINT STUFF('SERDAR SİBEL',7,1,' VE ') select * from ocak_2006 -- OCAK_2007 TABLOSUNDAKİ fiyat SÜTUNU; OCAK_2006 TABLOSUNDAKİ -- FİYAT SÜTUNUN ORTALAMASININ ALTINDA KALANLARI GÖSTERSİN SELECT fiyat FROM ocak_2007 WHERE fiyat > (SELECT AVG(fiyat) AS sonuc FROM ocak_2006) PRINT GETDATE() select ad from ocak_2006 UNION ALL( select ad from ocak_2007 ) SELECT ad FROM ocak_2006 UNION ( SELECT sifre FROM kullanicilar ) -- GÖRÜNÜMLER CREATE VIEW gorunum1 AS select ID,ad from ocak_2006 UNION( select ID,ad from ocak_2007 ) SELECT * FROM gorunum1 WHERE ID=1 CREATE VIEW ocak_2006_ocak_2007 WITH SCHEMABINDING AS SELECT ocak_2006.ID,ocak_2006.ad FROM dbo.ocak_2006 UNION( SELECT ocak_2007.ID,ocak_2007.ad FROM dbo.ocak_2007 ) WITH CHECK OPTION DROP VIEW ocak_2006_ocak_2007 select * from ocak_2006_ocak_2007 -- VARSAYILAN DE?ER : DEFAULT CREATE TABLE varsayilanTablo ( ID BIGINT NOT NULL, tarih SMALLDATETIME ) CREATE DEFAULT varsayilan AS GETDATE() EXEC sp_bindefault varsayilan,'varsayilanTablo.tarih' EXEC sp_unbindefault 'varsayilanTablo.tarih' DROP DEFAULT varsayilan INSERT INTO varsayilanTablo(ID) VALUES(2) SELECT * FROM varsayilanTablo DELETE FROM varsayilanTablo -- OLU?TURMA SIRASINDA VARSAYILAN DE?ER ATAMASI CREATE TABLE varsayilanTablo2 ( ID BIGINT NOT NULL, veri VARCHAR(20) DEFAULT 'serdar' ) INSERT INTO varsayilanTablo2(ID) VALUES(1) SELECT * FROM varsayilanTablo2 DELETE FROM varsayilanTablo2 -- CHECK KISITLAMASI CREATE TABLE kisitlama( ad VARCHAR(20) CHECK(ad='SERDAR' OR ad='ELMA') ) INSERT INTO kisitlama VALUES('SERDAR2') ALTER TABLE kisitlama DROP CONSTRAINT CK__kisitlama__ad__25869641 ALTER TABLE kisitlama ADD CONSTRAINT CK_kisitlama__ad__001 CHECK (ad='SERDAR' OR ad='ELMA') CREATE TABLE kisitlama( ad VARCHAR(20) CONSTRAINT CK_kisitlama__ad__0001 CHECK(ad='SERDAR' OR ad='ELMA') ) SELECT * FROM kisitlama -- KURALLAR : RULE CREATE TABLE notlar(numara TINYINT,notu TINYINT) CREATE RULE kural AS @data>=0 AND @data<=100 EXEC sp_bindrule kural,'notlar.notu' EXEC sp_unbindrule 'notlar.notu' INSERT INTO notlar VALUES(2,88) SELECT * FROM notlar --D?Z?NLER : INDEX CREATE [UNIQUE][CLUSTERED][NONCLUSTERED] INDEX ON WITH PAD_INDEX, FILLFACTOR=DOLGU_KATSAYISI, DROP_EXISTING CREATE TABLE ornekTablo ( ID BIGINT NOT NULL, ad VARCHAR(20), soyad VARCHAR(20) ) CREATE UNIQUE CLUSTERED INDEX DIZIN1 ON ornekTablo(ID) WITH PAD_INDEX, FILLFACTOR=10, DROP_EXISTING ----------------------------------------------------- -- SQL AKIŞ KONTROL YAPILARI -- DEĞİŞKEN TANIMLANMASI -- TÜM DEĞİŞKENLER @ İŞARETİ İLE BAŞLAR DECLARE @deger BIGINT --DEĞİŞKENLERE DEĞER ATANMASI --SET VEYA SELECT İFADESİ İLE DEĞİŞKENLERE DEĞER ATANIR SET @deger =10 SELECT @deger=30 --KONTROL ALANLARI(SCOPE) BEGIN-END İFADELERİ İLE YAPILIR -- IF IF @deger>20 BEGIN PRINT '20'+CHAR(39)+'DEN BÜYÜK' END -- IF ELSE YAPISI DECLARE @deger BIGINT SET @deger=24 IF @deger<20 BEGIN PRINT 'KUCUK' END ELSE BEGIN PRINT 'KUCUK' END -- SELECT-CASE İFADESİ DECLARE @deger1 VARCHAR(20) DECLARE @deger2 BIGINT SET @deger2=3 SET @deger1=CASE @deger2 WHEN 1 THEN 'BİR' WHEN 2 THEN 'İKİ' WHEN 3 THEN 'ÜÇ' WHEN 4 THEN 'DÖRT' ELSE 'TANIMSIZ' END PRINT @deger1 --WHILE İFADESİ DECLARE @deger BIGINT SET @deger=20 WHILE @deger>=0 BEGIN SET @deger=@deger-1 IF @deger=4 BEGIN BREAK END IF @deger =7 BEGIN CONTINUE END PRINT @deger END --GOTO İFADESİ DECLARE @deger BIGINT SET @deger=0 baslangic: SET @deger=@deger+1 IF @deger<10 BEGIN GOTO baslangic END PRINT @deger -- WAITFOR WAITFOR DELAY '00:00:05:000' --SAAT:DAKİKA:SANİYE:SANİSE SELECT * FROM ucus_detaylari WAITFOR TIME '18:15' SELECT * FROM ucus_detaylari -- TRY-CATCH BEGIN TRY DECLARE @sayi1 BIGINT DECLARE @sayi2 BIGINT DECLARE @sonuc BIGINT SET @sayi1=0 SET @sayi2=0 SET @sonuc=@sayi1/@sayi2 PRINT @sonuc END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS HataNumarasi, ERROR_SEVERITY() AS HataOnceligi, ERROR_STATE() AS HataDurumu, ERROR_PROCEDURE() AS HataProceduru, ERROR_LINE() AS HataSatiri, ERROR_MESSAGE() AS HataMesaji END CATCH -- RAISERROR -- HATA ÜRETMEK İÇİN KULLANILIR RAISERROR ('Hata : %s %d',--mesaj 11,--öncelik 1,--durum 'numara',--birinci arguman (%s) 5--ikinci arguman (%d) ) --%s METİNSEL PARAMETRE ALMASI İÇİN YAZILIR --%d VEYA %i SAYISAL DEĞERLER İÇİN YAZILIR --%u UNSIGNED SAYISAL İFADELER İÇİN --%x VEYA %X UNSIGNED HEXADECIMAL --ÖNCELİK 18'E KADAR DEĞER ALIR, 11 VE SONRASI --YÜKSEK ÖNCELİKLİDİR VE HATA FIRLATIR --10 VE ALTINDAKİLER SADECE RAPORLAR --DURUM 1-127 ARASINDA DEĞER ALIR VARSAYILAN OLARAK 1'DİR --RAISERROR İLE OLUŞAN HATALAR GLOBAL SYSTEM DEĞİŞKENLERİNE --ATANIR --BUNLAR : @@ERROR DEĞİŞKENİNDE TANIMLIDIR, --ERROR_NUMBER() AS HataNumarasi, --ERROR_SEVERITY() AS HataOnceligi, --ERROR_STATE() AS HataDurumu, --ERROR_PROCEDURE() AS HataProceduru, --ERROR_LINE() AS HataSatiri, --ERROR_MESSAGE() AS HataMesaji SELECT * FROM ucus_detaylari IF @@TRANCOUNT=0 BEGIN RAISERROR('sonuc yok',11,1) END --@@TRANCONT : EN SON ÇALIŞAN SORGUDAN --ETKİLENEN SATIR SAYISINI VERİR --PROCEDURE TANIMLAMA CREATE PROCEDURE MYPROC @PARAM1 VARCHAR(20) AS SELECT * FROM ucus_detaylari WHERE gidecegi_yer=@PARAM1 IF @@TRANCOUNT=0 BEGIN RAISERROR('ARANAN SONUÇ YOK',11,1) END --STORED PROCEDURE YAZILAN YORDAMIN SQL SERVER --ÜZERİNDE SAKLANMASINI SAĞLAR BÖYLELİKLE --İSTENİLDİĞİ ZAMAN ÇAĞRILIP KULLANILABİLİR. --ÇAĞIRMAK İÇİN EXEC DEYİMİNDEN YARARLANILIR EXEC MYPROC 'ANKARA' --PROCEDURE ÜZERİNDE DÜZENLEME YAPMA ALTER PROCEDURE MYPROC @PARAM1 VARCHAR(20) AS SELECT * FROM ucus_detaylari WHERE gidecegi_yer=@PARAM1 IF @@TRANCOUNT=0 BEGIN RAISERROR('ARANAN SONUÇ YOK',9,1) END -- PROCEDURE'LER GERİYE SADECE SAYISAL DEĞER DÖNDÜRÜRLER CREATE PROCEDURE HESAP @PARAM1 BIGINT,@PARAM2 BIGINT AS DECLARE @TOPLAM BIGINT SET @TOPLAM=@PARAM1+@PARAM2 IF @TOPLAM<100 RETURN 0 ELSE IF @TOPLAM<200 RETURN 1 ELSE IF @TOPLAM<300 RETURN 2 ELSE RETURN 3 -------------------------- DECLARE @SONUC INT EXEC @SONUC=HESAP 100,20 PRINT @SONUC ---------------------------------- CREATE PROCEDURE GOSTER @TABLE NVARCHAR(20) AS DECLARE @SQLString NVARCHAR(100) SET @SQLString ='SELECT * FROM '+RTRIM(@TABLE) EXECUTE sp_executesql @SQLString -- EXEC GOSTER 'bilet_detaylari' -------------------------------------------- -- TRIGGER CREATE TABLE TG_TABLE (AD VARCHAR(20),SOYAD VARCHAR(20)) -- TRIGGER'LAR TABLOLAR ÜZERİNDE GERÇEKLEŞEN VERİ DÜZENLEME -- İŞLEMLERİ SIRASINDA DEVREYE GİREN SAKLI YORDAMLAR GİBİ -- ÇALIŞIRLAR. -- BU İŞLEMLER : INSERT,UPDATE,DELETE İFADELERİDİR CREATE TRIGGER TG_NAME ON TG_TABLE AFTER INSERT AS SELECT AD FROM INSERTED -- TG_NAME : TRIGGER'IN ADIDIR -- ON TÜMCESİ İLE TRIGGER'IN TETİKLENECEĞİ TABLO BELİRTİLİR -- AFTER INSERT : TETİKLİYİCİNİN EKLENME İŞLEMİ GERÇEKLEŞTİKTEN -- SONRA YAPILACAĞINI BELİRTİR. -- AS DEYİMİNDEN SONRA GEREKLİ PROSEDÜREL SÜREÇ İŞLER -- INSERTED EKLENEN SATIRI TEMSİL EDER. INSERT INTO TG_TABLE VALUES('SERDAR','TÜRKEL') -- EKLENME GERÇEKLEŞİRKEN SELECT SORGUSU İLE EKLENEN SATIRA AİT -- AD SÜTUNU SELECT İFADESİ İLE GÖSTERİLİR. CREATE TRIGGER TG_NAME2 ON TG_TABLE AFTER INSERT AS DECLARE @AD VARCHAR(20) SET @AD=(SELECT AD FROM INSERTED) IF RTRIM(@AD)='SERDAR' BEGIN ROLLBACK TRANSACTION END INSERT INTO TG_TABLE VALUES('SERDAR','TÜRKEL') SELECT * FROM TG_TABLE -- ROLLBACK TRANSACTION : BU DEYİME KADAR OLAN TÜM İŞLEMLERİ GERİ -- ALIR. -- ID,AD,ADET,FİYAT,NET -- ALANLARINA SAHİP BİR BİR TABLO OLUŞTURUNUZ TABLO ADI = URUNLER -- ID ALANI PRIMARY KEY'DİR, AD,ADET,FİYAT ELLE GİRİLECEKTİR -- NET İSE OTOMATİK OLARAK HESAPLANACAKTIR (ADET*FİYAT) -- TABLOYA OTOMATİK OLARAK GİRİLECEKTİR. CREATE TABLE URUNLER ( ID BIGINT CONSTRAINT PK_001 PRIMARY KEY, AD VARCHAR(20) NULL, ADET BIGINT NULL, FIYAT BIGINT NULL, NET BIGINT NULL ) INSERT INTO URUNLER(ID,AD,ADET,FIYAT) VALUES (1,'ANAKART',10,5) SELECT * FROM URUNLER DELETE FROM URUNLER CREATE TRIGGER BITANEISIM ON URUNLER AFTER INSERT AS DECLARE @ID BIGINT DECLARE @ADET BIGINT DECLARE @FIYAT BIGINT DECLARE @NET BIGINT SET @ID=(SELECT ID FROM INSERTED) SET @ADET=(SELECT ADET FROM INSERTED) SET @FIYAT=(SELECT FIYAT FROM INSERTED) SET @NET=@ADET*@FIYAT UPDATE URUNLER SET NET=@NET WHERE ID=@ID CREATE TRIGGER BITANEISIM ON URUNLER AFTER INSERT AS UPDATE URUNLER SET NET=(ADET*FIYAT) SELECT * FROM URUNLER INSERT INTO URUNLER(ID,AD,ADET,FIYAT) VALUES(2,'ANAKART',20,10) EXEC sp_settriggerorder 'BITANEISIM','FIRST','INSERT' FIRST LAST NONE drop trigger BITANEISIM EXEC sp_configure 'show advanced options' , '1'; go reconfigure; go EXEC sp_configure 'clr enabled' , '1' go reconfigure; -- Turn advanced options back off EXEC sp_configure 'show advanced options' , '0'; go exec myproc1 CREATE TRIGGER TG_TG ON URUNLER AFTER INSERT,UPDATE AS SELECT * FROM INSERTED