TEMEL SQL SORGU ÖRNEKLERİ Sorgu İle Veritabanı Oluşturma create database veritabanı_adı Örnek : create database db_okul Yukarıdaki sorguyu çalıştırdığımızda db_okul adında bir veritabanı oluşturulur. Örnek: create database db_market Yukarıdaki sorguyu yazıp çalıştırdığımızda db_market adında bir veritabanı oluşturulur. Sorgu yazma penceresinde hangi veritabanı üzerinde çalışıyorsak sadece o veritabanı ile ilgili sorgulama yapabiliriz. Başka bir veritabanına geçiş yapmak istersek use ifadesini kullanmalıyız. Örnek: Şu anda db_okul veritabanı üzerinde çalıştığımızı varsayalım ve db_market veritabanına geçmeye çalışalım. use db_market Yukarıdaki sorguyu yazıp çalıştırdığımızda db_market veritabanına geçiş yapmış oluruz. Yani sadece db_market veritabanı üzerinde sorgulama yapabiliriz. db_okul veritabanı ile ilgili sorgulama yapamayız. Not: create database ve use ifadeleri ile MS Access te veritabanı oluşturamıyoruz. Çünkü MS Access te başlangıçta veritabanı oluşturmuş oluyoruz. Bu sql ifadelerini MS SQL Server veritabanı yazılımında kullanabiliriz. Burada bilgimiz olması açısından bu sql sorgularına yer verildi. Sorgu İle Tablo Oluşturma ( create table tablo_adi Sütun1 veritipi özellikler, Sütun2 veritipi özellikler, Sütun3 veritipi özellikler, SütunN veritipi özellikler ) Örnek : tbl_ogrenciler adında ogr_no, ogr_ad, ogr_soyad alanlarının olduğu bir tablo oluşturalım. create table tbl_ogrenciler( ogr_no int, ogr_ad varchar(30), ogr_soyad varchar(30) ) Yenişehir MTAL Web Programcılığı Veritabanı Organizasyonu 2017-2018 1
Örnek : tbl_personel adında p_no, p_ad, p_soyad,p_bolum alanlarının olduğu, tbl_bolum adında bolum_no, bolum_ad alanlarının olduğu iki adet tablo oluşturalım. create table tbl_personel( p_no int, p_ad varchar(30), p_soyad varchar(30), p_bolum int ) create table tbl_bolum( bolum_no int, bolum_ad varchar(30) ) Sorgu İle Tablo Silme drop table tablo_adi Örnek : drop table tbl_ogrenciler drop table tbl_personel drop table tbl_bolum Yukarıdaki 3 sorgu çalıştırıldığında tbl_ogrenciler, tbl_personel, tbl_bolum tabloları silinir.(silme işlemini yaparken tabloların kapalı olması gerekir. Açık olursa silme işlemi gerçekleşmez, Access hata verir. Sorgu ile Tabloya Sütun Ekleme alter table tablo_adi add column sütun_adi veri türü Örnek : tbl_ogrenciler tablosuna yazili_notu adında int tipinde sütun ekleyelim. alter table tbl_ogrenciler add column yazili_notu int Örnek: tbl_ogrenciler tablosuna ogr_bolum adında varchar(20) veri türünde sütun ekleyelim. alter table tbl_ogrenciler add column ogr_bolum varchar(20) Örnek: tbl_personel tablosuna p_sehir adında varchar(30) veri türünde sütun ekleyelim. alter table tbl_personel add column p_sehir varchar(30) Yenişehir MTAL Web Programcılığı Veritabanı Organizasyonu 2017-2018 2
Sorgu ile Tablodaki Sütun Özelliklerini Değiştirme alter table tablo_adi alter column sütun_adi veri türü Örnek : tbl_ogrenciler tablosundaki ogr_bolum sütununun veri türü varchar(20) dir. Bu sütunun veri türü bilgisini int olarak değiştirelim. alter table tbl_ogrenciler alter column ogr_bolum int Örnek : tbl_personel tablosundaki p_sehir alanının veri türü uzunluğu varchar(30) dur. Bunu varchar(40) yapalım. alter table tbl_personel alter column p_sehir varchar(40) Sorgu İle Tablodan Sütun Silme alter table tablo_adi drop column sütun_adi Örnek : tbl_ogrenciler tablosundaki yazili_notu alanını silelim. alter table tbl_ogrenciler drop column yazili_notu Örnek : tbl_personel tablosundaki p_sehir alanını silelim. alter table tbl_personel drop column p_sehir SELECT Deyiminin Yapısı SELECT deyimi ile bir tablodaki kayıtlara ait bir sütun, birden fazla sütün veya tüm sütunları seçerek verileri listeleyebiliriz. select sütun_adları from tablo_adı Örnek : tbl_ogrenciler tablosundaki öğrencilerin adını listeleyelim. select ogr_ad from tbl_ogrenciler Yenişehir MTAL Web Programcılığı Veritabanı Organizasyonu 2017-2018 3
Örnek : tbl_ogrenciler tablosundaki öğrencilerin no, ad ve soyad bilgilerini listeleyelim. select ogr_no, ogr_ad, ogr_soyad from tbl_ogrenciler Örnek : tbl_ogrenciler tablosundaki öğrencilerin tüm bilgilerini listeleyelim. Örnek : tbl_ogrenciler tablosundaki ogr_no, ogr_ad, ogr_soyad alanlarını sırasıyla Öğrenci Numarası, Öğrenci Adı, Öğrenci Soyad şeklinde göstererek listeleyelim. select ogr_no as [Öğrenci Numarası], ogr_ad as [Öğrenci Adı],ogr_soyad as [Öğrenci Soyad] from tbl_ogrenciler Örnek : tbl_ogrenciler tablosundaki ogr_no alanını Numarası, ogr_ad ve ogr_soyad alanlarını ise birleştirerek Adı Soyadı şeklinde göstererek listeleyelim. select ogr_no as [Numarası], ogr_ad+" "+ogr_soyad as [Adı Soyadı] from tbl_ogrenciler Tablodaki Verilerin Sınırlandırılması (WHERE Kullanımı) select sütun_adları from tablo_adi where koşul Örnek : tbl_ogrenciler tablosunda il_adi Şırnak olan öğrencilerin ad ve soyad bilgilerini listeleyelim. select ogr_ad, ogr_soyad from tbl_ogrenciler where il_adi = "Şırnak" Yenişehir MTAL Web Programcılığı Veritabanı Organizasyonu 2017-2018 4
Örnek : tbl_ogrenciler tablosunda ortalama notu 100 olan öğrencilerin tüm bilgilerini listeleyelim. where ortalama=100 Örnek : tbl_ogrenciler tablosunda ortalama notu 100 olmayan öğrencilerin tüm bilgilerini listeleyelim. where not ortalama=100 Örnek : tbl_ogrenciler tablosunda soyadı olmayan yani NULL olan öğrencileri listeleyelim. where ogr_soyad is null Örnek : tbl_ogrenciler tablosunda soyadı NULL olmayan yani soyadı bilgisi olan öğrencilerin tüm bilgilerini listeleyelim. where ogr_soyad is not null Örnek : tbl_ogrenciler tablosunda adı me harfleri ile başlayan öğrencilerin tüm bilgilerini listeleyelim. where ogr_ad like "me*" Yenişehir MTAL Web Programcılığı Veritabanı Organizasyonu 2017-2018 5
Örnek : tbl_ogrenciler tablosunda adı a harfi ile biten öğrencilerin tüm bilgilerini listeleyelim. where ogr_ad like "*a" Örnek : tbl_ogrenciler tablosunda ortalama not bilgisi 50 ile 100 arasında olan(50 ve 100 dahil) öğrencilerin ad, soyad ve ortalama bilgilerini listeleyelim. select ogr_ad,ogr_soyad,ortalama from tbl_ogrenciler where ortalama between 50 and 100 Örnek : tbl_ogrenciler tablosunda ortalama not bilgisi 60 tan büyük ve 85 e eşit veya küçük olan öğrencilerin ad, soyad ve ortalama bilgilerini listeleyelim. select ogr_ad,ogr_soyad,ortalama from tbl_ogrenciler where ortalama>60 and ortalama<=85 Örnek : tbl_ogrenciler tablosunda ortalama not bilgisi 50 den küçük olan öğrencilerin ad, soyad ve ortalama bilgilerini listeleyelim. select ogr_ad,ogr_soyad,ortalama from tbl_ogrenciler where ortalama<50 Örnek : tbl_ogrenciler tablosunda ortalama bilgisi 78 ve 100 e eşit olan öğrencilerin tüm bilgilerini listeleyelim. where ortalama in (78,100) Yenişehir MTAL Web Programcılığı Veritabanı Organizasyonu 2017-2018 6
Örnek : tbl_ogrenciler tablosunda ogr_ad bilgisi kadir, melike ve fatma ya eşit olan öğrencilerin tüm bilgilerini listeleyelim. where ogr_ad in ("kadir","melike","fatma") Tablodaki Verilerin Sıralanması (ORDER BY Kullanımı) ORDER BY tablodaki verilerin herhangi bir sütuna göre küçükten büyüğe veya büyükten küçüğe doğru sıralanması için kullanılır. ORDER BY ile ASC ve DESC ifadeleri kullanılır. ASC ifadesi küçükten büyüğe sıralarken DESC ifadesi büyükten küçüğe sıralar. ORDER BY kullanılırken ASC veya DESC yazılmadığında varsayılan olarak küçükten büyüğe sıralar. Örnek : tbl_ogrenciler tablosundaki tüm kayıtları ortalama bilgisine göre küçükten büyüğe doğru sıralayarak listeleyelim. Yöntem - 1 : order by ortalama Yöntem 2 : order by ortalama asc Yukarıdaki iki sorgu çalıştırıldığında aynı sonucu üretir. Örnek : tbl_ogrenciler tablosundaki tüm kayıtları ortalama bilgisine göre büyükten küçüğe doğru sıralayarak listeleyelim. order by ortalama desc Yenişehir MTAL Web Programcılığı Veritabanı Organizasyonu 2017-2018 7
Örnek : tbl_ogrenciler tablosundaki tüm kayıtları ogr_ad bilgisine göre büyükten küçüğe (Z den A ya)doğru sıralayarak listeleyelim. order by ogr_ad desc Örnek : tbl_ogrenciler tablosundaki tüm kayıtları ortalama bilgisine göre büyükten küçüğe doğru sıralayıp listeleyelim. Eğer ortalama bilgisi eşit olan kayıtlar varsa bu eşit olan kayıtları kendi arasında ogr_soyad bilgisine göre büyükten küçüğe( Z den A ya) doğru sıralasın. order by ortalama desc, ogr_soyad desc Yenişehir MTAL Web Programcılığı Veritabanı Organizasyonu 2017-2018 8
Tek Satır Fonksiyonları LCASE-UCASE Örnek : tbl_ogrenciler tablosundaki ogr_ad, ogr_soyad alanlarını büyük harfle ve sütün başlıklarını AD ve SOYAD olarak, il_adi alanını küçük harfle ve sütün başlığını İL olarak, ogr_bolum alanının sütün başlığını BÖLÜM olarak gösteren SQL kodunu yazalım. select ucase(ogr_ad) as AD, ucase(ogr_soyad) as SOYAD, lcase(il_adi) as İL, ogr_bolum as BÖLÜM from tbl_ogrenciler LEN Örnek : tbl_ogrenciler tablosundaki ogr_soyad alanındaki soyisimlerin karakter sayısını bulup sütün başlığı Soyisim Karakter Sayısı olacak şekilde listeleyen SQL kodunu yazalım. select ogr_soyad, len(ogr_soyad) as [Soyisim Karakter Sayısı] from tbl_ogrenciler NOW Örnek : Bilgisayarımızdaki tarih ve saat bilgisini gösteren SQL kodunu yazalım. select now() DAY-MONTH -YEAR Örnekler : Aşağıda önce şimdiki tarihin gün-ay-yıl bilgisini gösteren sql kodlarını, sonra belirtilen tarihin gün-ay-yıl bilgisini gösteren sql kodlarını yazalım. Yenişehir MTAL Web Programcılığı Veritabanı Organizasyonu 2017-2018 9
select day(now()) ----> 18 select day(#29/10/1923#) ----> 29 select month(now()) ----> 3 select month(#29/10/1923#) ----> 10 select year(now()) ----> 2018 select year(#29/10/1923#) ----> 1923 DATEPART Örnekler : Aşağıda önce şimdiki tarih ile belirtilen tarih arasındaki gün-ay-yıl farklarını gösteren sql kodlarını, sonra belirtilen iki tarih arasındaki gün-ay-yıl farklarını gösteren sql kodlarını yazalım. SELECT DateDiff('d',#12/5/2002#,Now()) ----> 5582 SELECT DateDiff('d',#12/5/2002#,#10/28/2015#) ----> 4710 SELECT DateDiff('m',#12/5/2002#,Now()) ----> 183 SELECT DateDiff('m',#5/10/1980#,#7/27/1997#) ----> 206 SELECT DateDiff('yyyy',#12/5/2002#,Now()) ----> 16 SELECT DateDiff('yyyy',#5/10/1980#,#7/27/1997#) ----> 17 Çoklu Satır (Grup) Fonksiyonları AVG Örnek : tbl_ogrenciler tablosundaki ortalama not bilgilerinin ortalamasını bulan ve sütun başlığını Not Ortalaması şeklinde gösteren SQL kodunu yazalım. select avg(ortalama) as [Not Ortalaması] from tbl_ogrenciler ----> 83,9090909090909 SUM Örnek : tbl_ogrenciler tablosundaki ortalama not bilgilerinin toplamını bulan ve sütun başlığını Toplam Not şeklinde gösteren SQL kodunu yazalım. select sum(ortalama) as [Toplam Not] from tbl_ogrenciler ----> 923 MAX Örnek : tbl_ogrenciler tablosunda en büyük ogr_no yu bulan ve sütün başlığını En Büyük No şeklinde gösteren sql kodunu yazalım. select max(ogr_no) as [En Büyük No] from tbl_ogrenciler ----> 102 MIN Örnek : tbl_ogrenciler tablosunda en küçük ogr_no yu bulan ve sütün başlığını En Küçük No şeklinde gösteren sql kodunu yazalım. select min(ogr_no) as [En Küçük No] from tbl_ogrenciler ----> 5 Yenişehir MTAL Web Programcılığı Veritabanı Organizasyonu 2017-2018 10
COUNT Örnek : tbl_ogrenciler tablosundaki kayıt sayısını bulan ve sütun başlığını Öğrenci Sayısı şeklinde gösteren sql kodunu yazalım.(null değerler dahil) select count(*) as [Öğrenci Sayısı] from tbl_ogrenciler ----> 11 Örnek : tbl_ogrenciler tablosundaki kayıt sayısını ogr_soyad sütünuna göre bulan ve sütun başlığını Öğrenci Sayısı şeklinde gösteren sql kodunu yazalım.(null değerler dahil değil) select count(ogr_soyad) as [Öğrenci Sayısı] from tbl_ogrenciler;----> 10 **count eğer sütun ile birlikte kullanılırsa null değerler dahil edilmez. Tabloda sevim adlı öğrencinin soyad bilgisi null olduğu için bu kaydı dikkate almadı. Birden Fazla Sütuna Göre Gruplama (GROUP BY Kullanımı) Örnek : tbl_ogrenciler tablosuna göre her bölümde okuyan öğrenci sayısını gösteren sql kodunu yazalım. select ogr_bolum, count(*) as [Öğrenci Sayısı] from tbl_ogrenciler group by ogr_bolum Örnek : tbl_ogrenciler tablosuna göre her bölümün not ortalamasını gösteren sql kodunu yazalım. select ogr_bolum, avg(ortalama) as [Not Ortalaması] from tbl_ogrenciler group by ogr_bolum Örnek : tbl_ogrenciler tablosuna göre İstanbul, Kocaeli, Şırnak illerinde okuyan öğrenci sayısını gösteren sql kodunu yazalım. select il_adi, count(*) as [Öğrenci Sayısı] from tbl_ogrenciler where il_adi in ("İstanbul","Kocaeli","Şırnak") group by il_adi Yenişehir MTAL Web Programcılığı Veritabanı Organizasyonu 2017-2018 11
Grup Koşullarının Kullanımı(HAVING) Örnek : tbl_ogrenciler tablosuna göre not ortalaması 85 ve üzeri olan bölümleri gösteren sql kodunu yazalım. select ogr_bolum, avg(ortalama) as [Not Ortalaması] from tbl_ogrenciler group by ogr_bolum having avg(ortalama)>=85 Örnek : tbl_ogrenciler tablosuna göre öğrenci sayısı 2 ve üzerinde olan illeri gösteren sql kodunu yazalım. select il_adi, count(*) as [Öğrenci Sayısı] from tbl_ogrenciler group by il_adi having count(*)>=2 Örnek : tbl_ogrenciler tablosuna göre İstanbul, Kocaeli, Şırnak illerinden öğrenci sayısı 1 den büyük olanları gösteren sql kodunu yazalım. select il_adi, count(*) as [Öğrenci Sayısı] from tbl_ogrenciler where il_adi in ("İstanbul","Kocaeli","Şırnak") group by il_adi having count(*)>1 Tabloların Birleştirilmesi Aşağıdaki iki tablo üzerinde birleştirme(join) sorguları yazılmıştır. Yenişehir MTAL Web Programcılığı Veritabanı Organizasyonu 2017-2018 12
INNER JOIN (Eşiti Olan Birleştirme) Birleştirmenin yapıldığı her iki tabloda da eşleşen kayıtlar listelenir. Örnek : tbl_urunler tablosu ile tbl_kategoriler tablosunu where ve inner join ile birleştirelim. select * from tbl_urunler, tbl_kategoriler where tbl_urunler.kategori_id=tbl_kategoriler.kategori_id select * from tbl_urunler inner join tbl_kategoriler on tbl_urunler.kategori_id=tbl_kategoriler.kategori_id Yukarıdaki iki sorgu çalıştırıldığında aşağıdaki kayıtlar listelenecektir. Birinci sorgu where koşuluyla da eşiti olan birleştirmenin yapılabildiğini göstermek için yazılmıştır. Biz inner join kullanmaya devam edeceğiz. Örnek : tbl_urunler ve tbl_kategoriler tablolarını kullanarak urun_id, urun_adi, kategori_adi şeklinde ortak değere sahip olan kayıtları listeleyen sql kodunu yazalım. select urun_id, urun_adi, tbl_kategoriler.kategori_adi from tbl_urunler inner join tbl_kategoriler on tbl_urunler.kategori_id=tbl_kategoriler.kategori_id Yenişehir MTAL Web Programcılığı Veritabanı Organizasyonu 2017-2018 13
RIGHT JOIN (Eşiti Olmayan Birleştirme) Birleştirmenin sağ tarafında olan tablodaki tüm kayıtlar listelenirken sol tarafındaki tabloda eşleşen kayıtlar listelenir. Örnek : select * from tbl_urunler right join tbl_kategoriler on tbl_urunler.kategori_id=tbl_kategoriler.kategori_id LEFT JOIN (Eşiti Olmayan Birleştirme) Birleştirmenin sol tarafında olan tablodaki tüm kayıtlar listelenirken sağ tarafındaki tabloda eşleşen kayıtlar listelenir. Örnek : select * from tbl_urunler left join tbl_kategoriler on tbl_urunler.kategori_id=tbl_kategoriler.kategori_id Yenişehir MTAL Web Programcılığı Veritabanı Organizasyonu 2017-2018 14
Alt Sorgular Alt sorgular yukarıdaki iki tabloya göre yazılmıştır. Tek Satır Alt Sorguları Örnek : Personel numarası 111 olan personel ile aynı bölümde çalışan personelllerin ad, soyad ve bolum bilgilerini listeleyen sql sorgusunu yazalım. select p_ad, p_soyad, p_bolum from tbl_personel where p_bolum = (select p_bolum from tbl_personel where p_no=111) Çoklu Satır Alt Sorguları Örnek : Şırnaklı personellerin çalıştığı bölümlerdeki personellerin ad, soyad, bölüm ve şehir bilgilerini listeleyen sql sorgusunu yazalım. select p_ad, p_soyad, p_bolum, p_sehir from tbl_personel where p_bolum in (select p_bolum from tbl_personel where p_sehir="şırnak") Yenişehir MTAL Web Programcılığı Veritabanı Organizasyonu 2017-2018 15
Örnek : 5 numaralı bölümdeki en düşük maaşlı personelin maaşından daha yüksek maaş alan personelleri listeleyelen sql sorgusunu yazalım. select * from tbl_personel where p_maas>any (select p_maas from tbl_personel where p_bolum=5) Örnek : 5 numaralı bölümdeki en yüksek maaşlı personelin maaşından daha düşük maaş alan personelleri listeleyen sql sorgusunu yazalım. Örnek : 5 numaralı bölümdeki en yüksek maaşlı personelin maaşından daha yüksek maaş alan personelleri listeleyen sql sorgusunu yazalım. select * from tbl_personel where p_maas>all (select p_maas from tbl_personel where p_bolum=5) 5 numaralı bölümdeki en yüksek maaş 5500TL ve bu maaştan daha yüksek maaşlı personel olmadığı için sorgu sonucu boş döndü. Yenişehir MTAL Web Programcılığı Veritabanı Organizasyonu 2017-2018 16
Örnek : 5 numaralı bölümdeki en düşük maaşlı personelin maaşından daha düşük maaş alan personelleri listeleyen sql sorgusunu yazalım. select *from tbl_personel where p_maas<all (select p_maas from tbl_personel where p_bolum=5) EK SORGULAR Örnek : tbl_personel tablosuna göre personellerin p_no, p_ad, p_soyad, bolum_ad bilgilerini listeleyen sql sorgusunu yazalım. select p_no, p_ad, p_soyad, bolum_ad from tbl_personel inner join tbl_bolum on tbl_personel.p_bolum=tbl_bolum.bolum_no Yenişehir MTAL Web Programcılığı Veritabanı Organizasyonu 2017-2018 17
Örnek : tbl_personel tablosuna p_maas adında sütun ekleyen sql sorgusunu yazınız. alter table tbl_personel add column p_maas currency Örnek : tbl_personel tablosuna giriş_tarihi adında sütun ekleyen sql sorgusunu yazınız. alter table tbl_personel add column giris_tarihi datetime Yenişehir MTAL Web Programcılığı Veritabanı Organizasyonu 2017-2018 18