Notes
![]() ![]() Notes - notes.io |
DDL, bir veritabanının yapısını tablolar, görünümler, dizinler ve prosedörler gibi nesneleri tanımlamak için kullanılan SQL’in bir alt kümesidir. En çok kullanılan DDL ifadelerinden bazıları şunlardır:
CREATE: Yeni bir veritabanı nesnesi oluşturur.
ALTER: Var olan veritabanı nesnesini değiştirmek için kullanılır. Örneğin ALTER komutunu kullanarak, var olan bir tabloya yeni bir sütun ekleyebiliriz.
DROP: Mevcut bir veritabanını silmek için kullanılır.
TRUNCATE: Mevcut bir veritabanındaki tüm satıları silmek için kullanılır. DROP ile farkı tablonun yapısı ve dizinleri korunur.
RENAME: Mevcut bir veritabanı nesnesini yeniden adlandırmayı sağlar. Örneğin mevcut bir tablonun ismini RENAME komutuyla değiştirebiliriz.
DML ise bir veritabanındaki verileri işlemek için kullanılan SQL’in bir alt kümesidir. En yaygın DML ifadelerinden bazıları şunlardır:
SELECT: Bir veritabanındaki bir veya birden fazla tablodan veri çekmek, sorgulamak için kullanılır.
INSERT: Tabloya veri eklemek için kullanılır.
UPDATE: Tablo içerisindeki veriyi değiştirmek, güncellemek amacıyla kullanılır.
DELETE: Tablo içerisinde bulunan bir kaydı silmek için kullanılır.
[appmaster.io/tr/blog/ddl-ve-dml-arasindaki fark]
Bu eğitime ait; katılımcıların ve eğitim veren danışmanın bir görüntüsünü aşağıya ekliyorum.
[Eğitmenin perspektifinden: Mehmet Enes Aydoğmuş (Kıdemli Database Admin)]
Bu eğitim içerisinde MS Sql Server kullanılmıştır. Derse ait yapmış olduğumuz bazı örnek sorgulara ve çıktılarına aşağıda yer vereceğim. Gerekli izin Eğitmen (M.Enes Aydoğmuş) tarafından verilmiştir.
NOT: Derste yazılan sorgular EGITIM veritabanı kullanılarak hazırlanmıştır. Bu veritabanı altında bulunan bazı tablo isimleri: ad, soyad, bolumler, il, ilce, LISELER, UNIVERSITE
Örnek Sorgu 1:
SELECT * FROM
ad a inner join soyad s
on
a.id=s.id
where a.id=69;
Örnek Sorgu 2:
select ad from ad
where
id=FLOOR(RAND()*(359)+1);
(Bu sorguda RAND ifadesi ile rastgele bir sayı elde edilip, FLOOR ifadesi ile de rastgele üretilen bu sayının tam kısmı alınmıştır.
RAND() ifadesi 0 ile 1 arasında bir sayı üretir. 359 ile çarpıp 1 ifadesini ekleyince de 1 ila 360 arasında sayı üretir.)
Örnek Sorgu 3:
SELECT COUNT(1) FROM [EGITIM].[dbo].[soyad] (NOLOCK);
SELECT MAX(ID) FROM [EGITIM].[dbo].[soyad] (NOLOCK);
SELECT MIN(ID) FROM [EGITIM].[dbo].[soyad] (NOLOCK);
SELECT TOP (2) * FROM [EGITIM].[dbo].[soyad] (NOLOCK);
(Yukarıdaki 4 sorguda da farklı bir veri çekilmiştir.
İlk sorguda tablo içerisindeki satır sayısı,
İkinci sorguda tablo içerisindeki ID sütununda bulunan en büyük sayı,
Üçüncü sorguda tablo içerisindeki ID sütununda bulunan en küçük sayı,
Dördüncü sorguda ise tablonun ilk iki kaydı listelenmiştir.
Ayrıca NOLOCK anahtar kelimesiyle üzerinde çalışmış olduğumuz tabloya
eğer başkaları tarafından bir işlem yapılıyorsa (örneğin; insert işlemi)
ilgili işlemlerin birbirini engelleyerek sonsuz bir bekleme döngüsüne girmesini engeller.)
Örnek Sorgu 4:
SELECT a.id as İl_Id ,a.il as İl_Adı,b.ilce as İlce_Adı
FROM il a (nolock)
inner JOIN ilce b ON a.id = b.ilid
where b.id = FLOOR(RAND()*(970 + 1))
(il tablosundan rastgele bir id’ye sahip il bilgisini ve bu ile ait ilçe
bilgisini de ilce tablosundan bulup getirir.)
Örnek Sorgu 5:
SELECT
a.ad,
s.soyad,
FORMAT(DATEADD(YEAR,
FLOOR(RAND() * (2021-2000)),'2000'),'yyyy') AS MezuniyetTarihi
FROM ad a (NOLOCK)
INNER JOIN soyad s ON a.id = s.id
WHERE
a.id = FLOOR(RAND() * 369 + 1)
(Rastgele id’ye göre kişinin ismini ve soyismini getirir.
Ayrıca bu kişiye rastgele olarak bir Mezuniyet tarihi oluşturur.)
Örnek Sorgu 6:
select *,
DateFromParts(rand()*47+1977,rand()*11+1,rand()*30+1)
as Doğum_Günü
from ad
where
id= FLOOR(RAND()*(359)+1)
(Rastgele bir id’ye göre kişinin bilgilerini getirir ve ona Doğum Günü oluşturur .)
Örnek Sorgu 7:
DECLARE @counter INT
SET @counter = 0
WHILE @counter <= 1000
BEGIN
print @counter
SET @counter = @counter + 1
END
(0’dan 1000’e kadar olan sayıları ekrana yazan sorgu)
Örnek Sorgu 8:
DECLARE @AD NVARCHAR(50)
DECLARE @SOYAD NVARCHAR(50)
DECLARE @CINSIYET CHAR(1)
DECLARE @IL NVARCHAR(50)
DECLARE @ILCE NVARCHAR(50)
DECLARE @UNIVERSITE NVARCHAR(50)
DECLARE @BOLUM NVARCHAR(80)
DECLARE @DOGUM DATE
DECLARE @counter INT
SET @counter = 0
WHILE @counter < 1000
BEGIN
select @AD=ad , @CINSIYET=LEFT(CINSIYET,1) from [EGITIM].[dbo].[ad] (nolock) where id=FLOOR(RAND()*(359)+1)
----------------------------------------------------------------------------------
SELECT @SOYAD=[soyad]
FROM [EGITIM].[dbo].[soyad] (nolock)where id=floor(rand()*2442+1)
----------------------------------------------------------------------------------
SELECT @IL=a.il , @ILCE=b.ilce
FROM [EGITIM].[dbo].[il] a (nolock)
INNER JOIN [EGITIM].[dbo].[ilce] b (nolock) ON a.id = b.ilid
where b.id = FLOOR(RAND()*969 + 1)
----------------------------------------------------------------------------------
select @UNIVERSITE=[UNIVERSITE] from [EGITIM].[dbo].[UNIVERSITE] (NOLOCK)Where id=floor(rand()*207+1);
----------------------------------------------------------------------------------
select @BOLUM=BOLUM from [EGITIM].[dbo].[bolumler] (nolock) where id = FLOOR(RAND() * 15+1);
----------------------------------------------------------------------------------
select @DOGUM=DateFromParts(rand()*25+1977,rand()*11+1,rand()*28+1)
SELECT @AD
,@SOYAD
,@CINSIYET
,@IL
,@ILCE
,@UNIVERSITE
,@BOLUM
,@DOGUM
,FORMAT(DATEADD(YEAR, FLOOR(RAND() * (2024-2000)),'2000'),'yyyy') AS MezuniyetTarihi
SET @counter = @counter + 1
END
(Select ile ilgili tablolardan veriler çekip DECLARE ile oluşturmuş olduğumuz değişkenlere atadık. Ardından en alttaki SELECT @AD, @SOYAD … sorgusuyla bu verileri ekrana yazdırdık, Ve DECLARE @counter ile oluşturduğumuz döngü ile bu işlemi 999 defa tekrarladık. Ekranda 999 adet kişi bilgisi görüntülenmiş olacak.)
Örnek Sorgu 9:
DECLARE @AD NVARCHAR(50)
DECLARE @SOYAD NVARCHAR(50)
DECLARE @CINSIYET CHAR(1)
DECLARE @IL NVARCHAR(50)
DECLARE @ILCE NVARCHAR(50)
DECLARE @UNIVERSITE NVARCHAR(50)
DECLARE @BOLUM NVARCHAR(80)
DECLARE @DOGUM DATE
DECLARE @counter INT
SET @counter = 0
WHILE @counter < 1000000
BEGIN
select @AD=ad , @CINSIYET=LEFT(CINSIYET,1) from [EGITIM].[dbo].[ad] (nolock) where id=FLOOR(RAND()*(359)+1)
----------------------------------------------------------------------------------
SELECT @SOYAD=[soyad]
FROM [EGITIM].[dbo].[soyad] (nolock)where id=floor(rand()*2442+1)
----------------------------------------------------------------------------------
SELECT @IL=a.il , @ILCE=b.ilce
FROM [EGITIM].[dbo].[il] a (nolock)
INNER JOIN [EGITIM].[dbo].[ilce] b (nolock) ON a.id = b.ilid
where b.id = FLOOR(RAND()*969 + 1)
----------------------------------------------------------------------------------
select @UNIVERSITE=[UNIVERSITE] from [EGITIM].[dbo].[UNIVERSITE] (NOLOCK)Where id=floor(rand()*207+1);
----------------------------------------------------------------------------------
select @BOLUM=BOLUM from [EGITIM].[dbo].[bolumler] (nolock) where id = FLOOR(RAND() * 15+1);
----------------------------------------------------------------------------------
select @DOGUM=DateFromParts(rand()*25+1977,rand()*11+1,rand()*27+1)
INSERT INTO CORLU ([AD], [SOYAD], [CINSIYET], [IL], [ILCE], [UNIVERSITE], [BOLUM], [DOGUM],[MEZUNIYET])VALUES (@AD
,@SOYAD
,@CINSIYET
,@IL
,@ILCE
,@UNIVERSITE
,@BOLUM
,@DOGUM
,FORMAT(DATEADD(YEAR, FLOOR(RAND() * (2024-2000)),'2000'),'yyyy') )
SET @counter = @counter + 1
END
(Bir önceki sorguda olduğu gibi select ile veriler çekildi ve DECLARE keyword’ü ile oluşturulan değişkenlere atamalar yapıldı. En alt satırda bulunan INSERT sorgusu ile de CORLU isimli tabloya değişkenlere atanmış veriler kullanılarak veri ekleme işlemi yapıldı. @counter yardımı ile de bu işlemler 999 kere gerçekleştirildi. Bu sayede sanal bir şekilde 999 adet kişiye ait veri tablosu oluşturulmuş oldu.)
Örnek Sorgu 10:
UPDATE [EGITIM].[dbo].[CORLU]
SET BOLUM = 'DEVELOPER'
WHERE BOLUM = 'AVUKAT';
(Bölümü AVUKAT olanları DEVELOPER olarak güncelleyen SQL sorgusu)
Örnek Sorgu 11:
SELECT
SUM(CASE WHEN bolum='DEVOLOPER' THEN 1 ELSE 0 END) AS DEVELOPER_SAYISI,
SUM(CASE WHEN bolum='RAPORLAMA' THEN 1 ELSE 0 END) AS RAPORLAMACI_SAYISI,
ABS(SUM(CASE WHEN bolum='DEVOLOPER' THEN 1 ELSE 0 END)-SUM(CASE WHEN bolum='RAPORLAMA' THEN 1 ELSE 0 END)) AS FARK
FROM
[EGITIM].[dbo].[CORLU] (NOLOCK)
(DEVOLOPER ile RAPORLAMA bölümündeki çalışan sayısı arasındaki farkı bulan sorgu)
Örnek Sorgu 12:
select count(CINSIYET) as toplam, CINSIYET
from [EGITIM].[dbo].[CORLU] (nolock)
group by CINSIYET
select (
--Erkek
select count(CINSIYET) from [EGITIM].[dbo].[CORLU]
group by CINSIYET having CINSIYET in ('E'))-(
--Kadın
select count(CINSIYET) from [EGITIM].[dbo].[CORLU]
group by CINSIYET having CINSIYET in ('K'))
(CORLU tablosundaki KADIN ve ERKEK sayısını bulup sonrasında arasındaki farkı getiren sorgu)
Örnek Sorgu 13:
SELECT IL ,COUNT(*) AS CALİSAN_SAYİSİ
from [dbo].[CORLU] (nolock)
group by IL
ORDER BY 2 DESC
(İllere göre toplam çalışan sayıları listelenmiştir. ORDER BY 2 kısmında bulunan 2’nin anlamı select ile listelenen sorgudaki sütunlardan 2 indisine[CALİSAN_SAYİSİ] denk gelen tabloya göre sıralama manasına gelir.)
![]() |
Notes is a web-based application for online taking notes. You can take your notes and share with others people. If you like taking long notes, notes.io is designed for you. To date, over 8,000,000,000+ notes created and continuing...
With notes.io;
- * You can take a note from anywhere and any device with internet connection.
- * You can share the notes in social platforms (YouTube, Facebook, Twitter, instagram etc.).
- * You can quickly share your contents without website, blog and e-mail.
- * You don't need to create any Account to share a note. As you wish you can use quick, easy and best shortened notes with sms, websites, e-mail, or messaging services (WhatsApp, iMessage, Telegram, Signal).
- * Notes.io has fabulous infrastructure design for a short link and allows you to share the note as an easy and understandable link.
Fast: Notes.io is built for speed and performance. You can take a notes quickly and browse your archive.
Easy: Notes.io doesn’t require installation. Just write and share note!
Short: Notes.io’s url just 8 character. You’ll get shorten link of your note when you want to share. (Ex: notes.io/q )
Free: Notes.io works for 14 years and has been free since the day it was started.
You immediately create your first note and start sharing with the ones you wish. If you want to contact us, you can use the following communication channels;
Email: [email protected]
Twitter: http://twitter.com/notesio
Instagram: http://instagram.com/notes.io
Facebook: http://facebook.com/notesio
Regards;
Notes.io Team