Button Tıklama Olayı ile Açıklama Ekleme

B1 den B10 a kadar olan hücre değerlerini A1 den A10 a kadar açıklama olarak ekleyen button kodu

Sub Test()
Dim myText As String
Set Rng = Range("A1:A10")
For Each cell In Rng
myText = Cells(cell.Row, 2).Text
cell.AddComment.Text Text:=myText
Next cell
End Sub
spacer

ORDER BY İfadesi

select * from employees
order by hire_date; --Default olarak order by ascending (artan) olarak kullanılır.

order by hire_date ile order by hire_date asc aynı demektir yazılmak zorunda değil ancak yazılması okunurluğu arttırır.
order by hire_date descending (azalan) olarak kullanılır.

Default olarak ascending olan sıralama işleminde null değerler sonda yer alır, descending olan sıralama işleminde başta yer alır.
order by commission_pct sorgusunda asc olduğu için null olanlar sonda gelir.
order by commission_pct desc sorgusunda des olduğu için null olanlar başta gelir.

asc için null sonda olduğu halde biz başta gelmesini istiyorsak nulls first kullanmalıyız.
order by commission_pct nulls first;

order by içinde alias kolon adı kullanılabilir.
select first_name fname
from employees
order by fname;

Bir expression (ifade)'ye göre order by kullanılabilir.
select employee_id, salary+100
from employees
order by salary+100;

mantıksal olarak order by içinde olan kolon select içinde de olmalıdır ama olmak zorunda değil.
select içinde olmayan kolona göre de order by yapabiliriz ama bu çok da mantıksal olmaz.

order by department_id, first_name --birden fazla kolona göre order by kullanılır
order by department_id asc, first_name desc --kolonlara göre farklı sıralama kullanılabilir.

order by 1,3; --ilk kolona ve içinci kolona göre order by yapar



spacer

SQL WHERE İfadesi

Çoğu zaman bir tablodan veri çekerken belirli koşulları sağlayan satırları çekmesi için koşul giririlir. Bu koşullar WHERE ile birlikte kullanılır.
SELECT * FROM EMPLOYEES; --Tüm satırları getirir.
SELECT *
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 90; --departmen_id değeri 90 olan rowlar getirilir.
Burada karşılaştırma operatörleri kullanılır. Bunlar aşağıda belirtilmiştir.
tr

Where ifadesinde karekter değerler (char,varchar2) ve tarih(date) değeri tek tırnak içinde yazılır diğerleri tırnaksız yazılır. Karakter değerleri case sensitive iken tarih değeri format sensitivedir.

Default tarih formatı DD-MON-YY dir.
select * from employees
where hire_date = '17-OCT-03';

https://docs.oracle.com/database/121/SQLRF/sql_elements002.htm#SQLRF51056

Where içinde between ile değer aralığı kullanılabilir.
select * from employees where salary between 10000 and 20000;--değer aralıkları dahildir
between 20000 and 10000 gibi bir ifade hata vermez ancak sonuç döndürmez. mantıksal yanlış kullanım olur.

select * from employees where first_name between 'A' and 'C'; --adı A ve C aralığındaki değerlerle başlayan çalışanlar sorgulanıyor.

Birden fazla değer kullanmak için IN operatörü kullanılır.
select * from employees where salary in (10000, 20000, 25000); --maaşı 10000, 20000 veya 25000 olan çalışanlar sorgulanıyor

Karakter setleri için özel ifade kullanmak için LIKE kullanılır. LIKE içinde % hiç veya daha fazla karakter, _ ise bir karakter anlamına gelir.
where first_name like 'A%' -- adı A ile başlayanlar
where first_name like '%A' -- adı A ile bitenler
where first_name like '%BA%' -- adı içinde BA geçenler
where first_name like '_d%' -- ikinci karakteri d olanlar
where first_name like '__s%' --üçüncü karatkteri s olanlar

LIKE içindeki özel karakter olan % ve _ kullanmak istersek önüne escape karakteri kullanırız.
where job_id like 'SA/_%' escape '/' --SA_ ile başlayan job_id getirilir
where job_id like 'SA[_%' escape '[' --SA_ ile başlayan job_id getirilir
Kaçış karakteri için / veya [ her ikisi de escape ile tanıtılıp kullanılır sonuç aynıdır.

Null ifadesi için "=" kullanılmaz "is null" kullanılır.
where commission_pct = null hatalı olurç where commission_pct is null olmalıdır.

like, in, is null, between tersi için not like, not in, is not null, not between kullanılır.
where employee_id not in (100, 101); --100 ve 101 olmayan çalışanları getirir.
where commission_pct is not null; --komisyonu null olmayanlar
where first_name not like 'S%'; --adı S ile başlamayanları getirir.
Eşit değil için <> veya != operatörü kullanılır.

Where içinde AND, OR ve NOT kullanılabilir. Öncelik sırasına göre operatörler kullanılır. 10+5*5= 35 teki öncelik sırası gibi. Öncelik tablosu aşağıdaki gibidir. Ancak parantez kullanarak öncelik sırası değiştirilebilir.
select last_name, job_id, salary
from employees
where job_id = 'SA_REP'
or job_id = 'AD_REP' and salary > 15000;
Yukarıki sorgu incelendiğinde öncelik sırasına göre job_id = 'SA_REP' veya job_id = 'AD_REP' and salary > 15000 koşulu sağlanan kayıtlar getirilir. Aşağıdaki sorgu yukarıdaki ile aynıdır sadece okunaklı yazılmıştır.
select last_name, job_id, salary
from employees
where job_id = 'SA_REP'
or (job_id = 'AD_REP' and salary > 15000);
Aşağıdaki sorguda ise aynı sogru parantezler ile önceliklendirilmiştir.
select last_name, job_id, salary
from employees
where (job_id = 'SA_REP' or job_id = 'AD_REP') and salary > 15000;








spacer

Windows 10 üzerinde JAVA_HOME Ayarlanması



Arama bölümünden "Edit the system environment variables" enterlayarak "System Properties" ekranını açıyoruz. "Environment Variables" butonuna tıklıyoruz. Burada hem mevcut user hem de system için değişken ekleme bölümü var. Aşağıdaki "System variables" kısmından "New..." butonu ile açılan ekranda "Variable name" JAVA_HOME "Variable value" C:\Program Files\Java\jdk1.8.0_181 yazıyoruz. Siz kendi jdk versiyonunuzun yolunu bulup onu seçin. Daha sonra "Path" değişkenini seçip "Edit..." butonu ile açılan ekranda "New" butonu ile %JAVA_HOME%\bin değerini ekleyin kaydedip kapatın. Command Prompt üzerinden yapılan işlemleri javac -version yazarak kontrol edebilirsiniz.
spacer

SQL Processing

SQL Processing işlemi parsing, optimization, row source generation ve execution adımlarından oluşur. Sql ifadesine göre bazı adımlar atlanabilir.



SQL Parsing:
Bir sql ifadesi çalıştırılacağı zaman veritabanı üzerinde parse call talebi ile vertabanı üzerinde cursor açılır. Bu cursor session bazlı açılır ve private SQL area üzerinde tutulur. Cursor ve private SQL area program global area (PGA) içindedir. Parse call işlemi 3 aşamadan oluşur. Syntax check, semantic check, shared pool check
Syntax Check adımında yazım kontrolü yapılır. örneğin from yerine form yazılan bir sorgu syntax hatası verecektir. Semantic check adımında mantıksal kontrol yapılır. örneğin yazılan tablo veya kolonun olmaması semantic hata verecektir. Her sql ifadesi için bir execution plan çıkarılır ve hash değeri üretilir. V$SQL.SQL_ID dictionary view üzerinde görülebilir. Aynı sql ifadesi için farklı planlarlar çıkarılabilir. Çıkarılan sql planları shared pool area üzerinde saklanır. Shared pool check adımında sql ifadesi için daha önce bir plan çıkarılmış mı bunun kontrolü yapılır. Eğer daha önce bir plan çıkarılmamışsa bu aşamaların hepsinin yapılmasına hard parse sadece varolan planın getirilmesine soft parse denir.

SQL Optimization: Var olan planlar içinden en iyisinin seçilmesine denir. Bir dml ifadesi için en az bir tane plan çıkarılmalıdır. DML alt sorugusu içermeyen DDL ifadeleri için optimization yapılmaz.
SQL Row Source Generation: Row source generation optimizer tarafından optimum execution'ı çıkarmak için kullanılan bir yazılımdır. SQL engine tarafından adım adım aşamalarla veri getirilir. Her adımda satır kümesi döner ve diğer adım için kullanılır. Her adımda döner bu satır kümesine row source denir. Row source bir tablo, view veya joinlenmiş veri grubu olabilir. Row source generator çıkarılan row sourcelardan oluşan execution plana row source tree denir. Row source tree içinde tablo sıralaması, adı geçen tablolar için erişim methodu(table access by index, table access full), join işlemleri için join methodu(hash join), filter sort veya aggregate gibi veri operasyon bilgileri içerir.

Aşağıda örnek bir execution planı yer almaktadır. Soyadı A ile başlayan tüm çalışanların last_name, job_title, department_name kolonlarının getirildiği bir select sorgusu inceleyelim.



SQL Execution: Row source generator tarafından üretilen tree üzerindeki her row source için SQL engine çalışır. Bu işlem DML işlemleri için zorunlu bir adımdır. Row source tree üzerindeki plan tersten okunur. Bottom up yaklaşımına göre execute edilir. SQL engine tarafından işletilen siyah kutu adımlarında fiziksel veri okunur. 6. adımda departments tablosundaki tüm satırlar full table scan yapılır. 5. adımda jobs tablosundaki tüm satırlar için full table scan yapılır. 4. adımda emp_name_ix indexi üzerinde A ile başlayan değerler için arama yapılır ve bulunan değerler için rowid döner. Örneğin Abdullah için AAAPzRAAFAAAABSAAe rowid değeri dönsün. Her rowid için employees tablosunda index üzerinden table access yapılır. SQL engine tarafından işletilen beyaz kutu adımlarında operasyonel işlemler yapılır. 2. adımda 3. ve 5. adımdaki row source içindeki her row için eşleşen kayıtlar 1. adım için döndürülür. 1. adımda 2. adımdaki row source ile 6. adımdaki row source içindeki rowlardan eşleşen row seti sonuç olarak döndürülür.

https://docs.oracle.com/database/121/TGSQL/tgsql_sqlproc.htm#TGSQL189
spacer