<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by birkankaraer on Medium]]></title>
        <description><![CDATA[Stories by birkankaraer on Medium]]></description>
        <link>https://medium.com/@karaermustafabirkan?source=rss-8457012a77fd------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*xIhFz4smcle0lWVL2z03BQ.gif</url>
            <title>Stories by birkankaraer on Medium</title>
            <link>https://medium.com/@karaermustafabirkan?source=rss-8457012a77fd------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Fri, 15 May 2026 18:36:34 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@karaermustafabirkan/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Mikroservisler: Modern Yazılım Mimarisi ile Ölçeklenebilir ve Etkili Çözümler]]></title>
            <link>https://medium.com/@karaermustafabirkan/mikroservisler-modern-yaz%C4%B1l%C4%B1m-mimarisi-ile-%C3%B6l%C3%A7eklenebilir-ve-etkili-%C3%A7%C3%B6z%C3%BCmler-4927243d8aa7?source=rss-8457012a77fd------2</link>
            <guid isPermaLink="false">https://medium.com/p/4927243d8aa7</guid>
            <category><![CDATA[microservices]]></category>
            <category><![CDATA[microservices-pattern]]></category>
            <category><![CDATA[microservice-architecture]]></category>
            <dc:creator><![CDATA[birkankaraer]]></dc:creator>
            <pubDate>Wed, 11 Sep 2024 14:02:17 GMT</pubDate>
            <atom:updated>2024-09-11T14:02:17.044Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QW5UBZR92k2ksBE7xozq2g.png" /></figure><p>Mikroservis, bir yazılım mimarisi yaklaşımıdır. Bu yaklaşım, bir uygulamanın bağımsız, ölçeklenebilir ve tek bir işlevi yerine getiren küçük hizmetlere/servislere ayrılarak geliştirilmesini ve dağıtılmasını sağlar. Mikroservis mimarisi, uygulamanın farklı işlevlerini birbirinden bağımsız olarak geliştirmeyi teşvik eder.</p><p>Bu yaklaşım bir teknoloji değil, bir yazılım geliştirme stratejisidir. Geleneksel monolitik yaklaşımlarda, örneğin bir e-ticaret uygulamasında stok yönetimi, kullanıcı yönetimi ve ödeme sistemleri gibi tüm işlevler tek bir çözüm içinde bulunur. Mikroservis mimarisi ise, her işlevi bağımsız birer mikroservis olarak ele alır ve bu servislere ayrı ayrı odaklanarak geliştirilmesini önerir.</p><p>Her mikroservis, uygulamanın belirli bir işlevinin sorumluluğunu üstlenir ve bu servisler, birbirleriyle iletişim kurarak daha büyük bir sistem oluşturur. Örneğin, bir memur olarak düşünülebilir; her biri belirli bir işe odaklanmış ve gerektiğinde diğer memurlarla iş birliği yaparak daha geniş bir işlevsellik sağlar.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/828/1*trm2wP5KSYXiiyN8e_KQ5Q.png" /></figure><p>Monolitik yaklaşımdan farklı olarak, mikroservis mimarisi servislerin bağımsız olarak geliştirilebilmesini sağlar. Bu, dağıtık bir mimarinin avantajlarını da beraberinde getirir; performans, yüksek ölçeklenebilirlik ve daha iyi verimlilik sağlar. Dağıtık mimaride, her servis farklı sunucularda barındırılabilir ve bu da yük dengeleme (load balancing) gibi ölçeklendirme çözümlerine olanak tanır.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/298/1*4F_1lha2ASEejaz3yOJJYQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/900/1*Gd-hx5FpGC9EHPPgSLo1Kw.png" /></figure><p>Ayrıca, dağıtık bir mimari her bir servisin bağımsız olarak geliştirilmesine ve yönetilmesine olanak tanır, bu da DevOps süreçlerini daha kolay ve yönetilebilir hale getirir.</p><p>Ölçekleme, bir uygulamanın dar boğazlara düşmeden ve performansını kaybetmeden hizmetine devam edebilmesi anlamına gelir. Örneğin, bankalarda birden fazla gişe açmak, işlem kapasitesini artırarak müşteri bekleme sürelerini kısaltır ve bu da ölçeklendirmenin bir örneğidir.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/912/1*RKNO8Uy3T4A60wJVZm3RSQ.png" /></figure><p>Not: Bu yazıdaki bilgiler ve görseller, gençay yıldız hocanın eğitiminden alınmıştır. Kendisinin değerli katkıları için teşekkürler.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4927243d8aa7" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Object Oriented Programming (OOP)]]></title>
            <link>https://medium.com/@karaermustafabirkan/object-oriented-programming-oop-dd0721bcbf48?source=rss-8457012a77fd------2</link>
            <guid isPermaLink="false">https://medium.com/p/dd0721bcbf48</guid>
            <category><![CDATA[oop]]></category>
            <category><![CDATA[nesneye-yönelik-prog]]></category>
            <category><![CDATA[objectorientedprogramming]]></category>
            <dc:creator><![CDATA[birkankaraer]]></dc:creator>
            <pubDate>Tue, 16 Jan 2024 09:15:23 GMT</pubDate>
            <atom:updated>2024-01-16T09:15:23.264Z</atom:updated>
            <content:encoded><![CDATA[<p>Merhaba arkadaşlar, bugünkü yazımda Object Oriented Programming’den bahsedeceğim. Yazılım geliştirme dünyası, karmaşıklığı yönetmek, kodu daha anlaşılır ve sürdürülebilir hale getirmek için çeşitli programlama paradigmaları sunmaktadır. Bu paradigmalardan biri olan Nesne Yönelimli Programlama (OOP), yazılım geliştirme süreçlerini düzenlemek ve sürdürmek için güçlü bir araç olarak öne çıkmaktadır.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Q7mam4IFFTNoEBzRtwajwQ.jpeg" /></figure><h3>OOP Nedir?</h3><p>Nesne Yönelimli Programlama, programlama yaklaşımını nesnelerin kullanılmasına dayandırır. Bir nesne, verileri ve bu veriler üzerinde işlemleri içeren bir birimdir. Örneğin, bir araba nesnesi bir model, renk, hız gibi verilere sahip olabilir ve aynı zamanda arabanın hızını artırma veya azaltma gibi işlemleri gerçekleştirebilir.</p><p>OOP, kodu modüler hale getirmeye ve yeniden kullanılabilirliği artırmaya odaklanır. Bu, yazılım projelerini daha organize, anlaşılır ve bakımı kolay hale getirir.</p><h3>OOP’nin Temel İlkeleri</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9rwT6-zTGZMQo-nAKAS7SA.png" /></figure><h4>1. Soyutlama (Abstraction)</h4><p>Soyutlama, bir nesnenin karmaşıklığını gizleme ve sadece gerekli olan özellikleri ve işlevleri ortaya çıkarma sürecidir. Bu, programcıların karmaşıklığı azaltmasına, daha az kod yazmasına ve daha anlaşılır bir yapı oluşturmasına yardımcı olur.</p><h4>2. Miras (Inheritance)</h4><p>Miras, bir sınıfın özelliklerini ve davranışlarını başka bir sınıfa aktarma yeteneğini ifade eder. Bu, kodun yeniden kullanılabilirliğini artırır ve sınıflar arasında bir hiyerarşi oluşturarak kodun daha düzenli olmasına olanak tanır.</p><h4>3. Kapsülleme (Encapsulation)</h4><p>Kapsülleme, bir nesnenin verilerini ve işlevlerini bir kapsül içine koyarak, dış dünyaya sadece belirli bir arayüzle erişim sağlama prensibidir. Bu, programcıların bir nesnenin iç yapısını gizleyerek, değişikliklerin dış dünyayı etkilememesini sağlar.</p><h4>4. Çok Biçimlilik (Polymorphism)</h4><p>Çok biçimlilik, aynı ismi taşıyan fakat farklı işlevlere sahip olan nesnelerin kullanılabilmesini ifade eder. Bu, aynı arayüzü paylaşan nesnelerin farklı davranışlar sergileyebilmesine olanak tanır ve kodun daha esnek olmasını sağlar.</p><h3>OOP’nin Avantajları</h3><ul><li>Daha Anlaşılır Kod: Nesne odaklı programlama, gerçek dünya varlıklarını modelleyerek, kodun daha anlaşılır ve soyut olmasını sağlar.</li><li>Modülerlik: Nesnelerin kendi içinde bağımsız olması, kodu modüler hale getirir ve bakımı kolaylaştırır.</li><li>Yeniden Kullanılabilirlik: Sınıflar ve nesneler, kodun tekrar kullanılmasını kolaylaştırır ve geliştirme sürecini hızlandırır.</li><li>Daha Az Hata: Kapsülleme sayesinde, hataların yayılma riski azalır ve kod daha güvenilir hale gelir.</li></ul><h3>Sonuç</h3><p>Nesne Yönelimli Programlama, yazılım geliştirme süreçlerini daha etkili ve sürdürülebilir hale getiren güçlü bir paradigmadır. Temel prensipleri olan soyutlama, miras, kapsülleme ve çok biçimlilik sayesinde, büyük ölçekli projeleri yönetmek ve kodun bakımını kolaylaştırmak mümkündür.</p><p>Bu paradigmaya hakim olmak, bir programcının kod yazma becerilerini geliştirmesine ve daha karmaşık projelerle başa çıkmasına yardımcı olabilir.</p><h4>Bonus</h4><p>Nesne yönelimli programlama (OOP) yazılım tasarımında bağımlılık enjeksiyonu(Dependency Injection), belirli bir kod parçasının ihtiyaç duyduğu bir kaynağı sağlama sürecidir. Genellikle uygulamanın kendisinin bir bileşeni olan gerekli kaynağa bağımlılık denir.</p><p>Bir yazılım bileşeni amacını gerçekleştirmek için diğer kaynaklara bağımlı olduğunda, hangi kaynaklarla iletişim kurması gerektiğini, bunları nerede bulacağını ve bunlarla nasıl iletişim kuracağını bilmesi gerekir.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=dd0721bcbf48" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Komutları ve Sorguları Birbirinden Ayıran Yapı: CQRS Nedir?]]></title>
            <link>https://medium.com/@karaermustafabirkan/komutlar%C4%B1-ve-sorgular%C4%B1-birbirinden-ay%C4%B1ran-yap%C4%B1-cqrs-nedir-d0e638cf8cdb?source=rss-8457012a77fd------2</link>
            <guid isPermaLink="false">https://medium.com/p/d0e638cf8cdb</guid>
            <category><![CDATA[cqrs]]></category>
            <category><![CDATA[cqrs-pattern]]></category>
            <dc:creator><![CDATA[birkankaraer]]></dc:creator>
            <pubDate>Sat, 30 Dec 2023 13:52:48 GMT</pubDate>
            <atom:updated>2023-12-30T13:52:48.898Z</atom:updated>
            <content:encoded><![CDATA[<p>CQRS, “Command Query Responsibility Segregation” kelimelerinin baş harflerinden oluşan bir kısaltmadır ve komutları (commands) ile sorguları (queries) birbirinden ayırmayı amaçlayan bir tasarım prensibidir. CQRS, yazılım sistemlerindeki okuma (query) ve yazma (command) işlemlerini birbirinden bağımsız hale getirerek daha esnek ve ölçeklenebilir bir mimari sunmayı hedefler.</p><p>CQRS’nin temel prensipleri şunlardır:</p><p>1. **Komut ve Sorgu Ayrımı (Separation of Command and Query):** Sistem içinde veri okuma ve veri yazma işlemleri ayrı ayrı ele alınır. Bu, sistemdeki okuma işlemlerinin yazma işlemlerini etkilememesi ve tersi durumun geçerli olmaması anlamına gelir.</p><p>2. **Tek Sorumluluk İlkesi (Single Responsibility Principle):** Bir sınıfın veya bir modülün tek bir sorumluluğu olmalıdır. CQRS, bu prensibi komut ve sorguların ayrılması yoluyla destekler.</p><p>3. **Event Sourcing:** CQRS sıklıkla event sourcing ile birlikte kullanılır. Event sourcing, sistemin durumu bir dizi olay (event) kullanarak tanımlar. Bu olaylar daha sonra kullanılarak sistem durumu geriye dönük olarak yeniden oluşturulabilir.</p><p>4. **Ölçeklenebilirlik (Scalability):** CQRS, okuma ve yazma işlemlerini ayrı ele alarak her iki tür işlemi farklı şekillerde ölçeklendirebilme imkanı sunar. Örneğin, yazma işlemleri için daha fazla yazma taraf sunucu ekleyebilir veya okuma işlemleri için özel optimize edilmiş okuma tarafları ekleyebilirsiniz.</p><p>5. **Esneklik (Flexibility):** CQRS, sistemin okuma ve yazma ihtiyaçlarına daha iyi uyum sağlayabilmesi için daha esnek bir yapı sunar. Bu, sistem gereksinimleri değiştikçe kolayca adapte olabilme anlamına gelir.</p><p>CQRS’nin kullanılması, özellikle büyük ve karmaşık yazılım sistemlerinde, sistem mimarisini daha modüler ve bakımı daha kolay hale getirebilir. Ancak, her tasarım prensibi gibi, CQRS’nin kullanımının getirdiği avantajlar ve dezavantajlar dikkate alınmalıdır.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d0e638cf8cdb" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[OOP (Object-Oriented Programming) — Nesne Yönelimli Programlama]]></title>
            <link>https://medium.com/@karaermustafabirkan/oop-object-oriented-programming-nesne-y%C3%B6nelimli-programlama-80855c71edce?source=rss-8457012a77fd------2</link>
            <guid isPermaLink="false">https://medium.com/p/80855c71edce</guid>
            <category><![CDATA[object-oriented-program]]></category>
            <dc:creator><![CDATA[birkankaraer]]></dc:creator>
            <pubDate>Sat, 30 Dec 2023 13:50:52 GMT</pubDate>
            <atom:updated>2023-12-30T13:50:52.082Z</atom:updated>
            <content:encoded><![CDATA[<h3><strong>OOP (Object-Oriented Programming) — Nesne Yönelimli Programlama</strong></h3><p><strong>Class’ların iki temel özelliği vardır:</strong></p><ol><li><strong>İçerisinde özellikler (properties) tutar.</strong></li><li><strong>Operasyonlar (methods) tutar.</strong></li></ol><p><strong>Özellik tuttuğumuz yerde operasyon tutmuyoruz ve operasyon tuttuğumuz yerde özellik bulunmaz.</strong></p><p><strong>Özellikleri “prop” kısaltması ile oluştururuz. Örneğin, TcNo, VergiNo gibi verileri neden String olarak atıyoruz sorusuna cevap olarak, eğer bir veri üzerinde matematiksel işlem yapmıyorsak, sayısal bir görevi yoksa, metinsel olarak planlanırsa veri uyumluluğunda daha iyi sonuçlar alabiliriz. Farklı yazılım ortamlarında sayıların karşılığı farklı olabilir; örneğin, TcNo’yu sayısal bir şekilde Excele atarsak, farklı karakterlerle karşılaşabiliriz.</strong></p><p><strong>Eğer bir nesnede bir değeri kullanmak zorunda gibi görünmüyorsak, bu durumda soyutlama hatası yapıyor olabiliriz.</strong></p><p><strong>Operasyon sınıfı, gelen bir müşteriyi veritabanına kaydedecek bir operasyon yazmak gibi işlevleri içerir. Müşteriyi eklemek bir metodun operasyonudur.</strong></p><p><strong>Eğer bir base sınıfınız varsa, o referans tutucudur.</strong></p><p><strong>INTERFACE</strong></p><p><strong>Okunurluğu arttırmak için “interface IKrediManager” gibi kullanırız. Interface olduğunu anlamak için KrediManager’a “I” harfi ile başlarız.</strong></p><p><strong>Interface genellikle operasyonel metodlarda kullanılır ve onu implemente eden sınıfın referansını tutabilir.</strong></p><p><strong>DEPENDENCIES INJECTION</strong></p><p><strong>Aynı veri türünde belirsiz sayıda nesne oluşturmak için “public void KrediOnBilgilendirmesiYap(List&lt;IKrediManager&gt; krediler)” gibi kullanılır.</strong></p><p><strong>Interfaceleri birbirinin alternatifi olan, ancak kod içerikleri farklı olan durumlar için kullanırız.</strong></p><p><strong>LOGGING</strong></p><p><strong>Loglama, sistemin içerisindeki hareketleri dökme işlemidir. Bu hareketler dosyalarda, veritabanlarında tutulabilir ve SMS olarak gönderilebilir.</strong></p><p><strong>Dosyaya yazarken dosyaya yazma kodları, veritabanına yazarken veritabanına yazma kodları, SMS gönderirken SMS gönderme kodları ve e-posta gönderirken e-posta kodları yazılır. Bu işlemlerin tamamı loglama kapsamındadır.</strong></p><p><strong>Bazen alternatif bir sistem olduğunu o an bilemeyiz; tek sistem veritabanına yazmaktır, başka bir talep gelmez. İç müşteri tarafından istenilen sadece veritabanıdır. Ancak, biz yine de ona bir interface ekleriz.</strong></p><p><strong>Yazılımda sürdürülebilirliği sağlar ve interface’in referans tutucu olduğunu anlarsak, sistem ve interface zorunlu hale gelir.</strong></p><p><strong>POLYMORPHISM (ÇOKBİÇİMLİLİK) NEDİR?</strong></p><p><strong>Çokbiçimlilik, aynı isimle fakat farklı işlevlere sahip metodları, classları ifade eder. Bu, bir nesnenin birden fazla formu veya türü olabilme yeteneğini ifade eder.</strong></p><p><strong>Aşağıda C# dilinde bir polymorphism örneği bulunmaktadır:</strong></p><p><strong>class Program<br>{<br> // Temel sınıf (Base Class)<br> class Tasit<br> {<br> public virtual void HareketEt()<br> {<br> Console.WriteLine(“Araç hareket ediyor.”);<br> }<br> }</strong></p><p><strong>// Türetilmiş sınıflar (Derived Classes)<br> class Araba : Tasit<br> {<br> public override void HareketEt()<br> {<br> Console.WriteLine(“Araba hareket ediyor.”);<br> }<br> }</strong></p><p><strong>class Ucak : Tasit<br> {<br> public override void HareketEt()<br> {<br> Console.WriteLine(“Uçak hareket ediyor.”);<br> }<br> }</strong></p><p><strong>class Gemi : Tasit<br> {<br> public override void HareketEt()<br> {<br> Console.WriteLine(“Gemi hareket ediyor.”);<br> }<br> }</strong></p><p><strong>// Polymorphism örneği<br> static void HareketEttir(List&lt;Tasit&gt; araclar)<br> {<br> foreach (Tasit arac in araclar)<br> {<br> arac.HareketEt();<br> }<br> }</strong></p><p><strong>static void Main()<br> {<br> // Nesneler oluşturuluyor<br> Araba araba = new Araba();<br> Ucak ucak = new Ucak();<br> Gemi gemi = new Gemi();</strong></p><p><strong>// Liste içinde farklı tipte nesneler<br> List&lt;Tasit&gt; araclarListesi = new List&lt;Tasit&gt; { araba, ucak, gemi };</strong></p><p><strong>// Aynı metodu çağırmak<br> HareketEttir(araclarListesi);<br> }<br>}</strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=80855c71edce" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Katmanlı Yazılım Geliştirme ve Mimariler: Uygulama Geliştirme Süreçleri Üzerine Bir Bakış]]></title>
            <link>https://medium.com/@karaermustafabirkan/ger%C3%A7ek-hayatta-yaz%C4%B1l%C4%B1m-geli%C5%9Ftirme-katmanl%C4%B1-mimari-ve-servis-odakl%C4%B1-mimarilerin-rol%C3%BC-7ad5987ec976?source=rss-8457012a77fd------2</link>
            <guid isPermaLink="false">https://medium.com/p/7ad5987ec976</guid>
            <category><![CDATA[uygulama-geliştirme]]></category>
            <category><![CDATA[servis-odaklı-mimari]]></category>
            <category><![CDATA[katmanlı-mimari]]></category>
            <dc:creator><![CDATA[birkankaraer]]></dc:creator>
            <pubDate>Sat, 30 Dec 2023 13:38:46 GMT</pubDate>
            <atom:updated>2023-12-30T13:42:02.808Z</atom:updated>
            <content:encoded><![CDATA[<p>**Real Life Projects**</p><p>Veri tabanı programlaması yaparken, uygulamalarımızı ve kodlarımızı farklı parçalara böleriz. Bu parçalara örnek olarak iki tanesini ele alalım:</p><p>**Data Access (Veri Erişim) Katmanı**</p><p>Veriye erişim için yazdığımız kodları içeren katmandır; yani kodlarımızı katmanlara bölüyoruz. Sadece veriye erişim için gerekli olan kodları buraya yerleştiririz. Peki, neden böyle katmanlara ihtiyacımız var?</p><p>Veriye erişim için farklı teknikler bulunmaktadır. C# ile kullanılan teknikler zaman içinde değişebilir. Yazılımın dinamik yapısı, tekniklerin evrim geçirmesine ve çeşitlenmesine neden olur. Bu sebeplerle farklı teknikleri bir araya getirip kullanırız. Yazılım geliştirmede düzeni sağlamak için soyutlama tekniklerini (interface, class, abstract) kullanırız. Ayrıca SOLID prensiplerine uyum da önemlidir.</p><p>Farklı katmanlar oluşturarak, yazma işlemlerini “tak ve çalıştır” sistemleri şeklinde yönetiriz.</p><p>**Business Katmanı**</p><p>İş kodlarımızı ve kurallarımızı bu katmana yazıyoruz. İş kodları, genellikle if ifadelerini yoğun bir şekilde içerir. Örneğin, yemek siparişi verebilmemiz için bulunduğumuz yerde bir yemek siparişi olması gerekmektedir. İş kodlarında sürekli olarak yeni kurallar eklenir.</p><p>Data Access kodlarını Business katmanına yazmak hatalıdır, çünkü ileriye dönük sistemlerde sorunlara yol açabilir.</p><p>Varsayalım ki bunların hepsi bir .NET projesi ve bir web uygulaması geliştiriyoruz. Bu durumda, kullanıcı arayüzüne (UI) denk gelen User Interface çeşitli versiyonlar içerebilir. Sektörde en yaygın olanlardan biri ASP.NET’tir. Ayrıca bir mobil uygulama da geliştirilebilir.</p><p>Günümüzde farklı platformlarda yazılım geliştirmek zorunlu hale gelmiştir. Örneğin, bir iOS mobil ürünü ya da bir Android ürünü olabilir.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/874/1*JcCM8BWdZdYACDE-FEq6vA.png" /></figure><p>Bu noktada, Business katmanını Android veya iOS ortamıyla doğrudan bağlantı kuramayız. Farklı sistemlerin birbirini anlayabilmesi için günümüzde kullanılan bir teknoloji bulunmaktadır. .NET, Android, iOS gibi farklı sistemler arasında iletişimi sağlamak için standart bir protokol mevcuttur. Bu, farklı sistemlerin birbirini anlaması için Service odaklı mimariler gereği bir katman daha eklememiz gerektiği anlamına gelir.</p><p>Bu katmana “Service Katmanı” adını veririz ve burada en yaygın olarak API olarak adlandırdığımız altyapıları kullanırız. API, farklı sistemler arasında iletişim kurabilmek için kullanılan bir arayüzü temsil eder. Örneğin, .NET, Android ve iOS gibi farklı platformlarda yazılım geliştirirken, API kullanarak bu platformlar arasında veri alışverişi yapabiliriz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/776/1*BBwtnyji-_OMAdY-Hux2Tg.png" /></figure><p>API aracılığıyla dış dünyaya hizmet sunuyoruz, yani API, Android, iOS ve diğer platformlar gibi farklı sistemlere bağlanabilir. API, bir standart ile tanımlanmıştır. Bu standartlar, farklı sistemler arasında etkili bir iletişim sağlamak için geliştirilen mimarileri içerir.</p><p>Genellikle RESTful olarak adlandırılan bir mimari, API’lar arasındaki iletişimde sıkça kullanılan bir yaklaşımdır. RESTful mimari, basit, hafif ve ölçeklenebilir olmasıyla bilinir. Ayrıca, veri alışverişi için kullanılan format genellikle JSON’dır. JSON, verilerin kolayca okunabilir ve yazılabilir bir yapıda temsil edilmesini sağlayan bir formattır.</p><p>Bu sayede farklı sistemler arasında standardize edilmiş bir iletişim sağlanır, böylece .NET, Android, iOS gibi çeşitli platformlar arasında sorunsuz bir veri alışverişi gerçekleştirilebilir.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/658/1*gvQIv8AyUj2e7RYMLIdETw.png" /></figure><p>Tabii ki, bu bölümü de gözden geçirerek düzenledim:</p><p>— -</p><p>E-devlet entegrasyonu, SOAP mimarisi kullanılarak geliştirilmiştir. Örneğin, bir e-ticaret sisteminde kayıt olurken, girdiğimiz bilgilerin veri tabanına kaydedilmesi için Data Access katmanında SQL sorgularını kullanırız.</p><p>Business katmanında ise iş kurallarını belirleriz. Örneğin, bir e-ticaret sitesinde pazar yerine kayıt olup ürün satmak isteyenler için yazacağımız kurallar bu katmanda yer alır. Örnek olarak, yeni bir tedarikçinin maksimum 10 adet ürün ekleyebileceği bir kuralı business katmanında tanımlayabiliriz.</p><p>Bu sayede, veri tabanı işlemleri Data Access katmanında gerçekleştirilirken, iş kuralları ve uygulama mantığı Business katmanında ele alınır. Bu katmanlı yapı, sistemdeki farklı görevleri düzenler ve sürdürülebilir bir yazılım mimarisi oluşturur.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/514/1*SJlK0H1lTiOzmosctBOBJA.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7ad5987ec976" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Overdesign]]></title>
            <link>https://medium.com/@karaermustafabirkan/overdesign-e7593b4ce2d4?source=rss-8457012a77fd------2</link>
            <guid isPermaLink="false">https://medium.com/p/e7593b4ce2d4</guid>
            <category><![CDATA[overdesigned]]></category>
            <dc:creator><![CDATA[birkankaraer]]></dc:creator>
            <pubDate>Sat, 30 Dec 2023 13:20:53 GMT</pubDate>
            <atom:updated>2024-09-12T18:14:07.309Z</atom:updated>
            <content:encoded><![CDATA[<p>Merhaba arkadaşlar,</p><p>Overdesign prensibini sizlere anlatmaya çalışacağım. İlk olarak bir e-ticaret sistemi üzerinden örnekleyerek başlayalım ve müşterilerin kayıt veritabanını Excel’de oluşturalım.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/466/1*auP51eh7bDlthMAy4gLdag.png" /></figure><p>Müşterilerin kaydedildiği tabloda gördüğümüz gibi, şehirlerini tekrar tekrar yazmamak için bir Foreign Key yöntemi kullanılarak şehirlere birer Id atanmıştır.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/192/1*EJ0w5CbiQuLf5wrQ5qp_dQ.png" /></figure><p>Evet, gördüğünüz gibi tabloda şehirlere ait Id’ler verilmiş durumda. Önceki müşteri kayıt tablosunda, şehirlerin tekrar tekrar yazılmaması için burada şehirlere karşılık gelen Id’ler bulunmaktadır.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/487/1*oQSMwM6Bl-ZzpFtff5zaXQ.png" /></figure><p>Aslında bu konuda ezbere işin yapılmayacağını da anlatmak istiyorum. Resimde gördüğünüz müşterilerin kaydedildiği tabloda isimlerinin de bir Id’ye ait olabileceği ve isimlerinin de bir Id ile verilebileceğini söyleyebiliriz. Buradaki problem nedir? Problem şudur: Örneğin, biz şunu biliriz ki devlet bundan sonra kimsenin adı Birkan olamaz ve bundan sonra ismi Birkan olanlar adını değiştirsin gibi kurallar getirmeyeceğini düşünürüz. Yani bu riski kabul ederiz. Risk Management dediğimiz risk yönetiminde belli bir riski kabul ederiz.</p><p>Neden Name Id koymuyoruz? Çünkü böyle bir sistemi yönetemeyiz. Sistemi bir aşamadan sonra yönetemeyiz. Normalization seviyeleri 5&#39;e kadar ilerlerken biz sektörde seviyesini 3–3,5 seviyesinde bırakabiliriz. NASA’nın yaptığı araştırmaya göre gerçekten bir Normalization durumunda maksimum 2 kolon olabiliyor. Dolayısıyla böyle bir şey mümkün değildir ve biz bunu yönetemeyiz.</p><p>Burada asıl konumuz Overdesign konumuz geliyor. Bu kavramı unutursak bir yerden sonra felsefe yapmaya başlarız. Overdesign, aşırı tasarım demektir. Yani yönetilebilmekten çıkmış durumundadır. Her kurumun aşırı tasarımı farklıdır. Peki tasarımın iyisi nerede? Ben onu nerede bırakacağım gibi soruları soracak olursak, bizim handle edebildiğimiz noktadır.</p><p>Aşırı SOLID bir uygulama geliştirmeye çalışırsak, aşırı inheritance’lar, aşırı implementation’lar yapılırsa işin içinden çıkılamaz duruma gelir. Bir CustomerManager sınıfında en aşırı SOLID yapılarında sadece bir tane method olmalıdır, bunu destekleyen yapılar vardır, CQRS bunlara örnektir.</p><p>Genel yapıdan bahsedecek olursak, bizim yaptığımız içine çok fazla method koyuyoruz. Bu noktada her class’ın içine bir method koymaya çalışırsak, en azından temel mimarilerde, üç katmanlı mimarilerde onun içinden çıkılamaz duruma gelir. Bizler ise ne yapıyoruz? Tasarımları belli seviyede işimizi görecek seviyede tutuyoruz, ondan sonrasını handle edebileceğimiz noktaya getiriyoruz ve bırakıyoruz.</p><p>Eğer Overdesign prensibini hayatımızdan çıkaracak olursak, SOLID’ı, Normalization gibi tasarım modelleme tekniklerini eleştiririz ve Overdesign yapısını unuttuğumuz anlamına gelir.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e7593b4ce2d4" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[SQL Öğrenirken Aldığım Notlar]]></title>
            <link>https://medium.com/@karaermustafabirkan/sql-4b53adc4a541?source=rss-8457012a77fd------2</link>
            <guid isPermaLink="false">https://medium.com/p/4b53adc4a541</guid>
            <category><![CDATA[sql]]></category>
            <dc:creator><![CDATA[birkankaraer]]></dc:creator>
            <pubDate>Sat, 30 Dec 2023 13:10:26 GMT</pubDate>
            <atom:updated>2023-12-30T13:31:19.595Z</atom:updated>
            <content:encoded><![CDATA[<p>SQL, veritabanlarına erişmek ve bunları işlemek için kullanılan standart bir dildir.</p><h4>SQL nedir?</h4><p>1-SQL bir veritabanına karşı sorgular yürütebilir<br>2-SQL bir veritabanından veri alabilir<br>3-SQL bir veritabanına kayıt ekleyebilir<br>4-SQL bir veritabanındaki kayıtları güncelleyebilir<br>5-SQL bir veritabanından kayıtları silebilir<br>6-SQL yeni veritabanları oluşturabilir<br>7-SQL bir veritabanında yeni tablolar oluşturabilir<br>8-SQL veritabanında saklı yordamlar oluşturabilir<br>9-SQL bir veritabanında görünümler oluşturabilir<br>10-SQL tablolar, prosedürler ve görünümler üzerinde izinler ayarlayabilir.</p><p>SQL bir Standarttır ama SQL bir ANSI/ISO standardı olmasına rağmen SQL dilinin farklı versiyonları vardır.</p><p>SELECTAncak ANSI standardıyla uyumlu olmak için hepsi en azından ana komutları ( , UPDATE, DELETE, INSERT, gibi WHERE) benzer şekilde destekler.</p><p><strong>Not:</strong> SQL veritabanı programlarının çoğunun, SQL standardına ek olarak kendi özel uzantıları da vardır!</p><h4>Web Sitenizde SQL Kullanmak</h4><p>Bir veritabanındaki verileri gösteren bir web sitesi oluşturmak için ihtiyacınız olacak:</p><ul><li>Bir RDBMS veritabanı programı (yani MS Access, SQL Server, MySQL)</li><li>PHP veya ASP gibi sunucu tarafı bir kodlama dili kullanmak için</li><li>İstediğiniz verileri elde etmek amacıyla SQL kullanmak için</li><li>Sayfaya stil vermek amacıyla HTML/CSS kullanmak için</li></ul><h4>RDBMS</h4><p>RDBMS, İlişkisel Veritabanı Yönetim Sistemi anlamına gelir.</p><p>RDBMS, SQL’in ve MS SQL Server, IBM DB2, Oracle, MySQL ve Microsoft Access gibi tüm modern veritabanı sistemlerinin temelidir.</p><p>RDBMS’deki veriler, tablo adı verilen veritabanı nesnelerinde saklanır. Tablo, ilgili veri girişlerinin bir koleksiyonudur ve sütunlardan ve satırlardan oluşur.</p><p>“Müşteriler” tablosuna bakın:</p><pre>SELECT * FROM Customers;</pre><p>Her tablo, alan adı verilen daha küçük varlıklara bölünmüştür. Müşteriler tablosundaki alanlar MüşteriKimliği, MüşteriAdı, İlgili KişiAdı, Adres, Şehir, PostaKodu ve Ülkeden oluşur. Alan, tablodaki her kayıt hakkında belirli bilgileri korumak için tasarlanmış bir tablodaki sütundur.</p><p>Satır olarak da adlandırılan kayıt, bir tabloda bulunan her bir giriştir. Örneğin yukarıdaki Müşteriler tablosunda 91 kayıt bulunmaktadır. Kayıt, tablodaki yatay bir varlıktır.</p><p>Sütun, tablodaki belirli bir alanla ilişkili tüm bilgileri içeren, tablodaki dikey bir varlıktır.</p><h4>SQL Syntax</h4><p>Veritabanı Tabloları</p><p>Bir veritabanı çoğunlukla bir veya daha fazla tablo içerir. Her tablo bir adla tanımlanır (örn. “Müşteriler” veya “Siparişler”). Tablolar veri içeren kayıtları (satırları) içerir.</p><p>Bu yazımda iyi bilinen Northwind örnek veritabanını (MS Access ve MS SQL Server’da bulunur) kullanacağız.</p><p>Aşağıda “Müşteriler” tablosundan bir seçim yer almaktadır:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*E4cAF_Hm6Zi6fjHqvlQxwg.png" /></figure><p>Yukarıdaki tabloda beş kayıt (her müşteri için bir tane) ve yedi sütun (MüşteriKimliği, MüşteriAdı, İlgili KişiAdı, Adres, Şehir, Posta Kodu ve Ülke) bulunmaktadır.</p><h4>SQL İfadeleri</h4><p>Bir veritabanında gerçekleştirmeniz gereken eylemlerin çoğu SQL ifadeleriyle yapılır.</p><p>Aşağıdaki SQL ifadesi “Müşteriler” tablosundaki tüm kayıtları seçer:</p><pre>SELECT * FROM Customers;</pre><p>Şunu Aklınızda Bulundurun…</p><ul><li>SQL anahtar kelimeleri büyük/küçük harfe duyarlı DEĞİLDİR: selectile aynıdır SELECT</li></ul><p>SQL İfadelerinden sonra noktalı virgül?</p><p>Bazı veritabanı sistemleri her SQL ifadesinin sonunda noktalı virgül kullanılmasını gerektirir.</p><p>Noktalı virgül, sunucuya yapılan aynı çağrıda birden fazla SQL ifadesinin yürütülmesine izin veren veritabanı sistemlerinde her bir SQL ifadesini ayırmanın standart yoludur.</p><h4>En Önemli SQL Komutlarından Bazıları</h4><ul><li>SELECT- bir veritabanından veri çıkarır</li><li>UPDATE- bir veritabanındaki verileri günceller</li><li>DELETE- veritabanındaki verileri siler</li><li>INSERT INTO- veritabanına yeni veriler ekler</li><li>CREATE DATABASE- yeni bir veritabanı oluşturur</li><li>ALTER DATABASE- bir veritabanını değiştirir</li><li>CREATE TABLE- yeni bir tablo oluşturur</li><li>ALTER TABLE- bir tabloyu değiştirir</li><li>DROP TABLE- bir tabloyu siler</li><li>CREATE INDEX- bir dizin oluşturur (arama anahtarı)</li><li>DROP INDEX- bir dizini siler</li></ul><h4>SQL SELECT İfadesi</h4><p>İfade SELECTbir veritabanından veri seçmek için kullanılır.</p><p>Döndürülen veriler, sonuç kümesi adı verilen bir sonuç tablosunda saklanır.</p><p>Söz Dizimini SEÇ</p><pre>SELECT column1, column2, ...<br>FROM table_name;</pre><p>Burada sütun1, sütun2, … veri seçmek istediğiniz tablonun alan adlarıdır. Tabloda bulunan tüm alanları seçmek istiyorsanız aşağıdaki sözdizimini kullanın:</p><pre>SELECT * FROM table_name;</pre><p>FARKLI Örnekleri SEÇİN</p><p>Aşağıdaki SQL ifadesi, “Müşteriler” tablosundaki “Ülke” sütunundaki yalnızca DISTINCT değerlerini seçer:</p><pre>SELECT DISTINCT Country FROM Customers;</pre><p>Aşağıdaki SQL deyimi farklı (farklı) müşteri ülkelerinin sayısını listeler:</p><pre>SELECT COUNT(DISTINCT Country) FROM Customers;</pre><h4>SQL WHERE Cümlesi</h4><p>Madde WHEREkayıtları filtrelemek için kullanılır. Yalnızca belirli bir koşulu karşılayan kayıtları çıkarmak için kullanılır.</p><p>WHERE Sözdizimi</p><pre>SELECT column1, column2, ...<br>FROM table_name<br>WHERE condition;</pre><p><strong>Not:</strong> Cümle WHEREyalnızca ifadelerde kullanılmaz , aynı zamanda , , vb. SELECTiçinde de kullanılır !UPDATE, DELETE</p><p>WHERE Madde Örneği</p><p>Aşağıdaki SQL ifadesi, “Müşteriler” tablosundaki “Meksika” ülkesindeki tüm müşterileri seçer:</p><pre>SELECT * FROM Customers<br>WHERE Country=&#39;Mexico&#39;;</pre><p>Metin Alanları ve Sayısal Alanlar</p><p>SQL, metin değerleri etrafında tek tırnak işareti gerektirir (çoğu veritabanı sistemi çift tırnak işaretine de izin verir).</p><p>Ancak sayısal alanlar tırnak içine alınmamalıdır:</p><pre>SELECT * FROM Customers<br>WHERE CustomerID=1;</pre><p>WHERE Cümlesindeki Operatörler</p><p>Cümlede aşağıdaki operatörler kullanılabilir WHERE:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_JaW87BuQZaquWYxuLzC1A.png" /></figure><h4>SQL ORDER BY Anahtar Kelime</h4><p>SQL ORDER BY Anahtar Kelimesi</p><p>Anahtar ORDER BYkelime, sonuç kümesini artan veya azalan düzende sıralamak için kullanılır.</p><p>Anahtar ORDER BYkelime, kayıtları varsayılan olarak artan düzende sıralar. Kayıtları azalan düzende sıralamak için DESCanahtar kelimeyi kullanın.</p><p>ORDER BY Söz Dizimi</p><pre>SELECT column1, column2, ...<br>FROM table_name<br>ORDER BY column1, column2, ... ASC|DESC;</pre><p>SİPARİŞ BY Örnek</p><p>Aşağıdaki SQL ifadesi, “Müşteriler” tablosundaki tüm müşterileri “Ülke” sütununa göre sıralayarak seçer:</p><pre>SELECT * FROM Customers<br>ORDER BY Country;</pre><p>ORDER BY DESC Örneği</p><p>Aşağıdaki SQL ifadesi, “Müşteriler” tablosundaki tüm müşterileri, “Ülke” sütununa göre DESCENDING sırasına göre seçer:</p><pre>SELECT * FROM Customers<br>ORDER BY Country DESC;</pre><p>Birkaç Sütuna Göre SİPARİŞ Örneği</p><p>Aşağıdaki SQL ifadesi, “Müşteriler” tablosundaki tüm müşterileri “Ülke” ve “MüşteriAdı” sütununa göre sıralayarak seçer. Bu, Ülkeye göre sipariş verdiği anlamına gelir, ancak bazı satırlar aynı Ülkeye sahipse bunları MüşteriAdı’na göre sipariş eder:</p><pre>SELECT * FROM Customers<br>ORDER BY Country, CustomerName;</pre><p>Birkaç Sütuna Göre SİPARİŞ Örnek 2</p><p>Aşağıdaki SQL ifadesi, “Müşteriler” tablosundaki tüm müşterileri, “Ülke”ye göre artan ve “MüşteriAdı” sütununa göre azalan şekilde sıralayarak seçer:</p><pre>SELECT * FROM Customers<br>ORDER BY Country ASC, CustomerName DESC;</pre><h4>SQL AND Operator</h4><p>SQL AND Operatörü</p><p>Cümle bir veya daha fazla operatör WHEREiçerebilir . AND</p><p>Operatör AND, kayıtları birden fazla koşula göre filtrelemek için kullanılır; örneğin İspanya&#39;daki &#39;G&#39; harfiyle başlayan tüm müşterileri döndürmek istiyorsanız:</p><p>Örnek</p><p>İspanya’dan ‘G’ harfiyle başlayan tüm müşterileri seçin:</p><pre>SELECT *<br>FROM Customers<br>WHERE Country = &#39;Spain&#39; AND CustomerName LIKE &#39;G%&#39;;</pre><p>Sözdizimi</p><pre>SELECT column1, column2, ...<br>FROM table_name<br>WHERE condition1 AND condition2 AND condition3 ...;</pre><p>AND vs OR</p><p><em>Tüm</em> koşullar DOĞRU ise operatör ANDbir kayıt görüntüler .</p><p>Koşullardan <em>herhangi</em> birinin DOĞRU olması durumunda operatör ORbir kayıt görüntüler .</p><p>Tüm Koşullar Doğru Olmalı</p><p>Aşağıdaki SQL ifadesi “Almanya” VE “Berlin” VE 12000&#39;den yüksek olan Customerstüm alanları seçer:CountryCityPostalCode</p><pre>SELECT * FROM Customers<br>WHERE Country = &#39;Germany&#39;<br>AND City = &#39;Berlin&#39;<br>AND PostalCode &gt; 1200;</pre><p>Combining AND and OR</p><p>ANDve operatörlerini birleştirebilirsiniz OR.</p><p>Aşağıdaki SQL ifadesi, İspanya’daki “G” veya “R” ile başlayan tüm müşterileri seçmektedir.</p><p>Doğru sonucu elde etmek için parantez kullandığınızdan emin olun.</p><pre>SELECT * FROM Customers<br>WHERE Country = &#39;Spain&#39; AND (CustomerName LIKE &#39;G%&#39; OR CustomerName LIKE &#39;R%&#39;);</pre><p>Parantez olmadan, select ifadesi , ülke değerine bakılmaksızın İspanya’dan “G” ile başlayan tüm müşterilerin <em>yanı sıra “R” ile başlayan tüm müşterileri döndürür:</em></p><pre>SELECT * FROM Customers<br>WHERE Country = &#39;Spain&#39; AND CustomerName LIKE &#39;G%&#39; OR CustomerName LIKE &#39;R%&#39;;</pre><h4>SQL OR Operator</h4><p>The SQL OR Operator</p><p>Cümle bir veya daha fazla operatör WHEREiçerebilir .OR</p><p>Operatör OR, kayıtları birden fazla koşula göre filtrelemek için kullanılır; örneğin Almanya&#39;daki tüm müşterileri ve aynı zamanda İspanya&#39;daki müşterileri de iade etmek istiyorsanız:</p><pre>SELECT *<br>FROM Customers<br>WHERE Country = &#39;Germany&#39; OR Country = &#39;Spain&#39;;</pre><p>Syntax</p><pre>SELECT column1, column2, ...<br>FROM table_name<br>WHERE condition1 OR condition2 OR condition3 ...;</pre><p>OR vs AND</p><p>Koşullardan <em>herhangi</em> birinin DOĞRU olması durumunda operatör ORbir kayıt görüntüler .</p><p><em>Tüm</em> koşullar DOĞRU ise operatör ANDbir kayıt görüntüler .</p><p>En Az Bir Koşul Doğru Olmalı</p><p>Aşağıdaki SQL ifadesi Müşterilerden City&quot;Berlin&quot; olan, CustomerName&quot;G&quot; harfiyle başlayan veya Country&quot;Norveç&quot; olan tüm alanları seçer:</p><pre>SELECT * FROM Customers<br>WHERE City = &#39;Berlin&#39; OR CustomerName LIKE &#39;G%&#39; OR Country = &#39;Norway&#39;;</pre><h4>SQL NOT Operator</h4><p>NOT Operatörü</p><p>Operatör NOT, negatif sonuç olarak da adlandırılan zıt sonucu vermek için diğer operatörlerle birlikte kullanılır.</p><p>Aşağıdaki select beyanında İspanya’dan OLMAYAN tüm müşterileri iade etmek istiyoruz:</p><pre>SELECT * FROM Customers<br>WHERE NOT Country = &#39;Spain&#39;;</pre><p>Yukarıdaki örnekte operatör, NOToperatörle birlikte kullanılır =ancak diğer karşılaştırma ve/veya mantıksal operatörlerle birlikte de kullanılabilir. Aşağıdaki örneklere bakın.</p><p>Syntax</p><pre>SELECT column1, column2, ...<br>FROM table_name<br>WHERE NOT condition;</pre><p>NOT LIKE</p><p>‘A’ harfiyle başlamayan müşterileri seçin:</p><pre>SELECT * FROM Customers<br>WHERE CustomerName NOT LIKE &#39;A%&#39;;</pre><p>NOT BETWEEN</p><p>Müşteri kimliği 10 ila 60 arasında olmayan müşterileri seçin:</p><pre>SELECT * FROM Customers<br>WHERE CustomerID NOT BETWEEN 10 AND 60;</pre><p>NOT IN</p><p>Select customers that are not from Paris or London:</p><pre>SELECT * FROM Customers<br>WHERE City NOT IN (&#39;Paris&#39;, &#39;London&#39;);</pre><p>NOT Greater Than</p><p>Müşteri Kimliği 50&#39;den büyük olmayan müşterileri seçin:</p><pre>SELECT * FROM Customers<br>WHERE NOT CustomerID &gt; 50;</pre><h4>SQL INSERT INTO Deyimi</h4><p>SQL INSERT INTO Deyimi</p><p>İfade INSERT INTObir tabloya yeni kayıt eklemek için kullanılır.</p><p>INSERT INTO Syntax</p><p>INSERT INTO Açıklamayı iki şekilde yazmak mümkündür :</p><ol><li>Hem sütun adlarını hem de eklenecek değerleri belirtin:</li></ol><pre>INSERT INTO table_name (column1, column2, column3, ...)<br>VALUES (value1, value2, value3, ...);</pre><p>2. Tablonun tüm sütunları için değer ekliyorsanız, SQL sorgusunda sütun adlarını belirtmenize gerek yoktur. Ancak değerlerin sırasının tablodaki sütunlarla aynı sırada olduğundan emin olun. Burada INSERT INTOsözdizimi aşağıdaki gibi olacaktır:</p><pre>INSERT INTO table_name<br>VALUES (value1, value2, value3, ...);</pre><p>Aşağıdaki SQL ifadesi “Müşteriler” tablosuna yeni bir kayıt ekler:</p><pre>INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)<br>VALUES (&#39;Cardinal&#39;, &#39;Tom B. Erichsen&#39;, &#39;Skagen 21&#39;, &#39;Stavanger&#39;, &#39;4006&#39;, &#39;Norway&#39;);</pre><p><strong>MüşteriKimliği alanına herhangi bir sayı girmediğimizi fark ettiniz mi?</strong><br>MüşteriKimliği sütunu <a href="https://www.w3schools.com/sql/sql_autoincrement.asp">otomatik olarak artan</a> bir alandır ve tabloya yeni bir kayıt eklendiğinde otomatik olarak oluşturulur.</p><p>Yalnızca Belirtilen Sütunlara Veri Ekle</p><p>Yalnızca belirli sütunlara veri eklemek de mümkündür.</p><p>Aşağıdaki SQL ifadesi yeni bir kayıt ekleyecektir, ancak yalnızca “MüşteriAdı”, “Şehir” ve “Ülke” sütunlarına veri ekleyecektir (MüşteriKimliği otomatik olarak güncellenecektir):</p><pre>INSERT INTO Customers (CustomerName, City, Country)<br>VALUES (&#39;Cardinal&#39;, &#39;Stavanger&#39;, &#39;Norway&#39;);</pre><p>Birden Çok Satır Ekle</p><p>Bir ifadeye birden fazla satır eklemek de mümkündür.</p><p>Birden çok veri satırı eklemek için aynı ifadeyi kullanırız INSERT INTOancak birden çok değerle:</p><pre>INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)<br>VALUES<br>(&#39;Cardinal&#39;, &#39;Tom B. Erichsen&#39;, &#39;Skagen 21&#39;, &#39;Stavanger&#39;, &#39;4006&#39;, &#39;Norway&#39;),<br>(&#39;Greasy Burger&#39;, &#39;Per Olsen&#39;, &#39;Gateveien 15&#39;, &#39;Sandnes&#39;, &#39;4306&#39;, &#39;Norway&#39;),<br>(&#39;Tasty Tee&#39;, &#39;Finn Egan&#39;, &#39;Streetroad 19B&#39;, &#39;Liverpool&#39;, &#39;L1 0AA&#39;, &#39;UK&#39;);</pre><p>Her değer kümesini virgülle ayırdığınızdan emin olun ,.</p><h4>SQL NULL Values</h4><p>NULL Değeri nedir?</p><p>NULL değeri olan bir alan, değeri olmayan bir alandır.</p><p>Tablodaki bir alan isteğe bağlı ise, bu alana değer eklemeden yeni bir kayıt eklemek veya bir kaydı güncellemek mümkündür. Daha sonra alan NULL değeriyle kaydedilecektir.</p><p><strong>Not:</strong> NULL değeri, sıfır değerinden veya boşluk içeren alandan farklıdır. NULL değeri olan bir alan, kayıt oluşturma sırasında boş bırakılan alandır!</p><p>NULL Değerleri Nasıl Test Edilir?</p><p>=, &lt; veya &lt;&gt; gibi karşılaştırma işleçleriyle NULL değerleri test etmek mümkün değildir.</p><p>IS NULLBunun yerine ve operatörlerini kullanmamız gerekecek IS NOT NULL.</p><p>IS NULL Syntax</p><pre>SELECT column_names<br>FROM table_name<br>WHERE column_name IS NULL;</pre><p>IS NOT NULL Syntax</p><pre>SELECT column_names<br>FROM table_name<br>WHERE column_name IS NOT NULL;</pre><p>IS NULL Operatörü</p><p>Operatör IS NULLboş değerleri (NULL değerleri) test etmek için kullanılır.</p><p>Aşağıdaki SQL, “Adres” alanında NULL değeri olan tüm müşterileri listeler:</p><pre>SELECT CustomerName, ContactName, Address<br>FROM Customers<br>WHERE Address IS NULL;</pre><p><strong>İpucu:</strong> NULL değerlerini aramak için her zaman IS NULL’u kullanın.</p><p>IS NOT NULL Operatörü</p><p>Operatör IS NOT NULLboş olmayan değerleri (BOŞ DEĞİL değerler) test etmek için kullanılır.</p><p>Aşağıdaki SQL, “Adres” alanında bir değere sahip tüm müşterileri listeler:</p><pre>SELECT CustomerName, ContactName, Address<br>FROM Customers<br>WHERE Address IS NOT NULL;</pre><h4>SQL UPDATE Statement</h4><p>SQL UPDATE İfadesi</p><p>İfade UPDATE, bir tablodaki mevcut kayıtları değiştirmek için kullanılır.</p><p>UPDATE Syntax</p><pre>UPDATE table_name<br>SET column1 = value1, column2 = value2, ...<br>WHERE condition;</pre><p><strong>Not:</strong> Tablodaki kayıtları güncellerken dikkatli olun! WHEREAçıklamadaki maddeye dikkat edin UPDATE. Madde, WHEREhangi kayıtların güncellenmesi gerektiğini belirtir. Maddeyi atlarsanız WHEREtablodaki tüm kayıtlar güncellenecektir!</p><p>GÜNCELLEME Tablosu</p><p>Aşağıdaki SQL ifadesi, ilk müşteriyi (MüşteriKimliği = 1) yeni bir ilgili kişi <em>ve</em> yeni bir şehirle günceller.</p><pre>UPDATE Customers<br>SET ContactName = &#39;Alfred Schmidt&#39;, City= &#39;Frankfurt&#39;<br>WHERE CustomerID = 1;</pre><p>Birden Çok Kaydı GÜNCELLEME</p><p>WHEREKaç kaydın güncelleneceğini belirleyen maddedir .</p><p>Aşağıdaki SQL ifadesi, ülkenin “Meksika” olduğu tüm kayıtlar için KişiAdı’nı “Juan” olarak güncelleyecektir:</p><pre>UPDATE Customers<br>SET ContactName=&#39;Juan&#39;<br>WHERE Country=&#39;Mexico&#39;;</pre><p>Kayıtları güncellerken dikkatli olun. Maddeyi atlarsanız WHERETÜM kayıtlar güncellenecektir!</p><pre>UPDATE Customers<br>SET ContactName=&#39;Juan&#39;;</pre><h4>SQL DELETE İfadesi</h4><p>SQL DELETE İfadesi</p><p>Bu DELETEifade bir tablodaki mevcut kayıtları silmek için kullanılır.</p><p>DELETE Syntax</p><pre>DELETE FROM table_name WHERE condition;</pre><p><strong>Not:</strong> Tablodaki kayıtları silerken dikkatli olun! WHEREAçıklamadaki maddeye dikkat edin DELETE. Madde WHEREhangi kayıt(lar)ın silinmesi gerektiğini belirtir. Maddeyi atlarsanız WHEREtablodaki tüm kayıtlar silinecektir!</p><p>SQL SİLME Örneği</p><p>Aşağıdaki SQL ifadesi “Alfreds Futterkiste” müşterisini “Müşteriler” tablosundan siler:</p><pre>DELETE FROM Customers WHERE CustomerName=&#39;Alfreds Futterkiste&#39;;</pre><p>Tüm Kayıtları Sil</p><p>Bir tablodaki tüm satırları, tabloyu silmeden silmek mümkündür. Bu, tablo yapısının, niteliklerinin ve dizinlerinin bozulmadan kalacağı anlamına gelir:</p><pre>DELETE FROM table_name;</pre><p>Aşağıdaki SQL ifadesi, “Müşteriler” tablosundaki tüm satırları, tabloyu silmeden siler:</p><pre>DELETE FROM Customers;</pre><p>Tablo Silme</p><p>Tabloyu tamamen silmek için şu DROP TABLEifadeyi kullanın:</p><pre>DROP TABLE Customers;</pre><h4>SQL TOP, LIMIT, FETCH FIRST veya ROWNUM Maddesi</h4><h4>SQL SELECT TOP Cümlesi</h4><p>Madde SELECT TOPdöndürülecek kayıt sayısını belirtmek için kullanılır.</p><p>Bu SELECT TOPmadde binlerce kayıt içeren büyük tablolarda kullanışlıdır. Çok sayıda kaydın döndürülmesi performansı etkileyebilir.</p><p><strong>Not:</strong> Tüm veritabanı sistemleri bu maddeyi desteklemez SELECT TOP. LIMITMySQL , sınırlı sayıda kayıt seçmek için maddeyi desteklerken , Oracle ve . FETCH FIRST <em>n</em> ROWS ONLY ROWNUM</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*y2hcoE1LqRGHdPfj3Om4aw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*PN7EaKXtl3KmJckL7gPFnw.png" /></figure><p>SQL TOP, LIMIT ve FETCH FIRST Örnekleri</p><p>Aşağıdaki SQL ifadesi “Müşteriler” tablosundan ilk üç kaydı seçer (SQL Server/MS Access için):</p><pre>SELECT TOP 3 * FROM Customers;</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/674/1*fPBVXLUfIFClF4MqGMzLcg.png" /></figure><p>SQL TOP PERCENT Örnek</p><p>Aşağıdaki SQL ifadesi “Müşteriler” tablosundaki kayıtların ilk %50&#39;sini seçer (SQL Server/MS Access için):</p><pre>SELECT TOP 50 PERCENT * FROM Customers;</pre><p>ADD a WHERE CLAUSE</p><p>Aşağıdaki SQL ifadesi, ülkenin “Almanya” olduğu “Müşteriler” tablosundan ilk üç kaydı seçer (SQL Server/MS Access için):</p><pre>SELECT TOP 3 * FROM Customers<br>WHERE Country=&#39;Germany&#39;;</pre><h4>SQL MIN() ve MAX() İşlevleri</h4><p>SQL MIN() ve MAX() İşlevleri</p><p>Fonksiyon MIN()seçilen sütunun en küçük değerini döndürür.</p><p>Fonksiyon MAX()seçilen sütunun en büyük değerini döndürür.</p><p>MIN Örneği</p><p>En düşük fiyatı bulun:</p><pre>SELECT MIN(Price)<br>FROM Products;<br>-- EN YÜKSEK --<br>SELECT MAX(Price)<br>FROM Products;</pre><p>Syntax</p><pre>SELECT MIN(column_name)<br>FROM table_name<br>WHERE condition;<br>-----------------<br>SELECT MAX(column_name)<br>FROM table_name<br>WHERE condition;</pre><p>Set Column Name (Alias)</p><p>MIN()or öğesini kullandığınızda , döndürülen sütun varsayılan olarak veya olarak MAX()adlandırılacaktır . Sütuna yeni bir ad vermek için anahtar kelimeyi kullanın:MIN(<em>field</em>) MAX(<em>field</em>)AS</p><pre>SELECT MIN(Price) AS SmallestPrice<br>FROM Products;</pre><h4>SQL COUNT() İşlevi</h4><p>SQL COUNT() İşlevi</p><p>İşlev COUNT(), belirli bir ölçütle eşleşen satır sayısını döndürür.</p><p>Tablodaki toplam ürün sayısını bulun Products :</p><pre>SELECT COUNT(*)<br>FROM Products;</pre><p>Syntax</p><pre>SELECT COUNT(column_name)<br>FROM table_name<br>WHERE condition;</pre><p>Nerede Cümlesi Ekle</p><p>WHEREKoşulları belirtmek için bir madde ekleyebilirsiniz :</p><p>Örnek</p><p>Price20&#39;den büyük olan ürün sayısını bulun :</p><pre>SELECT COUNT(ProductID)<br>FROM Products<br>WHERE Price &gt; 20;</pre><p>Sütun Belirtin</p><p>Yıldız işareti yerine bir sütun adı belirtebilirsiniz (*).</p><p>Bunun yerine bir sütun belirtirseniz (*)NULL değerler sayılmaz.</p><p>Örnek</p><p>null olmadığı ürün sayısını bulun ProductName:</p><pre>SELECT COUNT(ProductName)<br>FROM Products;</pre><p>Yinelenenleri Yoksay</p><p>DISTINCTİşlevdeki anahtar sözcüğü kullanarak kopyaları yok sayabilirsiniz COUNT.</p><p>Belirtilmişse DISTINCT, belirtilen sütun için aynı değere sahip satırlar bir olarak sayılır.</p><h3>Örnek</h3><p>Tabloda kaç <em>farklı</em>Products fiyat var :</p><pre>SELECT COUNT(DISTINCT Price)<br>FROM Products;</pre><h3>SQL SUM() Function</h3><p>SQL SUM() İşlevi</p><p>İşlev SUM(), sayısal bir sütunun toplam toplamını döndürür.</p><p>Örnek</p><p>QuantityTablodaki tüm alanların toplamını döndürün OrderDetails:</p><pre>SELECT SUM(Quantity)<br>FROM OrderDetails;</pre><p>Syntax</p><pre>SELECT SUM(column_name)<br>FROM table_name<br>WHERE condition;</pre><p>Add a Where Clause</p><p>Örnek</p><p>11 ile ürün için yapılan siparişlerin sayısını döndürün ProductID:</p><pre>SELECT SUM(Quantity)<br>FROM OrderDetails<br>WHERE ProdictId = 11;</pre><p>SUM() Bir İfadeyle</p><p>Fonksiyonun içindeki parametre SUM()de bir ifade olabilir.</p><p>Sütundaki her bir ürünün maliyetinin 10 dolar olduğunu varsayarsak OrderDetailsher miktarı 10 ile çarparak toplam kazancı dolar cinsinden bulabiliriz:</p><p>Örnek</p><p>Parantez içinde bir ifade kullanın SUM():</p><pre>SELECT SUM(Quantity * 10)<br>FROM OrderDetails;</pre><p>Ayrıca gerçek tutarı bulmak için 10 dolar olduğunu varsaymak yerine OrderDetailstabloyu tabloyla birleştirebiliriz :Products</p><p>Örnek</p><p>OrderDetailsile katılın Productsve SUM()toplam tutarı bulmak için kullanın:</p><pre>SELECT SUM(Price * Quantity)<br>FROM OrderDetails<br>LEFT JOIN Products ON OrderDetails.ProductID = Products.ProductID;</pre><h4>SQL AVG() İşlevi</h4><h3>SQL AVG() İşlevi</h3><p>İşlev AVG(), sayısal bir sütunun ortalama değerini döndürür.</p><h3>Örnek</h3><p>Tüm ürünlerin ortalama fiyatını bulun:</p><pre>SELECT AVG(Price)<br>FROM Products;</pre><p><strong>Not:</strong> NULL değerler dikkate alınmaz.</p><p>Syntax</p><pre>SELECT AVG(column_name)<br>FROM table_name<br>WHERE condition;</pre><p>Add a Where Clause</p><p>WHEREKoşulları belirtmek için bir madde ekleyebilirsiniz :</p><p>Örnek</p><p>Kategori 1&#39;deki ürünlerin ortalama fiyatını döndürün:</p><pre>SELECT AVG(Price)<br>FROM Products<br>WHERE CategoryID = 1;</pre><p>Ortalamanın Üstünde</p><p>AVG()Ortalamadan daha yüksek fiyata sahip tüm kayıtları listelemek için işlevi bir alt sorguda kullanabiliriz :</p><p>Örnek</p><p>Ortalama fiyattan daha yüksek fiyata sahip tüm ürünleri iade edin:</p><pre>SELECT * FROM Products<br>WHERE price &gt; (SELECT AVG(price) FROM Products);</pre><h4>SQL LIKE Operator</h4><p>Operatör , bir sütunda belirli bir modeli aramak için LIKEbir cümlede kullanılır . WHERE</p><p>Operatörle birlikte sıklıkla kullanılan iki joker karakter vardır LIKE:</p><ul><li>Yüzde işareti %sıfır, bir veya birden fazla karakteri temsil eder</li><li>Alt çizgi işareti _tek bir karakteri temsil eder</li></ul><p><a href="https://www.w3schools.com/sql/sql_wildcards.asp">Bir sonraki bölümde joker karakterler</a> hakkında daha fazla bilgi edineceksiniz .</p><p>Örnek</p><p>“a” harfiyle başlayan tüm müşterileri seçin:</p><pre>SELECT * FROM Customers<br>WHERE CustomerName LIKE &#39;a%&#39;;</pre><p>Syntax</p><pre>SELECT column1, column2, ...<br>FROM table_name<br>WHERE columnN LIKE pattern;</pre><p>_ Joker Karakter</p><p>Joker _karakter tek bir karakteri temsil eder.</p><p>Herhangi bir karakter veya sayı olabilir, ancak her biri _bir ve yalnızca bir karakteri temsil eder.</p><p>Örnek</p><p>‘L’ ile başlayan, ardından bir joker karakter, ardından ‘nd’ ve ardından iki joker karakterle başlayan bir şehirdeki tüm müşterileri döndürür:</p><pre>SELECT * FROM Customers<br>WHERE city LIKE &#39;L_nd__&#39;;</pre><h3>% Joker Karakter</h3><p>Joker %karakter herhangi bir sayıda karakteri, sıfır karakteri bile temsil eder.</p><p>Örnek</p><p>‘L’ harfini <em>içeren</em> bir şehirdeki tüm müşterileri döndürün :</p><pre>SELECT * FROM Customers<br>WHERE city LIKE &#39;%L%&#39;;</pre><p><strong>İpucu:</strong> AND Ayrıca veya operatörlerini kullanarak istediğiniz sayıda koşulu birleştirebilirsiniz OR.</p><p>Örnek</p><p>‘a’ ile başlayan veya ‘b’ ile başlayan tüm müşterileri döndürün:</p><pre>SELECT * FROM Customers<br>WHERE CustomerName LIKE &#39;a%&#39; OR CustomerName LIKE &#39;b%&#39;;</pre><p><strong>İpucu:</strong> “Şununla başlar” ve “şununla biter” ifadelerini de birleştirebilirsiniz:</p><pre>SELECT * FROM Customers<br>WHERE CustomerName LIKE &#39;b%s&#39;;</pre><p>İçerir</p><p>Belirli bir harf veya ifadeyi içeren kayıtları döndürmek için %harfin veya ifadenin hem önüne hem de arkasına ekleyin.</p><p>‘veya’ ifadesini içeren tüm müşterileri döndür;</p><pre>SELECT * FROM Customers<br>WHERE CustomerName LIKE &#39;%or%&#39;;</pre><p>_ Joker Karakterini Kullanma</p><p>Joker _karakter tek bir karakteri temsil eder.</p><p>Herhangi bir karakter veya sayı olabilir, ancak her biri _bir ve yalnızca bir karakteri temsil eder.</p><p>Örnek</p><p>CityHerhangi bir karakterle başlayan ve ardından &quot;ondon&quot; gelen tüm müşterileri döndürür :</p><pre>SELECT * FROM Customers<br>WHERE City LIKE &#39;_ondon&#39;;</pre><p>[] Joker Karakterini Kullanma</p><p>Joker karakter , içindeki karakterlerden <em>herhangi</em> birinin eşleşmesi []durumunda bir sonuç döndürür .</p><p>Örnek</p><p>“b”, “s” veya “p” ile başlayan tüm müşterileri döndürün:</p><pre>SELECT * FROM Customers<br>WHERE CustomerName LIKE &#39;[bsp]%&#39;;</pre><p>- Joker Karakterini Kullanma</p><p>Joker karakter , joker karakterin -içinde bir dizi karakter belirtmenize olanak tanır [].</p><p>Örnek</p><p>“a”, “b”, “c”, “d”, “e” veya “f” ile başlayan tüm müşterileri döndürün:</p><pre>SELECT * FROM Customers<br>WHERE CustomerName LIKE &#39;[a-f]%&#39;;</pre><h4>SQL IN Operatörü</h4><h3>SQL IN Operatörü</h3><p>Operatör IN, bir cümlede birden fazla değer belirtmenize olanak tanır WHERE.</p><p>Operatör INbirden fazla koşulun kısaltmasıdır OR.</p><p>Örnek</p><p>‘Almanya’, ‘Fransa’ veya ‘İngiltere’den tüm müşterileri döndürün</p><pre>SELECT * FROM Customers<br>WHERE Country IN (&#39;Germany&#39;, &#39;France&#39;, &#39;UK&#39;);</pre><p>Syntax</p><pre>SELECT column_name(s)<br>FROM table_name<br>WHERE column_name IN (value1, value2, ...);</pre><p>NOT IN</p><p>By using the NOT keyword in front of the IN operator, you return all records that are NOT any of the values in the list.</p><p>Example</p><p>Return all customers that are NOT from ‘Germany’, ‘France’, ot ‘UK’:</p><pre>SELECT * FROM Customers<br>WHERE Country NOT IN (&#39;Germany&#39;, &#39;France&#39;, &#39;UK&#39;);</pre><p>IN (SELECT)</p><p>You can also use IN with a subquery in the WHERE clause.</p><p>With a subquery you can return all records from the main query that are present in the result of the subquery.</p><p>Example</p><p>Return all customers that have an order in the <a href="https://www.w3schools.com/sql/trysql.asp?filename=trysql_orders"><strong>Orders</strong></a> table;</p><pre>SELECT * FROM Customers<br>WHERE CustomerID IN (SELECT CustomerID FROM Orders);</pre><p>NOT IN (SELECT)</p><p>The result in the example above returned 74 records, that means that there are 17 customers that haven’t placed any orders.</p><p>Let us check if that is correct, by using the NOT IN operator.</p><p>Example</p><p>Return all customers that have NOT placed any orders in the <a href="https://www.w3schools.com/sql/trysql.asp?filename=trysql_orders"><strong>Orders</strong></a> table:</p><pre>SELECT * FROM Customers<br>WHERE CustomerID NOT IN (SELECT CustomerID FROM Orders);</pre><h4>SQL BETWEEN Operator</h4><p>SQL BETWEEN Operatörü</p><p>Operatör BETWEENbelirli bir aralıktaki değerleri seçer. Değerler sayı, metin veya tarih olabilir.</p><p>Operatör BETWEENkapsayıcıdır: başlangıç ​​ve bitiş değerleri dahildir.</p><p>BETWEEN Syntax</p><pre>SELECT column_name(s)<br>FROM table_name<br>WHERE column_name BETWEEN value1 AND value2;</pre><p>BETWEEN Example</p><p>The following SQL statement selects all products with a price between 10 and 20:</p><p>Example</p><pre>SELECT * FROM Products<br>WHERE Price BETWEEN 10 AND 20;</pre><p>BETWEEN with IN Example</p><p>The following SQL statement selects all products with a price between 10 and 20. In addition; do not show products with a CategoryID of 1,2, or 3:</p><p>Example</p><pre>SELECT * FROM Products<br>WHERE Price BETWEEN 10 AND 20<br>AND CategoryID NOT IN (1,2,3);</pre><p>BETWEEN Metin Değerleri Örneği</p><p>Aşağıdaki SQL ifadesi, Carnarvon Tigers ile Mozzarella di Giovanni arasında ÜrünAdı olan tüm ürünleri seçer:</p><p>Örnek</p><pre>SELECT * FROM Products<br>WHERE ProductName BETWEEN &#39;Carnarvon Tigers&#39; AND &#39;Mozzarella di Giovanni&#39;<br>ORDER BY ProductName;</pre><p>Metin Değerleri Arasında Değil Örnek</p><p>Aşağıdaki SQL ifadesi, Carnarvon Tigers ve Mozzarella di Giovanni arasında olmayan ÜrünAdı’na sahip tüm ürünleri seçer:</p><p>Örnek</p><pre>SELECT * FROM Products<br>WHERE ProductName NOT BETWEEN &#39;Carnarvon Tigers&#39; AND &#39;Mozzarella di Giovanni&#39;<br>ORDER BY ProductName;</pre><p>BETWEEN Dates Example</p><p>The following SQL statement selects all orders with an OrderDate between ‘01-July-1996’ and ‘31-July-1996’:</p><p>Example</p><pre>SELECT * FROM Orders<br>WHERE OrderDate BETWEEN #07/01/1996# AND #07/31/1996#;</pre><p>OR:</p><p>Example</p><pre>SELECT * FROM Orders<br>WHERE OrderDate BETWEEN &#39;1996–07–01&#39; AND &#39;1996–07–31&#39;;</pre><h4>SQL Takma Adları</h4><p>SQL Takma Adları</p><p>SQL takma adları bir tabloya veya tablodaki bir sütuna geçici bir ad vermek için kullanılır. Takma adlar genellikle sütun adlarını daha okunaklı hale getirmek için kullanılır. Bir takma ad yalnızca söz konusu sorgu süresince mevcuttur. Anahtar kelimeyle bir takma ad oluşturulur AS.</p><p>Alias Column Syntax</p><pre>SELECT column_name AS alias_name<br>FROM table_name;</pre><p>Alias Table Syntax</p><pre>SELECT column_name(s)<br>FROM table_name AS alias_name;</pre><p>Aşağıdaki SQL ifadesi, biri MüşteriAdı sütunu ve diğeri KişiAdı sütunu için olmak üzere iki takma ad oluşturur. <strong>Not:</strong> Takma ad boşluk içeriyorsa çift tırnak işareti veya köşeli parantez gerekir:</p><pre>SELECT CustomerName AS Customer, ContactName AS [Contact Person]<br>FROM Customers;</pre><p>Aşağıdaki SQL ifadesi, dört sütunu (Adres, Posta Kodu, Şehir ve Ülke) birleştiren “Adres” adlı bir takma ad oluşturur:</p><p>Örnek</p><pre>SELECT CustomerName, Address + &#39;, &#39; + PostalCode + &#39; &#39; + City + &#39;, &#39; + Country AS Address<br>FROM Customers;</pre><p>Tablolar İçin Takma Ad Örneği</p><p>Aşağıdaki SQL ifadesi, CustomerID=4 (Around the Horn) değerine sahip müşteriden gelen tüm siparişleri seçer. “Müşteriler” ve “Siparişler” tablolarını kullanıyoruz ve onlara sırasıyla “c” ve “o” tablo takma adlarını veriyoruz (Burada SQL’i kısaltmak için takma adlar kullanıyoruz):</p><p>Örnek</p><pre>SELECT o.OrderID, o.OrderDate, c.CustomerName<br>FROM Customers AS c, Orders AS o<br>WHERE c.CustomerName=&#39;Around the Horn&#39; AND c.CustomerID=o.CustomerID;</pre><p>Takma adlar şu durumlarda yararlı olabilir:</p><ul><li>Bir sorguda birden fazla tablo var</li><li>Sorguda işlevler kullanılır</li><li>Sütun adları büyük veya pek okunamıyor</li><li>İki veya daha fazla sütun bir araya getirilir</li></ul><h4>SQL Joins</h4><p>SQL KATILIN</p><p>Bir JOINcümle, iki veya daha fazla tablodaki satırları, aralarındaki ilgili sütuna göre birleştirmek için kullanılır.</p><p>“Siparişler” tablosundan bir seçime bakalım:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zDkuVykNW29jcwYM5vZZAg.png" /></figure><p>“Siparişler” tablosundaki “MüşteriKimliği” sütununun, “Müşteriler” tablosundaki “MüşteriKimliği” sütununa atıfta bulunduğuna dikkat edin. Yukarıdaki iki tablo arasındaki ilişki “MüşteriKimliği” sütunudur.</p><p>INNER JOINDaha sonra, her iki tabloda da eşleşen değerlere sahip kayıtları seçen aşağıdaki SQL ifadesini (bir içeren) oluşturabiliriz :</p><pre>SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate<br>FROM Orders<br>INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;</pre><p>Farklı SQL JOIN Türleri</p><p>SQL’deki farklı JOIN türleri şunlardır:</p><ul><li>(INNER) JOIN: Her iki tabloda da eşleşen değerlere sahip kayıtları döndürür</li><li>LEFT (OUTER) JOIN: Soldaki tablodaki tüm kayıtları, sağdaki tablodaki eşleşen kayıtları döndürür</li><li>RIGHT (OUTER) JOIN: Sağdaki tablodaki tüm kayıtları, soldaki tablodaki eşleşen kayıtları döndürür</li><li>FULL (OUTER) JOIN: Sol veya sağ tabloda eşleşme olduğunda tüm kayıtları döndürür</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/200/0*rnZVyhUvyS3fEDOr.gif" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/200/0*TxzTlIkEy4KFKkd4.gif" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/200/0*iegEg25DTBigdBKX.gif" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/200/0*6_-1Kr6m3dDLcM7A.gif" /></figure><h4>SQL INNER JOIN Anahtar Kelimesi</h4><p>Anahtar kelime INNER JOIN, her iki tabloda da eşleşen değerlere sahip kayıtları seçer.</p><p>INNER JOIN SYNTAX</p><pre>SELECT column_name(s)<br>FROM table1<br>INNER JOIN table2<br>ON table1.column_name = table2.column_name;</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/200/0*7XUqZuaBWAHPvvjO.gif" /></figure><p>SQL INNER JOIN Örneği</p><p>Aşağıdaki SQL ifadesi, müşteri bilgileri içeren tüm siparişleri seçer:</p><p>Örnek</p><pre>SELECT Orders.OrderID, Customers.CustomerName<br>FROM Orders<br>INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;</pre><p><strong>Not:</strong> Anahtar INNER JOINkelime, sütunlar arasında eşleşme olduğu sürece her iki tablodaki tüm satırları seçer. &quot;Siparişler&quot; tablosunda &quot;Müşteriler&quot;de eşleşmeyen kayıtlar varsa bu siparişler gösterilmeyecektir!</p><p>Üç Tabloya KATILIN</p><p>Aşağıdaki SQL ifadesi, müşteri ve gönderici bilgilerini içeren tüm siparişleri seçer:</p><p>Örnek</p><pre>SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName<br>FROM ((Orders<br>INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)<br>INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);</pre><h4>SQL GROUP BY İfadesi</h4><p>SQL GROUP BY İfadesi</p><p>İfade GROUP BY, &quot;her ülkedeki müşteri sayısını bulun&quot; gibi, aynı değerlere sahip satırları özet satırları halinde gruplandırır.</p><p>Bu ifade genellikle sonuç kümesini bir veya daha fazla sütuna göre gruplandırmak için toplama işlevleriyle ( , , , , ) GROUP BYbirlikte kullanılır .COUNT()MAX()MIN()SUM()AVG()</p><p>GROUP BY Söz Dizimi</p><pre>SELECT column_name(s)<br>FROM table_name<br>WHERE condition<br>GROUP BY column_name(s)<br>ORDER BY column_name(s);</pre><p>Örneklerle SQL GRUBU</p><p>Aşağıdaki SQL deyimi her ülkedeki müşteri sayısını listeler:</p><p>Örnek</p><pre>SELECT COUNT(CustomerID), Country<br>FROM Customers<br>GROUP BY Country;</pre><p>Aşağıdaki SQL ifadesi, her ülkedeki müşteri sayısını yüksekten düşüğe doğru sıralayarak listeler:</p><p>Örnek</p><pre>SELECT COUNT(CustomerID), Country<br>FROM Customers<br>GROUP BY Country<br>ORDER BY COUNT(CustomerID) DESC;</pre><h4>SQL HAVING Cümlesi</h4><p>SQL HAVING Cümlesi</p><p>Anahtar kelime toplama işlevleriyle kullanılamadığı için yan HAVINGtümce SQL&#39;e eklendi .WHERE</p><p>HAVING Syntax</p><pre>SELECT column_name(s)<br>FROM table_name<br>WHERE condition<br>GROUP BY column_name(s)<br>HAVING condition<br>ORDER BY column_name(s);</pre><p>SQL Örnekleri Olan</p><p>Aşağıdaki SQL deyimi her ülkedeki müşteri sayısını listeler. Yalnızca 5&#39;ten fazla müşterisi olan ülkeleri dahil edin:</p><pre>SELECT COUNT(CustomerID), Country<br>FROM Customers<br>GROUP BY Country<br>HAVING COUNT(CustomerID) &gt; 5;</pre><p>Aşağıdaki SQL ifadesi, her ülkedeki müşteri sayısını yüksekten düşüğe doğru sıralayarak listeler (Yalnızca 5&#39;ten fazla müşterisi olan ülkeleri içerir):</p><pre>SELECT COUNT(CustomerID), Country<br>FROM Customers<br>GROUP BY Country<br>HAVING COUNT(CustomerID) &gt; 5<br>ORDER BY COUNT(CustomerID) DESC;</pre><h4>SQL EXISTS Operatörü</h4><p>SQL EXISTS Operatörü</p><p>Operatör EXISTS, bir alt sorgudaki herhangi bir kaydın varlığını test etmek için kullanılır.</p><p>EXISTSAlt sorgu bir veya daha fazla kayıt döndürürse operatör TRUE değerini döndürür .</p><p>EXISTS Syntax</p><pre>SELECT column_name(s)<br>FROM table_name<br>WHERE EXISTS<br>(SELECT column_name FROM table_name WHERE condition);</pre><p>SQL EXISTS Örnekleri</p><p>Aşağıdaki SQL ifadesi TRUE değerini döndürür ve ürün fiyatı 20&#39;den düşük olan tedarikçileri listeler:</p><pre>SELECT SupplierName<br>FROM Suppliers<br>WHERE EXISTS (SELECT ProductName FROM Products WHERE Products.SupplierID = Suppliers.supplierID AND Price &lt; 20);</pre><h4>SQL ANY and ALL Operatörleri</h4><p>SQL ANY ve ALL Operatörleri</p><p>Ve operatörleri, tek bir sütun değeri ANYile ALLbir dizi başka değer arasında karşılaştırma yapmanıza olanak tanır.</p><p>SQL ANY Operatör</p><p>Operatör ANY:</p><ul><li>sonuç olarak bir boole değeri döndürür</li><li>Alt sorgu değerlerinden HERHANGİ BİRİ koşulu karşılıyorsa TRUE değerini döndürür</li></ul><p>ANYişlemin aralıktaki değerlerden herhangi biri için doğru olması durumunda koşulun doğru olacağı anlamına gelir.</p><p>ANY Syntax</p><pre>SELECT column_name(s)<br>FROM table_name<br>WHERE column_name operator ANY<br> (SELECT column_name<br> FROM table_name<br> WHERE condition);</pre><p><strong>Not:</strong> Operatör standart bir karşılaştırma operatörü olmalıdır (=, &lt;&gt;, !=, &gt;, &gt;=, &lt; veya &lt;=) <em>.</em></p><p>SQL ALL Operatörü</p><p>Operatör ALL:</p><ul><li>sonuç olarak bir boole değeri döndürür</li><li>Alt sorgu değerlerinin TÜMÜ koşulu karşılıyorsa TRUE değerini döndürür</li><li>SELECT, WHEREve HAVINGifadeleriyle birlikte kullanılır</li></ul><p>ALLkoşulun yalnızca işlemin aralıktaki tüm değerler için doğru olması durumunda doğru olacağı anlamına gelir.</p><p>ALL Syntax With SELECT</p><pre>SELECT ALL column_name(s)<br>FROM table_name<br>WHERE condition;</pre><p>WHERE veya HAVING ile ALL Sözdizimi</p><pre>SELECT column_name(s)<br>FROM table_name<br>WHERE column_name operator ALL<br> (SELECT column_name<br> FROM table_name<br> WHERE condition);</pre><p><strong>Not:</strong> Operatör standart bir karşılaştırma operatörü olmalıdır (=, &lt;&gt;, !=, &gt;, &gt;=, &lt; veya &lt;=) <em>.</em></p><p>SQL ANY Örnek</p><p>Aşağıdaki SQL deyimi, OrderDetails tablosunda Quantity’nin 10&#39;a eşit olduğu HERHANGİ bir kayıt bulması durumunda ProductName’i listeler (Quantity sütununda bazı değerler 10 olduğundan bu, TRUE değerini döndürür):</p><p>Örnek</p><pre>SELECT ProductName<br>FROM Products<br>WHERE ProductID = ANY<br> (SELECT ProductID<br> FROM OrderDetails<br> WHERE Quantity = 10);</pre><p>Aşağıdaki SQL deyimi, OrderDetails tablosunda Quantity’nin 99&#39;dan büyük olduğu HERHANGİ bir kayıt bulursa ÜrünAdı’nı listeler (Quantity sütununda bazı değerler 99&#39;dan büyük olduğundan bu TRUE değerini döndürür):</p><p>Örnek</p><pre>SELECT ProductName<br>FROM Products<br>WHERE ProductID = ANY<br> (SELECT ProductID<br> FROM OrderDetails<br> WHERE Quantity &gt; 99);</pre><p>Aşağıdaki SQL deyimi, OrderDetails tablosunda Quantity değerinin 1000&#39;den büyük olduğu HERHANGİ bir kayıt bulursa ÜrünAdı’nı listeler (Quantity sütununda 1000&#39;den büyük değer bulunmadığından bu, FALSE değerini döndürür):</p><p>Örnek</p><pre>SELECT ProductName<br>FROM Products<br>WHERE ProductID = ANY<br> (SELECT ProductID<br> FROM OrderDetails<br> WHERE Quantity &gt; 1000);</pre><p>Aşağıdaki SQL deyimi TÜM ürün adlarını listeler:</p><p>Örnek</p><pre>SELECT ALL ProductName<br>FROM Products<br>WHERE TRUE;</pre><p>OrderDetails tablosundaki TÜM kayıtların Quantity’si 10&#39;a eşitse, aşağıdaki SQL deyimi ProductName’i listeler. Bu elbette FALSE değerini döndürür çünkü Quantity sütununda birçok farklı değer bulunur (yalnızca 10 değeri değil):</p><p>Örnek</p><pre>SELECT ProductName<br>FROM Products<br>WHERE ProductID = ALL<br> (SELECT ProductID<br> FROM OrderDetails<br> WHERE Quantity = 10);</pre><h4>SQL SELECT INTO Deyimi</h4><p>SQL SELECT INTO Deyimi</p><p>İfade SELECT INTO, verileri bir tablodan yeni bir tabloya kopyalar.</p><p>SELECT INTO SYNTAX</p><p>Tüm sütunları yeni bir tabloya kopyalayın:</p><pre>SELECT *<br>INTO newtable [IN externaldb]<br>FROM oldtable<br>WHERE condition;</pre><p>Yalnızca bazı sütunları yeni bir tabloya kopyalayın:</p><pre>SELECT column1, column2, column3, …<br>INTO newtable [IN externaldb]<br>FROM oldtable<br>WHERE condition;</pre><p>Yeni tablo, eski tabloda tanımlandığı gibi sütun adları ve türleriyle oluşturulacaktır. Cümleyi kullanarak yeni sütun adları oluşturabilirsiniz AS.</p><p>SQL SELECT INTO Örnekleri</p><p>Aşağıdaki SQL ifadesi Müşterilerin yedek kopyasını oluşturur:</p><pre>SELECT * INTO CustomersBackup2017<br>FROM Customers;</pre><p>Aşağıdaki SQL deyimi, INtabloyu başka bir veritabanındaki yeni bir tabloya kopyalamak için yan tümceyi kullanır:</p><pre>SELECT * INTO CustomersBackup2017 IN &#39;Backup.mdb&#39;<br>FROM Customers;</pre><p>Aşağıdaki SQL ifadesi yalnızca birkaç sütunu yeni bir tabloya kopyalar:</p><pre>SELECT CustomerName, ContactName INTO CustomersBackup2017<br>FROM Customers;</pre><p>Aşağıdaki SQL ifadesi yalnızca Alman müşterileri yeni bir tabloya kopyalar:</p><pre>SELECT * INTO CustomersGermany<br>FROM Customers<br>WHERE Country = &#39;Germany&#39;;</pre><p>Aşağıdaki SQL ifadesi, verileri birden fazla tablodan yeni bir tabloya kopyalar:</p><pre>SELECT Customers.CustomerName, Orders.OrderID<br>INTO CustomersOrderBackup2017<br>FROM Customers<br>LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;</pre><p><strong>İpucu:</strong> SELECT INTO Başka bir tablonun şemasını kullanarak yeni, boş bir tablo oluşturmak için de kullanılabilir. WHERESorgunun veri döndürmemesine neden olan bir cümle eklemeniz yeterli :</p><pre>SELECT * INTO newtable<br>FROM oldtable<br>WHERE 1 = 0;</pre><h4>SQL INSERT INTO SELECT İfadesi</h4><p>SQL INSERT INTO SELECT İfadesi</p><p>İfade INSERT INTO SELECT, verileri bir tablodan kopyalayıp başka bir tabloya ekler.</p><p>İfade, INSERT INTO SELECTkaynak ve hedef tablolardaki veri türlerinin eşleşmesini gerektirir.</p><p><strong>Not:</strong> Hedef tablodaki mevcut kayıtlar etkilenmez.</p><p>SELECT’E Ekle Syntax</p><p>Tüm sütunları bir tablodan başka bir tabloya kopyalayın:</p><pre>INSERT INTO table2<br>SELECT * FROM table1<br>WHERE condition;</pre><p>Bir tablodaki yalnızca bazı sütunları başka bir tabloya kopyalayın:</p><pre>INSERT INTO table2 (column1, column2, column3, …)<br>SELECT column1, column2, column3, …<br>FROM table1<br>WHERE condition;</pre><p>SQL INSERT INTO SELECT Örnekleri</p><p>Aşağıdaki SQL ifadesi “Tedarikçiler”i “Müşteriler”e kopyalar (verilerle doldurulmayan sütunlar NULL içerecektir):</p><p>Örnek</p><pre>INSERT INTO Customers (CustomerName, City, Country)<br>SELECT SupplierName, City, Country FROM Suppliers;</pre><p>Aşağıdaki SQL ifadesi “Tedarikçiler”i “Müşteriler”e kopyalar (tüm sütunları doldurun):</p><p>Örnek</p><pre>INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)<br>SELECT SupplierName, ContactName, Address, City, PostalCode, Country FROM Suppliers;</pre><p>Aşağıdaki SQL ifadesi yalnızca Alman tedarikçilerini “Müşteriler”e kopyalar:</p><p>Örnek</p><pre>INSERT INTO Customers (CustomerName, City, Country)<br>SELECT SupplierName, City, Country FROM Suppliers<br>WHERE Country=&#39;Germany&#39;;</pre><h4>SQL CASE İfadesi</h4><p>SQL CASE İfadesi</p><p>İfade CASEkoşullardan geçer ve ilk koşul karşılandığında bir değer döndürür (if-then-else ifadesi gibi). Yani bir koşul doğru olduğunda okumayı durduracak ve sonucu döndürecektir. Hiçbir koşul doğru değilse, cümledeki değeri döndürür ELSE.</p><p>Hiçbir parça yoksa ELSEve hiçbir koşul doğru değilse NULL değerini döndürür.</p><p>CASE Sözdizimi</p><pre>CASE<br> WHEN condition1 THEN result1<br> WHEN condition2 THEN result2<br> WHEN conditionN THEN resultN<br> ELSE result<br>END;</pre><p>SQL CASEÖrnekleri</p><p>Aşağıdaki SQL, koşullardan geçer ve ilk koşul karşılandığında bir değer döndürür:</p><p>Örnek</p><pre>SELECT OrderID, Quantity,<br>CASE<br> WHEN Quantity &gt; 30 THEN &#39;The quantity is greater than 30&#39;<br> WHEN Quantity = 30 THEN &#39;The quantity is 30&#39;<br> ELSE &#39;The quantity is under 30&#39;<br>END AS QuantityText<br>FROM OrderDetails;</pre><p>Aşağıdaki SQL, müşterileri City’ye göre sıralayacaktır. Ancak Şehir NULL ise Ülkeye göre sıralayın:</p><p>Örnek</p><pre>SELECT CustomerName, City, Country<br>FROM Customers<br>ORDER BY<br>(CASE<br> WHEN City IS NULL THEN Country<br> ELSE City<br>END);</pre><h4>SQL NULL İşlevleri</h4><p>SQL IFNULL(), ISNULL(), COALESCE() ve NVL() İşlevleri</p><p>Aşağıdaki “Ürünler” tablosuna bakın:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Ep9fHxKvmo82QhMCGSTGMA.png" /></figure><p>“UnitsOnOrder” sütununun isteğe bağlı olduğunu ve NULL değerler içerebileceğini varsayalım.</p><p>Aşağıdaki SELECT ifadesine bakın:</p><pre>SELECT ProductName, UnitPrice * (UnitsInStock + UnitsOnOrder)<br>FROM Products;</pre><p>Yukarıdaki örnekte “UnitsOnOrder” değerlerinden herhangi biri NULL ise sonuç NULL olacaktır.</p><p>Çözümler</p><p><strong>MySQL</strong></p><p>MySQL <a href="https://www.w3schools.com/sql/func_mysql_ifnull.asp">IFNULL()</a>işlevi, bir ifade NULL ise alternatif bir değer döndürmenize olanak tanır:</p><pre>SELECT ProductName, UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder, 0))<br>FROM Products;</pre><p>veya fonksiyonu şu şekilde kullanabiliriz : <a href="https://www.w3schools.com/sql/func_mysql_coalesce.asp">COALESCE()</a></p><pre>SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))<br>FROM Products;</pre><p><strong>SQL Server</strong></p><p>SQL Server <a href="https://www.w3schools.com/sql/func_sqlserver_isnull.asp">ISNULL()</a>işlevi, bir ifade NULL olduğunda alternatif bir değer döndürmenize olanak tanır:</p><pre>SELECT ProductName, UnitPrice * (UnitsInStock + ISNULL(UnitsOnOrder, 0))<br>FROM Products;</pre><p><a href="https://www.w3schools.com/sql/func_sqlserver_coalesce.asp">COALESCE()</a> veya fonksiyonu şu şekilde kullanabiliriz :</p><pre>SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))<br>FROM Products;</pre><p><strong>MS Access</strong></p><p>MS Access <a href="https://www.w3schools.com/sql/func_msaccess_isnull.asp">IsNull()</a>işlevi, ifade boş bir değerse TRUE (-1), aksi takdirde FALSE (0) değerini döndürür:</p><pre>SELECT ProductName, UnitPrice * (UnitsInStock + IIF(IsNull(UnitsOnOrder), 0, UnitsOnOrder))<br>FROM Products;</pre><p><strong>Oracle</strong></p><p>Oracle NVL()işlevi aynı sonuca ulaşır:</p><pre>SELECT ProductName, UnitPrice * (UnitsInStock + NVL(UnitsOnOrder, 0))<br>FROM Products;</pre><p>COALESCE() veya fonksiyonu şu şekilde kullanabiliriz :</p><pre>SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))<br>FROM Products;</pre><h4>SQL Server için SQL Saklı Prosedürler</h4><p>Saklı Prosedür Nedir?</p><p>Saklı prosedür, kaydedebileceğiniz ve böylece kodun tekrar tekrar kullanılabileceği hazırlanmış bir SQL kodudur.</p><p>Dolayısıyla, tekrar tekrar yazdığınız bir SQL sorgunuz varsa, bunu saklı yordam olarak kaydedin ve çalıştırmak için çağırmanız yeterlidir.</p><p>Saklı yordamın iletilen parametre değerlerine göre hareket edebilmesi için, saklı yordama da parametreler iletebilirsiniz.</p><p>Saklı Yordam Syntax</p><pre>CREATE PROCEDURE procedure_name<br>AS<br>sql_statement<br>GO;</pre><p>Saklı Prosedür Yürütme</p><pre>EXEC procedure_name;</pre><p>Saklı Yordam Örneği</p><p>Aşağıdaki SQL ifadesi, “Müşteriler” tablosundaki tüm kayıtları seçen “Tüm Müşterileri Seç” adlı bir saklı yordam oluşturur:</p><p>Örnek</p><pre>CREATE PROCEDURE SelectAllCustomers<br>AS<br>SELECT * FROM Customers<br>GO;</pre><p>Yukarıdaki saklı yordamı aşağıdaki gibi yürütün:</p><pre>EXEC SelectAllCustomers;</pre><p>Tek Parametreli Saklı Prosedür</p><p>Aşağıdaki SQL ifadesi, “Müşteriler” tablosundan belirli bir Şehirdeki Müşterileri seçen bir saklı prosedür oluşturur:</p><p>Örnek</p><pre>CREATE PROCEDURE SelectAllCustomers @City nvarchar(30)<br>AS<br>SELECT * FROM Customers WHERE City = @City<br>GO;</pre><p>Yukarıdaki saklı yordamı aşağıdaki gibi yürütün:</p><pre>EXEC SelectAllCustomers @City = &#39;London&#39;;</pre><p>Çoklu Parametreli Saklı Prosedür</p><p>Birden fazla parametre ayarlamak çok kolaydır. Aşağıda gösterildiği gibi her parametreyi ve veri türünü virgülle ayırarak listelemeniz yeterlidir.</p><p>Aşağıdaki SQL ifadesi, “Müşteriler” tablosundan belirli bir Posta Koduna sahip belirli bir Şehirdeki Müşterileri seçen saklı bir prosedür oluşturur:</p><p>Örnek</p><pre>CREATE PROCEDURE SelectAllCustomers @City nvarchar(30), @PostalCode nvarchar(10)<br>AS<br>SELECT * FROM Customers WHERE City = @City AND PostalCode = @PostalCode<br>GO;</pre><p>Yukarıdaki saklı yordamı aşağıdaki gibi yürütün:</p><pre>EXEC SelectAllCustomers @City = &#39;London&#39;, @PostalCode = &#39;WA1 1DP&#39;;</pre><h4>SQL Comments</h4><p><strong>SQL Yorumları</strong></p><p>Yorumlar, SQL ifadelerinin bölümlerini açıklamak veya SQL ifadelerinin yürütülmesini önlemek için kullanılır.</p><p><strong>Not: Bu bölümdeki örnekler Firefox ve Microsoft Edge’de çalışmayacaktır!</strong></p><p>Yorumlar Microsoft Access veritabanlarında desteklenmez. Örneklerimizde Firefox ve Microsoft Edge Microsoft Access veritabanını kullanıyor.</p><h3>Tek Satır Yorumlar</h3><p>Tek satırlık yorumlar ile başlar --.</p><p>— ile satır sonu arasındaki metinler dikkate alınmayacaktır (yürütülmeyecektir).</p><p>Aşağıdaki örnekte açıklama olarak tek satırlık bir yorum kullanılmıştır:</p><p><em>Örnek</em></p><pre>-- Select all:<br>SELECT * FROM Customers;</pre><p><strong>Çok Satırlı Yorumlar</strong></p><p>Çok satırlı yorumlar ile başlar /*ve ile biter */.</p><p>/* ile */ arasındaki metinler dikkate alınmayacaktır.</p><p>Aşağıdaki örnekte açıklama olarak çok satırlı bir yorum kullanılmaktadır:</p><p><em>Örnek</em></p><pre>/*Select all the columns<br>of all the records<br>in the Customers table:*/<br>SELECT * FROM Customers;</pre><h4>SQL Operatörleri</h4><p><strong>SQL Aritmetik Operatörleri</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*N3HXnk017Db8vVqx8VgGTw.png" /></figure><p><strong>SQL Bitwise Operators</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ebZPnVnJX5UfU-y4phGBjQ.png" /></figure><p><strong>SQL Comparison Operators</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*D7XOOFQob4MKvTzzxHSR9A.png" /></figure><p><strong>SQL Compound Operators</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OSsFEs-J-KZOHTXqYZlEWQ.png" /></figure><p><strong>SQL Logical Operators</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZTwBJvynHuohIy57dfy2Qg.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4b53adc4a541" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[JavaScript Temelleri (terminal, react, komutlar,git)]]></title>
            <link>https://medium.com/@karaermustafabirkan/javascript-temelleri-terminal-react-komutlar-git-3ce7e994f575?source=rss-8457012a77fd------2</link>
            <guid isPermaLink="false">https://medium.com/p/3ce7e994f575</guid>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[birkankaraer]]></dc:creator>
            <pubDate>Wed, 16 Aug 2023 10:42:04 GMT</pubDate>
            <atom:updated>2023-08-16T10:42:04.638Z</atom:updated>
            <content:encoded><![CDATA[<p>Yazılım Terimleri;</p><p>dependencies : kütüphaneler, paketler dependencies başlığı altında.</p><pre>&quot;dependencies&quot;: {<br>  &quot;es6-module-loader&quot;: &quot;0.17.11&quot;,<br>   &quot;traceur&quot;: &quot;0.0.108&quot;<br>&quot;devDependencies&quot;:<br>  &quot;lite-server&quot;: &quot;^2.2.0&quot;<br></pre><p>devdependencies : geliştiriciye lazım olan fakat productiona lazım olan, yüklenmeyen, build edilmeyen geliştiricinin elinin altında durması gerekenlerdir.</p><pre>&quot;es6-module-loader&quot;: &quot;0.17.11&quot;,<br>   &quot;traceur&quot;: &quot;0.0.108&quot;</pre><p>modülleri kullanabilmemizi sağlayan paketler.</p><pre>&quot;lite-server&quot;:<br>                &quot;^2.2.0&quot;</pre><p>kaydettiğinizde otamatik tarayıcınız ona göre şekillenecek.</p><p>Sonuçları rahatlıkla görebilmek için lite-server yani lokal serveri kullanıyor olacağız.</p><pre>C:\kampfsjavaScriptStarterkit&gt;npm run dev</pre><p>terminalde lite-server çalıştırma komutu.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/555/1*i8udFVmP6sRLo4rt8FXUhg.png" /></figure><p>Kümelatif scriptleri, ön scriptleri veya postscriptleri burada çalıştırabiliyoruz.</p><p>JS dosya bazlı bir ortam yani bir paketi kullanacak isek dosya bazlı olarak indiriyor olmak gerek ve bunlarda büyük boyutlu dosyalar olabilir ve bu dosyaları githupa atamaya biliriz o yüzden</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/199/1*lBY5r9jvCbOtqHHQ-w9VUw.png" /></figure><p>resimde görülen gitignore githuba atma demek yani “node_modules” githuba atma demek.</p><p>Büyük paketler, diğer paketler vs “node_modules” a atılacak.</p><p>Genel kural eğer githuptan bir js projesi indirecek isek ilk yapmanız gereken hareket “npm install” demektir .</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/293/1*YNBcDvS-Aln6qCbsuFvlsQ.png" /><figcaption>npm install</figcaption></figure><p>“npm install” ne yapıyor : package.json’ a bakıyor ve oradaki dependencies leri ilgili versiyon bilgilerine göre bilgisayarınıza indiriyor ve onları da node_modules a atıyor.</p><p>“npm run dev” ne yapıyor : uygulamamızı portta yayında aktif hala getiriyor.</p><p>Webdeyken bir F12 çekiyoruz, bir geliştiricinin front-end geliştiricisinin en önemli ekranı F12 dir. Console, console çıktıları vs. görebilirsiniz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/196/1*S51YLapKIyBiclF00PtBVg.png" /><figcaption>source</figcaption></figure><p>SRC yani source kaynak kodlarının bulunduğu ortamdır. Özellikle angular, react, vue gibi kompenent bazlı çalışan mimarilerde olduğu gibi sunulmuştur.</p><p>App.js başlangıç scripti.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/720/1*luKPMvSbFKTHFoTC03GGEQ.png" /><figcaption>Companent hiyerarşisi.</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/726/1*h2_e19O-6n8Us9sdjUBUMQ.png" /><figcaption>Cevap</figcaption></figure><p>Resimde görülen mavi taraf işin back-end kısmı yeşil kısım ise front-end kısmıdır. Request terimi back-end’den veri istemektir, request yani rica etmektir, Response ise back-end’in front-end’e verdiği cevaptır yani veriyi yetkisi var ise aktarmasıdır.</p><p>JS ile front-end ve back-end’i kodlayabiliriz. React, js kütüphanesidir, js proglamlamasını kullanıyor.</p><p>ECMAScript</p><p>ECMAScript veya ES, Ecma International tarafından ECMA-262 ve ISO/IEC 16262 notasyonuyla standartlaştırılmış ve markalaşmış bir betik dili spesifikasyonudur. Şu anda kendisini izleyen Javascript tabanlı olarak geliştirilmiştir. Yaygın olarak Dünya Çapında Ağ için istemci taraflı betik dili olarak kullanılır.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/749/1*BCxZWQ261NuckSJHBx8Fsg.png" /><figcaption>app.js</figcaption></figure><p>Kodlama için ortamı hazırlamak için app.js içerisine yazacağımız kodların aktif olması için index.html alanında resimde gördüğümüz gibi gerekli alana kodumuzu yazıyoruz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/533/1*gI4v4EIDoCQecQ2Cw4d7EQ.png" /><figcaption>“var” kodu yerine “let” kullanıyoruz.</figcaption></figure><p>Resimde görülen işaretlemelerde “let dolarDun” kısmı farklı bir bloktadır ve “dolarDun” değişkeninin son verisini değiştirmez.</p><p>VERİ KEYWORD</p><p>“var” : Veri tanımlamada kullandığımız komuttur.</p><p>“let” : Veri tanımlamada “var” komutumuzun yerine güncel olarak “let” komutunu kullanıyoruz ve bizlere işlemsel açıdan kolaylıklar sağlıyor.</p><p>const : Constant’dan gelen yani sabit anlamında veri tanımladığımız kodumuzdur. Sabit veri atamada kullandığımız bir komuttur.</p><p>Birden fazla veriyi aynı değişkende kullanmak için array’lerden yararlanıyoruz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/282/1*jRSjD33WHWGDQjSz-_vJVQ.png" /></figure><p>camelCasing : Veri adı tanımlamada veri tanımıcümlesinin ilk kelimesinin ilk harfi küçük ikinci harfi büyüktür.</p><p>PascalCasing : Veri adı tanımlamada veri tanımı cümlesinin kelimelerin ilk harfleri büyüktür.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/898/1*jLJ2_g8AaIncNnvZFImaGw.png" /></figure><p>Resimdeki dizeyi yorumlarsak api’den bana ne sonuç geliyor, ne dönüyor üç elemandan oluşan köşeli parantez görürsen dizeyi hatırlayacaksın ve burda bir veriler var. Array içine her veri tipini tanımlayabilirsiniz.</p><p>REACT</p><p>React kullanıcı arayüzü oluşturmaya yarayan açık kaynak kodlu bir javascript kütüphanesidir. Facebook önderliğinde bir geliştirici grubu tarafından geliştirilmekte olan React, Model-View-Controller prensibine uygun olarak oluşturulmuştur.</p><p>Bize veriler geldi ve biz napıyoruz reacti kullanarak ekrana basacağız.</p><p>Bu kodları versiyon control sistemlerimize kurarız . Neden yaparız bugün yazdığımız kodları geri almak isteriz ve git üzerinde olması da yapıyı yakalamk için o anki halini imzalarız.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/705/1*B9y3KD1BUuX23dKClkOHrg.jpeg" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3ce7e994f575" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[iliskisel veri tabani (RDMS)]]></title>
            <link>https://medium.com/@karaermustafabirkan/iliskisel-veri-tabani-rdms-202c8d8e79f1?source=rss-8457012a77fd------2</link>
            <guid isPermaLink="false">https://medium.com/p/202c8d8e79f1</guid>
            <category><![CDATA[sql]]></category>
            <dc:creator><![CDATA[birkankaraer]]></dc:creator>
            <pubDate>Sun, 09 Jul 2023 23:03:46 GMT</pubDate>
            <atom:updated>2023-07-09T23:03:46.997Z</atom:updated>
            <content:encoded><![CDATA[<p>Modern veri tabanları için önemli bir kavram. İlişkisel veri tabanı veriler için ayrı ayrı tutulan (örn: şehirler tablosu, ilçeler tablosu, binalar tablosu) bu tabloların arasındaki ilişkiyi tarif etmektedir. Tekrar eden verileri tekilleştirmek amacı ile yapılandırılan veri tabı sistemleridir.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=202c8d8e79f1" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>