Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Her alma sorgusu yazdığınızda, hangi sütunları istediğinizi, hangi satırları istediğinizi ve sorgu işlemcisinin özgün verileri nerede bulması gerektiğini ifade edersiniz. Bu özgün veriler genellikle bir tablo veya birleştirilmiş birkaç tablodan oluşur. Ancak özgün veriler tablo dışındaki kaynaklardan gelebilir. Aslında, görünümlerden, sorgulardan, eş anlamlılardan veya tablo döndüren kullanıcı tanımlı işlevlerden gelebilir.
Tablo yerine görünüm kullanma
Bir görünümden satır seçebilirsiniz. Örneğin, veritabanının her satırın fiyatı 19,99'u aşan bir başlığı açıkladığı "ExpensiveBooks" adlı bir görünüm içerdiğini varsayalım. Görünüm tanımı şöyle görünebilir:
SELECT *
FROM titles
WHERE price > 19.99;
Pahalı psikoloji kitaplarını yalnızca ExpensiveBooks görünümünden psikoloji kitaplarını seçerek seçebilirsiniz. Sonuçta elde edilen SQL şöyle görünebilir:
SELECT *
FROM ExpensiveBooks
WHERE type = 'psychology';
Benzer şekilde, bir görünüm bir JOIN işleme katılabilir. Örneğin, pahalı kitapların satışlarını yalnızca satış tablosunu ExpensiveBooks görünümüne birleştirerek bulabilirsiniz. Sonuçta elde edilen SQL şöyle görünebilir:
SELECT *
FROM sales
INNER JOIN ExpensiveBooks
ON sales.title_id = ExpensiveBooks.title_id;
Sorguya görünüm ekleme hakkında daha fazla bilgi için bkz. Sorgulara tablo ekleme (Visual Database Tools).
Tablo yerine sorgu kullanma
Sorgudan satır seçebilirsiniz. Örneğin, birlikte yazılan kitapların başlıklarını ve tanımlayıcılarını (birden fazla yazarı olan kitaplar) alan bir sorgu yazdığınızı varsayalım. SQL şöyle görünebilir:
SELECT titles.title_id,
title,
type
FROM titleauthor
INNER JOIN titles
ON titleauthor.title_id = titles.title_id
GROUP BY titles.title_id, title, type
HAVING COUNT(*) > 1;
Daha sonra bu sonucu oluşturan başka bir sorgu yazabilirsiniz. Örneğin, birlikte yazılmış psikoloji kitaplarını sorgulayabilen bir sorgu yazabilirsiniz. Bu yeni sorguyu yazmak için mevcut sorguyu yeni sorgunun verilerinin kaynağı olarak kullanabilirsiniz. Sonuçta elde edilen SQL şöyle görünebilir:
SELECT title
FROM (SELECT titles.title_id,
title,
type
FROM titleauthor
INNER JOIN titles
ON titleauthor.title_id = titles.title_id
GROUP BY titles.title_id, title, type
HAVING COUNT(*) > 1) AS co_authored_books
WHERE type = 'psychology';
Vurgulanan metin, yeni sorgu verilerinin kaynağı olarak kullanılan mevcut sorguyu gösterir. Yeni sorgu, mevcut sorgu için bir diğer ad ("co_authored_books") kullanır. Diğer adlar hakkında daha fazla bilgi için bkz. Tablo diğer adları oluşturma (Visual Database Araçları) ve Sütun diğer adları oluşturma (Visual Database Araçları).
Benzer şekilde, sorgu bir JOIN işleme katılabilir. Örneğin, pahalı ortak yazılan kitapların satışını, ExpensiveBooks görünümünü ortak yazılan kitapları alan sorguya bağlayarak bulabilirsiniz. Sonuçta elde edilen SQL şöyle görünebilir:
SELECT
ExpensiveBooks.title
FROM
ExpensiveBooks
INNER JOIN
(
SELECT
titles.title_id,
title,
type
FROM
titleauthor
INNER JOIN
titles
ON titleauthor.title_id
= titles.title_id
GROUP BY
titles.title_id,
title,
type
HAVING COUNT(*) > 1
)
Sorguya sorgu ekleme hakkında daha fazla bilgi için bkz. Sorgulara tablo ekleme (Visual Database Araçları).
Tablo yerine kullanıcı tanımlı işlev kullanma
Tablo döndüren kullanıcı tanımlı bir işlev oluşturabilirsiniz. Bu tür işlevler karmaşık veya yordamsal mantık gerçekleştirmek için kullanışlıdır.
Örneğin, çalışan tablosunda ek bir sütun employee.manager_emp_idolduğunu ve manager_emp_id employee.emp_idile arasında bir yabancı anahtar bulunduğunu varsayalım. Çalışan tablosunun her satırında, manager_emp_id sütun çalışanın patronunu gösterir. Daha kesin olarak, çalışanın patronunun .emp_id Belirli bir üst düzey yöneticinin kuruluş hiyerarşisinde çalışan her çalışan için bir satır içeren bir tablo döndüren kullanıcı tanımlı bir işlev oluşturabilirsiniz. İşlevi fn_GetWholeTeam çağırabilir ve ekibini almak istediğiniz yöneticinin emp_id giriş değişkenini alacak şekilde tasarlayabilirsiniz.
veri kaynağı olarak fn_GetWholeTeam işlevini kullanan bir sorgu yazabilirsiniz. Sonuçta elde edilen SQL şöyle görünebilir:
SELECT *
FROM fn_GetWholeTeam('VPA30890F');
VPA30890F
emp_id, kuruluşunu almak istediğiniz yöneticinin adıdır. Sorguya kullanıcı tanımlı işlev ekleme hakkında daha fazla bilgi için bkz. Sorgulara tablo ekleme (Visual Database Araçları). Kullanıcı tanımlı işlevlerin tam açıklaması için bkz. Kullanıcı tanımlı işlevler.