SQL-Yapısal Sorgulama Dili SQL-GİRİŞ SQL-GİRİŞ 1
VERİ TÜRLERİ VERİ TÜRLERİ VERİ TÜRLERİ 2
Veri Tabanı Bileşenleri Kayıt Tablolar Öznitelik/Alan Kayıtlar satır Öznitelik/Alan sütun Kurallar tablolar arasındaki ilişkileri belirler ve verileri birbirine bağlar Tablo Yaratma SQL 3
Phone Book/Contact Table Tablo Yaratmadaki Kısıtlamalar Alan adı Tablo Yaratma String, Karakter sayısı (1-255) 4
Örnek Tablo-Student/Öğrenci TABLOLARI GÖRÜNTÜLEME Örnek Tablo +--------------+--------------+------+--------------+ Field Type Null Default +-----------+-----------------+------+-------------+ name varchar(20) YES NULL owner varchar(20) YES NULL species varchar(20) YES NULL birth date IYES NULL +-----------+----------------+------+---------------+ 5
TABLOYA EKLEME YAPMA ( INSERT ) Tabloya Veri eklemek ve ekli verileri görmek Tabloya veri girmek için kayıtlar Tablo içindeki verileri görmek Veri eklemek 6
SELECT [ALL / DISTINCT] expr1 [AS col1], expr2 [AS col2] ] ; FROM tablo ismi WHERE koşul Tüm Öğrenci Kayıtlarını Gösterme SELECT KOMUTU SELECT * FROM student Sonuç id name dob gender class mtest hcode dcode remission 9801 Peter 06.04.86 M 70 R SSP.F. 9802 Mary 01.10.86 F 92 Y HHM.F. 9803 Johnny 03.16.86 M 91 G SSP.T. 9804 Wendy 07.09.86 F 84 B YMT.F. 9805 Tobe 10.17.86 M 88 R YMT.F. : : : : : : : : : Product PName Price Category Manufacturer Gizmo $19.99 Gadgets GizmoWorks Basit bir SQL Sorgusu Powergizmo $29.99 Gadgets GizmoWorks SingleTouch $149.99 Photography Canon MultiTouch $203.99 Household Hitachi SELECT * FROM Product WHERE category= Gadgets PName Price Category Manufacturer Gizmo $19.99 Gadgets GizmoWorks Powergizmo $29.99 Gadgets GizmoWorks 21 7
Product PName Price Category Manufacturer Gizmo $19.99 Gadgets GizmoWorks Basit bir SQL Sorgusu Powergizmo $29.99 Gadgets GizmoWorks SingleTouch $149.99 Photography Canon MultiTouch $203.99 Household Hitachi SELECT PName, Price, Manufacturer FROM Product WHERE Price > 100 PName Price Manufacturer SingleTouch $149.99 Canon MultiTouch $203.99 Hitachi 22 SELECT [ALL / DISTINCT] expr1 [AS col1], expr2 [AS col2] ] ; FROM tablo ismi WHERE koşul Duplikasyonları eleme SELECT KOMUTU SELECT DISTINCT category FROM Product Karşılaştırırsak: SELECT category FROM Product Category Gadgets Photography Household Category Gadgets Gadgets Photography Household 24 8
sınıfındaki öğrencilerin ismini ve ev kodunu listele S QL İŞLEÇLERİ SELECT name, hcode, class FROM student ; WHERE class="" Sonuç Class : class="" name hcode class Peter R Mary Y Johnny G Luke G Bobby B Aaron R : : : Class : Koşul " Girls": 1) class = " 2) gender = "F 3) Both ( AND operator) sınıfındaki kızların isim ve yaşlarını listele Fonksiyonlar: # days : DATE( ) dob # years : (DATE( ) dob) / 365 1 d.p.: ROUND(, 1) SELECT name, ROUND((DATE( )-dob)/365,1) AS age ; FROM student WHERE class="" AND gender="f" name age Wendy 12.1 Kitty 11.5 Janet 12.4 Sandy 12.3 Mimi 12.2 9
sınıfında ücret muafiyeti olmayan öğrencilerin adı ve id si SELECT name, id, class FROM student ; WHERE class="" AND NOT remission name id class Peter 9801 Mary 9802 Luke 9810 Bobby 9811 Aaron 9812 Ron 9813 Gigi 9824 : : : Ocak, Mart, Temmuz ve Eylül de doğmamış olan öğrencileri listele SELECT name, class, dob FROM student ; WHERE MONTH(dob) NOT IN (1,3,6,9) name class dob Wendy 07/09/86 Tobe 10/17/86 Eric 1C 05/05/87 Patty 1C 08/13/87 Kevin 1C 11/21/87 Bobby 02/16/86 Aaron 08/02/86 : : : sınıfında olup matematik sınav sonucu 80 ile 90 arasında olan öğrencileri seçmek SELECT name, mtest FROM student ; WHERE class="" AND ; mtest BETWEEN 80 AND 90 name mtest Luke 86 Aaron 83 Gigi 84 10
İsmi T ile başlayan öğrencileri ve sınıflarını seçme SELECT name, class FROM student ; WHERE name LIKE "T%" name Tobe Teddy Tim class 2A Kırmızı ev sahibi olup isminin ikinci harfi a olan kişileri seçme SELECT name, class, hcode FROM student ; WHERE name LIKE "_a%" AND hcode="r" name class hcode Aaron R Janet R Paula 2A R SİLME VE DEĞİŞTİRME İŞLEMLERİ 11
SELECT... FROM... WHERE koşul ; GROUP BY groupexpr [HAVING gereklilik] Gruplama fonksiyonları: COUNT( ), SUM( ), AVG( ), MAX( ), MIN( ) Gruplama groupexpr tek kayıt olarak gruplanacak olan satırları tanımlar. Genellikle bir sütundur. WHERE satırlar gruplanmadan önce bireysel satırların uyması gereken koşul. - HAVING bütun grubun sağlaması gereken koşul. Matematiksel ifadeler WHERE ile kullanılabilecek operatörler 12
Her bir sınıftaki öğrenci sayısını listeleme Matematiksel Fonksiyonlar 1C Group By Class class 1C 1C 1C Student COUNT( ) COUNT( ) COUNT( ) Her bir sınıftaki öğrenci sayısını listeleme SELECT class, COUNT(*) FROM student ; GROUP BY class class cnt 10 9 1C 9 2A 8 2B 8 2C 6 13
Her bir sınıfın ortalama matematik notunu listele 1C Group By Class class 1C 1C 1C Student AVG( ) AVG( ) AVG( ) Her bir sınıfın ortalama matematik notunu listele SELECT class, AVG(mtest) FROM student ; GROUP BY class class avg_mtest 85.90 70.33 1C 37.89 2A 89.38 2B 53.13 2C 32.67 Her bir ilçedeki kız öğrenci sayısı SELECT dcode, COUNT(*) FROM student ; WHERE gender="f" GROUP BY dcode dcode cnt HHM 6 KWC 1 MKK 1 SSP 5 TST 4 YMT 8 14
3 ten fazla erkek öğrencinin olduğu her bir sınıftaki erkek öğrencilerin matematik notu ortalaması SELECT AVG(mtest), class FROM student ; WHERE gender="m" GROUP BY class ; HAVING COUNT(*) >= 3 avg_mtest class 86.00 77.75 35.60 1C 86.50 2A 56.50 2B Gösterim sırası-ordering SELECT... FROM... WHERE... GROUP BY... ; ORDER BY colname ASC / DESC sınıfındaki erkek öğrencileri isimlerine göre sıralamak SELECT name, id FROM student ; WHERE gender="m" AND class="" ORDER BY name name id Peter 9801 Johnny 9803 Luke 9810 Bobby 9811 Aaron 9812 Ron 9813 Sonuç ORDER BY name name id Aaron 9812 Bobby 9811 Johnny 9803 Luke 9810 Peter 9801 Ron 9813 15
2A sınıfındaki öğrencileri oturdukları ilçeye göre listelemek Sonuç SELECT name, id, class, dcode FROM student ; WHERE class="2a" ORDER BY dcode name id class dcode Jimmy 9712 2A HHM Tim 9713 2A HHM Samual 9714 2A SHT Rosa 9703 2A SSP Helen 9702 2A TST Joseph 9715 2A TSW Paula 9701 2A YMT Susan 9704 2A YMT Her bir ilçedeki öğrenci sayısını listelemek (DESC. olarak) SELECT COUNT(*) AS cnt, dcode FROM student ; GROUP BY dcode ORDER BY cnt DESC Sonuç cnt docode 11 YMT 10 HHM 10 SSP 9 MKK 5 TST 2 TSW 1 KWC 1 MMK 1 SHT Çıktıların oluşturulması INTO TABLE tablename Çıktı tablo olarak bir veritabanı içine diskteki bir alana kaydedilir. INTO CURSOR temp Çıktı geçici süreliğine hafızaya kaydedilir. TO FILE filename [ADDITIVE] Çıktı text dosyasına kaydedilir. (additive = append) TO PRINTER TO SCREEN Yazıcıya gönderme Ekranda görme 16
Öğrencileri isimlerine göre sıralayıp sonucu bir veritabanı dosyasına kaydetme SELECT * FROM student ; ORDER BY name DESC INTO TABLE name.dbf id name dob sex class mtest hcode dcode remission 9707 Zion 07/29/85 M 2B 51 B MKK.F. 9709 Yvonne 08/24/85 F 2C 10 R TST.F. 9804 Wendy 07/09/86 F 84 B YMT.F. 9819 Vincent 03/15/85 M 1C 29 Y MKK.F. 9805 Tobe 10/17/86 M 88 R YMT.F. 9713 Tim 06/19/85 M 2A 91 R HHM.T. 9816 Teddy 01/30/86 M 64 B SSP.F. : : : : : : : : : Kırmızı renk evde kalan öğrencilerin sınıf, cinsiyet ve isimlerini içeren tablonun yazıcıdan çıktısını alma SELECT class, name, gender FROM student ; WHERE hcode="r" ; ORDER BY class, gender DESC, name TO PRINTER class name gender Aaron M Peter M Ron M Tobe M Janet F Kitty F Mimi F : : : Tabloların Kesişimi, Birleşimi ve Farkı A ve B nin birleşimi union (A B) A B A ve B tablolarındaki tüm satırları içeren tablo. 17
Tabloların Kesişimi, Birleşimi ve Farkı A ve B nin kesişimiintersection (A B) A Hem A hem de B tablolarında olan satırları gösteren tablo. B Tabloların Kesişimi, Birleşimi ve Farkı A nın B den farkı difference (A B) A B A tablosunda olan fakat B tablosunda olmayan kayıtları gösteren tablo. Briç ve santranç klubünde yer alan kişiler alan veri-tipi gen. içerik id numeric 4 student id number name character 10 name gender character 1 gender: M / F class character 2 class Briç [A] Santranç [B] id name gender class id name gender class 1 9812 Aaron M 1 9802 Mary F 2 9801 Peter M 2 9801 Peter M 3 9814 Kenny M 3 9815 Eddy M 4 9806 Kitty F 4 9814 Kenny M 5 9818 Edmond M 1C 5 9817 George M 1C : : : : : : : : 18
Tabloların Kesişimi, Birleşimi ve Farkı SELECT... FROM... WHERE... ; UNION ; SELECT... FROM... WHERE... İki klüp üyeleri birlikte bir etkinlik düzenlemek isterse katılacak öğrencilerin listesi: SELECT * FROM briç ; UNION ; SELECT * FROM santranç ; ORDER BY class, name INTO TABLE etkinlik id name gender class 1 9812 Aaron M 2 9801 Peter M 3 9814 Kenny M 4 9806 Kitty F 5 9818 Edmond M 1C 6 9802 Mary F 7 9815 Eddy M 8 9817 George M 1C Her iki klübede üye olan öğrenciler SELECT... FROM table1 ; WHERE col IN ( SELECT col FROM table2 ) SELECT * FROM briç ; WHERE id IN ( SELECT id FROM santranç ) ; TO PRINTER Briç klubüne üye olan fakat santranç klübüne üye olmayan öğrenciler SELECT... FROM table1 ; WHERE col NOT IN ( SELECT col FROM table2 ) SELECT * FROM briç ; WHERE id NOT IN ( SELECT id FROM santranç ) ; INTO TABLE fark 19
Birden çok tablo olması durumunda: SQL kullanılarak çıkarılabilir. birden çok Bunun için kullanılan işleç join dir. tablodan bilgi Join işleci ile birden fazla tablo tüm olasılıkları içerecek şekilde çok daha büyük yeni bir tabloda toplanır (Kartezyen çarpım) Bu yeni tablodaki satırlar filtrenelerek yararlı bilgiler üretilebilir. Çoklu tablolar alan1 A B alan2 1 2 3 alan1 A A A B B B alan2 1 2 3 1 2 3 Herbir öğrenci bir müzik aleti öğrenmelidir. İki veri tabanı dosyası: student.dbfdbf & music.dbf Ortak alan: student id Müzik dersi örneği field id type type width contents numeric 4 student id number character 10 type of the music instrument SELECT A USE student SELECT B USE music 20
Doğal Birleştirme (Natural Join) işlemi ile iki tablo ortak sütunları kullanılarak birleştirilir. Bu işlem iki tablo arasında ilişki kurmaya benzer. Doğal Birleştirme SELECT a.comcol, a.col1,, b.col2, expr1, expr2 ; FROM table1 a, table2 b ; WHERE a.comcol = b.comcol Öğrencilerin ve kullandıkları müzik aletlerini içeren bir tablo yaratma (Natural join) id 9801 name Student class id 9801 Same id name Product Join class id 9801 type Music type Öğrencilerin ve kullandıkları müzik aletlerini içeren bir tablo yaratma (Natural join) SELECT s.class, s.name, s.id, m.type ; FROM student s, music m ; WHERE s.id=m.id ORDER BY class, name class name id type Aaron 9812 Piano Bobby 9811 Flute Gigi 9824 Recorder Jill 9820 Piano Johnny 9803 Violin Luke 9810 Piano Mary 9802 Flute : : : : 21
Herbir sınıfta piyano öğrenen öğrencilerin sayısını bulma (Natural join) Student Music Üç kısım : (1) Natural Join. (2)Koşul: m.type="piano (3) GROUP BY class Join Product Condition m.type= "Piano" Group By class Herbir sınıfta piyano öğrenen öğrencilerin sayısını bulma (Natural join) SELECT s.class, COUNT(*) ; FROM student s, music m ; WHERE s.id=m.id AND m.type="piano" ; GROUP BY class ORDER BY class class cnt 4 2 1C 1 ÖZET General Structure Comparison Grouping Display Order Logical Operators Output Union SELECT, ALL / DISTINCT, *, AS, FROM, WHERE IN, BETWEEN, LIKE "% _" GROUP BY, HAVING, COUNT( ), SUM( ), AVG( ), MAX( ), MIN( ) ORDER BY, ASC / DESC AND, OR, NOT INTO TABLE / CURSOR TO FILE [ADDITIVE], TO PRINTER, TO SCREEN UNION 22