Tags

, , , , , , , , , ,

İyi Aksamlar Arkadaşlar,

Bugün yine Northwind veritabanı üzerinden sorgu örneklerine devam edeceğiz.Bu dersimiz de daha çok tablolar arasında ilişki kurarak birden fazla tablo üzerinden sorgu yapmaya çalışacağız.Umarım faydalı olur 🙂

??1996-10-16 tarihinde sipariş vermiş olan tüm müşterilerin Adres ve CompanyName bilgilerini bulunuz.

1.yol(in ile)

SELECT Address, CompanyName
FROM Customers
WHERE CustomerID IN (
SELECT CustomerID
FROM Orders
WHERE OrderDate=’1996-10-16′)

2.yol(kartezyen çarpım ile)

SELECT Address, CompanyName
FROM Customers,Orders
WHERE Customers.CustomerID=Orders.CustomerID AND
OrderDate=’1996-10-16′

Her iki SQL ifadesinin de çıktısı aşağıda ki gibi olur. 1.yol da IN ifadesiyle Orders tablosundan şartı sağlayan CustomerID’ler bulunmuş sonra bu CustomerID’ye sahip müşterilerin Address ve CompanyName bilgileri  Customers tablosundan alınmıştır.2. yol da ise Customers ve Orders tabloları CustomerID lerinin eşit olduğu yerlere göre birleştirilmiştir.(bu işleme kartezyen çarpım diyoruz)Birleştirildikten sonrada Address ve CompanyName bilgileri çekilmiştir.

kartezyen

??Herhangi bir sipariş vermeyen müşterilerin ID ve CompanyName bilgilerini bulunuz.

1.yol(exist ile)

SELECT CustomerID, CompanyName
FROM Customers AS C
WHERE NOT EXISTS (
SELECT *
FROM Orders AS O
WHERE O.CustomerID=C.CustomerID
);

EXIST:Kayıtların varlığını kontrol eder.

NOT EXIST:Kayıtların olmaması gerektiği durumda kullanılır.Mesala burada Sipariş tablosunda olmayan müşterilerin CustomerID ve CompanyName bilgileri Customers tablosundan çekilmiştir.

2.yol(except ile)

SELECT Customers.CustomerID,CompanyName
FROM Customers
EXCEPT
SELECT Customers.CustomerID,CompanyName
FROM Customers,Orders
WHERE Customers.CustomerID=Orders.CustomerID

EXCEPT:dışında anlamında kullanılır.Burada Customers ve Orders tabloları arasında kartezyen çarpım yapılmış ve Customers tablosundan burada olanların dışındaki Müşterilerin CustomerID ve CompanyName bilgileri çekilmiştir.

3.yol(not in ile)

SELECT Customers.CustomerID, CompanyName
FROM Customers
WHERE CustomerID NOT IN (
SELECT DISTINCT Customers.CustomerID
FROM Customers,Orders
WHERE Customers.CustomerID=Orders.CustomerID)

NOT IN:Bir listede aranan verinin olup olmadığını kontrol eder.Başında Not olduğu için olmaması gereken durumlarda kullanılır.

3 Sql ifadesinin de çıktısı aşağıda ki gibidir.

kartezyen

?? 1997-10-02 tarihinde verilmiş siparişlerde(Orders) görev almış olan Çalışanların(Employees) isim ve soyisimleri?

1.yol(inner join ile)

SELECT FirstName, LastName
FROM Employees
INNER JOIN Orders ON Employees.EmployeeID=Orders.EmployeeID
WHERE OrderDate=’1997-10-02′

INNER JOIN:ifadesiyle tabloları verilen şarta göre birleştiririz. Mesala burada Employees tablosu ile Orders tablosu aynı EmployeeID değerlerinde birleştirilmiştir.

2.yol(in ile)

SELECT FirstName,LastName
FROM Employees
WHERE EmployeeID IN (
SELECT EmployeeID
FROM Orders
WHERE OrderDate=’1997-10-02′
)

IN:Bir listede aranan verinin olup olmadığını kontrol eder.

3.yol(kartezyen çarpım ile)

SELECT FirstName,LastName
FROM Employees,Orders
WHERE Employees.EmployeeID=Orders.OrderID
AND OrderDate=’1997-10-02′

Her 3 Sql ifadesinin de çıktısı aşağıda ki gibidir.

kartezyen

Bu günlük te bu kadar iyi çalışmalar.Kolay gelsin 🙂