|
|
|
Yazan
|
Konu: SQL'de anlamadığım bir yer var (Okunma Sayısı 202 defa)
|
beyaz_ölüm
PHP Öğrencisi
Offline
Mesaj Sayısı: 90
|
arkadaşlar çalıştığım kitapda şu örneği anlayamadım .
select customers.name from customers,orders,order_items,books where customers.customerid = orders.customerid and orders.orderid = order_items.orderid and order_items.isbn = books.isbn and books.title like '%Java%'
şimdi ben buradaki şartlı koşulları anlamadım arkadaşlar mesela şu şartlıyı anlamadım
customers.customerid = orders.customerid
customers.customerid nedir ki? order_customerid ile karşılaştırma oluyor ve diğerleride öyle orderid ve isbn tablodaki bütün orderid ve customerid ile eşleştirme mi yapıyor?,ve SQL 'de öncelik hangi yerden onu söylerseniz sevinirim. teşekkürler.
|
|
|
|
|
Logged
|
|
|
|
|
bndrs
|
Selam, noktadan önceki tablo ismi noktadan sonraki sütun ismi örn. customers.customerid = orders.customerid costumers tablosundaki costumerid sütünuyla orders tablosundaki costumerid eşit olmalı demek.
O örnek verdiğin sorguda dört tablodan sorgu çekilmiş ki hiç bir profosyonel böyle bir sorgu yapmaz tablolardan herhangi biri takribi 300 kayıt veya üzeri kayıt içerdimi kilitlenir kalır.
Kısacası FROM deyimi ile WHERE deyimi arasında virgülle ayrılmış olanlar seçilen tablo isimleri. SELECT ile FROM arasındakiler seçilen tablo sütunları
SELECT costumers.costumerid FROM costumers
costumers isimli tablodan costumerid sütununu getirir Eğerki bunu bir koşula bağlamak istersen WHERE eklersin diyelimki costumerid verisinin 3 veya 12'den büyük olması gerektiğini varsayalım o zaman
SELECT costumers.costumerid FROM costumers WHERE costumers.costumerid = 3 OR costumers.costumerid > 12
birden fazla sütun çekmek için aralarına virgül koyabilirsin tüm sütunlar için * işareti kullanılır
SELECT costumers.costumerid, costumers.title FROM costumers veya tümü SELECT costumers.* FROM costumers
birden fazla tablodan sorgu getirmek için FROM'dan sonra seçeceğin tabloyu yazıyorsun ya o da virgülle ayrılarak birden fazla tablo ismi yazarak çekebilir veya LEFT JOIN, INNER JOIN, RIGHT JOIN gibi SQL fonksiyonlarını kullanabilirsin
SELECT `costumers`.*, `orders`.`order_items` FROM `costumers`,`orders` WHERE `costumers`.`costumerid`=`orders`.`costumerid`
yukarıdaki sorgu şu işlemi yapıyor. cotumers tablosundaki tüm sütunlar ile orders tablosundaki order_items alanlarını, costumer tablosundaki costumerid ve orders tablosundaki costumerid sütunu eşit olanları getir.
Not: Dikkat ettiysen tablo ismi veya sütun isimlerini ` işaretleri içinde kullandım bu doğru yöntemdir. Neden? çünkü düşünki bir tabloda order isimli bir sütunun var bu ` işaretini kullanmadığın zaman şak diye hata raporu döner order SQL fonksiyonu `order` olunca MySQL motoru bunu o zaman string olarak değerlendirir ve hata olmaz.
|
|
|
|
|
Logged
|
|
|
|
beyaz_ölüm
PHP Öğrencisi
Offline
Mesaj Sayısı: 90
|
cevabın için teşekkürler yani benim asıl sormak istediğim hiç bir yerde değer vermeden direk koşul konuyor bu durumda ne oluyor olması idi cevabımı en sondaki cümlende aldım
yani anladığım kadarıyla
customers.customerid = orders.orderid bu ikisinden hangi sütünler eşleşiyorsa onların hepsini getir anlamı öylemi kısaca bumu oluyor , yani ben PHP'den direk SQL'e girdiim için PHP'de kullanırken bir değer veriyorsun ve ona göre şart koşuyorsun yani senin verdiğin değerle SQL'deki eşleşirse getir gibi ama burda farklı şeyler gördüğüm için kafam karıştı.
|
|
|
|
|
Logged
|
|
|
|
|
GaziMarşı
|
Selam. customer.customerid ve orders.orderid'yi değişkenler gibi düşün...
|
|
|
|
|
Logged
|
|
|
|
|
 |
|