ADRES İ NDEN ÖRNEK VER İ TABANLARINI İ ND İ R İ N İ Z SQL.

Slides:



Advertisements
Benzer bir sunumlar
VTYS Öğr. Gör. Engin DUTAR
Advertisements

Hazırlayan : Öğr. Gör. Fahri YILMAZ
III.Oturum: SQL ile Verileri İşlemek
Verileri gruplayarak analiz
KARMAŞIK SORGULAR.
SQL (Structured Query Language)
KARMAŞIK SORGULAR.
SQL (Structured Query Language)
SQL FONKSİYONLARI.
SQL Structured Query Language (Yapısal sorgulama dili)
En ucuzundan en pahalısına doğru sıralanmış olarak “Cep Telefonları” kategorisindeki tüm ürünlerin isimleri “Spor” kategorisinde ürünleri listelenen “İstanbul”
SQL Komutlar 2 Sibel SOMYÜREK.
SQL de Değişken Tanımlama
SQL Komutlar 5 Sibel SOMYÜREK.
EkoPC Bilişim Ltd. Eğitim Hizmetleri
Veritabanı Yönetim Sistemleri-I
Alt Sorgular Veritabanı 2.
5 Sorgulama İşlemleri Veritabanı 1.
Veri Tabanı Yönetim Sistemleri
Tek Tablo İçinde Sorgulamalar
Fonksiyonlar Hafta 4.
Veritabanı Yönetim Sistemleri Hızlı ve Kısa Giriş
Veri Tabanı Yönetim Sistemleri
VeriTabanı Uygulama. Tabloları yaratmak için MySQL komutları.
BÖLÜM 6 SQL SERVER KOMUTLARI.
10 Gruplandırarak Sorgulama
SQL (STRUCTURED QUERY LANGUAGE)
VTYS Öğr. Gör. Engin DUTAR
11 ekim 2011 VTYS –II Dersi. Kalıp İfadelerle Sorgu (Pattern) Eğer bir sözel verinin sadece belli kriterlere uyanlarını seçeceksek sütun_adı LIKE kalıp.
VIEW (BAKIŞ) OLUŞTURMA
VIEW lerle çalışmak 11.BÖLÜM.
SQL Komutlar 3 Sibel SOMYÜREK.
VTYS Öğr. Gör. Engin DUTAR
VERİTABANI ve YÖNETİMİ
SQL’e Giriş ve SELECT Komutu
SQL de Değişken Tanımlama
MySQL Operatörleri ve Fonksiyonları
SQL SERVER 2008 Yücel YILDIRIM.
VeriTabanı Uygulama.
Bilgisayar Mühendisliği Bölümü
Veri Tabanı Yönetim Sistemleri 1 Ders 6 Çok Tablolu Sorgular
SQL Sibel SOMYÜREK.
Veri Tabanı Yönetim Sistemleri 1 Ders 5 SQL'e Giriş
Veritabanı Yönetim Sistemleri-I
SQL Komutları (2) Uzm. Murat YAZICI.
Okul Yönetiminde Bilgisayar Uygulamaları
VTYS Öğr. Gör. Engin DUTAR
SQL’ e Giriş Uzm. Murat YAZICI.
ADRESİNDEN ÖRNEK VERİ TABANLARINI İNDİRİNİZ
Yeni Veritabanı Oluşturma
Yapısal Sorgulama Dili SQL VTYS Giriş Hafta 5 Ders Notu.
ÖTÖ 451 Okul Yönetiminde Bilgisayar Uygulamaları R. Orçun Madran.
Yapısal Sorgulama Dili SQL Hafta 7. TEKRARLI SATIRLARI ÖNLEMEK  DISTINCT komutu ile sorgu sonucunda birden fazla kayıt aynı verileri içeriyorsa tekrarlı.
ÖTÖ 451 Okul Yönetiminde Bilgisayar Uygulamaları R. Orçun Madran.
Veri Tabanı Yönetimi Dersi 1. Laboratuvarı Arş. Gör. Pınar CİHAN.
ACCESS VERİTABANI OLUŞTURMA
Veri Tabanı Yönetimi Dersi 1. Laboratuvarı
VIEW lerle çalışmak 11.BÖLÜM.
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
5. HAFTA Öğr. Gör. Yunus KÖKVER
VERİ TABANI SQL (STRUCTURED QUERY LANGUAGE) SAVAŞ TUNÇER.
SQL.
Öğretim Görevlisi Alper Talha Karadeniz Veri Tabanı 1
SQL Server’da Fonksiyon Kullanımı
DML ile veri ekleme, silme ve değiştirme
SQL (STRUCTURED QUERY LANGUAGE)
SQL Server - Stored Procedures
SQL Server - Views.
Sunum transkripti:

ADRES İ NDEN ÖRNEK VER İ TABANLARINI İ ND İ R İ N İ Z SQL

SQL Nedir? Structured Query Language (SQL) "Yapısal Sorgulama Dili" Veritabanları üzerinde, karma ş ık sorgular yapmak için tasarlanmı ş bir dildir.

SQL Nedir? SQL ile yalnızca veri tabanı üzerinde i ş lem yapılabilir. SQL ile; veri tabanına kayıt eklenebilir, olan kayıtlar de ğ i ş tirilebilir, silinebilir ve bu kayıtlardan listeler olu ş turulabilir.

SQL - Tarihçesi Veri Tabanı Yakla ş ımı ile birlikte bir veri sorgulama diline veya aracına ihtiyaç duyulmu ş tur. İ lk ba ş ta matematiksel bir sözdizimine sahip olan SQUARE adlı bir dil geli ş tirilmi ş tir.. Geni ş kullanıcı kitleleri tarafında kolay kullanılabilmesi için matematiksel söz dizimli SQUARE dilinden vazgeçilerek, İ ngilizce'ye benzer sözdizimine sahip bir dil olu ş turulmu ş tur.

SQL - Tarihçesi Bu dil SEQUEL (Structured English Query Language) olarak adlandırılmı ş tır. Daha sonra da bu SEQUEL dili, İ ngilizce söyleni ş ine paralel olarak SQL olarak adlandırılmı ş tır.

SQL Dilini Kullanan Veritabanları MySQL Mssql PostgreSQL Microsoft SQL Server Oracle Firebird

SQL Komutları Yapısal Sorgulama Dili (SQL-Structured Query Language) 1. Veri İş leme Dili (DML-Data Manipulation Language) 2. Veri Tanımlama Dili (DDL-Data Definition Language) 3. Veri Kontrol Dili (DCL-Data Control Language)

SQL Komutları 1. Veri İş leme Dili (DML-Data Manipulation Language) Bir tablodaki veriler üzerinde sorgulama, ekleme, güncelleme ve silme i ş lemleri gerçekle ş tirir. Select Insert Update Delete

SQL Komutları 2. Veri Tanımlama Dili (DDL-Data Definition Language) Sıfırdan tablo olu ş turma, tablo üzerinde de ğ i ş iklik yapma, tablo olu ş turma, indeks olu ş turma ve silme i ş lemleri gerçekle ş tirir. Create Table Drop Table Alter Table Create Index Drop Index Alter View

SQL Komutları 2. Veri Kontrol Dili (DCL-Data Control Language) Kullanıcılara veri tabanı üzerinde bazı haklar verme veya verilen hakları geri alma gibi i ş lemlere olanak tanıyan SQL komutlarını içermektedir. Create User Drop User Alter User Grant Revoke

SQL - Komutlar SQL dilinde bir tablodan kayıt çekmek için SELECT komutu kullanılır. SELECT * FROM tablo_adi

SQL - Komutlar Ö ğ rencilerin tümü tarafından yazılımda alınan notların tamamını listeleyin.

SQL - Select Komutu Tablo içindeki sadece belli alanlara ili ş kin verileri listelemek için; SELECT alanadi1,alanadi2 FROM tablo_adi;

SQL - Select Komutu Örne ğ in ö ğ renciler tablosunda sadece ogrenci numarası ve adını listelemek için; SELECT ogr_no,ad FROM OGRENCILER;

SQL - Select Komutu Verileri listelerken belli bir alandaki verilere göre sıralamak için; SELECT * FROM tablo_adi ORDER BY alan1;

SQL - Komutlar Örne ğ in alınan notları ders koduna göre sıralamak için; SELECT * FROM notlar ORDER BY DERS_KODU;

SQL - Komutlar SELECT * FROM notlar ORDER BY DERS_KODU; Kodu ş u ş ekilde de yazılabilir; SELECT * FROM notlar ORDER BY DERS_KODU ASC;

SQL - Komutlar Örne ğ in alınan notları ders koduna göre azalan sırada sıralamak için; SELECT * FROM notlar ORDER BY DERS_KODU DESC;

SQL - Komutlar Verileri listelerken birden fazla alan baz alınarak listeleme yapılabilir SELECT * FROM tabloadi ORDER BY alanadi1 DESC, alanadi2 ASC;

SQL - Komutlar Örne ğ in alınan notları alındı ğ ı ders oduna göre azalan, vize notuna göre de artan sırada listelemek için; SELECT * FROM notlar ORDER By ders_kodu DESC, VIZE ASC ;

SQL - Komutlar Tablodaki belli bir alanın bir ko ş ula uymasına göre verileri listelemek için; SELECT * FROM tablo_adi WHERE alanadi1=ko ş ul;

SQL - Komutlar Örne ğ in sadece no’lu ö ğ rencinin aldı ğ ı notları görüntülemek için; SELECT * FROM notlar WHERE ogr_no= ;

SQL - Komutlar SQL kodlarında metin de ğ erleri tırmak içinde yazılmalıdır. Örne ğ in ko ş ul metin ise; SELECT * FROM tabloadi WHERE alanadi1=“metin”;

SQL - Komutlar Örne ğ in OGRENC İ LER tablosundan sadece adı Ecem olan ö ğ rencilerin bilgilerini görüntülemek için; SELECT * FROM OGRENCILER WHERE ad="ecem";

SQL - Komutlar Tablodaki verileri birden fazla ko ş ula göre listelemek için; SELECT * FROM tablo_adi WHERE alanadi1=“metin“ AND alanadi2=“metin”;

SQL - Komutlar Örne ğ in numaralı ö ğ rencinin BM111 nolu dersini listelemek için; SELECT * FROM NOTLAR WHERE OGR_NO= AND DERS_KODU="BM 111";

SQL - Komutlar Tablodaki verileri iki ko ş uldan birini sa ğ lama durumuna göre listelemek için; SELECT * FROM tablo_adi WHERE alanadi1=“metin“ OR alanadi2=“metin”;

SQL - Komutlar Örne ğ in no VE vizesi 70 olan kullanıcıların bilgilerini listelemek için; SELECT * FROM NOTLAR WHERE OGR_NO= AND VIZE=70;

SQL - Komutlar Hem ve hem de veya ko ş ulunu içeren sorgulamalar da olabilir SELECT * FROM tablo_adi WHERE (alanadi1=“metin“ OR alanadi2=“metin”) AND alanadi3=“metin”;

SQL - Komutlar Örne ğ in ö ğ renci numarası veya olan BM 122 NOLU dersi alan kullanıcılar varsa listelemek için; SELECT * FROM NOTLAR WHERE (OGR_NO= or OGR_NO= ) and ders_kodu="bm 111";

WHERE ile kriter verme E ğ er tüm kayıtların de ğ il de sadece belirli kayıtların görüntülenmesi istenirse WHERE ile kriter verilir. A ş a ğ ıdaki SQL cümlesi vizesi 70 üzeri olan dersi notları görüntüler: SELECT * FROM NOTLAR WHERE VIZE>70;

Kriterlerde kullanılan işleçler Programlama dillerinde kullanılan aritmetiksel kar ş ıla ş tırma i ş leçleri (, >=, =, <>) ve mantıksal i ş leçler (AND, OR, NOT) SQL dilinde de kriter verirken kullanılır. A ş a ğ ıdaki SQL cümlesi görevi müdür olan ve maa ş ı 5000 TL’den fazla olan personeli gösterir: SELECT * FROM PERSONEL WHERE GOREV = ‘Müdür’ AND MAAS > 5000 Programlama dillerinde oldu ğ u gibi SQL’de de karakter türü veriler ile i ş lem yapılacaksa tek tırnak yada çift tırnak kullanılır.

Karakter türü verilerin karşılaştırılması Karakter türü veriler ile de büyüklük-küçüklük kıyaslamaları yapılabilir. A ş a ğ ıdaki SQL cümlesi adı N-Z arasında bir harf ile ba ş layan personeli gösterir: SELECT * FROM PERSONEL WHERE AD > ‘N’ A ş a ğ ıdaki SQL cümlesi adı E harfi ile ba ş layan personeli gösterir: SELECT * FROM PERSONEL WHERE AD > ‘E’ AND AD < ‘F’

LIKE işleci Belirli bir karakter katarını barındıran verileri aramak için LIKE kullanılır. Önceki slaytta yer alan, adı E harfi ile ba ş layan personeli gösteren sorgu LIKE ile de yazılabilir: SELECT * FROM PERSONEL WHERE AD LIKE ‘E*’ Adresler ş ehir adı ile bitiyorsa, Edirne ilinde ikamet eden ö ğ rencileri görmek için a ş a ğ ıdaki sorgu kullanılabilir: SELECT * FROM Ö Ğ RENC İ LER WHERE ADRES LIKE ‘*Edirne’

BETWEEN … AND … işleci İ ki de ğ er arasında kar ş ıla ş tırma yapmak için Between … And … i ş leci (… ile … arasında) kullanılabilir. A ş a ğ ıdaki SQL cümlesi maa ş ı 1000 ile 2000 TL arasında olan i ş çileri görüntüler: SELECT * FROM PERSONEL WHERE MAAS BETWEEN 1000 AND 2000 AND GOREVI = ‘ İş çi’ Bu sorgu Between i ş leci kullanılmadan da yazılabilirdi: SELECT * FROM PERSONEL WHERE MAAS >= 1000 AND MAAS <= 2000 AND GOREVI = ‘ İş çi’

IN işleci Bir listedeki de ğ erler ile kar ş ıla ş tırma yapmak için IN i ş leci kullanılır ile 2000 TL arasında de ğ il de sadece 1000, 1500 ve 2000 TL maa ş alanları listelemek için a ş a ğ ıdaki SQL cümlesi kullanılabilir: SELECT * FROM PERSONEL WHERE MAAS IN (1000, 1500, 2000)

Tarihsel türü verilerin karşılaştırılması Belirli bir tarihe e ş it olan veya o tarihten büyük yada küçük olan verilerin aranması istenirse, tarih ay/gün/yıl biçiminde ve # karakterleri arasında yazılmalıdır: SELECT * FROM OGRENCILER WHERE DOGUM_TARIHI BETWEEN #1/1/1989# AND #12/31/1989#

DISTINCT ifadesi E ğ er tablonun bir alanında yer alan veriler içinde aynı olan veriler varsa SELECT ifadesinden sonra kullanılan DISTINCT ile bu tekrar eden verilerin sadece 1 defa görüntülenmesi sa ğ lanabilir. A ş a ğ ıdaki SQL cümlesi farklı kayıtlardaki aynı adları her kayıt için tekrar göstermek yerine 1 defa gösterilmesini sa ğ lar: SELECT DISTINCT AD FROM PERSONEL

AS ifadesi ve sütun içeriklerini birleştirme Sütunların kendi ismi yerine AS ifadesi ile takma isim almaları sa ğ lanabilir. İ ki yada daha fazla sayıda sütunun içeri ğ ini birle ş tirmek için sütun isimleri arasında Access’te &, Oracle’da ise || i ş leçleri kullanılır. A ş a ğ ıdaki SQL cümlesi AD ve SOYAD sütunlarının içeriklerini araya bir bo ş luk karakteri ekleyerek birle ş tirir ve ISIM adlı bir sütun ş eklinde gösterir. SELECT AD & ' ' & SOYAD AS ISIM FROM OGRENCILER

Matematiksel İşlemler SELECT ifadesinden sonra bir sütunun bir matematiksel i ş leme tabi tutulması ve bu i ş lemin sonucunun gösterilmesi sa ğ lanabilir. Tabloda aylık maa ş ları saklanan personelin yıllık maa ş larının görüntülenmesi istenirse, a ş a ğ ıdaki SQL cümlesi kullanılabilir: SELECT AD, SOYAD, MAAS * 12 AS YıllıkÜcret FROM PERSONEL

NULL (boş) değerler ile ilgili işlemler E ğ er bir kayıt, bazı alanları bo ş bırakılarak eklendiyse, matematiksel i ş lemlerde sorun çıkabilir (NULL, sıfır de ğ eri ile aynı de ğ ildir) * i ş leminin sonucu 1800 iken, 1500 * 12 + NULL i ş leminin sonucu NULL olacaktır. Kar ş ıla ş tırma i ş lemlerinde de NULL ile = i ş leci kullanılmaz, IS kullanılır. SELECT * FROM PERSONEL WHERE TC_NO IS NULL

Büyük/Küçük Harf Duyarlılığı SQL dili büyük/küçük harf ayrımı yapmaz (case-sensitive de ğ ildir). A ş a ğ ıdaki yazımların hepsi aynı i ş i yapar (Personel tablosundaki tüm personelin sadece adı ve soyadı görüntülenir): SELECT AD, SOYAD FROM PERSONEL SELECT Ad, Soyad FROM Personel Select Ad, Soyad From Personel select ad, soyad from personel

Türkçe karakter kullanma Birçok VTYS, tablo ve nitelik isimlerinde Türkçe karakter kullanımına izin verir. Fakat sorgularda bazı sıkıntılara neden olabilece ğ i için kullanılması tavsiye edilmez. Örne ğ in PERSONEL tablosundaki nitelik isimleri ADI ve SOYADI ş eklinde büyük harfler ile verildiyse, bazı VTYS’ler “SELECT Adi, Soyadi FROM Personel” ifadesini, bazıları ise “SELECT Adı, Soyadı FROM Personel” ifadesini do ğ ru kabul eder.

Alan ismi olarak kullanılmaması gereken kelimeler Bir ö ğ rencinin not bilgilerini saklamak için “NOT” isminde bir alan yaratılırsa sorgularda bu alana göre kriter verilmek istendi ğ inde, İ ngilizcede “de ğ il” anlamına geldi ğ i için hata verecektir. “NOT” yerine “NOTU”, “VIZE”, “FINAL” gibi ifadeler tercih edilmelidir: SELECT * FROM NOTLAR WHERE NOT >= 60 SELECT * FROM NOTLAR WHERE NOTU >= 60 Benzer ş ekilde SQL’e ait olan “SELECT”, “FROM”, “WHERE”, “ORDER”, … gibi ifadeler de alan ismi olarak kullanılmamalıdır. Hatalı Do ğ ru

SQL Fonksiyonları Programlama dillerinde oldu ğ u gibi, SQL’de de bazı aritmetik i ş lemler için yada tip dönü ş ümü yapmak için hazır olarak sunulan fonksiyonlar mevcuttur. Bu fonksiyonların bazıları (SUM, AVG, MIN, MAX, …) birçok kayıt üzerinde i ş lem yapıp tek bir sonuç üretirken, bazıları ise (Örne ğ in; tip dönü ş ümü ile ilgili olanlar) üzerinde i ş lem yaptı ğ ı her kayıt için ayrı sonuç üretir.

SUM ve AVG Belirli bir sütundaki sayısal verilerin toplanarak sonucun gösterilmesi istenirse SUM, aritmetik ortalamasının gösterilmesi istenirse AVG kullanılır. A ş a ğ ıdaki SQL cümlelerinden ilki tüm personelin maa ş larının toplamını, ikincisi ise maa ş ların aritmetik ortalamasını gösterir: 1. SELECT SUM(MAAS) AS TOPLAM_MAAS FROM PERSONEL 2. SELECT AVG(MAAS) AS [MAASLARIN ORTALAMASI] FROM PERSONEL NOT: _ karakteri yerine bo ş luk karakteri kullanılması istenirse [] içinde yazılmalıdır.

Ö ğ rencilerin derslerden aldı ğ ı notların ortalamasını bulun. Select avg(VIZE) as vize_ortalama from NOTLAR Tüm ö ğ rencilerin BM YD2 dersinden aldı ğ ı notların ortalamasını bulun. Select avg(VIZE) as vize_ortalama from NOTLAR where DERS_KODU="BM YD2"

GROUP BY SUM, AVG gibi bazı fonksiyonların tablonun tamamı için de ğ il de, belirli bir alana (yada alanlara) göre gruplandırılarak çalı ş tırılması GROUP BY deyimi ile sa ğ lanabilir. A ş a ğ ıdaki SQL cümlesi personelin ortalama maa ş larını her bölüm için ayrı ayrı listeler: SELECT AVG(MAAS) FROM PERSONEL GROUP BY BOLUM

Select ogr_no, avg(VIZE) as vize_ortalama from NOTLAR WHERE DERS_KODU="BM YD2" group by ogr_no Her öğrencinin BM YD2 dersinden aldığı vize notlarının ortalamasını bulun.

MIN ve MAX Belirli bir sütundaki en büyük veriyi görüntülemek için MAX, en küçük veriyi görüntülemek için ise MIN fonksiyonları kullanılır. A ş a ğ ıdaki SQL cümlesi, ö ğ retim yılında “BM YD2” dersinden HER OGRENCININ aldı ğ ı en yüksek ba ş arı notunu gösterir: SELECT OGR_NO, Max(VIZE*0.3+FINAL*0.7) AS MAKS_NOT FROM NOTLAR WHERE DERS_KODU="BM YD2" AND DERS_YILI=" " GROUP BY OGR_NO

COUNT Sorgunun üretti ğ i satır sayısını döndürür. A ş a ğ ıdaki SQL cümlesi PERSONEL tablosundaki toplam kayıt sayısını döndürür: SELECT COUNT(*) FROM PERSONEL E ğ er COUNT içinde * yerine belirli bir sütun ismi verilirse o sütundaki NULL olmayan de ğ er sayısını döndürür: SELECT COUNT(ADRES) FROM OGRENCILER

Ö ğ renci sayısını bulunuz. Select count(*) from OGRENCILER Hoca sayısını bulunuz. Select count(AD) from HOCALAR

LCASE, UCASE ve LEN LCASE: Tüm karakterleri küçük harfe dönü ş türür. (Oracle’da LOWER) UCASE: Tüm karakterleri büyük harfe dönü ş türür. (Oracle’da UPPER) LEN: Sütun yada ifade içindeki karakter sayısını döndürür (Oracle’da LENGTH) A ş a ğ ıdaki SQL cümlesi SOYAD bilgileri küçük harfli bile girilmi ş olsa tüm karakterleri büyük harf olarak görüntüler: SELECT AD, LCASE(SOYAD) FROM PERSONEL

Ö ğ renci soyadlarını büyük harfe çeviriniz. Select ad,Ucase(soyad ) from OGRENCILER

Tip Dönüşümleri Access’te tip dönü ş ümleri için a ş a ğ ıdaki fonksiyonlar kullanılır: CBool CDate CInt CStr CByte CDbl CLng CVar CCur CDec CSng Oracle’da en çok kullanılan fonksiyonlar: TO_NUMBERTO_DATE TO_CHAR Oracle’daki tüm tip dönü ş ümü fonksiyonları için:

Tarihsel Fonksiyonlar (Access) NOW: Sistem tarihini ve saatini döndürür. DATEDIFF: İ ki tarih arasındaki farkı verir. DATEADD: Aldı ğ ı tarihin üzerine aldı ğ ı de ğ eri (gün, ay, yıl) ekleyerek yeni bir tarih de ğ eri üretir. DAY: Aldı ğ ı tarihin gün kısmını döndürür. MONTH: Aldı ğ ı tarihin gün kısmını döndürür. YEAR: Aldı ğ ı tarihin gün kısmını döndürür. Oracle’daki tarihsel fonksiyonlar için:

Çok tablolu sorgulamalar E ğ er birden fazla tabloda yer alan verilerin tek bir sorgu ile görüntülenmesi istenirse FROM kısmında ilgili tablolar araya virgül konularak yazılmalı, WHERE kısmında ise o tabloları birbirine ba ğ layan alanların birbirine e ş it olması kriteri verilmelidir. WHERE kısmında böyle bir kriter verilmezse, iki tablonun tüm kayıtları birbiri ile e ş le ş tirilecek (kartezyen çarpım) ve ortaya istenilenden daha çok sayıda kayıt çıkacaktır.

2 tablolu sorgulama örneği PERSONEL tablosundaki BOLUM (FK) alanı ile BOLUMLER tablosundaki BOLUM_NO (PK) alanı birbirine ba ğ lıdır. E ğ er personel bilgileri görüntülenirken personelin çalı ş tı ğ ı bölümün numarasını de ğ il de adını göstermek istersek bu adı BOLUMLER tablosundan elde etmeliyiz. Bu nedenle iki tablonun ismini de FROM kısmında kullanmalıyız: SELECT AD, SOYAD, GOREV, BOLUM_ADI FROM PERSONEL, BOLUMLER WHERE BOLUM = BOLUM_NO NOT: Bu satır yazılmadı ğ ında görüntülenen kartezyen çarpıma dikkat!

Alan isimlerinin aynı olması durumu E ğ er bir çok tablolu sorgulamada ili ş kinin her iki tarafındaki alanlar aynı isimde ise; alan isimlerinden önce, o alanın ait oldu ğ u tablo ismi de yer almalıdır. Örne ğ in PERSONEL tablosundaki alan ismi de BOLUM_NO olsaydı sorgu ş u ş ekilde yazılmalıydı: SELECT AD, SOYAD, GOREV, BOLUM_ADI FROM PERSONEL, BOLUMLER WHERE PERSONEL.BOLUM_NO = BOLUMLER.BOLUM_NO SELECT AD, SOYAD, GOREV, BOLUM_ADI FROM PERSONEL P, BOLUMLER B WHERE P.BOLUM_NO = B.BOLUM_NO SELECT AD, SOYAD, GOREV, BOLUM_ADI FROM PERSONEL P, BOLUMLER B WHERE P.BOLUM_NO = B.BOLUM_NO Aynı sorgu şu şekilde de yazılabilirdi:

Ö ğ rencilerin adı, soyadı, DERS YILI, ders kodu ve vize notlarını listeletin: Select ad, SOYAD, VIZE,DERS_KODU,DERS_YILI from OGRENCILER, NOTLAR where OGRENCILER.ogr_no=NOTLAR.ogr_no Ö ğ rencilerin adı, soyadı ve vize notlarını BM 111 noluders ve ö ğ retim yılı için listeletin: Select ad, SOYAD, VIZE from OGRENCILER, NOTLAR where OGRENCILER.ogr_no=NOTLAR.ogr_no AND NOTLAR.DERS_YILI=" " AND NOTLAR.DERS_KODU="BM 111"

3 tablolu sorgulama örneği Ö ğ rencilerin adı, soyadı, aldıkları derslerin adı ve bu derslerden ba ş arı notları görüntülenmek istenirse: SELECT AD, SOYAD, DERS_ADI, VIZE*0.3 + FINAL*0.7 AS BN FROM OGRENCILER, NOTLAR, DERSLER WHERE OGRENCILER.OGR_NO = NOTLAR.OGR_NO AND DERSLER.DERS_KODU= NOTLAR.DERS_KODU

İç içe SELECT ifadeleri Önceki örne ğ i çok tablolu sorgulama türünde de yapabilirdik: SELECT OGR_NO, AD, SOYAD FROM OGRENCILER, NOTLAR, DERSLER WHERE OGR_NO = OGRENCI AND DERS_NO = DERSAND DERS_ADI = ‘Fizik’ Fakat bu sorgu tabloların kartezyen çarpımına neden olaca ğ ı için muhtemelen daha yava ş çalı ş acaktır.

İç içe SELECT ifadeleri E ğ er SELECT sonrasında yazılan alanların hepsi aynı tabloda, fakat kriter olarak kullanılan alanlar onlardan farklı bir tabloda ise iç içe SELECT ifadeleri kullanılabilir. A ş a ğ ıdaki SQL cümlesi ‘Fizik’ dersini alan ö ğ rencilerin bilgilerini gösterir: SELECT OGR_NO, AD, SOYAD FROM OGRENCILER WHERE OGR_NO IN ( SELECT OGR_NO FROM NOTLAR WHERE DERS_KODU IN ( SELECT DERS_KODU FROM DERSLER WHERE DERS_ADI = "Fizik 2")) Fizik dersinin bir ders kodu olaca ğ ı için bu satırdaki IN yerine = kullanılabilirdi.

BM111 dersine giren hoca adları listeleyin. SELECT AD, SOYAD FROM HOCALAR WHERE HOCA_NO IN ( SELECT HOCASI FROM DERSLER WHERE DERS_KODU ="BM 111") VEYA SELECT AD, SOYAD FROM HOCALAR,dersler WHERE HOCA_NO=HOCASI AND DERS_KODU ="BM 111"

1.En ucuzundan en pahalısına doğru sıralanmış olarak “Cep Telefonları” kategorisindeki tüm ürünlerin isimleri 2.“Spor” kategorisinde ürünleri listelenen “İstanbul” şehrindeki firmaların isimleri ve telefon numaraları yılının ilk 6 ayında satılan toplam kitap sayısı ve fiyatlarının toplamı 4.“Ahmet Solmaz” isimli müşterinin 2009 yılının Kasım ayında aldığı bütün ürünlerin isimleri ve fiyatları

En ucuzundan en pahalısına do ğ ru sıralanmı ş olarak “Cep Telefonları” kategorisindeki tüm ürünlerin isimleri SELECT Urun_Adi FROM URUNLER WHERE Kategori_ID IN ( SELECT Kategori_ID FROM KATEGORILER WHERE Kategori_Adi = 'Cep Telefonları') ORDER BY Satis_Fiyat;

“Spor” kategorisinde ürünleri listelenen “ İ stanbul” ş ehrindeki firmaların isimleri ve telefon numaraları SELECT Firma_Adi, Tel FROM FIRMALAR WHERE Adres Like '* İ stanbul' AND Firma_ID IN ( SELECT Firma_ID FROM URUNLER WHERE Kategori_ID = ( SELECT Kategori_ID FROM KATEGORILER WHERE Kategori_Adi = 'Spor'));

SELECT Sum(Adet) AS KitapSayısı, Sum(Satis_Fiyat*Adet) AS Satı ş Toplamı FROM URUNLER, SIPARIS_DETAY WHERE URUNLER.Urun_ID = SIPARIS_DETAY.Urun_ID AND Siparis_ID IN ( SELECT Siparis_ID FROM SIPARISLER WHERE Tarih BETWEEN #1/1/2009# AND #6/30/2009#) AND Kategori_ID = ( SELECT Kategori_ID FROM KATEGORILER WHERE Kategori_Adi = 'Kitap'); 2009 yılının ilk 6 ayında satılan toplam kitap sayısı ve fiyatlarının toplamı

SELECT Urun_Adi, Satis_Fiyat FROM URUNLER WHERE Urun_ID IN ( SELECT Urun_ID FROM SIPARIS_DETAY WHERE Siparis_ID IN ( SELECT Siparis_ID FROM SIPARISLER WHERE Tarih BETWEEN #11/1/2009# AND #11/30/2009# AND Musteri_ID = ( SELECT Musteri_ID FROM MUSTERILER WHERE Ad = 'Ahmet' AND Soyad = 'Solmaz'))); “Ahmet Solmaz” isimli mü ş terinin 2009 yılının Kasım ayında aldı ğ ı bütün ürünlerin isimleri ve fiyatları

Ekim ayında “Ahmet Solmaz” isimli müşterinin yaptığı toplam market harcamasını göster Kasım ayında bir seferde 100 YTL ve üstü alışveriş yapan kişilerin adını ve soyadını göster 3.Her ürün tipinin adını ve o ürün tipine ait kaçar adet ürün olduğunu göster 4.İndirim süresi devam eden “Gıda” ürün tipindeki tüm ürünlerin isimleri

2009 Ekim ayında “Ahmet Solmaz” isimli mü ş terinin yaptı ğ ı toplam market harcamasını göster SELECT SUM(Satis_Fiyat) FROM URUNLER, FATURA_DETAY WHERE URUNLER.Urun_ID = FATURA_DETAY.Urun_ID AND Fatura_ID IN( SELECT Fatura_ID FROM SATIS WHERE Tarih BETWEEN #10/1/2009# AND #10/31/2009# AND Musteri_ID IN( SELECT Musteri_ID FROM MUSTERILER WHERE Ad = 'Ahmet' AND Soyad = 'Solmaz'));

2009 Kasım ayında bir seferde 100 YTL ve üstü alı ş veri ş yapan ki ş ilerin adını ve soyadını göster SELECT Ad, Soyad FROM MUSTERILER WHERE Musteri_ID IN( SELECT Musteri_ID FROM SATIS WHERE Tarih BETWEEN #11/1/2009# AND #11/30/2009# AND Fatura_ID IN( SELECT Fatura_ID FROM URUNLER, FATURA_DETAY WHERE URUNLER.Urun_ID = FATURA_DETAY.Urun_ID GROUP BY (Fatura_ID) HAVING SUM(Satis_Fiyat) > 100));

Her ürün tipinin adını ve o ürün tipine ait kaçar adet ürün oldu ğ unu göster SELECT Urun_Tip_Adi, COUNT(*) FROM URUNLER U, URUN_TIPLERI T WHERE T.Urun_Tip_ID = U.Urun_Tipi GROUP BY (Urun_Tip_Adi);

İ ndirim süresi devam eden “Gıda” ürün tipindeki tüm ürünlerin isimleri SELECT Urun_Adi FROM URUNLER WHERE Urun_Tipi = ( SELECT Urun_Tip_ID FROM URUN_TIPLERI WHERE Urun_Tip_Adi = 'Gıda') AND Urun_ID IN ( SELECT Urun_ID FROM INDIRIMLI_URUNLER WHERE Bitis_Tarihi > NOW());

Kaynakça orular.pdf orular.pdf