1.2k likes | 1.47k Views
SQL. 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. Veri Tabanı Dili. İdeal halde , veri tabanı dili kullanıcıya aşağıdaki imkanları sağlamalıdır:
E N D
SQL TCSS445A Isabelle Bichindaritz
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 TCSS445A Isabelle Bichindaritz
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 TCSS445A Isabelle Bichindaritz
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) • SQL2komut denetimi akışlarını içermiyor.Bu işlemleri programlama dilleri kullanmakla gerçekleştirmek mümkündür TCSS445A Isabelle Bichindaritz
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) TCSS445A Isabelle Bichindaritz
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; TCSS445A Isabelle Bichindaritz
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 TCSS445A Isabelle Bichindaritz
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/2 1976 ‘da geliştirildi, fakat yasal nedenlerden dolayı sonradan SQL olarak tanımlandı TCSS445A Isabelle Bichindaritz
SQL’in tarihçesi • IBM,sonradanSystem 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 TCSS445A Isabelle Bichindaritz
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 TCSS445A Isabelle Bichindaritz
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 TCSS445A Isabelle Bichindaritz
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 TCSS445A Isabelle Bichindaritz
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., 650.00). TCSS445A Isabelle Bichindaritz
SELECT cümlesi SELECT [DISTINCT | ALL] {* | [satır ifadesi [AS yeni ad] [,...] } FROM Tablo Adı [alias] [, ...] [WHERE koşul] [GROUP BY sütun listesi] [HAVING koşul] [ORDER BY sü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 TCSS445A Isabelle Bichindaritz
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 BYsütun(sütunlar) değerlerine göre sonuç ilişkinin satırlarının sıralanması TCSS445A Isabelle Bichindaritz
SELECT cümlesi • Yantümcelerin ardışıklığı değiştirilemez • Yalnız SELECT ve FROM zorunludur TCSS445A Isabelle Bichindaritz
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; TCSS445A Isabelle Bichindaritz
Tüm sütunlar, tüm satırlar (devamı) • *simgesi ‘tüm sütunlar’ anlamında kullanılır • SELECT * • FROM Staff; TCSS445A Isabelle Bichindaritz
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; TCSS445A Isabelle Bichindaritz
DISTINCT kullanımı Bakılmış tüm evlerin numaraları SELECT propertyNo FROM Viewing; TCSS445A Isabelle Bichindaritz
DISTINCT kullanımı • DISTINCT, tekrarlanan satırları elemek içindir Bakılmış farklı evlerin numaraları SELECT DISTINCT propertyNo FROM Viewing; TCSS445A Isabelle Bichindaritz
Hesaplanan alanlar (Calculated Fields) Personellerin numaralar, adları, soyadları, ve aylık maaşları SELECT staffNo, fName, lName, salary/12 FROM Staff; TCSS445A Isabelle Bichindaritz
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 TCSS445A Isabelle Bichindaritz
Koşullu arama Maaşı 10,000’den yüksek olan personellerin bilgileri SELECT staffNo, fName, lName, position, salary FROM Staff WHERE salary > 10000; TCSS445A Isabelle Bichindaritz
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’; TCSS445A Isabelle Bichindaritz
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 20000 AND 30000; • BETWEEN aralığın uç değerlerini de içeriyor TCSS445A Isabelle Bichindaritz
Değer aralıklarının kullanılması (devamı) • Eksi anlamda NOT BETWEENkullanı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; TCSS445A Isabelle Bichindaritz
Küme üyeliği Tüm yöneticilerin ve denetleyicilerin listesi SELECT staffNo, fName, lName, position FROM Staff WHERE position IN (‘Manager’, ‘Supervisor’); TCSS445A Isabelle Bichindaritz
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 TCSS445A Isabelle Bichindaritz
Ö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%’; TCSS445A Isabelle Bichindaritz
Ö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 TCSS445A Isabelle Bichindaritz
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 NULLsözcüğü ile sorgunun cevabını bula bileriz: SELECT clientNo, viewDate FROM Viewing WHERE propertyNo = ‘PG4’ AND comment IS NULL; TCSS445A Isabelle Bichindaritz
NULL arama koşulu • Null olmayan değerleri (IS NOT NULL) ile aramak mümkündür. TCSS445A Isabelle Bichindaritz
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; TCSS445A Isabelle Bichindaritz
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; TCSS445A Isabelle Bichindaritz
Ç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; TCSS445A Isabelle Bichindaritz
SELECT yantümce – Kümeleme (Aggregate) • ISO standardı 5 kümeleme fonksiyonunu tanımlar: COUNTbelirtilmiş 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 TCSS445A Isabelle Bichindaritz
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 TCSS445A Isabelle Bichindaritz
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 TCSS445A Isabelle Bichindaritz
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; TCSS445A Isabelle Bichindaritz
COUNT(*) kullanımı aylık kira hakkı $350 üzerinde olan kaç ev vardır: SELECT COUNT(*) AS count FROM PropertyForRent WHERE rent > 350; TCSS445A Isabelle Bichindaritz
COUNT(DISTINCT) kullanımı Mayisayı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’; TCSS445A Isabelle Bichindaritz
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’; TCSS445A Isabelle Bichindaritz
MIN, MAX, AVG kullanımı Personellerinen düşük, en yüksek,veortalama maaşlarını bulmalı SELECT MIN(salary) AS min, MAX(salary) AS max, AVG(salary) AS avg FROM Staff; TCSS445A Isabelle Bichindaritz
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: SELECTlistesinde 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 TCSS445A Isabelle Bichindaritz
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. TCSS445A Isabelle Bichindaritz
Ö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; TCSS445A Isabelle Bichindaritz
GROUP BY kullanımı TCSS445A Isabelle Bichindaritz
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 TCSS445A Isabelle Bichindaritz
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; TCSS445A Isabelle Bichindaritz