MySQL WHERE Cümlesi: AND, OR, IN, NOT IN Sorgu Örneği
⚡ Akıllı Özet
MySQL WHERE yan tümcesi, SELECT, UPDATE ve DELETE ifadelerine kesin kriterler uygulayarak, sonuç kümesine ulaşmadan önce satırları filtreler. AND, OR, IN, NOT IN ve karşılaştırma operatörlerini anlamak, yeni başlayanların bir sorgunun gerektirdiği kayıtları tam olarak elde etmelerini sağlar.

WHERE Cümlesi Nedir? MySQL?
NEREDE Madde in MySQL belirtilen SQL ifadesi tarafından etkilenecek veri veya satırların kesin ölçütlerini belirtmek için kullanılan bir anahtar sözcüktür. WHERE ifadesi, kayıtları filtrelemek ve veriler üzerinde çeşitli işlemler gerçekleştirmek için INSERT, UPDATE, SELECT ve DELETE gibi SQL ifadeleriyle birlikte kullanılabilir.
Bir veriden nasıl veri sorgulanacağını inceledik. veritabanı önceki öğreticide SELECT ifadesini kullanarak. SELECT ifadesi sorgulanan veritabanı tablosundaki tüm sonuçları döndürdü.
Ancak, sorgu sonuçlarını belirli bir koşula göre sınırlandırmak istediğimiz zamanlar da vardır. SQL'deki WHERE yan tümcesi bu gibi durumlarda kullanışlıdır ve aynı şekilde çalışır. SİL veya GÜNCELLE sorgusu Tıpkı bir SELECT sorgusunda olduğu gibi.
WHERE yan tümcesi Sözdizimi
WHERE yan tümcesinin temel sözdizimi aşağıdaki gibidir.
SELECT * FROM tableName WHERE condition;
İŞTE
- “tabloAdı'ndan * SEÇİN” standart mı SELECT ifadesi
- "NEREDE" , sonuç kümesini kısıtlayan anahtar kelimedir ve "durum" Sonuçlara uygulanan filtre budur. Filtre bir aralık, tek bir değer veya alt sorgu olabilir.
Örneğin, üye numarası 1 olan bir üyenin bilgilerini üye tablosundan almak istediğimizi varsayalım. Aşağıdaki kod bunu gerçekleştirir.
SELECT * FROM `members` WHERE `membership_number` = 1;
Bu komut dosyasını şu şekilde çalıştırıyorum: MySQL tezgâh “myflixdb” üzerinde yapılan arama aşağıdaki sonucu üretir.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
Tek bir koşul nadiren yeterlidir. Aşağıdaki bölümler, WHERE koşulunu şunlarla birleştirir: mantıksal operatörler.
WHERE yan tümcesi – ile birleştirildi VE MANTIKLI Operator
AND mantıksal operatörü ile, yalnızca belirtilen tüm kriterler karşılandığında bir satır döndürülür.
Diyelim ki 2. kategoride yer alan ve 2008 yılında vizyona giren tüm filmleri istiyoruz. Aşağıdaki kod bunu gerçekleştiriyor.
SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;
Yukarıdaki komut dosyasını "myflixdb" üzerinde çalıştırmak aşağıdaki sonucu üretir.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
AND operatörü sonuç kümesini daraltır. OR operatörü ise genişletir.
WHERE yan tümcesi – ile birleştirildi OR MANTIKLI Operator
VEYA operatörü ile, belirtilen kriterlerden HERHANGİ BİRİ karşılanırsa bir satır döndürülür.
Aşağıdaki komut dosyası, 1. veya 2. kategorideki tüm filmleri alır.
SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;
Sonuç kümesi aşağıda gösterilmiştir.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 1 | Pirates of the Caribean 4 | Rob Marshall | 2011 | 1 |
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
Birçok VEYA koşulunu zincirleme olarak kullanmak okunabilirliği zorlaştırır. IN anahtar kelimesi bu sorunu çözer.
WHERE yan tümcesi – ile birleştirildi IN Anahtar kelime
IN anahtar kelimesiyle birlikte kullanıldığında, WHERE yan tümcesi yalnızca belirtilen listeyle eşleşen değerlere sahip satırları etkiler. IN, aksi takdirde yazacağınız OR yan tümcelerinin sayısını azaltır.
Aşağıdaki MySQL WHERE IN sorgusu, membership_number değerinin 1, 2 veya 3 olduğu satırları döndürür.
SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);
Sonuç kümesi aşağıda gösterilmiştir.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
NOT IN ise bunun tam tersi bir filtreleme işlemi gerçekleştirir.
WHERE yan tümcesi – ile birleştirildi DEĞİL Anahtar kelime
NOT IN anahtar kelimesiyle, WHERE yan tümcesi, değeri belirtilen listeyle eşleşen her satırı hariç tutar.
Aşağıdaki sorgu, membership_number değerinin 1, 2 veya 3 olmadığı satırları verir.
SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);
Sonuç kümesi aşağıda gösterilmiştir.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
WHERE ayrıca karşılaştırma operatörlerini kullanarak değerleri boyut ve eşitliğe göre filtreler.
WHERE yan tümcesi – ile birleştirildi KARŞILAŞTIRMA Operaları
Küçüktür (<), eşittir (=), büyüktür (>) ve eşit değildir (<>) karşılaştırma operatörlerinin tümü WHERE yan tümcesiyle birlikte kullanılabilir.
= Eşittir
Aşağıdaki betik, eşittir karşılaştırma operatörünü kullanarak üyeler tablosundaki tüm kadın üyeleri alır.
SELECT * FROM `members` WHERE `gender` = 'Female';
Sonuç kümesi aşağıda gösterilmiştir.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
> Daha harika
Aşağıdaki script ödemeler tablosundan 2,000'den büyük olan tüm ödemeleri alır.
SELECT * FROM `payments` WHERE `amount_paid` > 2000;
Sonuç kümesi aşağıda gösterilmiştir.
| payment_id | membership_number | payment_date | description | amount_paid | external_reference_number |
|---|---|---|---|---|---|
| 1 | 1 | 23-07-2012 | Movie rental payment | 2500 | 11 |
| 3 | 3 | 30-07-2012 | Movie rental payment | 6000 | NULL |
<> Eşit Değil
Aşağıdaki script kategori id'si 1 olmayan tüm filmleri alır.
SELECT * FROM `movies` WHERE `category_id` <> 1;
Sonuç kümesi aşağıda gösterilmiştir.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
| 5 | Daddy's Little Girls | NULL | 2007 | 8 |
| 6 | Angels and Demons | NULL | 2007 | 6 |
| 7 | Davinci Code | NULL | 2007 | 6 |
| 9 | Honey mooners | John Schultz | 2005 | 8 |
Hızlı Referans: WHERE Maddesi Operaları
WHERE ile en sık birlikte kullanılan operatörler aşağıda özetlenmiştir. Tam tanımları ise şurada yer almaktadır: MySQL operatör referansı.
| Kullanım | anlam | Örnek durum |
|---|---|---|
| = | Eşittir | `cinsiyet` = 'Kadın' |
| <> | Eşit değil | `category_id` <> 1 |
| > / | Büyüktür / küçüktür | `amount_paid` > 2000 |
| VE / VEYA | Tüm kriterler / herhangi bir kriter | `category_id` = 2 VE `year_released` = 2008 |
| İÇİNDE / İÇİNDE DEĞİL | Eşleşen/hariç tutulan liste | `üyelik_numarası` (1,2,3) içinde |
| BOŞ DEĞİL / BOŞ DEĞİL | Eksik değerler için testler | `postal_address` BOŞ |
⚠️Not: NULL hiçbir zaman = veya <> ile eşleşmez. Bir sütunun değer içermeyebileceği durumlarda IS NULL veya IS NOT NULL kullanın.
Zeka Oyunu: Geç İade Edilen Filmleri Bulun
Diyelim ki 25/06/2012 tarihine kadar iade edilmeyen kiralık filmleri istiyoruz. WHERE ifadesini küçüktür operatörü ve AND ile birleştirerek bunu elde edebiliriz.
SELECT * FROM `movierentals` WHERE `return_date` < '2012-06-25' AND movie_returned = 0;
Yukarıdaki betiğin çalıştırılması MySQL workbench aşağıdaki sonuçları veriyor.
| reference_number | transaction_date | return_date | membership_number | movie_id | movie_returned |
|---|---|---|---|---|---|
| 14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |

