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.

  • 🔍 Temel Amaç: WHERE yan tümcesi, bir sorgunun hangi satırları etkileyeceğini kısıtlar; bu nedenle SELECT, UPDATE ve DELETE yalnızca eşleşen satırları etkiler.
  • 🔗 VE Operator: Tüm koşullar doğru olduğunda yalnızca satırlar döndürülür, bu da sonuç kümesini daraltır.
  • 🔀 OR Operator: Herhangi bir koşulun doğru olarak değerlendirilmesi durumunda satırlar döndürülür ve sonuç kümesi genişletilir.
  • ???? İÇERİDE ve İÇERİDE DEĞİL: IN anahtar kelimesi bir ifadede bir değer listesiyle eşleşirken, NOT IN aynı listeyi hariç tutar.
  • 🇧🇷 karşılaştırma Operator: Eşittir (=), büyüktür (>), küçüktür (<) ve eşit değildir (<>) filtreleri sayısal, metin ve tarih sütunlarını filtreler.
  • ⚠️ NULL Değerlerinin İşlenmesi: NULL hiçbir zaman = veya <> ile eşleşmez, bu nedenle eksik değerleri kontrol etmek için IS NULL ve IS NOT NULL gereklidir.

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 cümlesi MySQL

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 email
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 email
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 email
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 email
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

SSS

WHERE filtreleri, gruplama işleminden önce tek tek satırları filtreler.pingBu nedenle, toplama fonksiyonlarına referans veremez. HAVING, GROUP BY çalıştırıldıktan sonra grupları filtreler ve bu da COUNT(*) > 5 gibi koşullar için doğru yer haline getirir.

IS NULL veya IS NOT NULL ifadesini kullanın. Opera"=" ve "<>" gibi operatörler NULL için "bilinmiyor" döndürür, bu nedenle `postal_address` = NULL hiçbir şeyle eşleşmezken, `postal_address` IS NULL çalışır.

Evet, filtrelenen sütun indekslendiğinde, MySQL Tabloyu taramak yerine yalnızca eşleşen satırları okur.ping YEAR(`date_of_birth`) = 1980 gibi bir fonksiyondaki bir sütun, indeks kullanımını engeller.

Evet. Yapay zeka asistanları sade İngilizceyi SQL'e çeviriyor ve MySQL Tezgâh Sonucu çalıştırabilirsiniz. RevModelin sütun adlarını uydurabileceği ihtimaline karşı, her koşulu şemanıza göre inceleyin.

Önce SELECT ile test edin. Yanlış bir WHERE koşulu... SİL veya GÜNCELLE sorgusu Her satırı değiştirebilirsiniz. Eşleşen satırları önizleyin, ardından yazma işlemi için aynı koşulu yeniden kullanın.

Bu yazıyı şu şekilde özetleyin: