Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

5/8/2003TCSS445A Isabelle Bichindaritz1 SQL. 5/8/2003TCSS445A Isabelle Bichindaritz2 Ne öğrenilecek SQL’in amacı ve önemi SQL cümlesi SQL kelimeleri SQL.

Benzer bir sunumlar


... konulu sunumlar: "5/8/2003TCSS445A Isabelle Bichindaritz1 SQL. 5/8/2003TCSS445A Isabelle Bichindaritz2 Ne öğrenilecek SQL’in amacı ve önemi SQL cümlesi SQL kelimeleri SQL."— Sunum transkripti:

1 5/8/2003TCSS445A Isabelle Bichindaritz1 SQL

2 5/8/2003TCSS445A Isabelle Bichindaritz2 Ne öğrenilecek SQL’in amacı ve önemi SQL cümlesi SQL kelimeleri SQL sorgularının oluşturulması SQL’le veri tabanının güncellenmesi

3 5/8/2003TCSS445A Isabelle Bichindaritz3 Veri Tabanı Dili İdeal halde, veri tabanı dili kullanıcıya aşağıdaki imkanları sağlamalıdır: –Veri tabanının ve ilişki yapılarının oluşturulması; –İlişkideki veriler üzerinde ekleme, değiştirme ve silme işlemlerinin yerine getirilmesi; –Basit ve karmaşık sorguların yerine getirilmesi Bu işlemler kullanıcının en az çabası ile yerine getirilmeli ve komut yapısı/sözdüzeni kolay öğrenilebilen olmalıdır Taşınabilir (farklı ortamlarda çalışabilir) olmalıdır

4 5/8/2003TCSS445A Isabelle Bichindaritz4 SQL –genel bilgiler SQL iki başlıca bileşenden oluşmaktadır: –Veri tabanının yapısını tanımlamak için Veri Tanımlama Dili (DDL) –Verileri çıkarmak ve güncellemek için veri işlem dili (DML) SQL2 komut denetimi akışlarını içermiyor. Bu işlemleri programlama dilleri kullanmakla gerçekleştirmek mümkündür

5 5/8/2003TCSS445A Isabelle Bichindaritz5 SQL- genel bilgiler (devamı) SQL öğrenmek kolaydır: –Yordamsal olmayan dildir – hangi bilginin gerektiğinin belirlenmesi yeterlidir, bu bilginin nasıl alındığının gösterilmesine ihtiyaç yoktur; –Serbest biçimlidir (free-format)

6 5/8/2003TCSS445A Isabelle Bichindaritz6 SQL-genel bilgiler (devamı) İngiliz dilinin kelimelerini içerir: 1) CREATE TABLE Staff(staffNo VARCHAR(5), lName VARCHAR(15), salary DECIMAL(7,2)); 2) INSERT INTO Staff VALUES (‘SG16’, ‘Brown’, 8300); 3) SELECT staffNo, lName, salary FROM Staff WHERE salary > 10000;

7 5/8/2003TCSS445A Isabelle Bichindaritz7 SQL-genel bilgiler (devamı) Veri ve Veri Tabanı yöneticileri, şirket yöneticileri, uygulama geliştiricileri, ve diğer kullanıcılar yararlana bilir SQL için ISO standardı mevcuttur. Bu, ilişkisel veritabanları için resmi ve de facto (faktık) standart dildir

8 5/8/2003TCSS445A Isabelle Bichindaritz8 SQL’in tarihçesi 1974’de, D. Chamberlin (IBM San Jose Laboratory) ‘Structured English Query Language’ (SEQUEL) adlandırılan dil geliştirdi. Bu dilin sonraki sürümü, SEQUEL/ ‘da geliştirildi, fakat yasal nedenlerden dolayı sonradan SQL olarak tanımlandı

9 5/8/2003TCSS445A Isabelle Bichindaritz9 SQL’in tarihçesi IBM, sonradan System R adlı SEQUEL/2 tabanlı VTYS geliştirdi. Ama SQL’in kökü, System R’den önce geliştirilmiş SQUARE (Specifying Queries as Relational Expressions) projesine dayanıyor

10 5/8/2003TCSS445A Isabelle Bichindaritz10 SQL’in tarihçesi 70’lerin sonlarında ORACLE meydana çıktı ve SQL tabanlı ilk ticari İVTYS (RDBMS) oldu 1987’de ANSI ve ISO, SQL için başlangıç standardı yayınladılar 1989’da ISO, ‘Integrity Enhancement Feature’ (bütünlüğün sağlanması özellikleri) tanımını ekledi 1992’de ISO standardına tam cevap veren SQL2 veya SQL/92 sürümü geliştirildi 1999’de nesneye yönelik veri yönetimini destekleyen SQL3 sunuldu

11 5/8/2003TCSS445A Isabelle Bichindaritz11 SQL komutlarının yazılışı SQL cümlesi anahtar kelimelerden (reserved words) ve kullanıcı tanımlı kelimelerden oluşmaktadır (User-defined words). –Anahtar kelimeler tanımlandığı gibi yazılmalıdır ve satırlara bölünemez –Kullanıcı tanımlı kelimeler veri tabanındaki ilişki, sütun, görünüm gibi değişkenleri tanımlamak içindir

12 5/8/2003TCSS445A Isabelle Bichindaritz12 SQL komutlarının yazılışı SQL cümlesinin bileşenleri, sabit karakter türündekiler dışında büyük-küçük harflere duyarsızdır SQL cümlesinin okunaklı olması için tavsiyeler: –Her yantümce ( clause) yeni satırdan başlamalıdır. –Tüm yantümceler alt-alta aynı hizada yazılmalıdır –Eğer yantümce birkaç kısımdan oluşuyorsa her bir kısım ayrıca satırda ve yantümcenin başladığı yerden bir az sağdan yazılmalıdır

13 5/8/2003TCSS445A Isabelle Bichindaritz13 SQL cümlesinin sabitleri Tüm sayısal olmayan sabitler tek tırnak arasında yazılmalıdır (örn., ‘London’). Sayısal sabitler tırnak içinde yazılmaz (örn., ).

14 5/8/2003TCSS445A Isabelle Bichindaritz14 SELECT cümlesi SELECT [DISTINCT | ALL] {* | [satır ifadesi [AS yeni ad] [,...] } FROMTablo Adı [alias] [,...] [WHEREkoşul] [GROUP BYsütun listesi] [HAVINGkoşul] [ORDER BYsütun listesi] SELECT cümlesinin ifadesinde Backus–Naur yazılım biçimi (BNF) kullanılmıştır. Bu yazılıma göre «I» simgesi «veya» anlamındadır. [ ] – ifadenin zorunlu olmadığını,... Kelimenin tekrarlandığını göstermek içindir

15 5/8/2003TCSS445A Isabelle Bichindaritz15 SELECT cümlesi FROMkullanılacak tablo(lar) WHEREsatırları seçme koşulu GROUP BYbelirlenmiş sütundaki değerleri aynı olan satırların bir grupta toplanması HAVINGgrupların belirli koşul üzere seçilmesi SELECTsonuç ilişkide hangi sütunların olacağının belirlenmesi ORDER BY sütun(sütunlar) değerlerine göre sonuç ilişkinin satırlarının sıralanması

16 5/8/2003TCSS445A Isabelle Bichindaritz16 SELECT cümlesi Yantümcelerin ardışıklığı değiştirilemez Yalnız SELECT ve FROM zorunludur

17 5/8/2003TCSS445A Isabelle Bichindaritz17 Tüm sütunlar,tüm satırlar Tüm personellerin ayrıntılı bilgileri. SELECT staffNo, fName, lName, address, position, sex, DOB, salary, branchNo FROM Staff;

18 5/8/2003TCSS445A Isabelle Bichindaritz18 Tüm sütunlar, tüm satırlar (devamı) * simgesi ‘tüm sütunlar’ anlamında kullanılır SELECT * FROM Staff;

19 5/8/2003TCSS445A Isabelle Bichindaritz19 Bazı sütunlar, tüm satırlar Yalnız numarasını, ad ve soyadını, maaşını göstermekle tüm personellerin bilgileri (No, ad,soyad ve maaşları) SELECT staffNo, fName, lName, salary FROM Staff;

20 5/8/2003TCSS445A Isabelle Bichindaritz20 DISTINCT kullanımı Bakılmış tüm evlerin numaraları SELECT propertyNo FROM Viewing;

21 5/8/2003TCSS445A Isabelle Bichindaritz21 DISTINCT kullanımı DISTINCT, tekrarlanan satırları elemek içindir Bakılmış farklı evlerin numaraları SELECT DISTINCT propertyNo FROM Viewing; RnoPnoDateComment CR56PA1424- may- 98 Çok küçük l CR76PG420-apr- 98 Çok uzak CR56PG426- may- 98 CR62PA1414- may- 98 Yemek odası yok CR56PG3628-apr- 98

22 5/8/2003TCSS445A Isabelle Bichindaritz22 Hesaplanan alanlar (Calculated Fields) Personellerin numaralar, adları, soyadları, ve aylık maaşları SELECT staffNo, fName, lName, salary/12 FROM Staff;

23 5/8/2003TCSS445A Isabelle Bichindaritz23 Hesaplanan Alanlar (devamı) Sütunu adlandırmak için AS kelimesi kullanılır SELECT staffNo, fName, lName, salary/12 AS monthlySalary FROM Staff; «AS» sütunu yeniden adlandırmak için de kullanıla bilir. Hesaplanan alanlarda birden fazla tablonun sütunlarının kullanılması mümkündür

24 5/8/2003TCSS445A Isabelle Bichindaritz24 Koşullu arama Maaşı 10,000’den yüksek olan personellerin bilgileri SELECT staffNo, fName, lName, position, salary FROM Staff WHERE salary > 10000;

25 5/8/2003TCSS445A Isabelle Bichindaritz25 Karmaşık koşul London veya Glasgow kentlerindeki tüm şubelerin adres bilgileri (No,cadde,kent ve posta kodları) SELECT * FROM Branch WHERE city = ‘London’ OR city = ‘Glasgow’;

26 5/8/2003TCSS445A Isabelle Bichindaritz26 Değer aralıklarının kullanılması maaşları 20,000 ve 30,000 arasında olan personellerin bilgileri SELECT staffNo, fName, lName, position, salary FROM Staff WHERE salary BETWEEN AND 30000; BETWEEN aralığın uç değerlerini de içeriyor

27 5/8/2003TCSS445A Isabelle Bichindaritz27 Değer aralıklarının kullanılması (devamı) Eksi anlamda NOT BETWEEN kullanılır BETWEEN, SQL’e ilave güç katmaz. Onun görevini diğer işlemlerle de gerçekleştirmek mümkündür: SELECT staffNo, fName, lName, position, salary FROM Staff WHERE salary>=20000 AND salary <= 30000;

28 5/8/2003TCSS445A Isabelle Bichindaritz28 Küme üyeliği Tüm yöneticilerin ve denetleyicilerin listesi SELECT staffNo, fName, lName, position FROM Staff WHERE position IN (‘Manager’, ‘Supervisor’);

29 5/8/2003TCSS445A Isabelle Bichindaritz29 Küme üyeliği (devamı) Eksi işlem yapan sürümü de mevcuttur: (NOT IN). IN, SQL’e ilave güç katmaz Aynı sonucu aşağıdaki ifadeden de almak mümkündür: SELECT staffNo, fName, lName, position FROM Staff WHERE position=‘Manager’ OR position=‘Supervisor’; IN’in kullanımı, kümede çok sayıda kesintili değer olduğu zaman etkilidir

30 5/8/2003TCSS445A Isabelle Bichindaritz30 Örüntülerin (Pattern) eşleştirilmesi Adreslerinde ‘Glasgow’ altsatırı bulunan tüm mülk sahipleri SELECT clientNo, fName, lName, address, telNo FROM PrivateOwner WHERE address LIKE ‘%Glasgow%’;

31 5/8/2003TCSS445A Isabelle Bichindaritz31 Örüntülerin karşılaştırılması SQL’de örüntüleri karşılaştırmak için 2 özel simge kullanılıyor: –%: sıfır veya daha fazla karakter; –_ (alt çizgi): her hangi sayıda karakter LIKE ‘%Glasgow%’- ‘Glasgow’ altsatırını içeren, herhangi uzunlukta karakterler ardışıklığını ifade ediyor

32 5/8/2003TCSS445A Isabelle Bichindaritz32 NULL arama koşulu PG4 evi üzere görüş bildirmemiş müşterinin numarası ve eve bakış tarihi PG4’e iki bakış yapılmış, birisinde görüş (açıklama) bildirilmemiştir. IS NULL sözcüğü ile sorgunun cevabını bula bileriz: SELECT clientNo, viewDate FROM Viewing WHERE propertyNo = ‘PG4’ AND comment IS NULL;

33 5/8/2003TCSS445A Isabelle Bichindaritz33 NULL arama koşulu Null olmayan değerleri (IS NOT NULL) ile aramak mümkündür. cientNoPnoviewDat e Comment CR56PA1424-may- 98 Çok küçük l CR76PG420-apr- 98 Çok uzak CR56PG426-may- 98 CR62PA1414-may- 98 Yemek odası yok CR56PG3628-apr- 98

34 5/8/2003TCSS445A Isabelle Bichindaritz34 Tek sütun üzere sıralama Maaşların azalma ardışıklığı ile personellerin bilgileri listesi SELECT staffNo, fName, lName, salary FROM Staff ORDER BY salary DESC;

35 5/8/2003TCSS445A Isabelle Bichindaritz35 Tek sütun üzere sıralama (devamı) Evlerin türüne göre sıralama yapmakla tüm kiralık evlerin alfabetik sıra ile listesi SELECT propertyNo, type, rooms, rent FROM PropertyForRent ORDER BY type;

36 5/8/2003TCSS445A Isabelle Bichindaritz36 Çok sütun üzere sıralama Bu listede 4 daire (“flat”) bulunmaktadır. İkinci sıralama kıstası bulunmadığından bu listenin satırları tabloda rast geldikleri ardışıklık ile sıralanmışlar Kiranın (rent) azalma sırası tabloyu yeniden düzenleye bileriz: SELECT propertyNo, type, rooms, rent FROM PropertyForRent ORDER BY type, rent DESC ;

37 5/8/2003TCSS445A Isabelle Bichindaritz37 SELECT yantümce – Kümeleme (Aggregate) ISO standardı 5 kümeleme fonksiyonunu tanımlar: COUNT belirtilmiş sütundaki değerler sayısı SUMbelirtilmiş sütundaki değerlerin toplamı AVGbelirtilmiş sütundaki değerlerin ortalaması MINbelirtilmiş sütundaki en küçük değer MAXbelirtilmiş sütundaki en büyük değer

38 5/8/2003TCSS445A Isabelle Bichindaritz38 SELECT yantümcesi - Kümeleme Tablonun tek sütunu üzere işlem yapılıyor. Sonuç tek bir değerdir COUNT, MIN, ve MAX hem sayısal, hem de sayısal olmayan alanlar için uygulana bilir. SUM ve AVG yalnız sayısal alanlar için kullanıla bilir. COUNT(*) dışında tüm fonksiyonlar önce null değerleri eler ve işlemi, null olmayan değerler üzerinde yaparlar

39 5/8/2003TCSS445A Isabelle Bichindaritz39 SELECT yantümcesi-kümeleme COUNT(*), null veya tekrarlanan değerlere bakmaksızın, tablonun tüm satırlarını sayar. Tekrarları elemek için sütun adından önce DISTINCT kullanıla bilir DISTINCT’in MIN/MAX fonksiyonlarında etkisi yoktur, ama SUM/AVG kullanımında etkilidir

40 5/8/2003TCSS445A Isabelle Bichindaritz40 SELECT yantümcesi-kümeleme Kümeleme fonksiyonları yalnız SELECT listesinde ve HAVING sözcüğünde kullanıla bilir Eğer SELECT listesinde kümeleme fonksiyonu varsa ve sorguda GROUP BY kullanılmamışsa, o zaman kümeleme fonksiyonun dışında, SELECT listesinde hiçbir sütun adı olamaz. Örneğin, aşağıdaki yazılış yanlıştır: SELECT staffNo, COUNT(salary) FROM Staff;

41 5/8/2003TCSS445A Isabelle Bichindaritz41 COUNT(*) kullanımı aylık kira hakkı $350 üzerinde olan kaç ev vardır: SELECT COUNT(*) AS count FROM PropertyForRent WHERE rent > 350;

42 5/8/2003TCSS445A Isabelle Bichindaritz42 COUNT(DISTINCT) kullanımı Mayis ayında kaç farklı eve bakılmıştır SELECT COUNT(DISTINCT propertyNo) AS count FROM Viewing WHERE viewDate BETWEEN ‘1-May-11’ AND ‘31-May-11’; cientNoPnoviewDat e Comment CR56PA1424-may- 11 Çok küçük l CR76PG420-apr- 11 Çok uzak CR56PG426-may- 11 CR62PA1414-may- 11 Yemek odası yok CR56PG3628-apr- 11

43 5/8/2003TCSS445A Isabelle Bichindaritz43 COUNT ve SUM kullanımı Yöneticilerin sayıları ve onların toplam maaşları SELECT COUNT(staffNo) AS sayı, SUM(salary) AS toplam FROM Staff WHERE position = ‘Manager’;

44 5/8/2003TCSS445A Isabelle Bichindaritz44 MIN, MAX, AVG kullanımı Personellerin en düşük, en yüksek, ve ortalama maaşlarını bulmalı SELECT MIN(salary) AS min, MAX(salary) AS max, AVG(salary) AS avg FROM Staff;

45 5/8/2003TCSS445A Isabelle Bichindaritz45 SELECT cümlesi - Gruplaştırma Grup içinde genelleştirme yapmak için GROUP BY sözcüğü kullanılmaktadır SELECT ve GROUP BY bütünleşiktir: SELECT listesinde bulunan her kelime, grup için tek bir değeri ifade eder. SELECT sözcüğü yalnız: –Sütun adlarını –Kümeleme fonksiyonlarını, –Bunların kombinasyonundan oluşan ifadeleri içere bilir

46 5/8/2003TCSS445A Isabelle Bichindaritz46 SELECT cümlesi - Gruplaştırma SELECT listesindeki tüm sütun adları, eğer kümeleme fonksiyonunda kullanılmamışsa GROUP BY sözcüğünde bulunmalıdır Eğer WHERE, GROUP BY ile birlikte kullanılıyorsa, WHERE önce gelmelidir. Gruplar, koşulu sağlayan satırlar üzere oluşturuluyor.

47 5/8/2003TCSS445A Isabelle Bichindaritz47 Örnek 5.17 GROUP BY kullanımı Her şubedeki personel sayısı ve toplam maaşları SELECT branchNo, COUNT(staffNo) AS count, SUM(salary) AS sum FROM Staff GROUP BY branchNo ORDER BY branchNo;

48 5/8/2003TCSS445A Isabelle Bichindaritz48 GROUP BY kullanımı

49 5/8/2003TCSS445A Isabelle Bichindaritz49 Sınırlı gruplaştırma – HAVING sözcüğü HAVING sözcüğü, verilmiş koşulları sağlayan grupları tanımlamak için kullanılıyor WHERE’e benzerdir. Ama WHERE satırların elenmesinde, HAVING grupların elenmesinde kullanılar HAVING sözcüğündeki sütun adları GROUP BY listesinde de bulunmalı veya kümeleme fonksiyonunun argümanı olmalıdırlar

50 5/8/2003TCSS445A Isabelle Bichindaritz50 HAVING kullanımı 1’den fazla üyesi olan her bir şubenin personel sayısı ve toplam maaşları SELECT branchNo, COUNT(staffNo) AS count, SUM(salary) AS sum FROM Staff GROUP BY branchNo HAVING COUNT(staffNo) > 1 ORDER BY branchNo ;

51 5/8/2003TCSS445A Isabelle Bichindaritz51 Altsorgular SQL cümleleri kendileri de SQL cümleleri içere biliyorlar Bu tür sorgular dış SELECT cümlesinin SELECT, FROM, WHERE ve HAVING yantümcelerinde kullanıla bilir. Onlara altsorgu veya iç sorgu denir Altsorguların INSERT, UPDATE, ve DELETE cümlelerinde de kullanılması mümkündür Altsorgu, karşılaştırma işleminde sağ tarafta gösterilmelidir

52 5/8/2003TCSS445A Isabelle Bichindaritz52 Altsorgular (devamı) ORDER BY sözcüğü altsorgularda kullanılamaz (dış SELECT’te kullanıla bilir). Altsorgunun SELECT listesi yalnız tek bir sütun adı veya ifade içermelidir (EXISTS kullanan altsorgular istisnadır). Varsayım olarak, altsorguda FROM sözcüğündeki tablo adı kullanılıyor. alias kullanılması mümkündür

53 5/8/2003TCSS445A Isabelle Bichindaritz53 «Eşitlik» kullanılan arltsorgu ‘163 Main St’. Adresindeki şubede çalışan personellerin listesi SELECT staffNo, fName, lName, position FROM Staff WHERE branchNo = (SELECT branchNo FROM Branch WHERE street = ‘163 Main St’);

54 5/8/2003TCSS445A Isabelle Bichindaritz54 Eşitlik kullanılan altsorgu (devamı) İç SELECT ‘163 Main St’ adresindeki şubenin numarasını (‘B003’) buluyor Dış SELECT, bu şubede çalışan personellerin ayrıntılı bilgilerini veriyor Dış SELECT böyle olacak: SELECT staffNo, fName, lName, position FROM Staff WHERE branchNo = ‘B003’;

55 5/8/2003TCSS445A Isabelle Bichindaritz55 Eşitlik kullanılan altsorgu (devamı)

56 5/8/2003TCSS445A Isabelle Bichindaritz56 Küme kullanılan altsorgu Maaşları, ortalama maaştan çok olanların listesi (ortalama maaşla farkı göstermekle) SELECT staffNo, fName, lName, position, salary – (SELECT AVG(salary) FROM Staff) As SalDiff FROM Staff WHERE salary > (SELECT AVG(salary) FROM Staff);

57 5/8/2003TCSS445A Isabelle Bichindaritz57 Küme kullanılan altsorgu (devamı) ‘WHERE salary > AVG(salary)’ yazmak olmaz Ortalama maaş bulunmalı (17000), sonra, ortalama maaştan yüksek olanların listesini dış SELECT ile bulmalı SELECT staffNo, fName, lName, position, salary – As salDiff FROM Staff WHERE salary > 17000;

58 5/8/2003TCSS445A Isabelle Bichindaritz58 Küme kullanılan altsorgu (devamı)

59 5/8/2003TCSS445A Isabelle Bichindaritz59 İç içe altsorgu: IN kullanımı ‘163 Main St’ adresindeki şubenin personellerinin kontrolünde olan evler SELECT propertyNo, street, city, postcode, type, rooms, rent FROM PropertyForRent WHERE staffNo IN (SELECT staffNo FROM Staff WHERE branchNo = (SELECT branchNo FROM Branch WHERE street = ‘163 Main St’));

60 5/8/2003TCSS445A Isabelle Bichindaritz60 İçiçe altsorgu: IN kullanımı (devamı)

61 5/8/2003TCSS445A Isabelle Bichindaritz61 ANY ve ALL ANY ve ALL tek sütun üreten altsorgularda kullanıla bilir ALL kullanıldığı zaman, eğer altsorgunun ürettiği tüm değerler koşulu sağlarsa sonuç “doğru” değerini alacak, ANY kullanıldığı zaman, eğer altsorgunun ürettiği her hangi değer koşulu sağlarsa sonuç “doğru” değerini alacak Eğer altsorgu boş ise, ALL doğru değer, ANY yanlış değer döndürecek. SOME kelimesi ANY yerine kullanıla bilir.

62 5/8/2003TCSS445A Isabelle Bichindaritz62 ANY/SOME kullanımı Maaşları B003 şubesinde çalışanların en azından birisinin maaşından yüksek olan personellerin listesi SELECT staffNo, fName, lName, position, salary FROM Staff WHERE salary > SOME (SELECT salary FROM Staff WHERE branchNo = ‘B003’);

63 5/8/2003TCSS445A Isabelle Bichindaritz63 ANY/SOME kullanımı İç sorgu {12000, 18000, 24000} kümesini üretiyor ve dış sorgu maaşı bu kümedeki her hangi bir değerden yüksek olan personeli seçiyor

64 5/8/2003TCSS445A Isabelle Bichindaritz64 Örnek 5.23 ALL kulanımı Maaşları, B003 şubesindeki personellerin her birisinin maaşından yüksek olanların listesi SELECT staffNo, fName, lName, position, salary FROM Staff WHERE salary > ALL (SELECT salary FROM Staff WHERE branchNo = ‘B003’);

65 5/8/2003TCSS445A Isabelle Bichindaritz65 ALL kullanımı

66 5/8/2003TCSS445A Isabelle Bichindaritz66 Çok Tablolu sorgular Aynı tablodan gelen sonuçları işlemek için altsorgular kullanıla biliyor Eğer sonuç farklı tablolardan veriler gerektiriyorsa bitiştirme (join) işlemi kullanılmalıdır Join çalıştırmak için FROM sözcüğünde birden fazla tablo ismi gösterilmelidir Tablo isimleri virgülle ayrılıyor FROM sözcüğünde alias tanımlamak ve sorgu ifadesinde kullanmak mümkündür Alias tablo adından boşlukla ayrılıyor

67 5/8/2003TCSS445A Isabelle Bichindaritz67 Basit Join Kiralık evlere bakmış tüm müşterilerin adları SELECT c.clientNo, fName, lName, propertyNo, comment FROM Client c, Viewing v WHERE c.clientNo = v.clientNo;

68 5/8/2003TCSS445A Isabelle Bichindaritz68 Basit Join Sonuç tabloda (c.clientNo = v.clientNo) koşulunu sağlayan satırlar gösterilmiştir İlişkisel cebirde equi-join işlemine eşdeğerdir

69 5/8/2003TCSS445A Isabelle Bichindaritz69 Diğer JOIN yapıları SQL alternatif join işlemlerini de sağlıyor FROM Client c JOIN Viewing v ON c.clientNo = v.clientNo FROM Client JOIN Viewing USING clientNo FROM Client NATURAL JOIN Viewing

70 5/8/2003TCSS445A Isabelle Bichindaritz70 bitiştirme işlemi ve sıralama Her bir şube için, evlerin kontrolünü yapan personellerin numaraları, adları ve kontrollerinde olan evlerin numaraları SELECT s.branchNo, s.staffNo, fName, lName, propertyNo FROM Staff s, PropertyForRent p WHERE s.staffNo = p.staffNo ORDER BY s.branchNo, s.staffNo, propertyNo;

71 5/8/2003TCSS445A Isabelle Bichindaritz71 bitiştirme işlemi ve sıralama

72 5/8/2003TCSS445A Isabelle Bichindaritz72 Üç tablolu Join Her bir şube için evleri kontrol edenlerin listesi (şubenin yerleştiği kendi ve kontrolünde olan evleri göstermekle) SELECT b.branchNo, b.city, s.staffNo, fName, lName, propertyNo FROM Branch b, Staff s, PropertyForRent p WHERE b.branchNo = s.branchNo AND s.staffNo = p.staffNo ORDER BY b.branchNo, s.staffNo, propertyNo;

73 5/8/2003TCSS445A Isabelle Bichindaritz73 Üç tablolu Join Alternatif yazılış: FROM (Branch b JOIN Staff s USING branchNo) AS bs JOIN PropertyForRent p USING staffNo

74 5/8/2003TCSS445A Isabelle Bichindaritz74 Çoklu Gruplaştırma Şubeler üzere her bir personelin kontrolünde bulunan evlerin sayısı SELECT s.branchNo, s.staffNo, COUNT(*) AS count FROM Staff s, PropertyForRent p WHERE s.staffNo = p.staffNo GROUP BY s.branchNo, s.staffNo ORDER BY s.branchNo, s.staffNo;

75 5/8/2003TCSS445A Isabelle Bichindaritz75 Çoklu Gruplaştırma

76 5/8/2003TCSS445A Isabelle Bichindaritz76 Join işleminin yürütülmesi bitiştirme işlemi sonuçu aşağıdaki ardışıklıkla alınıyor: 1. FROM yantümcesinde gösterilmiş tabloların kartezyen çarpımı alınıyor 2.WHERE yantümcesi varsa üretişmiş tabloda koşula uygun olarak satırlar üzere eleme yapılıyor 3. Yerde kalan her bir satır için SELECT listesindeki özelliklerin değerleri belirleniyor

77 5/8/2003TCSS445A Isabelle Bichindaritz77 Join işleminin yürütülmesi 4. Eğer DISTİNCT varsa sonuç tablodan tekrarlanan satırlar eleniyor 5. ORDER BY yantümcesi varsa sonuç tabloda sıralama yapılıyor SQL’de kartezyen çarpma için özel ifade biçimi vardır: SELECT[DISTINCT | ALL]{* | columnList} FROM Table1 CROSS JOIN Table2

78 5/8/2003TCSS445A Isabelle Bichindaritz78 İç bitiştirme İç Bitiştirme (inner join veya sadece join) işleminde b itiştirilen tablolarda her hangi satır eşleşmemiş ise, bu satır sonuç tabloda bulunm az

79 İç bitiştirme (devamı) Bu iki tablonun (iç) bitiştirmesi SELECT SELECT b.*,p.* FROM FROM branch1 b, property_for_rent1 p WHERE WHERE b.bcity=p.pcity; Property_for_rent pno pcity PA14 PL94 PG4 AberdeenLondonGlasgow BRANCH1 Bno bcity B3B4B2GlasgowBristolLondon

80 5/8/2003TCSS445A Isabelle Bichindaritz80 İç bitiştirme- Dış Bitiştirme Sonuç tabloda aynı kentler bulunan iki satır var Bristol ve Aberdeen şubelerine uygun satırlar yoktur Eşleşmeyen satırların da sonuç tabloda olması için Outer Join kullanılmalıdır

81 5/8/2003TCSS445A Isabelle Bichindaritz81 Sol dış Bitiştirme Tüm eşleşmeyen şubeleri göstermekle hem şube, hem de mülk bulunan kentler SELECT b.*, p.* FROM Branch1 b LEFT JOIN PropertyForRent1 p ON b.bCity = p.pCity;

82 5/8/2003TCSS445A Isabelle Bichindaritz82 sol dış bitiştirme Sol (birinci) tablonun sağdaki tablonun satırları ile eşleşmeyen satırları da sonuç tabloda bulunuyor İkinci tablonun uygun sütun değerleri NULL değer alıyor

83 5/8/2003TCSS445A Isabelle Bichindaritz83 Sağ Dış Bitiştirme- Right Outer Join Eşleşmeyen mülkleri göstermekle hem şube, hem de mülk bulunan kentler SELECT b.*, p.* FROM Branch1 b RIGHT JOIN PropertyForRent1 p ON b.bCity = p.pCity;

84 5/8/2003TCSS445A Isabelle Bichindaritz84 Sağ Dış Bitiştirme Sağ dış bitiştirme işleminin sonucu ikinci tablonun (sağdaki), soldaki (birinci) tablonun satırları ile eşleşmeyen satırlarını da içeriyor Birinci tablonun uygun satırları Null değerler alıyor.

85 5/8/2003TCSS445A Isabelle Bichindaritz85 Tam Dış Bitiştirme- Full Outer Join Eşleşmeyen şube ve mülkleri de göstermekle hem şube, hem de mülk bulunan kentler SELECT b.*, p.* FROM Branch1 b FULL JOIN PropertyForRent1 p ON b.bCity = p.pCity;

86 5/8/2003TCSS445A Isabelle Bichindaritz86 Tam Dış Bitiştirme-örnek Her iki tabloda eşleşmeyen satırları da içerir Eşleşmeyen sütunlar Null değerler alıyor

87 5/8/2003TCSS445A Isabelle Bichindaritz87 EXISTS ve NOT EXISTS EXISTS ve NOT EXISTS yalnız al t sorgularda kullanılı r Tek bir doğru/yanlış değerini döndürür Altsorgu tarafından dönen sonuç, tabloda en azından bir satır varsa doğrudur Altsorgudan dönen tablo boş ise yanlıştır NOT EXISTS, EXISTS işleminin eksini yapar.

88 5/8/2003TCSS445A Isabelle Bichindaritz88 EXISTS ve NOT EXISTS (NOT) EXISTS, altsorgu sonuç tablosunda satırların var olduğunu (olmadığını) denetler. Altsorgu tablosu birkaç sütun içere bilir Genelde (NOT) EXISTS için yazılış böyledir: (SELECT *...)

89 5/8/2003TCSS445A Isabelle Bichindaritz89 EXISTS kullanımı London şubesinde çalışanların listesi SELECT staffNo, fName, lName, position FROM Staff s WHERE EXISTS (SELECT * FROM Branch b WHERE s.branchNo = b.branchNo AND city = ‘London’);

90 5/8/2003TCSS445A Isabelle Bichindaritz90 Örnek-EXISTS kullanılan sorgular s.branchNo = b.branchNo koşulu, her bir personel için doğru şubeyi bulmak açısından gereklidir Bu koşulu kullanmasaydık, tüm personel kayıtlarını alacaktık. Çünkü SELECT * FROM Branch WHERE city=‘London’ her zaman doğrudur ve sorgu böyle olacaktı: SELECT staffNo, fName, lName, position FROM Staff WHERE true;

91 5/8/2003TCSS445A Isabelle Bichindaritz91 EXISTS kullanılan sorgular Sorgu böyle de yazıla bilir: SELECT staffNo, fName, lName, position FROM Staff s, Branch b WHERE s.branchNo = b.branchNo AND city = ‘London’;

92 5/8/2003TCSS445A Isabelle Bichindaritz92 Union, Intersect, ve Difference (Except) Union, Intersection, ve Difference küme işlemleri, birkaç sorgunun sonuçlarını tek bir tabloda göstermek için kullanıla bilir A ve B tablolarının birleşimi, A ve B tablolarından en azından birinde bulunan satırları veriyor İki tablonun kesişimi, her iki tabloda da bulunan satırları veriyor Fark, A tablosunda bulunan, B tablosunda bulunmayan satırları veriyor Tablolar birleşebilen olmalıdır

93 5/8/2003TCSS445A Isabelle Bichindaritz93 Union, Intersect, ve Difference (Except) Kümeleme ifadesi tüm işlemler için aynıdır: op [ALL] [CORRESPONDING [BY {column1 [,...]}]] Eğer CORRESPONDING BY yazılmışsa, kümeleme işlemi gösterilen sütun (sütunlar) üzere yapılacak Eğer CORRESPONDING yazılmışsa ama BY tümcesi yoksa işlem ortak sütunlar üzere yapılacak. Eğer ALL yazılmışsa, sonuç tekrarlanan satırlar içere bilecek

94 5/8/2003TCSS445A Isabelle Bichindaritz94 Union, Intersect, ve Difference (Except)

95 5/8/2003TCSS445A Isabelle Bichindaritz95 UNION kullanımı Sorgu: ya şube, ya kiralık evler bulunan kentlerin listesi ( SELECT city FROM Branch WHERE city IS NOT NULL) UNION (SELECT city FROM PropertyForRent WHERE city IS NOT NULL);

96 5/8/2003TCSS445A Isabelle Bichindaritz96 UNION kullanımı veya (SELECT * FROM Branch WHERE city IS NOT NULL) UNION CORRESPONDING BY city (SELECT * FROM PropertyForRent WHERE city IS NOT NULL);

97 5/8/2003TCSS445A Isabelle Bichindaritz97 UNION kullanımı-devamı Her iki sorgudan sonuç tablolar alınarak birleştirilir

98 5/8/2003TCSS445A Isabelle Bichindaritz98 INTERSECT kullanımı Şube ve kiralık evlerin bulunduğu tüm kentler (SELECT city FROM Branch) INTERSECT (SELECT city FROM PropertyForRent);

99 5/8/2003TCSS445A Isabelle Bichindaritz99 INTERSECT kullanımı-devamı Veya (SELECT * FROM Branch) INTERSECT CORRESPONDING BY city (SELECT * FROM PropertyForRent);

100 5/8/2003TCSS445A Isabelle Bichindaritz100 INTERSECT kullanımı-devamı Aynı sorgu böyle de yazıla bilir: SELECT b.city FROM Branch b PropertyForRent p WHERE b.city = p.city; veya SELECT DISTINCT city FROM Branch b WHERE EXISTS (SELECT * FROM PropertyForRent p WHERE p.city = b.city);

101 5/8/2003TCSS445A Isabelle Bichindaritz101 EXCEPT kullanımı Şube bulunan, ama mülk bulunmayan kentlerin listesi (SELECT city FROM Branch) EXCEPT (SELECT city FROM PropertyForRent); veya (SELECT * FROM Branch) EXCEPT CORRESPONDING BY city (SELECT * FROM PropertyForRent);

102 5/8/2003TCSS445A Isabelle Bichindaritz102 EXCEPT kullanımı Aynı sorgu böyle de yazıla bilir: SELECT DISTINCT city FROM Branch WHERE city NOT IN (SELECT city FROM PropertyForRent); veya SELECT DISTINCT city FROM Branch b WHERE NOT EXISTS (SELECT * FROM PropertyForRent p WHERE p.city = b.city);

103 5/8/2003TCSS445A Isabelle Bichindaritz103 INSERT INSERT INTO TabloAdı [ (sütunlarListesi) ] VALUES (verideğerleri listesi) columnList zorunlu değil. Bırakılmışsa SQL, sütunlar listesini kaynak tabloda olduğu sıra ile kabul eder eğer sütunun veri değeri varsayılan (DEFAULT) olarak tanımlanmamış ise uygun sütun adı gösterilmezse, onun değeri NULL olarak belirlenmelidir.

104 5/8/2003TCSS445A Isabelle Bichindaritz104 INSERT VerideğerleriListesi aşağıdaki kurallara uyarak oluşturulmalıdır: –Listedeki birimler sayısı sütunlar sayısına eşit olmalıdır; –Verinin yeri sütun listesindeki sütunun yerine uygun olmalıdır; –Verinin türü, sütun listesindeki uygun sütunun türü ile uyumlu olmalıdır

105 5/8/2003TCSS445A Isabelle Bichindaritz105 INSERT … VALUES Staff tablosuna tüm sütun değerleri girilmekle yeni satır ilave edilmesi INSERT INTO Staff VALUES (‘SG16’, ‘Alan’, ‘Brown’, ‘Assistant’, ‘M’, Date‘ ’, 8300, ‘B003’);

106 5/8/2003TCSS445A Isabelle Bichindaritz106 Varsayım (Defaults) kullanmakla INSERT Staff tablosuna yalnız belirlenmiş sütun değerlerini girmekle yeni satır eklenmesi INSERT INTO Staff (staffNo, fName, lName, position, salary, branchNo) VALUES (‘SG44’, ‘Anne’, ‘Jones’, ‘Assistant’, 8100, ‘B003’); Veya INSERT INTO Staff VALUES (‘SG44’, ‘Anne’, ‘Jones’, ‘Assistant’, NULL, NULL, 8100, ‘B003’);

107 5/8/2003TCSS445A Isabelle Bichindaritz107 INSERT … SELECT Bu biçim satırların bir tablodan diğerine kopyalanmasına imkan sağlıyor INSERT INTO TableName [ (columnList) ] SELECT...

108 5/8/2003TCSS445A Isabelle Bichindaritz108 INSERT … SELECT StaffPropCount tablomuz olduğunu varsayalım. Bu tablo tüm personellerin adlarını ve onların kontrolündeki evlerin sayısını içeriyor: StaffPropCount(staffNo, fName, lName, propCnt) Staff ve PropertyForRent tablolarını kullanmakla StaffPropCount tablosuna veriler eklene bilir.

109 5/8/2003TCSS445A Isabelle Bichindaritz109 INSERT … SELECT INSERT INTO StaffPropCount (SELECT s.staffNo, fName, lName, COUNT(*) FROM Staff s, PropertyForRent p WHERE s.staffNo = p.staffNo GROUP BY s.staffNo, fName, lName) UNION (SELECT staffNo, fName, lName, 0 FROM Staff WHERE staffNo NOT IN (SELECT DISTINCT staffNo FROM PropertyForRent));

110 5/8/2003TCSS445A Isabelle Bichindaritz110 INSERT … SELECT

111 5/8/2003TCSS445A Isabelle Bichindaritz111 UPDATE UPDATE TabloAdı SET sütunAdı1 = veriDeğeri11 [, sütunadı2 = veriDeğeri2...] [WHERE aramaKoşulu] TabloAdı taban tablonun adı veya görünüş adı ola bilir SET tümcesi güncellenmesi gereken sütun adlarını gösteriyor

112 5/8/2003TCSS445A Isabelle Bichindaritz112 UPDATE WHERE kelimesi zorunlu değildir: –Eğer yazılmamışsa, gösterilen sütunlar tablonun tüm satırları üzere güncellenecek; –Eğer yazılmışsa, yalnız aramaKoşulunu sağlayan satırlar güncellenecek. Yeni veriDeğeri(Değerleri) uygun sütunların türleri ile uyumlu olmalıdır

113 5/8/2003TCSS445A Isabelle Bichindaritz113 Tüm satırların güncellenmesi (UPDATE All Rows) Tüm personelin maaşlarına %3 zam yapılmıştır UPDATE Staff SET salary = salary*1.03; Tüm yöneticilerin maaşlarına %5 zam yapmalı. UPDATE Staff SET salary = salary*1.05 WHERE position = ‘Manager’;

114 5/8/2003TCSS445A Isabelle Bichindaritz114 Örnek 5.40 Çok sütunun güncellenmesi (UPDATE Multiple Columns) David Ford (staffNo=‘SG14’) yöneticiliğe yükselmiş ve maaşı £18,000 olmuştur UPDATE Staff SET position = ‘Manager’, salary = WHERE staffNo = ‘SG14’;

115 5/8/2003TCSS445A Isabelle Bichindaritz115 DELETE DELETE FROM TabloAdı [WHERE aramaKoşulu] TabloAdı taban tablonun veya görünüşün adı ola bilir aramaKoşulu zorunlu değil. Bırakılmışsa, tablodaki tüm satırlar silinecek. Bu tablonun silinmesi anlamına gelmez. Eğer aramaKoşulu gösterilmişse, yalnız bu koşulu sağlayan satırlar silinecek

116 5/8/2003TCSS445A Isabelle Bichindaritz116 satırların silinmesi PG4 evine ait tüm görüş verilerini silmeli DELETE FROM Viewing WHERE propertyNo = ‘PG4’; Viewing tablosundan tüm kayıtları silmeli DELETE FROM Viewing;


"5/8/2003TCSS445A Isabelle Bichindaritz1 SQL. 5/8/2003TCSS445A Isabelle Bichindaritz2 Ne öğrenilecek SQL’in amacı ve önemi SQL cümlesi SQL kelimeleri SQL." indir ppt

Benzer bir sunumlar


Google Reklamları