Veritabanı Select Sorgusu
-
Hocalar yarın veritabanından sınava girecem bi konu aklıma çok takıldı Bizim hoca çoğu select sorgusunda iki tane tablo adı giriyor böyle bi sorgu oluyomu mantığı ne bi türlü anlayamadım yardımcı olurmusunuz. Örneğin:
Select Fname,Adress
From Employe,Department
Where Dname="Research" AND Dnumber='Dno'
-
İlişkili sql onlar, inner join, outer join, left join vs
İki tablodan aynı anda veri çekmeye yarar, ama aralarında ilişki belirtmezsen hiçbir esprisi yok bildiğin kartezyen çarpım alırsın...
select * from raporlar,sirketler where raporlar.sirket_id=sirketler.id dersen mesela..
Raporlar tablondaki sirket_id sütununda tutulan id ye sahip şirketi şirket tablosundan alıp da yanına yazmış olursun ;)
-
inner join de aynısını yapmıyomuydu yoksa ben mi unutmuşum bu sqli önceden bi müddet kullanmıştı ama ikii tablo arasında karşılaştırma yaparken bunu hiç kullanmadım inner join kullanıyodum. inner join le ne farkı var ki bunun
-
hocam inner join le 2 tablo bağlarsın söyle diyim bi tablon iller bi tablon ilçeler olsun
İller - 1.istanbul , 2.ankara
ilçeler - 1.bakırköy , vs vs diye foreign key kullanır hangi ilçe hangi ilde belirtirsin çekerken inner join kullanırsın sana primary keylerle foreign key leri eşleşenleri getirir senin dediğinde ise 1 tablodan sadece belli kolonları çekiyor
türkiye tablosunda iller nufus ve rakım olsun mesela sen iller ve nufus çekerken select iller,nufus from turkiye where nufus=1000 dersin sana nufusu 1000 olan illeri getirir rakımlarını getirmez
-
Pardon yanlış anlamışım burdaki olay şu olması lazım mesela soruda diyodur Research departmanında ki dno numarada çalışan elemanları getir diye burda ne olucak o departmanda çalışan elemanları getiricek sadece inner join e gerek yok burda
-
teşekkürler hocalar az çok kavradım
-
hocam şimdi şöyle düşün 2 tablon var bunlardan birisinde bir takım bilgiler tutuyorsun ve işte bunlardan bir tanesi iller sütunu
sorun şu şimdi sen bu tablonun bu kısmına girilecek bilgileri bir şekilde kısıtlamak istiyorsun... yoksa birisi girmiş İstanbul bir diğeri girmiş İslambol, bir diğer girmiş İstanblue vs vs vs... ama sonuçta alakalı alakasız bir sürü sonuç çıkmış ve bu durum aramalarda sana sıkıntı çıkarıyor haklı olarak... bu nedenle sen bu sütuna bağlı bir başka tablo yapıp o sütuna girilebilecek verileri kısıtlamayı planlıyorsun aynı zamanda bu diğer tabloda her şehre birde id numarası vermişsin yani
çok sütunlu bir tablo birde sadece 2 sütunlu bir başka tablon olsun burada elinde...
çok sütunlu tabloda sehir_id diye birşey var
2 sütunluda sehir_id ve sehir_adi diye 2 sütunun var. sen çok sütunlu tabloda isimleri tutup çok fazla yer kaplatmaktansa bunun yerine tutup o sehrin id numarasını tutturarak oradaki metin değerinin kapladığından çok daha az bir alanı int değer tutarak tutmuş oluyorsun.
sonrasında bak bu kısım önemli sql sorguna geliyor
select * from cok_sutunlu_tablo inner join iki_sutunlu_tablo.id on cok_sutunlu_tablo.sehir_id where ....
şeklinde bir esprisi var...
hocam bak veri tabanlarındaki ilişkisel yapı bu noktada çok önemli bence zira kayıt sayısı az olduğunda sütunun birisinde aynı string ifadeyi tutmak çok mühim değildir yani 10000 kere tutsan o kadar fark yapmaz eğer ifade kısaysa...
ama senin 10 milyar satır kaydın varsa o tabloda ve 2 milyar satırda aynı ifade tekrar ederse gereksiz yere veri tabanında şişmeler olur... ama onun yerine ufak bir int değer tutmak veri tabanını daha zinde ve hafif tutacaktır.
