8086 mimarisi ve assembly dili ile bellekteki karakter dizisinin uzunluğunu bulma

Belleğin 0x1300 adresinden başlayan bir karakter dizisi olsun. Dizinin bittiğini sonundaki  00 değerleri belirtiyor olsun. Biz de bu bilgiden yaralanarak dizinin uzunluğunu bulalım ve bunu belleğe kaydedelim.

—————

org 1000

;heksadecimal 42h sayısı B harfini ifade eder. 43h C harfini ve bu şekilde devam etmektedir. örneğin: 4243h BC olarak düşünülebilir.

;Aşağıdaki komutlarla belleğe bir karakter dizisi yazdırdık.

mov cx,4243h                 ;
mov [0x1300],cx             ;

mov cx,4445h                 ;
mov [0x1302],cx             ;

mov cx,4647h                 ;
mov [0x1304],cx             ;

mov cx,4849h                 ;
mov [0x1306],cx             ;

Mov [0x1308], 0x00h     ; string sonu belleğe kopyalandı

;Uzunluğu bulma
mov bx, 0000h       ; karakter dizisinin uzunluğunu tutacağımız bx ‘i sıfırladık.

mov si, 0x1300       ;bellek adreslerini si ‘da tutacağız.

dongu:                    ; buraya dongu adlı etiket(label) kondu

mov dh, [si]    ;si ‘ın gösterdiği adresteki 2 karakter dh içerisine taşındı.

inc si               ;si ‘ın tuttuğu bellek adresi 1 artırıldı

inc bx              ;bx 1 artırıldı.

cmp dh,00h     ;dh içerisindeki karakterler ile 00 (hekzadesimal) karşılaştırıldı

jnz dongu         ;eğer bir önceki komutta eşleşme olmazsa dongunun başına, olursa aşağı geçilecek

dec bx              ;bx ‘teki 1 fazla değer atıldı.

mov [0x1002],bx   ;bx te tutulan dizi uzunluğu 0x1002 adresine kopyalandı

hlt   ;program sonlandırıldı

——————–

Aşağıdaki resimde örnek bir çalışma anını görebilirsiniz.

assembly123

8086 mimarisi ve assembly dili ile toplama, çarpma, bölme,çıkarma

Hafızada(memory) iki adet sayı olsun. hekzadesimal 6553h sayısı  0x00B00 adresinde, hekzadesimal 1287h sayısı 0x00B02 adresinde bulunuyor olsun. Bu iki sayının toplamını,farkını,çarpımını,bölümünü 0x00B10 adresinden başlayarak belleğe sırası ile yazalım.

—————————

org 1000

;Not: kodlar intel syntaxına uygun olarak yazılmıştır.

;sayıları bellek alanlarından yazmaçlara (register) kopyalayalım.

MOV ax, [0x00B00]                 ; 6553h sayısını ax yazmacına kopyaladık.

MOV bx, [0x00B02]                ; 1287h sayısını bx yazmacına kopyaladık.

;TOPLAMA

ADD ax,bx                              ; bu komutla iki sayı toplandı ve ax yazmacına yerleştirildi.

MOV [0x00B10], ax               ;  toplamı ax yazmacından belirtilen bellek adresine kopyaladık.

MOV ax, [0x00B00]               ; 6553h sayısını ax yazmacına tekrar kopyaladık , çünkü biraz önce toplam yazılmıştı. (bx’teki sayı ;değişmedi)

;ÇIKARMA

SUB ax, bx                            ;  bu komutla 6553h sayısından 1287h sayısı çıkarıldı ve ax yazmacına kopyalandı.

MOV [0x00B12], ax              ; farkı ax yazmacından belirtilen bellek adresine kopyaladık.

;ÇARPMA

;Çarpma komutu olan MUL tek operand alır. Diğer operand MUL komutunun aldığı operandın (bit olarak) boyutuna göre ah ;ya da ax ten otomatik olarak alınır (konumuz olmayan sonraki işlemcilerde eax ten de alınabilir.).

;İşlem sonucu eğer 8 bit ise ax yazmacına, 16 bit ise yüksek anlamlı kısmı dx ‘e düşük anlamlı kısmı ax ‘e olmak üzere dx:ax ‘e kaydedilir.

MOV ax, [0x00B00]       ; 6553h sayısını ax yazmacına tekrar kopyaladık , çünkü biraz önce fark yazılmıştı.

;bx yazmacında halen 1287h sayısı var ancak örneğin açıklığı açısından yeniden kopyalayalım.

MOV bx, [0x00B02]      ; 1287h sayısını bx yazmacına kopyaladık.

;MUL komutu aldığı operandın 16 bit veya 8 bit oluşuna göre değişik davranış gösterir

MUL bx                          ; bu komut bx’ teki sayı ile ax’ ten aldığı sayıyı çarptı ve dx:ax’ e yazdı. bx 16 bit olduğu için ax’ in ;doğrudan alındığına dikkat edin.Eğer bx yerine bl (veya 8 bitlik başka birşey) yazsaydık sonuç sadece ax’e kaydedilecekti.

;burada kullandığımız MUL işaretsiz çarpma yapar. İşaretli için IMUL kullanılmalıdır.

;sonuç olan 32 bitlik 075544C5h sayısı dx:ax ‘e kaydedildi.

MOV [0x00B14] , dx      ; sonucun 16 bitini belirtilen bellek adresine kopyaladık.

MOV [0x00B16] , ax      ; sonucun diğer 16 bitini belirtilen bellek adresine kopyaladık.

;BÖLME

; Bölme komutu olan DIV tek operand alır, bu bölendir. Diğer operand 8 bitlik bölmede ax’ten 16 bitlik bölmede dx:ax’ ten

;otomatik olarak alınır. Yani bölünenin uzunluğunu DIV komutunun aldığı operand olan bölen belirler.

; 8 bitlik bölmede al bölüm, ah kalan ;16 bitlik bölmede ax bölüm dx kalanı tutar.

MOV ax, [0x00B00]    ; 6553h sayısını ax yazmacına tekrar kopyaladık.

MOV bx, [0x00B02]    ; 1287h sayısını bx yazmacına kopyaladık (bx te zaten bu değer vardı, örneğin açıklığı açısından yeniden ;kopyaladık)

;BÖLME

;DIV komutu aldığı operandın 16 bit veya 8 bit oluşuna göre değişik davranış gösterir.

DIV bx                         ; bx yazmacındaki değer bölen olarak alındı ve ax’ teki  değeri böldü. Bölüm (05h) ax’ e  , kalan ;(08b0h) dx’ e kaydedildi. Eğer bx yerine 8 bit bir operand verseydik bu sefer bölüm al’ye kalan ah’a kaydedilecekti.

;burada kullandığımız DIV işaretsiz bölme yapar. İşaretli için IDIV kullanılmalıdır.

MOV [0x00B18] , ax   ; sonucu belirtilen bellek adresine kopyaladık.

hlt                                ;programı sonlandırdık

——————

A NFA EXAMPLE TO CATCH STRINGS THAT ENDS WITH WEB or EBAY

In our privious article, we had shown how can be achieved with a DFA. This article we will introduce the same problem with a NFA which is relatively hard to implement than DFA. You can obtain all codes from here. Let’s start with state diagram. PS:For those who check over the DFA example the state equations is like this : a=>1    b=>1,2   c= >1,3,5  d=>1,4,6    e=>1,5    f=>1,6  g=>1,7  h=>1,8 nfa state diyagramHere, “” symbol  is stands for the input set which is all printable ASCII characters including w,e,b,a,y . As you know,a rule of NFA’s, we can be in several states at one particular time. Let me explain with example. Suppose we had given “awebay” word. We start at state 1 because it’s our initial state. Then character “a” comes. We return to state 1. We can express this event via transition function like δ(1,a)=1 . So we have {1} state set which we are in. Next we have the character “w” .  If “w” comes while we are in state 1 we can now be in states 1 or 2. Videlicet δ(1,w)={1,2}. Next,  character is “e”. We must evaluate the output of transition function for each state that we are in. Therefor we say δ(1,e)={1,5} , δ(2,e)={3} and the output of transition function is {1,5,3}. Our word is continue with “bay”. If we evaluate them in order, for b: δ(1,b)={1}  δ(3,b)={4} δ(5,b)={6}  and {4}U{1}U{6}={1,4,6} and for a: δ({1,4,6},a)={1,7} . Pay attention that while we are in state 4, If any character comes, output of function is null set. Lastly from {1,7} where we in,If  “y” comes  we take output δ({1,7},y)={1,8}. In this manner we finish our word. Because of output state set {1,8} includes accepted state 8, the word aswebay is accepted by this automata. Now time to think about code. Conclusion of the example above, we can be in several state. To provide this feature, we will use a character array and keep the states in it. For each element of the states set(array), we must evaluate (via transition function) the next state or states for the input character. By doing this, we achieve the next states set that we are in. The keystone char * transition(char states[10],char input ) function can be implemented like this : trrrra Function get 2 parameter. First one is the states array. Second one is a character of our given string. For each member of the char array the process will be: decide what state it is, decide what input it is, decide where to go next and append it to new reached_states (If it is empty set, then delete old state), delete evaluated old state, And move on to next array member. New state is appended to reached_states via appendToArray function. Then old state is deleted via deleteFromArray. Eventually reached_states is copied into states via arrayCopy function and it is returned by transition function. So the task of transition function is over. For convenience transition function takes one character instead of a string at a time. Construct a brige between, we use void send (string str) function. sendfunction send function takes one string (str) and send its characters to transition function one by one. It does this in printarray function. This function, as you guess, takes an array and prints it on the screen with some helpfull information. Wherein the use, takes the result that returned by transition function and prints it. Pay attention that the states[0] is initiated with 1. because it is our start state. void printarray(char *arr) is implemented like this: (not much to explain I guess) print void arrayCopy(char a[10], char[10]) function copies the second parameter array ( b[10] ) into the first one ( a[10] ) . arraycopy char * deleteFromArray (char orginal[10] , char ap) function deletes the parameter character ap from parameter array orginal[10]. Fills that area with last member of the array. Then it assigns NULL to the last position. As result returns the array back. delete Char * appendToArray (char [10], char ap) function tries to append the second parameter (character) to the first parameter which is an array (orginal[]). If it ‘s already in the array returns back without doing anything. append Our last function void didAccepted() checks ıf the given string is accepted by automata or not. To do this, it looks for the reached_states has at least one accepted states. didaccept We can put aour functions in a class called automata. reached_states must be a member variable of this class. ps:If there is no access modifier to a member of class , then tis member is threated as private by default. automata class in main function we take a string(stri) from user. Then we call the send function for this string. Lastly, to see the result, call didAccepted function to know if it is accepted or not. main an example output of our program : Ekran Alıntısı We describe our arrays with length 10 to simplfy the codes and focus on key points. In this example we have 8 state. Even if we present all states (in this case even this is not possible) this arrays is enough for us. You can use dynamic array lengths if you wish. After pointing out this link to obtain all of codes  again, I stop here.  Happy codes 🙂 .

A DFA example that catch strings ending with web/ebay

If you have ever used Linux ,you probably meet with the grep command. For who doesn’t know it, shortly, we can say it is a command is used to catch a given string. So how grep command can be implemented? How can a search engine compare words to find the closer results for your queries? This topic can help you with start understanding.

We will introduce how you can implement a DFA which controls a given string if it ends with ebay/web (as regex (all printable ASCII characters)*web or (all printable ASCII characters)*ebay ) or not.

As you know, as a rule of DFA, We can be in just one state at a time. We are going to keep this information (which state we are in) in a character variable. Another characteristic of DFA s, it is clear which state to jump which we are present, for a particular input character . We are going to control the this pass with if-else blocks.

The diagram of our automata will be like this

DFA diyagramı

Here, “” symbol  is stands for the input set which is all printable ASCII characters includes w,e,b,a,y .

0 is our initial state.It means we have nothing that we like.

state 1 tells we have “w”

state 2 tells we have “w” followed by “e” (we)

state 3 tells we have “web” .This state is an accepted state.

state 4 tells we have “e”

state 5 tells we have “eb”

state 6 tells we have “eba”

state 7 tells we have “ebay”. This is also an accepted state.

Let’s get to coding.We are going to explain codes part by part. You can obtain whole code from here

Transition between states will be controlled via private: char transition(char) function.

Untitled

ps:i hasn’t got any mission

This function gets just a char variable which will be handled for that call. For example; if we enter “aw”, firstly we handle the “a” character. First if block will be evaluated and because of “a” is not equal “w” , state variable will be set as “0”. Then the similar process will go on with character “w”. Eventually the state variable will be returned as 1. Because we have “w” character.

dx

The task of public: void send (string) function is to call transition function for ever single character in a given string. Because Transition function can handle just one character at a time.

dm

Function public: int didAccepted () , is responsible for controll whether the given string has accepted or not. It can achieve this by checking the state variable is whether equal to 3 or 7 or not.

dh

Our functions will be in a class named automata. Private class variable state is already initiated with 0 because our initial state is 0.

dy

Lastly we have the main function like above. We create an automata object. Then send (via send function) the string that is entered by user. Eventualy we check  if it is accepted by automaton via didAccepted function.

End of story 🙂 I hope this helped you with some understanding. You can view the NFA automata implementation via this link.

Sonu web veya ebay ile biten kelimeleri yakalayan sonlu otomata (NFA) örneği

Bir önceki yazıda DFA örneğini koda dökmüştük. Bu yazıda ise koda dökülmesi nisbeten biraz daha zor olan NFA örneğini yapacağız. Kodlara topluca bu linkten erişebilirsiniz.

Öncelikle state diyagramı ile başlayalım.

DFA örneğini inceleyenler için buradaki statelerin karşılığının a=>1    b=>1,2   c= >1,3,5  d=>1,4,6    e=>1,5    f=>1,6  g=>1,7  h=>1,8  olduğunu belirtelim.

 

nfa state diyagram∑ sembolü yazdırılabilir (w,e,b,a,y) dahil tüm ASCII karakter kümesini temsil ediyor. Bu küme bizim input kümemiz. Bildiğiniz gibi NFA ların özelliği bir anda birden fazla state de bulunulabilmesidir. Bir örnekle açıklayalım. İnput string olarak ‘awebay’ kelimesini ele alalım. Başlangıç state imiz 1 olduğu için buradayız. a karakteri geliyor. Sonuçta 1 state i elimizde kalıyor. Transition fonksiyonu olarak ifade edersek δ(1,a)=1 oluyor. Dolayısıyla bulunduğumuz state hala 1 state i. Sırada w karakteri var. 1 state inde iken w gelirse artık 1 ve /veya 2 statelerinde bulunabiliriz yani δ(1,w)={1,2} . Sıradaki karakterimiz e. Bu karakteri bulunduğumuz her state (küme) için değerlendirmeliyiz. Bu yüzden δ(1,e)={1,5} ve δ(2,e)={3} çıktılarının bileşimi artık bizim bulunduğumuz state kümesi olacak ki bu da {1,5,3} state lerinden oluşan küme. İnput stringimizin devamında bay var. Sırasıyla yine karakterleri değerlendirmeye alırsak b için δ(1,b)={1}  δ(3,b)={4} δ(5,b)={6} olduğundan {4}U{1}U{6}={1,4,6} sonucunu alırız. a için δ({1,4,6},a)={1,7} sonucunu alıyoruz. Burada 4 state inde iken bir input geldiğinde boş kümeye düşüldüğüne dikkat edin. Son olarak bulunduğumuz {1,7} kümesinde iken y geldiğinde  δ({1,7},y)={1,8} sonucunu alıyoruz. Bulunduğumuz kümede kabul edilen 8 state i bulunduğu için girilen aswebay string i kabul ediliyor.

Şimdi kodu düşünelim. Bir anda birden fazla durumda bulunabileceğimizden bunu bir karakter dizisinde tutacağız. Bu kümedeki her eleman (state) için yeni gelen karakteri bir transition fonksiyonu ile değerlendirip bulunduğumuz yeni state kümesini elde edeceğiz ve bu kümeyi de yine bir dizide tutacağız. Yazımızın kilit noktası char * transition(char states[10],char input ) fonksiyonumuzun  kodları şu şekilde :

transition

Fonksiyon iki parametre alıyor. States dizisi o anda bulunulan stateleri tutuyor. input ise değerlendirilecek karakter.  Bulunulan her state için (states dizisinin her bir elemanı için ) while döngüsü içindeki if else blokları ile önce bulunulan değerlendirilen state e sonra da gelen input a göre geçilecek state e  karar veriliyor. Geçilen state appendToArray fonksiyonu ile reached_states adlı diziye eklendikten sonra states deleteFromArray fonksiyonu ile dizisinden siliniyor. Son olarak bu karakter için (o anki tüm stateler ile) tüm değerlendirmeleri yaptıktan sonra ulaştığımız stateleri tutan reached_states dizisi arrayCopy fonksiyonu ile states dizisine kopyalanıp states dizisi sonuç olarak döndürülüyor. Böylece transition fonksiyonu görevini yapmış oluyor.

Basitlik açısından transition fonksiyonu tek karakter için (char input) çağrılıyor. Biz ise kullanıcıdan bir karakter dizisi alıyoruz. Aradaki köprüyü sağlamak için void send (string str) fonksiyonunu kullanıyoruz.

send

send fonksiyonu bir string (str) alıyor ve karakterlerini tek tek transition fonksiyonuna gönderiyor. Bunu printarray isimli fonksiyon içinden yapıyor. tahmin edeceğiniz gibi print array bir diziyi ekrana basan fonksiyon. Transition fonksiyonumuzun dönderdiği diziyi (states) alıyor ve bunu biraz ek bilgi ile ekrana basıyor. kodları şu şekilde:

printarray

void arrayCopy(char a[10], char[10]) fonksiyonu aldığı ikinci( b[10] ) diziyi ilk diziye( a[10] ) kopyalıyor.

arraycopy

char * deleteFromArray (char orginal[10] , char ap) fonksiyonu aldığı diziden (orjinal [10]) karakteri (ap) siliyor. Sildiği yere son elemanı koyuyor. Son karaktere NULL atıyor. Sonuçta da kalan diziyi dönderiyor.

deletefromarray

Char * appendToArray (char [10], char ap) fonksiyonu aldığı diziye (orginal[]) aldığı karakteri (ap) eğer yoksa ekliyor. Zaten bulunuyorsa aldığı diziyi doğrudan dönderiyor.

appendtoarray

son fonksiyonumuz void didAccepted() ile girdimizin otomata tarafından kabul edilip edilmediğini öğreniyoruz. Fonksiyon bunu reached_states içinde kabul edilen 4 ve 8 statelerinden birinin bulunup bulunmadığını kontrol ederek yapıyor.

didaccepted

Fonksiyonlarımızı automata isimli bir sınıf içine yazıyoruz.  reached_states dizimiz bu sınıfın private bir değişkeni. Bu arada başına erişim tanımlayıcı (public,private vs) yazmadığımız fonksiyonlar da varsayılan olarak private olarak değerlendiriliyor. Sınıfımızın genel görünümünü ve main fonksiyonunu verip yazımızı sonlandıralım.

automata class

Main fonksiyonunda kullanıcıdan stri isimli bir string alıyoruz, send fonksiyonuna gönderiyoruz. Son olarak didAccepted fonksiyonunu çağırarak inputun kabul edilip edilmediğini öğreniyoruz.

automata main

Programımızın örnek çıktısı :

output

Dizi boyutlarını 10 olarak sabit şekilde tanımadık. Çünkü bizim örneğimizde sadece 8 state imiz var ve hepsinde aynı anda bulunsak bile (ki örneğimizde bu bile mümkün değil) bu dizi bize yetecektir. Kodu basit tutup gerekli noktalara odaklanmak açısından diziyi sabit boyutlu tanımlamış olsak da dinamik olarak boyutu ayarlayanabilir. Kodların tamamını topluca bu linkten bulabileceğinizi tekrar belirterek yazımızı noktalıyoruz. Herkese kolay gelsin.

Sonu web veya ebay ile biten kelimeleri yakalayan sonlu otomata (DFA) örneği

Linux kullandıysanız mutlaka grep komutu ile de bir yerlerde karşılaşmışsınızdır. Bilmeyenler için kısaca bunun verilen bir stringi yakalamaya yarayan bir komut olduğunu belirtirek uzatmadan geçelim. Peki bu komut nasıl koda dökülmüştür? Bir arama motoru istediğiniz metni ararken metin karşılaştırmalarını nasıl yapar ve sizi yakın sonuçlara götürür? Bu yazımız kafanızda birşeyler oluşması sağlayabilir.

Bu yazıda sonunda web veya ebay (regex olarak ifade edersek (ASCII karakter kümesi)*web ya da (ASCII karakter kümesi)*ebay ) kelimeleri geçen stringleri yakalayan sonlu otomata örneğinin c++ ile nasıl koda döküleceğini örnekleyeceğiz. Bu iş için DFA (Deterministic Finite Automata) kullanacağız.

Bildiğiniz gibi DFA da herhangi bir anda sadece bir state de bulunabiliriz. Bu state in hangisi olduğunu bir karakter değişkeni içerisinde saklayacağız. DFA ların bir başka özelliği ise input alfabesindeki herhangi bir inputa karşılık o anda bulunulan stateden hangi state e geçileceğinin net bir şekilde belli olmasıdır. Biz geçişleri if else blokları ile kontrol edeceğiz. İstenirse switch case yapısı da kullanılabilir.

Otomatamızın state diyagramı gördüğünüz gibi olacaktır.

DFA diyagramıBurada “” input alfabemizin kümesi olan yazdırılabilir  tüm (w,e,b,a,y dahil) ASCII karakterlerini temsil ediyor.

0: başlangıç state imiz. Elimizde herhangi istediğimiz bir karakter dizisi bulunmadığını niteliyor.

1: elimizde ‘w’ bulunduğu durum.

2:elimizde ‘we’ bulunduğu durumu belirtiyor.

3:elimizde ‘web’ bulunduğu durumu belirtiyor. Bu kabul edilen bir state. Kelimemizin sonunda web olduğunu haber veriyor.

4:elimizde ‘e’ bulunduğu durumu belirtiyor.

5:elimizde ‘eb’ bulunduğu durumu belirtiyor.

6:elimizde ‘eba’ bulunduğu durumu belirtiyor.

7:elimizde ‘ebay’ bulunduğu durumu belirtiyor. Bu kabul edilen bir state. Kelimemizin sonunda ebay geçtiğini bize anlatıyor.

Gelelim kodlamaya. Kodları bölüm bölüm açıklayacağız. Tamamını şuradan alabilirsiniz.

State ler arasındaki geçişi private: char transition(char) fonksiyonu ile sağlayacağız.

Untitled

Bu fonksiyon bir adet char değişkeni alıyor. Bu bizim o çağrıda değerlendireceğimiz karakter. Örneğin “aswebay” girilmişse ilk değerlendirilecek input değişkeni a karakteri olacak. başlangıç state i 0 olduğu için ilk if bloğuna girilip karakterin w olup olmadığına bakılacak , olmadığı için state değişkenimiz 0 olarak kalacak. Kontroller bu şekilde devam ederek sonuçta bulunduğumuz state döndürülecek.

not: i değişkeninin herhangi bir görevi bulunmamakta

dx

public: void send (string) fonksiyonumuzun görevi girilen stringin her karakteri için tek tek transition fonksiyonumuzu çağırmak.

dm

public: int didAccepted () Fonksiyonumuzun görevi işlemler bittikten sonra çağrıldığında stringin kabul edilip edilmediğini kontrol etmek. Bunu state değişkenindeki değerin kabul edilen statelerden biri ile eşleşip eşleşmediğini karşılaştırarak yapıyor.

dh

Fonksiyonlarımız automata sınıfımızda yer alıyor.sınıfımızda bulunan state değişkeni private ve  ilk değeri 0 olarak atanmış durumda çünkü başlangıç state imiz 0.

dy

main fonksiyonumuzda ise bir string tanımlıyoruz. automata objesi(object) ile bu stringi send fonksiyonuna gönderiyoruz ve son olarak kabul edilen bir string olup olmadığını didAccepted fonksiyonu ile kontrol ediyoruz.

Dfa örneğimiz bu şekildeydi. Umarım kafanızda bir şeyler oluşmasına yardımcı olur. NFA örneğine buradan ulaşabilirsiniz. Kolay gelsin.

Mysql komutları notlarım ( mysql cheat sheet )

SHOW DATABASES – databaseleri görüntüler.
SHOW TABLES    – o database deki tablo ları görüntüler.
SHOW COLUMNS FROM tablo_ismi  – o tablo daki kolonları görüntüler
SELECT kolon_ismi FROM tablo_ismi -o tablodaki o kolonu seçer
SELECT kolon_ismi1 , kolon_ismi2 FROM tablo_ismi – iki kolonu birden seçer. hepsi için wildcard ( * ) kullanılabilir.
SELECT DISTINCT kolon_ismi FROM tablo_ismi  – tekrarlayan sonuçlar atılır.
SELECT kolon_ismi1 , kolon_ismi2 FROM tablo_ismi LIMIT 5 -sonuclar ilk 5 ile (kolon_ismi1 deki değere göre) sınırlanır.
SELECT kolon_ismi1 , kolon_ismi2 FROM tablo_ismi LIMIT 5,10 –  6,7,8,9,10…15 inci sonuclar (kolon_ismi2 deki değere göre) döner.
SELECT kolon_ismi1.tablo_ismi FROM tablo_ismi – SELECT kolon_ismi1 FROM tablo_ismi ile aynı sonuçları dönderir ancak karışıklığı önlemek için (örn aynı kolon ismine sahip 2 ayrı tablo varsa) kullanılır. bu yöntemdeki kolon_ismi1.tablo_ismi Fully qualified name olarak adlandırılır.
SELECT kolon_ismi1 FROM tablo_ismi ORDER BY kolon_ismi66 – sonuçlar kolon_ismi66 ya göre  sıralanır.
SELECT kolon_ismi1 FROM tablo_ismi ORDER BY kolon_ismi66 , kolon_ismi77 – sonuçlar önce kolon_ismi66 ya sonra kolon_ismi77 ye göre  sıralanır.
SELECT kolon_ismi1 , kolon_ismi2 FROM tablo_ismi ORDER BY kolon_ismi66 DESC -sonuçlar kolon_ismi66 ya göre azalan (sondan başa ) sıralanır
SELECT kolon_ismi1 , kolon_ismi2 FROM tablo_ismi ORDER BY kolon_ismi66 DESC LIMIT 1 – ile kolon_ismi66 değeri en yüksek sonucu alabiliriz.
SELECT kolon_ismi1 , kolon_ismi2 FROM tablo_ismi WHERE kolon_ismi55=bir_değer – belirtilen kolonlardan sadece kolon_ismi55 teki değeri bi_değer e eşit olanları seçer.
SELECT kolon_ismi1 , kolon_ismi2 FROM tablo_ismi WHERE kolon_ismi55 != bir_değer – belirtilen kolonlardan sadece kolon_ismi55 teki değeri bi_değerden farklı olanları seçer. ayrıca > ve < smbolleri de geçerlidir.

SELECT kolon_ismi1 , kolon_ismi2 FROM tablo_ismi WHERE kolon_ismi55 BETWEEN 12 AND 33 – belirtilen kolonlardan sadece kolon_ismi55 teki değeri 12 ve 33 arasında olanları seçer sayı değeri yerine text kullanacaksak tek tırnak içinde kullanmalıyız ki komutlarla karışmasın
SELECT kolon_ismi1 , kolon_ismi2 FROM tablo_ismi WHERE kolon_ismi55=’asdf’ AND kolon_ismi77=1234 -belirtilen kolonlardan sadece kolon_ismi55 teki değeri asdf ve kolon_ismi77 deki değeri 1234 olanları seçer. AND yerine OR kullanılabilir.
SELECT kolon_ismi1 , kolon_ismi2 FROM tablo_ismi WHERE kolon_ismi55 IN (‘a’ , ‘b’, ‘c’) -degerleri a b c olanları seçilir.
SELECT kolon_ismi1 , kolon_ismi2 FROM tablo_ismi WHERE kolon_ismi55 NOT IN (‘a’ , ‘b’, ‘c’) -degerleri a b c dışındakiler olanları seçilir.
SELECT kolon_ismi1 , kolon_ismi2 FROM tablo_ismi WHERE kolon_ismi55 LIKE ‘asdf%’ -kolon_ismi55 teki değeri asdf ile başlayanlar seçilir. % asdf nin önönde de
kullanılablir; anlamı içinde asdf geçen anlamına gelir. ortada kullanılırsa mesela as%df gibi o zamanda as ile başlayıp df ile biten anlamına gelir. Ayrıca % sembolü yerine _ sembolü de aynı şekilde kullanılabilir ancak _ sembolü bir karakter anlamına gelir.
SELECT kolon_ismi1 , kolon_ismi2 FROM tablo_ismi WHERE kolon_ismi55 REGEXP ‘ali’ – içinde ali geçenleri seçer. ali yerine .ali kullanılırsa bir karakterden sonra gelen anlamına gelir.
SELECT kolon_ismi1 , kolon_ismi2 FROM tablo_ismi WHERE kolon_ismi55 REGEXP ‘ali’ – içinde ali geçenleri seçer. ali yerine .ali kullanılırsa bir karakterden sonra gelen anlamına gelir. ali|veli kullanılırsa içinde ali ya da veli geçen anlamına gelir.
SELECT kolon_ismi1 , kolon_ismi2 FROM tablo_ismi WHERE kolon_ismi55 REGEXP ‘[12345678] tane ali’ – dersek 1 ali yada 2 ali yada … ali geçenleri seçer. [^12345678] dersek bunlar haricindekiler anlamına gelir. [1-5] 12345 anlamına gelir.
SELECT CONCAT(kolon_ismi1 , ‘,’ , kolon_ismi55) FROM kolon_ismi66 – kolon_ismi1,kolon_ismi55 şeklinde bir çıktı oluşur.
SELECT CONCAT(kolon_ismi1 , ‘,’ , kolon_ismi55) AS yeni_kolon FROM kolon_ismi66 – üsttekiyle aynı çıktı oluşur oluşan kolon yeni_kolon olarak adlandırılmış olur.
SELECT kolon_ismi1 , kolon_ismi2 , kolon_ismi-1 AS indirimli_fiyat FROM tablo_ismi – kolon_ismi1,kolon_ismi2 ve indirimli_fiyat olarak adlandırılıan kolon_ismi ndeki değerlerin 1 eksiği seçilmiş olur.
SELECT UPPER(kolon_ismi1) FROM tablo_ismi – UPPER fonksiyonu aldığı kolondaki içeriği büyük harfe dönüştürür.
SQRT(kolon_ismi) fonksiyonu aldığı kolondaki içriğin karekökünü alır.
AVG(kolon_ismi) fonksiyonu aldığı kolondaki içeriğin ortalamasını alır. aggregate (toplam) türü bir fonsiyondur ve bu tür foksiyonlar tek sonuç dönderir.
SUM(kolon_ismi) fonksiyonu aldığı kolondaki içeriğin toplamını dönderir. aggregate (toplam) türü bir fonsiyondur ve bu tür foksiyonlar tek sonuç dönderir.
COUNT(kolon_ismi) bir kolondaki tüm satırları sayar. örn SELECT COUNT(urun) FROM satici WHERE satici_id=5433
MAX(kolon_ismi) – aldığı kolondaki en büyük değeri döndürür. AS falanca_max olarak adlandırılabilir.

SELECT satici_id , COUNT(*) AS urun_sayisi FROM GROUP BY satici_id – her satici için urun sayısına göre gruplama yapar.

ALTER TABLE tablo_ismi ADD FULLTEXT(text_iceren_kolon_ismi) -ile text search özelliğini text içiren bir kolonda aktif ediyoruz.
SELECT kolon_ismi1,kolon_ismi2 FROM tablo_ismi WHERE Match(arama_yapılacak_seacrh_aktif_kolon) Against(‘aranacak_text’) -ile arama aktif kolonda arama yapıyoruz. Bu diğer yöntemlerden hızlıdır ve ranking (sonuçları arama kriterine uygunluğa göre sıralama) özelliği bulunur.
SELECT kolon_ismi1,kolon_ismi2 FROM tablo_ismi WHERE Match(arama_yapılacak_seacrh_aktif_kolon) Against(‘+aranacak_text -istenmeyen_text’ IN BOOLEAN MODE) – +ile sonuçlarda olması, – ile olmaması gereken text belirtilir daha farklı operatörler de vardır. operatörleri kullanmak için IN BOOLEAN MODE eklenmelidir.
INSERT INTO tablo_ismi VALUES(‘kolon1e_girilecek_deger’,’kolon2e_girilecek_deger’,’kolon3e_girilecek_deger’,’kolon4e_girilecek_deger’) – kolon sırası korunarak tabloya satır ekleme
INSERT INTO tablo_ismi(kolonismi66,kolon_ismi1,kolon_ismi55,kolon_ismi77) VALUES (’66ya_girilecek_değer’,’1e’,’55e’,’77ye’) – bu şekilde kendi belirttiğimiz sırayla(NULL geçersizse boş bırakmamak kaydıyla) girebiliriz.
INSERT INTO tablo_ismi(kolonismi66,kolon_ismi1,kolon_ismi55,kolon_ismi77) VALUES (’66ya_girilecek_değer’,’1e’,’55e’,’77ye’), (’66ya_girilecek_değer’,’1e’,’55e’,’77ye’) -ile tek seferde birden fazla satır eklenebilir.
UPDATE tablo_ismi SET degistirilecek_kolon1=’eskisiyle_degisecek_deger’ , degistirilecek_kolon2=’eskisiyle_degisecek_deger’ WHERE id=123 – id kolonu 123 değerine eşit olan satırdaki değeri güncelleme
DELETE FROM tablo_ismi WHERE id =1234 -idsi 1234 olan satırı silme
CREATE TABLE tablo_ismi (kolon_ismi1 bu_kolonun_data_tipi , id_kolunu int(11) NOT NULL AUTO_INCREMENT ,kolon_ismi3 tip(boyut) NOT NULL , PRIMARY KEY (id_kolunu)  ) -id_kolonu primary key olacak,auto increment olacak ve kolon_ismi3 ve id_kolonu boş olmayacak şekilde bir tablo oluşturma
ALTER TABLE ekstra_kolon_eklenecek_tablo ADD yeni_kolon data_tipi(uzunluk) – varolan bir tabloya satır ekleme
ALTER TABLE kolon_silinecek_tablo DROP COLUMN silinecek_kolon_ismi – varolan bir tablodan satır silme
DROP TABLE silinecek_tablo_ismi -bir tabloyu tamamen silme
RENAME TABLE eski_tablo_ismi TO yeni_tablo_ismi -tablo ismini değiştirme
CREATE VIEW gecici_tablo_ismi AS SELECT kolon_ismi2,kolon_ismi55 FROM tablo_ismi ORDER BY kolon_ismi77 DESC LIMIT 10 -kolon1 ve 55 teki bilgileri 77 ye göre sıralayarak gecici_tablo_ismi isminde gecici bir tablo oluşturma. Bu yöntem veriyi kendiliğinden güncelleyerek bir yerlerde kullanmak için güzeldir.
SELECT Concat(kolon_ismi2,’,’kolon_ismi55) AS gecici_isim FROM tablo_ismi– 2 ve 55 teki verileri aralarına virgül koyarak birleştirip gecici_isim kolonunda görme
CREATE VIEW koyulacak_kolon_ismi AS SELECT Concat(kolon_ismi2,’,’kolon_ismi55) AS gecici_isim FROM tablo_ismi – 2 ve 55 teki verileri aralarına virgül koyarak birleştirip koyulacak_kolon_ismi kolonu şeklindegörme VIEW geçici bir sistem olsa da SELECT vs kullanabiliriz.

SELECT i.seller_id, i.name, c.id FROM customers AS c,items AS i WHERE i.seller_id=c.id -tabloya geçici nickname vererek kullanma
SELECT customers.name , items.name FROM customers , items WHERE customers.id=seller_id -satıcıları ürünleriyle görme
SELECT customers.name , items.name FROM customers LEFT OUTER JOIN items ON customers.id=seller_id -satıcıları (ürün satmayanlar da dahil) ürünleriyle görme ON: WHERE gibi kullanıldı LEFT : soldaki tüm satırlar sonuçta olsun demek