İnternette en çok karşılaştığım sorulardan biride, 2 veya daha fazla tablo arasında update işlemi nasıl yapılır.
Bunu bir örnek üzerinde görelim.
Diyeli şekildeki gibi 2 tablomuz var:
Amacımız birinci tablodaki UrunAdet kolonunu temp2 tablosu yardımı ile update etmek. temp1 deki id kolonu ile temp2 deki Urunid kolonları ortak.
update temp1
set temp1.UrunAdet = tbl.adet
from (
select Urunid,COUNT(*) as adet from temp2 group by Urunİd
) as tbl
inner join temp1
on temp1.id = tbl.Urunİd
öncelikle temp2'yi count ettim. artık elimde yeni bir tablo oluştu join işlemlerini bu 2 tablo arasında yaptım.
temp1'i yeniden sorgulayınca, güncellenmiş olduğunu gördüm.
29 Aralık 2014 Pazartesi
4 Eylül 2014 Perşembe
bütün tabloların satır sayısını öğrenme
Bir tablonun satır sayısını öğrenmek kolaydır.
select count(*) from Tablo bize tablonun satır sayısını döner. Fakat bu, satır sayısı fazla olan, milyonlarca satır bulunan tablolarda pratik bir çözüm değildir.
Aşağıdaki script işinizi görecektir.
select distinct t.name,p.rows
from sys.partitions as p
inner join sys.tables as t
on p.object_id = t.object_id
where t.type = 'U'
and t.name <>'sysdiagrams'
sys.partitions ve sys.tables sistemde tanımlı view'lerdir.
select count(*) from Tablo bize tablonun satır sayısını döner. Fakat bu, satır sayısı fazla olan, milyonlarca satır bulunan tablolarda pratik bir çözüm değildir.
Aşağıdaki script işinizi görecektir.
select distinct t.name,p.rows
from sys.partitions as p
inner join sys.tables as t
on p.object_id = t.object_id
where t.type = 'U'
and t.name <>'sysdiagrams'
sys.partitions ve sys.tables sistemde tanımlı view'lerdir.
Etiketler:
rowcount,
sys.partitions,
sys.tables,
T-Sql,
tablo satır sayısı,
view
13 Mayıs 2014 Salı
INNER JOIN ile tablo silme
Örneğin elimde Urunler ve Kategori diye iki tablo olsun. Aşağıdaki kod Urunler tablosundaki değerleri inner join ve where koşulunu baz alarak silme yapar.
delete Urunler
from Urunler
inner join Kategori
on Kategori.id = Urunler.Kategoriid
where Kategori.id = 3
Etiketler:
delete,
delete with inner join,
inner join,
inner join ile tablo silme,
T-Sql
11 Mayıs 2014 Pazar
ALT SORGULAR
Bu blogumda alt sorgularla ilgili birkaç örnek vereceğim. Örnek olarak NORTHWIND database'ini kullanıyorum.
Self-Contained Subqueries
Örneğin, Products tablosundan birim fiyatı (UnitPrice) en düşük olan ürünü veya ürünleri sorgulamak istiyorum:
select * from Products
where UnitPrice = (select min(UnitPrice) from Products)
bir diğer örnek, kategorisi 'Beverages' olan ürünlerin listesi
select * from Products
where CategoryID = (select CategoryID from Categories where CategoryName='Beverages')
Correlated Subqueries
Bir diğer alt sorgu çeşidi iste İLİŞKİLİ ALT SORGULAR.
İlişkili alt sorgular özellikle gruplamada çok işimize yarar.
Örneğin Products tablosunda her bir kategorinin minimum birim fiyatlı ürününü sorgulayalım.
select ProductID,ProductName,CategoryID,UnitPrice
from Products as p1
where UnitPrice in (select min (UnitPrice)
from Products as p2 where p1.CategoryID = p2.CategoryID)
Bu yapıda öncelikle dıştaki sorgu çalıştırılır. Sonra her bir satır tek tek iç sorguda tekrar çalıştırılır.
Yukarıdaki örneği biraz daha zorlaştıralım. Bu kez her bir kategori için minimum birim fiyatlı ürünleri çekelim.
Fakat bunu yaparken tekrar eden ürünlerde gelsin yani birim fiyatı aynı olan ürünlerde listelensin.
select ProductID,ProductName,CategoryID,UnitPrice
from Products as p1
where UnitPrice in (
select top (3) UnitPrice
from
(
select distinct (UnitPrice) from Products as p2 where p1.CategoryID = p2.CategoryID
) as tbl order by tbl.UnitPrice asc
)
order by p1.CategoryID asc
Self-Contained Subqueries
Örneğin, Products tablosundan birim fiyatı (UnitPrice) en düşük olan ürünü veya ürünleri sorgulamak istiyorum:
select * from Products
where UnitPrice = (select min(UnitPrice) from Products)
bir diğer örnek, kategorisi 'Beverages' olan ürünlerin listesi
select * from Products
where CategoryID = (select CategoryID from Categories where CategoryName='Beverages')
Correlated Subqueries
Bir diğer alt sorgu çeşidi iste İLİŞKİLİ ALT SORGULAR.
İlişkili alt sorgular özellikle gruplamada çok işimize yarar.
Örneğin Products tablosunda her bir kategorinin minimum birim fiyatlı ürününü sorgulayalım.
select ProductID,ProductName,CategoryID,UnitPrice
from Products as p1
where UnitPrice in (select min (UnitPrice)
from Products as p2 where p1.CategoryID = p2.CategoryID)
Bu yapıda öncelikle dıştaki sorgu çalıştırılır. Sonra her bir satır tek tek iç sorguda tekrar çalıştırılır.
Yukarıdaki örneği biraz daha zorlaştıralım. Bu kez her bir kategori için minimum birim fiyatlı ürünleri çekelim.
Fakat bunu yaparken tekrar eden ürünlerde gelsin yani birim fiyatı aynı olan ürünlerde listelensin.
select ProductID,ProductName,CategoryID,UnitPrice
from Products as p1
where UnitPrice in (
select top (3) UnitPrice
from
(
select distinct (UnitPrice) from Products as p2 where p1.CategoryID = p2.CategoryID
) as tbl order by tbl.UnitPrice asc
)
order by p1.CategoryID asc
Etiketler:
Alt Sorgular,
Correlated Subqueries,
İlişkili Alt Sorgular,
Subqueries
5 Nisan 2014 Cumartesi
TRY_CAST
try_cast sql server 2012'de bulunan bir dönüştürme fonksiyonudur. cast ile aynı işi yapar sadece farklı olarak eğer dönüştürme hatalı ise NULL değeri döner.
Örnek:
select cast('a1bc'as integer)
böyle bir dönüşüm yapmaya çalışınca hata alırız.
Hata şu: "Conversion failed when converting the varchar value 'a1bc' to data type int."
Yani varchar tipini tamsayı tipine çeviremezsin diyor.
Fakat bazen çeviremiyorsa bile NULL dönmesi istenebilir bunun için try_cast kullanılır.
select try_cast('a1bc' as integer)
bu sorgu çalışınca NULL değeri döner.
Örnek:
select cast('a1bc'as integer)
böyle bir dönüşüm yapmaya çalışınca hata alırız.
Hata şu: "Conversion failed when converting the varchar value 'a1bc' to data type int."
Yani varchar tipini tamsayı tipine çeviremezsin diyor.
Fakat bazen çeviremiyorsa bile NULL dönmesi istenebilir bunun için try_cast kullanılır.
select try_cast('a1bc' as integer)
bu sorgu çalışınca NULL değeri döner.
17 Aralık 2013 Salı
SELECT INTO ile tablo oluşturma
Aşağıdaki örnekte SELECT INTO kodu ile #Ogrenciler adında temp tablo oluşturuluyor.
USE Deneme
GO
IF OBJECT_ID ('Tempdb..#Ogrenciler','U') IS NOT NULL
DROP TABLE #Ogrenciler;
GO
SELECT OGRENCILER.SinifID,
OGRENCILER.ad,
OGRENCILER.soyad
INTO #Ogrenciler
FROM OGRENCILER
WHERE ad LIKE 's%';
GO
SELECT * FROM #Ogrenciler
Görüldüğü gibi temp tabloyu create koduna gerek duymadan oluşturduk ve istediğimiz değerleri insert ettik.
USE Deneme
GO
IF OBJECT_ID ('Tempdb..#Ogrenciler','U') IS NOT NULL
DROP TABLE #Ogrenciler;
GO
SELECT OGRENCILER.SinifID,
OGRENCILER.ad,
OGRENCILER.soyad
INTO #Ogrenciler
FROM OGRENCILER
WHERE ad LIKE 's%';
GO
SELECT * FROM #Ogrenciler
Görüldüğü gibi temp tabloyu create koduna gerek duymadan oluşturduk ve istediğimiz değerleri insert ettik.
Etiketler:
select,
select into,
select into kullanımı,
T-Sql,
temp tablolar,
temporary tables
11 Aralık 2013 Çarşamba
Geçici Bir Tablonun Olup Olmadığının Kontrolü
Merhaba bu blogumda temporary tabloların Sql Server'da olup olmadığını t-sql script ile nasıl kontrol edebileceğimizi göstereceğim.
Örneğin bir procedure içinde temp tabloya ihtiyacınız oldu, tabloyu yaratmadan önce kontrol etmeniz gerekiyor -ki bunun bence faydası vardır.
Aşağıdaki kodun yukarıdakinden farkı 'U' parametresini almasıdır. Bu parametre onun kullanıcı tanımlı tablo olduğunu garanti eder. Bu yüzden aşağıdaki kod daha keskin sonuç üretir.
Örneğin bir procedure içinde temp tabloya ihtiyacınız oldu, tabloyu yaratmadan önce kontrol etmeniz gerekiyor -ki bunun bence faydası vardır.
IF OBJECT_ID('tempdb..#t1') IS NOT NULL
DROP TABLE #t1
CREATE TABLE #t1(
id INT IDENTITY(1,1),
mesaj VARCHAR(255)
)
Aşağıdaki kodun yukarıdakinden farkı 'U' parametresini almasıdır. Bu parametre onun kullanıcı tanımlı tablo olduğunu garanti eder. Bu yüzden aşağıdaki kod daha keskin sonuç üretir.
IF OBJECT_ID('tempdb..#t1', 'U') IS NOT NULL
DROP TABLE #t1
CREATE TABLE #t1(
id INT IDENTITY(1,1),
mesaj VARCHAR(255)
)
Etiketler:
OBJECT_ID,
SQL Server,
T-Sql,
temporary tables
10 Aralık 2013 Salı
CPU sayısı
Aşağıdaki sql kodu mantıksal ve fiziksel cpu sayısını bize verir.
SELECT sys.dm_os_sys_info.cpu_count AS 'Mantiksal_Islemci_Sayisi',
(sys.dm_os_sys_info.cpu_count/sys.dm_os_sys_info.hyperthread_ratio) AS 'Fiziksel_Islemci_Sayisi'
FROM sys.dm_os_sys_info
Sonuç:

SELECT sys.dm_os_sys_info.cpu_count AS 'Mantiksal_Islemci_Sayisi',
(sys.dm_os_sys_info.cpu_count/sys.dm_os_sys_info.hyperthread_ratio) AS 'Fiziksel_Islemci_Sayisi'
FROM sys.dm_os_sys_info
Sonuç:

Etiketler:
CPU count,
CPU sayısı,
SQL Server,
sys.dm_os_sys_info
5 Aralık 2013 Perşembe
Sql Sayfalandırma Uygulaması
Bu örnek kısa ve basit bir sayfalandırma örneğidir.
Diyelim elimizde Avukatlar diye bir tablo var.
Bunu Stored Procedure ile geliştireceğim.
CREATE PROC sp_SqlPagination(
@rowsPerPage int,
@pageNum int
)
AS
BEGIN
WITH SqlPage
AS
(
SELECT TOP (@rowsPerPage*@pageNum)
ResultNum = ROW_NUMBER() OVER (order by Avukatlar.avukat_ad),
Avukatlar.avukat_tc_no,Avukatlar.avukat_ad,
Avukatlar.avukat_soyad, Avukatlar.sicil_no
FROM Avukatlar
)
SELECT * FROM SqlPage
WHERE SqlPage.ResultNum > @rowsPerPage*(@pageNum-1)
END
Dışardan 2 parametre alıyor birisi bir sayfada, (@rowsPerPage) result sette kaç satır veri görüneceğini belirtiyor. Diğer parametre (@pageNum) ise kaçıncı sayfayı göstermemiz gerektiğini belirtiyor.
Diyelim elimizde Avukatlar diye bir tablo var.
Bunu Stored Procedure ile geliştireceğim.
CREATE PROC sp_SqlPagination(
@rowsPerPage int,
@pageNum int
)
AS
BEGIN
WITH SqlPage
AS
(
SELECT TOP (@rowsPerPage*@pageNum)
ResultNum = ROW_NUMBER() OVER (order by Avukatlar.avukat_ad),
Avukatlar.avukat_tc_no,Avukatlar.avukat_ad,
Avukatlar.avukat_soyad, Avukatlar.sicil_no
FROM Avukatlar
)
SELECT * FROM SqlPage
WHERE SqlPage.ResultNum > @rowsPerPage*(@pageNum-1)
END
Dışardan 2 parametre alıyor birisi bir sayfada, (@rowsPerPage) result sette kaç satır veri görüneceğini belirtiyor. Diğer parametre (@pageNum) ise kaçıncı sayfayı göstermemiz gerektiğini belirtiyor.
23 Eylül 2013 Pazartesi
23 Ağustos 2013 Cuma
başlarken
merhaba bu blogumda sizinle deneyimlerimi paylaşacağım.
daha çok veritabanı sistemleri, sql üzerine olacak.
daha çok veritabanı sistemleri, sql üzerine olacak.
Kaydol:
Yorumlar (Atom)



