SQL Rehberi – Hazır Fonksiyonlar – 1

SQL’de işlemlerimizi daha kolay yapmamamızı sağlayan birçok fonksiyon bulunmaktadır. Çoğu zaman lazım olan bu fonksiyonları tek tek açıklamaya çalışacağım. Umarım faydalı olur.

ascii()

Açıklama: Girilen karakterlerin en solundakinin ascii numarsını döndürür.

Yazılış: int = ASCII ( karakter_girişi )

Örnek:

select ascii(‘ABC’) — 65
select ascii(‘A’) — 65
select ascii(‘Z’) — 65
select ascii(‘a’) — 97
select ascii(‘z’) — 122
select ascii(‘0’) — 48
select ascii(‘9’) — 57
select ascii(‘_’) — 95
select ascii(‘ ‘) — 32

char()

Açıklama: Girilen sayının ascii karakter karşılığını döndürür.

Yazılış: char= CHAR ( sayı )

Örnek:

select char(ascii(‘A’))  — A
select char(65)  — A
select char(145) — Sol tek tırnak: ‘
select char(146) — Sağ tek tırnak: ’

Not:

SQL: char(13) = satır başı, char(10) = satır atlama.
VB’deki: ‘vbCrLf’ veya Javascript/c#’daki \n gibi
Örnek:
Print ‘Kod listesi: ‘ + char(13) + char(10) + ‘A = Selam 1’ + char(13) + char(10) + ‘B = Selam 2’

Sonuç:

Kod listesi:
A = Selam 1
B = Selam 2

select nchar(65) — A
select unicode(‘A’) — 65

SQL’de ascii listesi almak için aşağıdaki komutu kullanabiliriz:

declare @strValue varchar(255)
declare @intCount int
declare @intCountMax int
set @intCount = 0
set @intCountMax = 255
forloop_begin:
  set @strValue = (select (convert(varchar(15),@intCount) + '-' + char( @intCount ) ))
  print @strValue
  set @intCount = @intCount + 1
  if ( @intCount <= @intCountMax ) begin
    goto forloop_begin
  end
forloop_end:

charindex()

Açıklama: girdiğimiz yazının içinden belirlediğimiz kısmın başlangıç karakterini döndürür, eğer yoksa 0 döner.

Yazılış: int = CHARINDEX ( expression1 , expression2 [ , start_location ] )

expression1 – Aranılacak olan text
expression2 – içinde arama yapılacak text.
Start_location = 0 veya negatif = başlangıç.

Örnek :
select charindex( ‘Selam’, ‘Yeniden Selam Herkese’)  — 7
select charindex( ‘/’, ‘http://www.ftorun.com/’,8) — 22

difference()

Açıklama: iki soundex değerini karşılaştırıp 1 – 4 arasında bir numara dödürür. Birbirlerine olan benzerliklerine göre 4’e yakın bir değer verir.

Soundex nedir: Bir kelimeden fonetik bir kod cikarma yontemidir. SQL’de SOUNDEX() komutu ile verdiğimizde bize 4 haneli soundex değeri, difference ise iki soundex degerini kiyaslayarak iki kelimenin birbirine ne kadar yakin okundugunu cikarilabilir.

Yazılış:

int = DIFFERENCE ( yazi_1 , yazi_2 )

Örnek:

SELECT SOUNDEX(‘Hello’) — H400
select DIFFERENCE(‘Hello’,’Hello’) — 4

SELECT SOUNDEX(‘ankara’) — A526
select DIFFERENCE(‘ankara’,’ankara’) — 4

SELECT SOUNDEX(‘ali’) — A400
SELECT SOUNDEX(‘veli’) — V400
select DIFFERENCE(‘ali’,’veli’) — 3

SELECT SOUNDEX(‘abcdefg’) — A123
SELECT SOUNDEX(‘tuvwxyz’) — T122
select DIFFERENCE(‘abcdefg’,’tuvwxyz’) — 2  (1 "1" + 1 "2" = 2)

SELECT SOUNDEX(‘dog’) — D200
SELECT SOUNDEX(‘dot’) — D300
select DIFFERENCE(‘dog’,’dot’) — 3  (1 "D" ve 2 "0" = 3)

select SOUNDEX(‘hakan’) — H250
select SOUNDEX(‘melih’) — M400
select DIFFERENCE(‘hakan’,’melih’) — 1  (Soundex değerlerinden sadece sondaki 0 aynı olduğu için 1.)

–Soundex değerlerinin hepsi aynıysa geriye 4 döner.
select SOUNDEX(‘1’) — 0000
select SOUNDEX(‘2’) — 0000
select SOUNDEX(’20’) — 0000
select SOUNDEX(‘100’) — 0000
select DIFFERENCE(‘1′,’2’) — 4
select DIFFERENCE(’20’,’100′) — 4

Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

SQL’de subquery’lerde sadece 1 çıktı alınması gereken yerde, birden fazla veri listelenirse bu hatayı verir.

örnek:

USE Northwind
SELECT t1.*  FROM dbo.Orders t1
WHERE t1.OrderDate =  

(SELECT MAX(OrderDate), CustomerID FROM dbo.Orders WHERE t1.CustomerID = CustomerID GROUP BY CustomerID)

Burada t1.OrderDate’e 1 sonuç vermemiz gerekirken altsorgumuzdan 2 değer dönmektedir, bu sorunu çözmek için

USE Northwind
SELECT t1.* FROM dbo.Orders t1
WHERE t1.OrderDate =
  (SELECT MAX(OrderDate) FROM dbo.Orders WHERE t1.CustomerID = CustomerID)

Maximum OrderDate in yanındaki CustomerID’yi sildiğimizin için bu sorgu hata vermeyecektir.

Algoritma ve Akış Diagramları

ALGORİTMANIN HAZIRLANMASI

Algoritma,herhangi bir sorunun çözümü için izlenecek yol anlamına gelmektedir.Çözüm için yapılması gereken işlemler hiçbir alternatif yoruma izin vermeksizin sözel olarak ifade edilir.Diğer bir deyişle algoritma verilerin bilgisayara hangi çevre biriminden girileceğinin,problemin nasıl çözüleceğinin,hangi basamaklardan geçirilerek sonuç alınacağının,sonucun nasıl ve nereye yazılacağının sözel olarak ifade edilmesi biçiminde tanımlanabilir.

Algoritma hazırlanırken,çözüm için yapılması gerekli işlemler,öncelik sıraları gözönünde bulundurularak ayrıntılı bir biçimde tanımlanmalıdırlar. Aşağıda algoritma hazırlanmasına ilişkin örnekler yer almaktadır.

ÖRNEK 1:Verilen iki sayının toplamının bulunmasının algoritması aşağıdaki gibi yazılır:

AlgoritmaAdım 1-Başla
Adım 2-Birinci sayıyı oku
Adım 3-İkinci sayıyı oku
Adım 4-İki sayıyı topla
Adım 5-Dur

Algoritmaya dikkat edilirse işlemlerin sıralanmasında,işlem önceliklerinin gözönünde bulundurulduğu görülür.Ayrıca algoritma yazımı sorun çözümünün başladığını gösteren “BAŞLA” ifadesi ile başlamakta ve işlemlerin bittiğini belirten “DUR” ifadesi ile sona ermektedir.

AKIŞ ŞEMALARI(DİYAGRAMLARI)

Continue reading

SQL Dersleri – 1

Bu yazıda SQL komutlarının işlevlerini örneklerle anlatmaya çalışacağım umarım birilerine faydası dokunur.

Kısaca SQL‘den bahsedersek; SQL, ingilizce “Structured Query Language” kelimelerinin baş harfleri ile oluşturulmuş olup türkçesi “Yapısal Sorgulama Dili” dir, bir programlama dili değildir. SQL ile veri tabanı üzerinde işlem yapabilir,kayıt ekleyebilir, olan kayıtlar değiştirebilir, silebilir veya bu kayıtlardan listeler oluşturulabiliriz.

başlıca sql komutları

CREATE TABLE tabloAdı

–Yeni bir tablo yaratmak için kullanılır.

ALTER TABLE tabloAdı

–Sütun eklemek, sütunun tipini veya uzunluğunu değiştirmek veya yapısal değişiklikler yapılması için kullanılır.

DROP TABLE tabloAdı

–Tabloyu silmek için kullanılır.

CREATE VIEW goruntuAdı

–SQL görüntüsü oluşturmak için kullanılır.

DROP VIEW goruntuAdı

–Görüntüyü siler.

CREATE INDEX indeksAdı

–Tablonun veya (en azından bir) sütun adı üzerinde indeks oluşturmak için kullanılır.

DROP INDEX indeksAdı

–Yaratılan indeksleri veri tabanından kaldırmak için kullanılır

Veri işlemleri için:

–SELECT :

SELECT ad,soyad uyeler yas=16

–Yaşı 16 olan üyelerin ad ve soyadlarını gösterir

–UPDATE :

UPDATE uyeler SET ad = ‘ali’ WHERE soyad = ‘pazarcı’

–soyadı ‘pazarcı’ olan üyelerin adını ‘ali’ ile değiştir

–INSERT :

INSERT INTO uyeler VALUES (‘Ahmet’, ‘Küçükoğlu’,26)

–Yeni bir kayıt ekler

–DELETE :

DELETE FROM uyeler WHERE yas>40

–yaşı 40 dan büyük olan üyeleri siler

TC kimlik no doğruluk kontrolü

TcKimlikNo web servisi kapanıp ücretli bir hale geldikten sonraKimlik Numarası tesbiti yapmamız gereken durumlarda sıkıntıya düşüyoruz.

Fakat TC kimlik numaraları bir algoritmaya göre verildiği için basit formlarda kullanıcı’nın doğru kimlik numarası girip girmediğini tesbit etmek için şu metodu kullanabiliriz:


public bool TCKimlik(string no)
{
   if (no.Length != 11) { return false; }
   int sayi = 0;
   for (int i = 0; i < 10; i++) sayi += int.Parse(no.Substring(i, 1));
   return sayi.ToString().Substring(sayi.ToString().Length - 1, 1) == no.Substring(10, 1) ? true : false;
}

Algoritmanın temeli; ilk 10 rakamın toplamının onlar basamağı, 11. rakama eşit çıkmak zorunda,
Burada kullanıcı deneme yanılma yaparak doğru gösterebilir tabi, ama hiç yoktan iyidir…

Web.Config’de değer tutmak

Web uygulamalarımızda çoğu zaman değerini dışarıdan almaya ihtiyaç duyduğumuz değişkenler olur bunları tutmak için en iyi yöntem Web.Config içindeki appSettings bölümüdür.

<appSettings>
<add key=”HostName” value=”127.0.0.1″ />
</appSettings>

Eklediğimiz bu parametrenin değerine şu şekilde ulaşabiliriz:
VB.NET

AppSettings.Item(“HostName“)

C#.net

ConfigurationSettings.AppSettings[“HostName“].ToString();

Fakat bu sınıfı kullanabilmek için code sayfamızın başına System.Configuration.ConfigurationSettings namespace’ini eklememiz gerekiyor.
VB.NET

Imports System.Configuration.ConfigurationSettings

veya
C#.net

using System.Configuration.ConfigurationSettings;

ASP.net ile bir sitenin içeriğini almak

Bazen Döviz Bilgileri, Maçsonuçları gibi başka bir sitenin içeriğini almanız gerekebilir. Bunun için C# da aşağıdaki meddu kullanabilirsiniz:

public static string icerikAl(string url)

{

    WebRequest wReq = WebRequest.Create(url);

    wReq.Timeout = 10000; // zaman aşımı süresi

    WebResponse wRes = wReq.GetResponse();

    Encoding enc = Encoding.GetEncoding("iso-8859-9");

    StreamReader sRed = new StreamReader(wRes.GetResponseStream(), enc);

    return sRed.ReadToEnd();

}

lt01.text = icerikAl("http://www.goals365.com/feed/ soccer/index.php");

asp.net sayfalama

Asp.net ‘de datagridview kullandığımız zaman sayfalamayı .NET kendisi yapıyor ama listenizi kendiniz oluşturuyorsanız o zaman problemler çıkabiliyor.

Aşağıdaki metoda toplam sayfa sayısını,ekrandaki sayfayı ve gideceğimiz linkin ön ekini göndererek şu şekilde sayfalama oluşturabiliriz.sayfalama.gif

private static string sayfalamaYap(int ts, int es, string yol)

{//ts=toplam sayfa, es=ekrandaki sayfa, yol = link

    int eis = 0;

    int ess = 0;

    bool i2demi = (es – 6 < 1) ? true : false//ilk 2 sayfadan birindeysek true–not:-2 idi

    bool s2demi = (ts – 6 < es) ? true : false; //son 2 sayfadan birindeysek true

    bool imi = (es == 1) ? true : false;        //ilk sayfa isek true

    bool smu = (es == ts) ? true : false;      //son sayfa isek true

    string text = “<div id=\”paging\”>”;

    string buton = “<a href=\”/” + yol + “{0}\” class=\”{2}\”>{1}</a>”;

    if (i2demi & s2demi) { eis = 1; ess = ts; }

    else if (!i2demi & s2demi) { eis = ts – 8; ess = ts; }

    else if (i2demi & !s2demi) { eis = 1; ess = 8; }

    else { eis = es – 4; ess = es + 4; }

    if (!imi) { text += string.Format(buton, (es – 1).ToString(), “< previus”, “nav”); }

    if (!i2demi) { text += string.Format(buton, “1”, “1”, “nav”) + string.Format(buton, “2”, “2”, “nav”) + ” … “; }

    for (int i = eis; i <= ess; i++)

    {

        if (i == es) { text += “<span href=\”\” class=\”navnone\”>” + i.ToString() + “</span>”; }

        else { text += string.Format(buton, i.ToString(), i.ToString(), “nav”); }

    }

    if (!s2demi) { text += ” … “ + string.Format(buton, (ts – 1).ToString(), (ts – 1).ToString(), “nav”) + string.Format(buton, ts.ToString(), ts.ToString(), “nav”); }

    if (!smu) { text += string.Format(buton, (es + 1).ToString(), “next >”, “nav”); }

    return text + “</div>”;

}