Veritabanı Tasarımı. Self-Join ve Hiyerarşik Sorgular

Benzer belgeler
BÖLÜM -2: VERİLERİ SINIRLAMA VE SIRALAMA

Veritabanı Tasarımı. Join Yantümceleri

1. IT bölümünde çalışan tüm çalışanların isimlerini gösteren bir sorgu yazınız.

Veritabanı Tasarımı. Çoklu Satır Alt Sorgular

BÖLÜM- 11: BÜYÜK VERİ KÜMELERİ

Veritabanı Tasarımı. Alt Sorgu Temelleri

BÖLÜM -7: TABLOLARI OLUŞTURMA VE YÖNETME

Veritabanı Tasarımı. SQL Deyimi Anatomisi

Veritabanı Tasarımı. Büyük/Küçük Harf ve Karakter İşleme

BÖLÜM- 5: BİRDEN FAZLA TABLODAN VERİ GETİRMEK

ORACLE DERS 1 SQL E GİRİŞ

BÖLÜM- 13: ALT SORGULAR İLE VERİ İŞLEME

--Tüm personel kayıtlarını seçiniz. SELECT* FROM employees ;

Veritabanı Tasarımı COUNT, DISTINCT, NVL

Veritabanı Tasarımı. Kartezyen Çarpım ve Join İşlemleri

Veriyi ve Bilgiyi Organize Etmek. Bilgisayar Mühendisliğine Giriş 1

Emrah UYSAL 1

Oracle Database 11g: Introduction to SQL

BÖLÜM- 3: TEK SATIR FONKSİYONLARI

Veritabanı Tasarımı. İlişkisel Veritabanı Kavramlarına Giriş

Birden Çok Tabloda Sorgulama (Join)

Emrah UYSAL 1

Veritabanı Tasarımı. Dönüşüm Fonksiyonları

Veritabanı. SQL (Structured Query Language)

SQL Query and Table Application

Veritabanı Tasarımı. Basit Eşleme: Dönüşüm İşlemi

Veri Tabanı II Alt Sorgular

Veritabanı Tasarımı. Sütun Değerlerini Güncelleme ve Satırları Silme

Emrah UYSAL 1

BÖLÜM- 8: DİĞER ŞEMA NESNELERİNİ OLUŞTURMA

Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü Veri Tabanı ve Yönetimi (BİL 301)

İş Zekası için Dört-Katmanlı Veri Modellemesi Gerçekleştirimi. Harun Gökçe EG Yazılım, TOBB ETÜ

Veri Tabanı Tasarım ve Yönetimi

20461C Querying Microsoft SQL Server Modül Seviye Belirleme Testi

Veri Tabanı Yönetim Sistemleri Bölüm - 4

Veritabanı Yönetim Sistemleri (Veritabanı Tasarımı) SQL (Structured Query Language)

Veritabanı Yönetim Sistemleri (Başarım Eniyileme Performance Tuning)

Veri Tabanı Yönetim Sistemleri Bölüm - 7

Aşağıdaki şemaya dikkat edin. Sorgulamalarımızı genellikle bu şemaya göre yapacağız.

TESİ. indeks. söylenebilir?? bir ilişkidir d) Hiçbiri. veya somutlaştırılmış. düzeyidir? sağlayabilir? sına. d) Hepsi. olabilir? c) Verilerin d) Hepsi

Lıke Joker Karakterler, Is [not] Null, Order By, Group By, As

VERİ TABANI YÖNETİM SİSTEMLERİ I

Aşağıdaki tabloyu inceleyin. Sorgulama işlemlerini bu tabloya göre yapacağız.

SQL Komutları (2) Uzm. Murat YAZICI

BÖLÜM -6: VERİLERİ DEĞİŞTİRMEK

Oracle da kullanılan veri tipleri:

SQL e Giriş. Uzm. Murat YAZICI

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

SQL DİĞER Deyimler ve Komutlar

Veri Tabanı Yönetim Sistemleri Bölüm - 5

Veritabanı Tasarımı. İndeksler ve Eşanlamlar

İLİŞKİSEL VERİTABANLARINDA BİRLEŞTİRME

VERİTABANI Veritabanı Sorgulama

TEMEL SQL SORGU ÖRNEKLERİ. Yukarıdaki sorguyu yazıp çalıştırdığımızda db_market adında bir veritabanı oluşturulur.

Veritabanı Tasarımı. Sütunlar, Karakterler ve Satırlar ile Çalışma

Veritabanı Yönetim Sistemleri

Her bölüm için kısa bazı girişler yapılacak ve bölüm içerisinde anlatılacak olan konuların genel başlıkları belirtilecektir.

Ağaç (Tree) Veri Modeli

VERİTABANI. SQL (Structured Query Language)

SQL'e Giriş. SELECT Deyimi. SQL Komutları. 1. DDL (Data Definition Language - Veri Tanımlama Dili)

10 Birden Fazla Tablo Üzerinde Sorgulama

Veritabanı Tasarımı. NOT NULL ve UNIQUE Kısıtlamaları Tanımlama

13 Aralık Đlgili Versiyon/lar : ETA:SQL, ETA:V.8-SQL. Đlgili Modül/ler : Raporlar. Kullanıcı Tanımlı Raporlar Bölümünden Yapabildiklerimiz

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

İNTERNET PROGRAMCILIĞI HAFTA. MYSQL ile VERİTABANI İŞLEMLERİ - 1. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Veritabanı Oluşturma, Silme

Basit SQL Sorguları Veritabanından verilerin SELECT cümleleri ile alınması işlemine sorgulama denir.

BMB202. Veritabanı Yönetimi Ders 5. İlişkisel Cebir ve SQL. Erdinç Uzun NKÜ Çorlu Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

VERİTABANI ve YÖNETİMİ

Veritabanı Tasarımı. Kullanıcı Erişimini Kontrol Etme

5 Sorgulama İşlemleri. Veritabanı 1

BMB202. Veritabanı Yönetimi Ders 6. SQL. Erdinç Uzun NKÜ Çorlu Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

Veri Tabanı Hafta Dersi

İLİŞKİSEL VERİTABANI. İlişkisel veritabanlarının ortak özelliği verilerin tablolar aracılığı ile tutulmasıdır.

SQL NEDİR?... 4 Transact-SQL... 4 SQL Veri İşleme Dili (Data Manipulation Language-DML)... 4 SQL Veri Tanımlama Dili (Data Definition

Sql Komutlarından Select Sorgusu Ve Myadmin Üzerinden Anlatımı

SQL Kod ile Tablo Oluşturma

Maltepe Üniversitesi Endüstri Mühendisliği Bölümü Veri Tabanı Yönetimi (END 210)

BTP203 VERİTABANI YÖNETİM SİSTEMLERİ

Coğrafi Bilgi Sistemlerine Giriş. Ünite 5 - Veri Tabanı Yönetim Sistemleri

PostgreSQL ve PL/pgSQL

FUTBOL TAKIM ANALİZİ. YZM5510 İş Zekası Ders Projesi. Melih ATASOYLU ( )

Öğr. Gör. Cansu AYVAZ GÜVEN VERİTABANI-II. Değişken Tanımlama Ve Akış Kontrol Deyimleri

Computer Engineering Department DATABASE MANAGEMENT SYSTEMS LAB 2 WORKSHEET

Veritabanı Tarihi. 1960s: Bilgisayarlar artan saklama kapasiteleri ile birlikte firmalar tarafından karşılanabilir hale gelmeye başladı

SQL (Structured Query Language)

Emrah UYSAL 1

Aşağıdaki şemaya dikkat edin. Sorgulamalarımızı genellikle bu şemaya göre yapacağız.

DOSYA ORGANİZASYONU. Ağaç Yapıları ÖZLEM AYDIN TRAKYA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

Üst Düzey Programlama

SORGULAR. Öğr.Gör.Volkan Altıntaş

İlişkisel Veri Tabanları I

08221 Veri Tabanı II. Elbistan Meslek Yüksek Okulu GÜZ Yarıyılı. Hafta V. Öğr. Gör. Murat KEÇECĠOĞLU

Microsoft SQL Server Sorgulama

PostgreSQL ve PL/pgSQL

Hiyerarşik Yazılım Tasarımı Kavramı

Veritabanı ve Yönetim Sistemleri

Transact-SQL SQL NEDİR? Transact-SQL. SQL Veri İşleme Dili (Data Manipulation Language-DML) SQL Veri Tanımlama Dili (Data Definition Language-DDL)

Veri Tabanı Hafta Dersi

Veritabanı Tasarımı. Tablo Oluşturma

VERİ TABANI YÖNETİM SİSTEMLERİ II. 7. FORMLAR ve ACCESS PROGRAMINDA FORM OLUŞTURMA

Transkript:

Veritabanı Tasarımı Self-Join ve Hiyerarşik Sorgular

Konular Self-join kullanarak tablonun kendini birleştirmesi için SELECT ifadesi oluşturma ve çalıştırma Hiyerarşik sorgu kavramını yorumlama Ağaç-yapısında bir rapor oluşturma Hiyerarşik veri biçimlendirme Ağaç yapısından dallara dışlama 2

Amaç Veri modellemede, bir varlığın kendisi ile ilişkisini göstermek bazen gereklidir. SELECT worker.last_name ' works for ' manager.last_name FROM employees worker JOIN employees manager ON worker.manager_id = manager.employee_id; EMPLOYEE TABLOSU employ ee_id first_name last_name email phone_nu mber hire_date job_id salary commissi on_pct manag er_id departme nt_id 100 Steven King SKING 515.123 17-JUN-1987 AD_PRES 24000 (null) (null) 90 101 Neena Kochhar NKOCHHAR 515.123 21-SEP-1989 AD_VP 17000 (null) (null) 90 3

Amaç (devam ) Örneğin, bir çalışan aynı zamanda bir yönetici olabilir. Biz bu ilişkiyi domuz kulağı olarak isimlendiriyoruz. SELECT worker.last_name ' works for ' manager.last_name FROM employees worker JOIN employees manager ON worker.manager_id = manager.employee_id; EMPLOYEE TABLOSU employ ee_id first_name last_name email phone_nu mber hire_date job_id salary commissi on_pct manag er_id departme nt_id 100 Steven King SKING 515.123 17-JUN-1987 AD_PRES 24000 (null) (null) 90 101 Neena Kochhar NKOCHHAR 515.123 21-SEP-1989 AD_VP 17000 (null) (null) 90 4

Amaç (devam ) Gerçek çalışanlar tablosuna sahibiz, özel bir self-join ifadesi bu verilere erişmek için gereklidir. SELECT worker.last_name ' works for ' manager.last_name FROM employees worker JOIN employees manager ON worker.manager_id = manager.employee_id; EMPLOYEE TABLOSU employ ee_id first_name last_name email phone_nu mber hire_date job_id salary commissi on_pct manag er_id departme nt_id 100 Steven King SKING 515.123 17-JUN-1987 AD_PRES 24000 (null) (null) 90 101 Neena Kochhar NKOCHHAR 515.123 21-SEP-1989 AD_VP 17000 (null) (null) 90 5

Amaç (devam ) Muhtemelen veri modelinin veritabanına dönüşmeden önceki önemini şimdi daha iyi anladınız. SELECT worker.last_name ' works for ' manager.last_name FROM employees worker JOIN employees manager ON worker.manager_id = manager.employee_id; EMPLOYEE TABLOSU employ ee_id first_name last_name email phone_nu mber hire_date job_id salary commissi on_pct manag er_id departme nt_id 100 Steven King SKING 515.123 17-JUN-1987 AD_PRES 24000 (null) (null) 90 101 Neena Kochhar NKOCHHAR 515.123 21-SEP-1989 AD_VP 17000 (null) (null) 90 6

Amaç (devam ) Bu veri modelinin veritabanında var olan tablolar ile benzer olması tesadüf değildir. SELECT worker.last_name ' works for ' manager.last_name FROM employees worker JOIN employees manager ON worker.manager_id = manager.employee_id; EMPLOYEE TABLOSU employ ee_id first_name last_name email phone_nu mber hire_date job_id salary commissi on_pct manag er_id departme nt_id 100 Steven King SKING 515.123 17-JUN-1987 AD_PRES 24000 (null) (null) 90 101 Neena Kochhar NKOCHHAR 515.123 21-SEP-1989 AD_VP 17000 (null) (null) 90 7

SELF-JOIN Bir tablonun kendine birleştirilmesi için tablo iki isimle ya da takma adla verilmelidir. Bu veritabanının iki tablo olduğunu düşünmesini sağlayacaktır. EMPLOYEES(worker) Tablosu employee_id last_name manager_id 100 King 101 Kochar 100 102 De Haan 100 103 Hunold 102 104 Ernst 103 107 Lorentz 103 124 Mourgos 100 EMPLOYEES(manager) Tablosu employee_id last_name 100 King 101 Kochar 102 De Haan 103 Hunold 104 Ernst 107 Lorentz 124 Mourgos Çalışan tablosundaki manager_id Yönetici tablosundaki employee_id ile aynıdır. 8

SELF-JOIN (devam ) Bu tablo ile verinin ilişkilendirilmesi için takma adlarını seçin. EMPLOYEES(worker) Tablosu employee_id last_name manager_id 100 King 101 Kochar 100 102 De Haan 100 103 Hunold 102 104 Ernst 103 107 Lorentz 103 124 Mourgos 100 EMPLOYEES(manager) Tablosu employee_id last_name 100 King 101 Kochar 102 De Haan 103 Hunold 104 Ernst 107 Lorentz 124 Mourgos Çalışan tablosundaki manager_id Yönetici tablosundaki employee_id ile aynıdır. 9

SELF-JOIN (devam ) Burada kendi kendine birleştirme ile ilgili başka bir örnek verilmektedir. Bu grup örneğinde, enstrüman çalan grup üyeleri vardır, hem bir enstrüman çalan hem de görevi liderlik ya da başkanlık olan grup üyeleri vardır. Bu self-join yapısını göstermek için şu şekilde sorgu yazılır: SELECT chair.last_name ' is the section chair of ' player.last_name FROM band_members chair JOIN band_members player ON (player.chair_id = chair.member_id);. 10

Hiyerarşik Sorgular Hiyerarşik sorgular self-join ler ile yakından ilgilidir. Önceki sayfalarda, her çalışanın doğrudan yöneticisini görmek için self-join leri nasıl kullanabileceğimizi gördük. Hiyerarşik sorgu ile, hangi yönetici için kimlerin çalıştığını görebiliriz. Bu sorgu ile, bir şirket ya da bir bölümünün yapısını gösteren bir kuruluş şeması oluşturabilirsiniz. Bir aile ağacını düşündüğümüzde ailenin büyük üyeleri ağacın tabanına yakınken genç üyeleri ağacın dallarını temsil eder. Dallar böylece kendi dallarına sahip olur ve böylece devam eder. 11

Hiyerarşik Sorgular (devam ) Hiyerarşik sorguları kullanarak, bir tablodaki satırların arasında doğal bir hiyerarşik ilişkiye dayalı veri alabilirsiniz. Bir ilişkisel veritabanı kayıtları hiyerarşik bir şekilde saklamaz. Ancak, tek bir tablo satırları arasında hiyerarşik bir ilişki mevcut ise tree walking denilen bir süreç inşa edilerek bir hiyerarşi sağlanabilir. Bir hiyerarşik sorgu belirli bir düzen içinde bir ağacın dallarını raporlama yöntemidir. 12

Hiyerarşik Sorgu Verileri Aşağıdaki empolyee tablosundan örnek verileri inceleyin ve Steven King ile başlayan ve onunla birlikte ağaç üzerinden kimin için çalıştığını kim olduğunu görmek için hareket edin. emp_id first_name last_name email phone_number hire_date job_id salary commission_pct manager_id dept_id 100 Steven Ki ng SKING 515.123.4567 17-JUN-1987 AD_PRES 24000 (nul l) (nul l) 90 101 Neena Kochha r NKOCHHAR 515.123.4568 21-SEP-1989 AD_VP 17000 (nul l) 100 90 102 Lex De Ha a n LDEHAAN 515.123.4569 13-JAN-1993 AD_VP 17000 (nul l) 100 90 103 Al exa nder Hunol d AHUNOLD 590.423.4567 03-JAN-1990 IT_PROG 9000 (nul l) 102 60 104 Bruce Erns t BERNST 590.423.4568 21-MAY-1991 IT_PROG 6000 (nul l) 103 60 124 Kevi n Mourgos KMOURGOS 650.123.5234 16-NOV-1999 ST_MAN 5800 (nul l) 100 50 141 Trenna Ra js TRAJS 650.121.8009 17-OCT-1995 ST_CLERK 3500 (nul l) 124 50 13

Hiyerarşik Sorgu Gösterimi EMPLOYEE tablosu için organizasyon şeması aşağıdaki gibi görünecektir: 14

Hiyerarşik Sorgu Anahtar Kelimeleri Self-Join ve Hiyerarşik Sorgular Hiyerarşik sorgular kendi yeni anahtar kelimelerine sahiptir: START WITH, CONNECT BY PRIOR ve LEVEL. START WITH hangi satırın Root (Kök) olarak kullanılacağını belirler. CONNECT BY PRIOR satır arası birleştirmelerin nasıl yapıldığını açıklar. LEVEL ağacın ne kadar derinliğe sahip olacağını belirler. 15

Hiyerarşik Sorgu Anahtar Kelimeleri Örneği SELECT employee_id, last_name, job_id, manager_id FROM employees START WITH employee_id = 100 CONNECT BY PRIOR employee_id = manager_id Self-Join ve Hiyerarşik Sorgular employee_id last_name job_id manager_id 100 King AD_PRES (null) 101 Kochhar AD_VP 100 200 Whalen AD_ASST 101 205 Higgins AC_MGR 101 206 EGietz AC_ACCOUNT 205 102 De Haan AD_VP 100 103 Hunold IT_PROG 102 16 141 Rajs ST_CLERK 124

Hiyerarşik Sorgu Örneği SELECT last_name ' reports to PRIOR last_name as "Walk Top Down" FROM employees START WITH last_name = 'King' CONNECT BY PRIOR employee_id = manager_id 17 Walk Top Down King reports to Kochhar reports to King Whalen reports to Kochhar Higgins reports to Kochhar Gietz reports to Higgins De Haanreports to King Hunold reports to De Haan Ernst reports to Hunold

Hiyerarşik Sorgu LEVEL Örneği SELECT LEVEL, last_name ' reports to PRIOR last_name as "Walk Top Down" FROM employees START WITH last_name = 'King' CONNECT BY PRIOR employee_id = manager_id LEVEL hiyerarşik sorgu ile kullanılan bir sözde sütun ifadesidir. Ağacın kökünden başlayarak kaç adım olduğunu sayar. 18 LEVEL 1 King reports to Walk Top Down 2 Kochhar reports to King 3 Whalen reports to Kochhar 3 Higgins reports to Kochhar 4 Gietz reports to Higgins 2 De Haanreports to King 3 Hunold reports to De Haan 4 Ernst reports to Hunold

Hiyerarşik Sorgu Raporu Eğer yüksek seviyeden başlayıp aşağıdaki düzeylerin her birine giren ve şirket yönetim düzeylerini gösteren bir rapor oluşturmak isteniyorsa, LEVEL sözde sütun ve LPAD fonksiyonunu kullanarak tüm çalışanların seviyelerine ulaşılır. SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS ORG_CHART FROM employees START WITH last_name = 'King' CONNECT BY PRIOR employee_id = manager_id 19

Hiyerarşik Sorgu Çıktı Seviyesi SELECT LPAD(last_name, LENGTH(last_name)+( LEVEL*2)-2,'_') AS ORG_CHART FROM employees START WITH last_name='king' CONNECT BY PRIOR employee_id=manager_id Sağdaki sonucu gördüğünüz üzere, her satır seviye başına iki çizgi ile girintilendirilmektedir. 20

Buttom Up Hiyerarşik Sorgu SELECT LPAD(last_name, LENGTH(last_name) + (LEVEL*2) -2, '_') AS ORG_CHART FROM employees START WITH last_name = 'Grant' CONNECT BY employee_id = PRIOR manager_id Sağdaki sonucu gördüğünüz üzere, bu örnekte eşittir işaretinden sonra PRIOR anahtar sözcüğü hareket ettirilerek ve Grant START WITH yantümcesi kullanılarak Buttom Up Hiyerarşik Sorgunun nasıl oluşturulacağı gösterilmektedir. 21

Hiyerarşik Sorgu Budama Ağaç üzerinde dalları budama WHERE yantümcesi veya CONNECT BY PRIOR yantümcesi kullanılarak yapılabilir. WHERE yantümcesi kullanılırsa sadece ifadede isimlendirilen satırlar hariç kalır; CONNECT BY PRIOR yantümcesi kullanılırsa tüm dal hariç kalır. 22

Hiyerarşik Sorgu Budama (devam ) Self-Join ve Hiyerarşik Sorgular Örneğin; sonuçlarından sadece bir satır çıkarmak istiyorsanız, WHERE yantümcesini kullanmanız gerekir. Gietz in doğrudan Kochhar için çalıştığı görülür ancak öyle değildir. SELECT last_name FROM employees WHERE last_name!= 'Higgins START WITH last_name = Kochhar CONNECT BY PRIOR employee_id = manager_id 23

Hiyerarşik Sorgu Budama (devam ) Self-Join ve Hiyerarşik Sorgular Ancak bununla birlikte bir satır ve bunun altındaki tüm satırları çıkarmak istiyorsanız CONNECT BY ifadesi ile dışlama yapmak gerekir. Bu örnekte Higgins i ihraç ederken GIETZ de ihraç edilmiş olur. SELECT last_name FROM employees START WITH last_name = Kochhar CONNECT BY PRIOR employee_id = manager_id AND last_name!= 'Higgins 24