1. Ana Sayfa
  2. Yazılım
  3. SQL’in Aydınlık Yüzü – SQL 101

SQL’in Aydınlık Yüzü – SQL 101

SQL’in Aydınlık Yüzü – SQL 101

Sizlere bu makalemde dili ilgili çok makale var fakat ben bu makalemde tarafında kullanılan komutlarıyla sizlere giriş olarak örnekleriye anlatmaya çalışacağım, bir programlama dili değil sorgu dilidir ve kısaca nedir diye bahsedecek olursak sorgulama dili diyebiliriz yani önümüzde bir veritabanı var ve bir sürü veri var bu verileri belirli kriterler doğrultusunda sayesinde sorgulayabilir üzerinde işlemler yapabiliriz. ’in açılımı Structured Query Language’dir, Türkçesi ‘ Yapılandırılmış Sorgulama Dili’ bu dil sayesinde veriler üzerinde yönetim sağlayabiliriz.

Belli veri tabanlı dilleri aşağıda ki gibidir.

 

Ben anlatımımı üzerinden anlatacağım. Oracle üzerinden sizde örnek alıştırmalar yapmak isterseniz bir önceki makalemde bahsetmiş olduğum HR veritabanı üzerinden yapabilirsiniz. Bu konu hakkında daha önce yayınlamış olduğum makale bu linkten erişebilirsiniz

Diğer veritabanlarındada bu tarz hazır örneklerde mevcuttur. ( MSSQL – Northwind gibi)

  • SELECT

Select veritabanı üzerinde ki tablolarlardan veriyi seçmek için kullanılır. İlk başta select ile başlıyorum, gördüğünüz üzere sahip olduğum tüm tablolaları listelemek için

select * from countries, departments, employees, job_history, jobs, locations, regions;

komutunu yazdım ve bahsi geçen tablolarda from dan önce * diyerek tüm sütunları listelemiş oldum

Resim-1

Resim-2

Select ile daha küçük bir sorgu yazalım. Departments tablosunda ki department_name sütunu listelemek istiyorum o yüzden from dan önce listelemek istediğim sütunun adını yazıyoruz.

select department_name from departments


Resim-3

Eğer birden çok sütun belirtmek istiyorsak sütun isimlerinin aralarına virgül eklemek gerekmektedir.

Not :

Boşluk olan kısımlarda köşeli parantez kullanılır. [ Oracle Database]

Karakter kullandığımız kısımlarda ise tek tırnak işareti kullanılır ‘Oracle’ gibi fakat bazı editörlerde sayısal kısımlardada tek tırnak geçerlidir.

  • WHERE

Where ile belirleyeceğimiz komuta uyan kayıtları listeleyebiliriz yani buna koşul belirlemek diyebiliriz.

Örnek : employess tablosunda salary sütununda maaşları 4800 olanları listelemek istiyoruz.

select * from employees where salary=’4800′


Resim-4

Where ile beraber kullanabileceğimiz farklı operatörler de mevcuttur, bu operatörleri yukarıdaki örneğe istinanden aşağıda belirtilmiştir.

  1. = : Eşit ( 4800 maaş alanları listeler)
  2. > : Büyüktür ( 4800 den büyük olanları listeler)
  3. < : Küçüktür ( 4800 den küçük olanları listeler)
  4. <> Eşit olmayan ( 4800 e eşit olmayanları listeler)
  5. >= Büyük eşit olan (4800 e eşit ve büyük olanları listeler)
  6. <= Küçük eşit olan ( 4800 e eşit ve küçük olanları listeler)
  • IN

Birden fazla olası değerler için kullanılır.

Örnek : 4800 ve 2600 maş alanları listelemek istiyorum.

select * from employees where salary IN (‘4800′,’2600’)


Resim-5

  • LIKE

Karakter bazlı arama yapmak için kullanılır, burda önemli olan LIKE ‘dan sonra arayacağımız karakteri yazıp % işaretini kullanmalıyız.

Örnek: Salary sütununda 4 ile başlayanları listelemek istiyorum.

select * from employees where salary LIKE ‘4%’

Not: 4 ile biteni aramak isteseydik % ifadesi 4’ün soluna gelecektir.


Resim-6

LIKE ile ilgili diğer parametreler ise;

Abc harfleriyle başlayan kayıtları listelemek isterseniz ‘[abc]%’

Abc ile başlamayan kayıtları listelemek isterseniz ‘[!abc]%’

Tablonuzun içindeki kayıtlarda bazı karakterleri bilmiyor ama arama yapmak istiyorsanız ‘ ms_ _to’ diyerek arama gerçekleştirebilirisiniz, ben burda mshowto yu aramak istedim.

  • BETWEEN

Belirtilen aralıktaki kayıtları listelemek için kullanılır ve belirteceğimiz aralık 2000 – 5000 arası ise araya AND ile aralığı belirlemelisiniz.

Örnek : 2000 ve 5000 arası maaş alanları listelemek istiyorum.

select * from employees where salary BETWEEN 2000 AND 5000


Resim-7

Rakamsal alanlarda tırnak işareti kullanılmaz( yukarıda belirttiğim notta bazı editörler kabul etmektedir.) eğer burada karakter bazlı bir arama gerçekleştirmiş olsaydık
( select * from employees where salary BETWEEN ‘A’ AND ‘B’)
olarak yazmalıydık.

2000 ve 5000 arasında olmayan maaşları listelemek isteseydik eğer NOT BETWEEN diyerek listeleyebilirsiniz.


Resim-8

  • DISTINCT

Tablolardaki belirteceğimiz sütünlarda tekrar eden kayıtlardan sadece bir tanesini alır ve tekrar etmeyen kayıtlarla beraber listeler.

Örnek : Departments tablomdaki location_id sütununu listeledim ve distinct örneğini bu tablo üzerinden anlatacağım.


Resim-9

select distinct location_id FROM departments


Resim-10

Yukarıdaki tablo ile karşılaştırdığımızda aynı değerleri çıkararak tek bir değermiş gibi bize listeledi.

DISTINCT ile ilgili önemli 2 örnek daha vermek istiyorum.

  1. select DISTINCT location_id, manager_id FROM departments

Burada iki alanıda tek bir alan gibi bize listeledi.


Resim-11

  1. select DISTINCT location_id, manager_id,department_id FROM departments

Burada ise dikkat etmemiz gereken durum yukarıdaki sorgularda location_id ve manager_id de aynı olan değerleri tekrarlamıyordu fakat burada tekrarlıyor nedeni ise department_id ksımında ki değerlerin farklı olmasından kaynaklıdır.


Resim-12

  • AND – OR

AND operatörünü 2 koşul belirlemek için kullanabiliriz ( Sadece 2 koşul değil birden fazla koşulda belirleyebilirsiniz ben örneklerimde 2 koşul üzerinden ilerledim.)

Örnek : employess tablosunda job_id si ‘IT_PROG’ olanları listeledim.


Resim-13

IT_PROG içinde salary 9000 alanı listelemek istersem eğer

select * FROM employees WHERE job_id=’IT_PROG’ AND salary=’9000′


Resim-14

OR operatörüde AND gibi 2 koşul belirlemek için kullanabiliriz.

Örnek : employess tablosunda job_id si ‘IT_PROG’ ve FI_ACCOUNT ları listelemek istiyorum.

select * FROM employees WHERE job_id=’IT_PROG’ OR job_id=’FI_ACCOUNT’


Resim-15

Bu iki operatörü beraberde kullanabiliriz.

Örnek: employess tablosunda job_id IT_PROG olanların salary kısmı 4800 ve 9000 olanları listele dediğimizde

select * FROM employees WHERE job_id=’IT_PROG’ AND (salary=’4800′ OR salary=’9000′)


Resim-16

  • ORDER BY

Order by veritabanımızdaki kayıtları büyükten küçüğe ve küçükten büyüğe sıralamamızda yardımcı olur. Sadece rakam olarak değil alfabetik olarakta sıralama yapabiliriz, bu sıralamayı 2 parametre ile gerçekleştiriyoruz.

ASC ( Asceding) : Küçükten büyüğe ( Alfabetik olarak A-Z)

DESC (Descending) : Büyükten küçüğe ( Alfabetik olarak Z-A)

Bu parametreleri sorgunun sonuna ekliyoruz.

Örnek:

Küçükten büyüğe;
select * from employees order by employee_id asc


Resim-16

Büyükten küçüğe;

select * from employees order by employee_id desc


Resim-17

Where kullanarakta sadece seçeceğimiz alana dairde sıralama gerçekleştirebiliriz.

select * from employees where salary=’4800′ order by employee_id asc


Resim-18

Gelin biraz daha karmaşık bir duruma getirelim bu sorguyu

select * from employees order by salary asc, first_name desc

Yukarıdaki sorguda salary küçükten büyüğe olacak fakat first_name i büyükten küçüğe olarak listelensin istedim.


Resim-19

Yukarıda gördüğünüz üzere salary kısımları aynı olanlarda first_name bakarak büyükten küçüğe doğru sıraladı.

Bir diğer örnek iste sorgumuz;

select * from employees order by first_name desc, salary


Resim-20

Bu sorguda first_name i büyükten küçüğe doğru sıralamak istedim fakat dikkatinizi çekerse salary kısmına herhangi bir parametreyi eklemedim burda first_name e göre sıralama yaptı fakat aynı olan isimlerden kaynaklı salary kısmına bakar sıralamayı gerçekleştirdi.

  • SELECT INTO

Select into tablomuzdaki kayıtı alıp yeni bir tablo yaratıp içine kopyalamak için kullanılır.

Not: Bu sorguyu kullanacak kullanıcının db üzerinde tablo oluşturma yetkisi olmalıdır. Employees tablosunda ki first_name sütununu aynı db üzerine koplayamak istiyorum.

SELECT first_name INTO isim_yedek FROM employees

Oracle üzerinde test yapanlar burada missing keyword hatası alacaksınızdır



Resim-21

Yukarıda yazdığım sorguyu MSSQL üzerinde çalıştırabilirisiniz. Oracle üzerinde ise CREATE TABLE isim_yedek AS SELECT first_name FROM employees Diyerek aşağıda ki sonucu elde edebilirsiniz.


Resim-22

Bellir bir kritere göre bu işlemi gerçekleştirmek istersek Where kullanabiliriz ve farklı bir veritabanına ya da path e kopyalamak istersek eğer IN kullanmalıyız.

Yukarıda first_name olarak kopyaladığım tabloyu farklı bir isimle kopyalamak istersekte AS kullanırız.

Örnek: first_name AS ilk_isim

  • INSERT INTO

Insert into yu tablomuza yeni bir kayıt eklemek için kullanırız ve eklemede 2 yöntem bulunur.

  1. Tablo adını belirtip sadece ekleyeceğimiz değerleri belirtebiliriz, burada önemli olan gireceğimiz değerleri tablo içindeki sütun sırasına göre eklemeliyiz çünkü rakamsal alana alfabetik bir veri eklemek istersek hata ile karşılaşabiliriz ya da veriler yanlış alanlara eklenebilir.

    INSERT INTO employees VALUES (208,’Emre Ferit’,’Aslantaş’)

  2. Bu yöntemde ise ekleyeceğimiz sütun adlarını belirleyerek işlemi gerçekleştirebiliriz.

INSERT INTO employees (employees_id,first_name,last_name) VALUES (208,’Emre Ferit’,’Aslantaş’)

Not: HR user ı ile bağlandıysanız hata alabilirsiniz yetkili user (sys/sysdba) ile test edebilirsiniz.

  • UPDATE

Update ifadesinde ise tablolarımızda bulunan kayıtları güncellemek için kullanırız.

Örnek: Aşağıda ki sorguda önemli olan kısım güncellemek istediğimiz kayıdı id’si ile belirleyebilirsiniz.

Ben id 100 olan kayıdın first_name ve salary sütununu güncellemek istedim.

UPDATE employees SET first_name=’Emre’,salary=5500 Where employee_id=100


Resim-23

Eğer sadece UPDATE employees SET salary=5500 kodunu kullansaydım eğer Where ifadesini kullanmadığım için tablo içerisinde ki tüm salary kayıtları 5500 olarak değişecekti.

  • DELETE

Delete ifadesini kayıtları silmek için kullanırız.

Örnek: Departments tablosunda bulunan department_name sütunun daki payroll değerini silmek istiyoruz.

delete from departments where department_name=’payroll’


Resim-24

Eğer komple bir alanı silmek isteseydik o alanın id sini yazmamız yeterlidir ve employees tablosunda department_name i payroll olanları silmek isteseydik ise;

Delete from employees where department_id=27 kodunu çalıştırarak silebilirdik.

(Örnek tabloda employees tablosunun içinde department_id mevcuttur ondan kaynaklı örnek bu şekildedir.)

Not: Bir tablo içerisinde sadece kayıtları silmek istersek eğer TRUNCATE_TABLE employees diyerek employees tablosu içerisinde ki kayıtları silmiş olurduk. Truncate de silme işlemi yaparsak id atamaya 1 den başlar fakat DELETE ise kaldığı yerden id atamaya devam eder.

  • SELECT TOP (ROWNUM)

Select top ifadesi listelemek istediğimiz kayıtları sınırlamak için kullanırız. Select top ifadesi Oracle da farklı ifade edilir.

MSSQL : SELECT TOP 10 ( yüzde olarak sorgulamak istersek PERCENT *) first_name, last_name FROM employees

ORACLE: select first_name, last_name, salary from employees where ROWNUM <=10


Resim-25

ALIASES

Yukarıda bir örnekte bahsettiğim üzere ALIASES tablo veya sütunlara geçici olarak isim verilmek için kullanılır.

Örnek: SELECT jobs _title AS unvan FROM jobs AS is

Not: Geçiçi isim tanımlarken Where ifadesini kullanabiliriz ve where kullandıktan sonra verilen ad tanımlanır.

  • JOIN

Join ifadesini Inner Join (sadece join olarakta yazabiliriz)i Left Join, Right Join ve Full Join olarak bu kısımda anlatacağım. Farklı tabloları birleştirmek için INNER JOIN kullanılır belirttiğim üzere JOIN olarakta yazabiliriz.

Örnek : Employees ve Departments tablolarını birleştirmek istiyorum.

select * from departments JOIN employees ON employees.department_id = departments.department_id


Resim-26

Tablo birleştirmede önemli olan kısım iki tablo için ortak bir değer belirlemek buda id kısımları oluyor ondan kaynaklı ON parametresinden sonra id leri eşitledik. From’dan önce * kaldırıp sütun adlarını belirlersek daha bize filtrelenmiş olarak tabloyu bize sunar.

LEFT JOIN : Bu ifadede kayıtları listelerken birinci tabloyu baz alır ve ikinci tablodan sadece aynı olan kayıtları bize listeler birinci tablo ile aynı olmayan değerler null olarak gelir.

RIGHT JOIN: Left join’in tam tesi olan ifade listelerken ikinci tabloyu baz alır ve birinci tablodan sadece bize ikinci tabloda olan kayıtları listeler

Not: JOIN olarak yazdığımız kısma sadece LEFT,RIGHT ve FULL JOIN olarak değiştirmeliyiz.


Resim-27

FULL JOIN: Diğer join parametrelerine nazaran belirlediğimiz tablolardaki tüm kayıtları değerleri ile listeler.


Resim-28

UNION

Union iki adet tablodaki seçeceğimiz kayıtları birleştirerek tek tablo gibi bize listeler ve listelerken aynı olan kayıtlar bir kere alınır eğer aynı olan kayıtları listelemek istiyorsak UNION ALL komutunu kullanmalıyız. Departments tablosunda Departments_name sütununu ve Employees tablosunda ise first_name tablosunu birleştirmek istiyorum, ilk başta department_name i belirttiğim için o tablo altında kayıtlar listelenecektir.

select department_name from departments UNION ALL SELECT first_name FROM employees


Resim-29

  • VIEW

View, yazmış olduğumuz sql kodlarını bir tabloda toplamamıza yarar, gerçek bir tablo gibidir fakat sanal tablo olarak adlandırabiliriz. Yukarıda o kadar kod yazdık en sona view oluşturmak ile makalemi sonlandırmak istedim.

View oluşturmak,güncellemek ve silme işlemlerini anlatacağım.

CREATE VIEW

CREATE VIEW personel AS SELECT first_name, last_name FROM employees


Resim-30

View’imiz oluştu view i çağırmak için ise ‘ Select * FROM personel’ diyoruz.


Resim-31

View üzerinde güncelleme yapmak istiyorum ve salary sütunun ekliyorum.

CREATE OR REPLACE VIEW personel AS SELECT first_name,last_name,salary FROM employees


Resim-32

View imi güncelledin tekrardan ‘Select * From personel’ dediğimde ise ;


Resim-33

Salary kısmıda view’e eklenmiş oldu. View’ı silmek istiyorsak eğerDROP VIEW personel’ diyerek silebiliriz.


Resim-34

Sizlere elimden geldiğince giriş olarak işimize yarayacak SQL komutlarını örnekleriyle anlatmaya çalıştım bir sonraki makalemde SQL Fonksiyonlarını anlatmayı hedefliyorum.

Bu konuyla ilgili sorularınızı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.

Referanslar

www.mshowto.org

TAGs: SQL,T-SQL,TCL,PL/SQL, T-SQL komutları, , Oracle DB,

Yorum Yap

Yazar Hakkında

İstanbul doğumluyum. Anadolu Üniversitesi Yönetim Bilişim Sistemleri bölümünde öğrenim görmekteyim. IT sektörüne lise stajımda Türkiye İş Bankası GM'de adım attım ve bu süreçte CCNA Discovery : Networking for Home and Small Businesses sertifikasına sahip oldum. Şuan Europ Assistance Türkiye'de IT Uzmanı olarak çalışmaktayım.

Yorum Yap