Emrah UYSAL www.emrahuysal.com 1



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

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

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

Birden Çok Tabloda Sorgulama (Join)

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

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

Emrah UYSAL 1

EBE-368 Veri Tabanı Yönetim Sistemleri SQL

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

SQL Komutları (2) Uzm. Murat YAZICI

Bilgisayar Uygulamaları. MySql

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

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

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

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

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

ORACLE DERS 1 SQL E GİRİŞ

Mysql Veritabanı Komutları

Veritabanı Tasarımı COUNT, DISTINCT, NVL

Veritabanı. SQL (Structured Query Language)

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

Veritabanı Tasarımı. Join Yantümceleri

Emrah UYSAL 1

VERİTABANI. SQL (Structured Query Language)

Oracle Database 11g: Introduction to SQL

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

YAPISAL SORGULAMA DİLİ (SQL)

Veri Tabanı-I 12.Hafta

İNTERNET TABANLI PROGRAMLAMA- 12.ders

Fonksiyonlar, Count, Sum, Avg, Max, Mın, Lower, Upper, Length, Round, Mod, Left, Right, Concat, If

SQL Kod ile Tablo Oluşturma

Bu işleçlerin dışında, aşağıda belirtilen karşılaştırma işleçlerinden de yararlanılır.

Alper VAHAPLAR

Veritabanı Tasarımı. Alt Sorgu Temelleri

Veri Tabanı Tasarım ve Yönetimi

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

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

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

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

Like Joker Karakterler, Order By, Group By

ACCESS PLATFORMUNDA SQL

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

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

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

SQL (Structured Query Language)

DAO İLE SQL KOMUTLARI. Sql komutlarını artık veri tabanında kullanmaktan başka çaremiz yok arkadaşlar. Şimdi bu sql derslerimize başlayalım.

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

Veritabanı ve Yönetim Sistemleri

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

1. Araçların tüm bilgilerini ve bağlı oldukları kiralama noktasının adres ve telefonunu içeren tam listesi:

T.C GAZİ ÜNİVERSİTESİ BİLİŞİM ENSTİTÜSÜ YÖNETİM BİLİŞİM SİSTEMLERİ ANA BİLİM DALI MS SQL KOMUTLARI VE MS SQL KOMUTLARI İLE İLGİLİ UYGULAMALAR

VERİTABANI Veritabanı Sorgulama

Veri Tabanı SQL Server ve Management Studio kurulum linkleri:

Yukarıdakilerden hangileri DML (Data Manipulation Language) ile gerçekleştirilir?

Kişiler tablosundan AD kolonu yusuf olan tüm satırları siler. ORDER BY deyimi bir tablodan SELECT ile seçilen verileri sıralamak için kullanılır.

VERĐTABANI YÖNETĐM SĐSTEMLERĐ

Veri Tabanı-I 9.Hafta

SQL FONKSİYONLARI SQL lisanında hesaplama ve sayma işlemlerinde kullanılmak üzere bir çok fonksiyon vardır.

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

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

SQL DİĞER Deyimler ve Komutlar

Gruplama (aggregate) fonksiyonları bir dizi değer üzerinde hesaplama yaparlar ve bir sonuç

Bölüm 3: DML Veri İşleme Dili

Veritabanı Tasarımı. SQL Deyimi Anatomisi

VERİTABANI ve YÖNETİMİ

Microsoft SQL Server Sorgulama

Güz Yarıyılı MT 487 Bilgisayarda Veri Yapıları Final Çalışma Soruları

SQL Query and Table Application

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

Genel Kavramlar. Bilgisayar ortamında işlenebilecek durumda bulunan kayıtlar. Birbiri ile ilişkili veriler topluluğu ve veriler arası ilişkiler

Veritabanı Yönetim Sistemleri

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

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

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER

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

Çok tablolu sorgulamalar

SQL PROGRAMLAMA. Bir batch, bir arada bulunan bir dizi SQL deyimidir. Batch ayıracı GO deyimidir.

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

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

Veri Tabanı II Alt Sorgular

SQL veri tabalarına erişmek ve onları kullanmak için geliştirilmiş bir lisandır.

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

Veri Tabanı Hafta Dersi

15 Aralık 2011 / Perşembe.

SQL (Structured Query Language) kendisi bir programlama dili olmamasına rağmen bir çok kişi tarafından programlama dili olarak bilinir.

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

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

6 Aritmetiksel Operatörler ve Hazır Fonksiyonlar

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

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.

IN ve NOT IN Tablodaki alan içeriklerine ulaşmak için IN deyimi kullanılır.

EROL AKGÜL

Birleştirme (JOIN) işlemi

SQL'e Giriş. SELECT Deyimi. SQL Komutları. Yardımcı Deyimler

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

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

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

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER

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

Transkript:

ORACLE DERS 2 BİRDEN FAZLA TABLO ÜZERİNDE ÇALIŞMAK(JOIN İŞLEMLERİ) Şekilde görüldüğü gibi Employees tablosundan employee_id ve department_id alanı Departments tablosundan ise department_name alanı kullanılıp bir sorgu yapılmıştır. KARTEZYEN SORGU Emrah UYSAL www.emrahuysal.com 1

SQL > SELECT last_name, department_name dept_name, departments; Yukarıda örnekte görüldüğü gibi iki tablodan belli alanlar sorgulanarak getirilmiştir.her iki tablo arasında join işlemi olmadığı için her iki tabloda satır sayısı çarpılarak satır sayısı getirilmiştir. JOİN SYNTAX SQL > SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1 = table2.column2; Bilmemiz gereken en önemli kural N tabloyu birleştirip sorgu yazacaksak minimum N 1 tane join condition a ihtiyacımız olduğudur. JOİN TİPLERİ EQİJOİN Equijoin de bilmemiz gerekn şey join yapılan her iki tabloda da satır sayısının eşit olanlarının gerekli olduğudur.yani Employees tablosundan Department_id ve Departments tablosundan Deparment_id değerleri ortak olan alanlar sorgu sonucunda getirilecektir. Emrah UYSAL www.emrahuysal.com 2

SQL > SELECT employees.employee_id, employees.last_name, employees.department_id, departments.department_id, departments.location_id, departments WHERE employees.department_id = departments.department_id; SQL > SELECT last_name, employees.department_id, department_name, departments WHERE employees.department_id = departments.department_id AND last_name = Matos ; TABLE ALİAS Birden fazla tablo kullanılarak yapılan sorgu işlemlerinde her seferinde tablo ismini kullanarak yapılan karışıklığı engellemek için table alias kavramı ortaya çıkmıştır. SQL > SELECT e.last_name, d.department_name, l.city e, departments d, locations l WHERE e.department_id = d.department_id AND d.location_id = l.location_id; Emrah UYSAL www.emrahuysal.com 3

NON EQUİJOİNS Nonequi join genellikle bir tablodaki değern başka bir tablodaki iki değer arasında aranmasında kullanılmaktadır. Aşağıdaki örnekte Emploees tablosundaki Salary değerini Job_Grades tablosunda lowest_sal ve Highest_sal değerleri arasında aramaktayız. SQL > SELECT e.last_name, e.salary, j.grade_level e, job_grades j WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal; Emrah UYSAL www.emrahuysal.com 4

OUTER JOİNS Outer join genellikle bir tabloda olup diğer tabloda olmayan kayıtları görüntülemek için kullanılır. Şekilde görüldüğü gibi bazı alanlar employees tablosunda olup departments tablosunda bulunmamaktadır. SQL > SELECT e.last_name, e.department_id, d.department_name e, departments d WHERE e.department_id = d.department_id; Yukarıdaki sorgu ile normal equi join işlemi yaptık yani her iki tablodan sonuçları döndürürken yalnızca ortak olan alanları getirdik. SYNATX SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column(+) = table2.column; SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column = table2.column(+); Bu arada bilmemiz gereken şey olmayan tarafa (+) işaretinin konulmasıdır.yani elimizde iki tablo var.birinde bazı kayıtlar var birinde yok.biz olmayan taraftaki kayıtlarda gelsin istiyorsak olmayan tarafa (+) işareti koyuyoruz. Emrah UYSAL www.emrahuysal.com 5

SQL > SELECT e.last_name, e.department_id, d.department_name e, departments d WHERE e.department_id(+) = d.department_id ; Dikkat edilirse bir önce yapılan sorguda toplamda 19 kayıt gelmişti ama bu sorgu ile satır sayısını 20 olarak belirledik. SELF JOİN Self Join adı üstünde kendi üzerinde join olarak adlandırılmaktadır.örneğin Employees tablosunu örnek alırsak bir personelin yöneticisi yine aynı tabloda personel olaak tutulmaktadır.yapılacak işlem sayesinde bir personelin yöneticisini yada bir yöneticiye bağlı olan personelleri tespit edebiliriz. SQL > SELECT worker.last_name works for manager.last_name worker, employees manager WHERE worker.manager_id = manager.employee_id ; Emrah UYSAL www.emrahuysal.com 6

GENEL JOİN SYNTAX SQL > SELECT table1.column, table2.column FROM table1 [CROSS JOIN table2] [NATURAL JOIN table2] [JOIN table2 USING (column_name)] [JOIN table2 ON(table1.column_name = table2.column_name)] [LEFT RIGHT FULL OUTER JOIN table2 ON (table1.column_name = table2.column_name)]; CROSS JOİN Cross join dersimizin ilk başlarında yaptığımız kartezyen çarpımla birebir aynıdır.dikkat edilmesi gereken sadece iki tablo üzerinde yapılmaktadır. SQL > SELECT last_name, department_name CROSS JOIN departments ; SQL > SELECT last_name, department_name, departments; NATURAL JOİN Natural Join ise iki tablo arasında Equi join in yaptığının aynısını yapmaktadır.dikkat edilmesi gereken sadece iki tablo üzerinde yapılmaktadır ve tablolardaki joinlenecek kolon isimleri birebir aynı olmalıdır.ama kolon isimleri aynı fakat kolonların data tipleri farklı olursa join hatalı olacaktır. SQL > SELECT department_id, department_name, location_id, city FROM departments NATURAL JOIN locations ; Emrah UYSAL www.emrahuysal.com 7

USİNG CLAUSE Eğer birden fazla kolonun ismi eşleşiyor fakat data type ları uymuyorsa natural join in modifiye edilmiş hali Using clause kullanarak şekillenmiştir. SQL > SELECT e.employee_id, e.last_name, d.location_id e JOIN departments d USING (department_id) ; SQL > SELECT employee_id, last_name, employees.department_id, location_id, departments WHERE employees.department_id = departments.department_id; SQL > SELECT e.employee_id, l.city, d.department_name e JOIN departments d USING (department_id) JOIN locations l USING (location_id); Emrah UYSAL www.emrahuysal.com 8

ON CLAUSE SQL > SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id e JOIN departments d ON (e.department_id = d.department_id); SQL > SELECT e.last_name emp, m.last_name mgr e JOIN employees m ON (e.manager_id = m.employee_id); SQL > SELECT employee_id, city, department_name e JOIN departments d ON d.department_id = e.department_id JOIN locations l ON d.location_id = l.location_id; Emrah UYSAL www.emrahuysal.com 9

OUTER JOİNS LEFT OUTER JOİN SQL > SELECT e.last_name, e.department_id, d.department_name e LEFT OUTER JOIN departments d ON (e.department_id = d.department_id) ; SQL > SELECT e.last_name, e.department_id, d.department_name e, departments d WHERE d.department_id (+) = e.department_id; Daha önce yaptığımız (+) işaretli sorguların daha farklı kullanım şeklidir. RİGHT OUTER JOİN SQL > SELECT e.last_name, e.department_id, d.department_name e RIGHT OUTER JOIN departments d ON (e.department_id = d.department_id) ; SQL > SELECT e.last_name, e.department_id, d.department_name e, departments d WHERE d.department_id = e.department_id (+); Emrah UYSAL www.emrahuysal.com 10

FULL OUTER JOİN Bu kullanım şekli ise joinlenen tablolar üzerinde her iki tabloda olmayan kayıtlarıda getirmektedir. SQL > SELECT e.last_name, e.department_id, d.department_name e FULL OUTER JOIN departments d ON (e.department_id = d.department_id) ; SQL > SELECT e.last_name, e.department_id, d.department_name e, departments d WHERE e.department_id (+) = d.department_id UNION SELECT e.last_name, e.department_id, d.department_name e, departments d WHERE e.department_id = d.department_id (+); GROUP FUNCTIONS SQL > SELECT [column,] group_function(column),... FROM table [WHERE condition] [GROUP BY column] [ORDER BY column]; AVG, MAX, MIN VE SUM FONKSİYONU AVG ortalama SUM ise toplam değeri bulmak için kullanılır. SQL > SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary) WHERE job_id LIKE %REP% ; Emrah UYSAL www.emrahuysal.com 11

SQL > SELECT MIN(hire_date), MAX(hire_date) ; SQL > SELECT MIN(last_name), MAX(last_name) ; COUNT FUNCTION Bu fonksiyon ise sorgu sonucu dönen satırların toplamını ifade eder. SQL > SELECT COUNT(*) WHERE department_id = 50; Count ifadesinin içine expressionda yazabiliriz.count(expr) bize ilgili kolonun null olmayan satır sayısını döndürür. SQL > SELECT COUNT(commission_pct) WHERE department_id = 80; Count ifadesi içinde distinct kelimesinide kullanırsak hem null hemde unique kaıyt sayısını bulabiliriz. SQL > SELECT COUNT(DISTINCT department_id) ; Bir diğer öneml husus gruplama fonksiyonları NULL değerleri dikkate almamaktadır. SQL > SELECT AVG(commission_pct) ; Eğer gruplama fonksiyonlarına NULL değerlerinide eklemek istiyorsak NVL fonksiyonu kullanılabilir. SQL > SELECT AVG(NVL(commission_pct, 0)) ; Emrah UYSAL www.emrahuysal.com 12

GROUP BY CLAUSE Dönen Kayıtları gruplamak için kullanılır,select satırında olan kayıtlar aynı zamanda group by satırında da olmalıdır,group by satırında kolon aliasları kullanılmaz. SQL > SELECT column, group_function(column) FROM table [WHERE condition] [GROUP BY group_by_expression] [ORDER BY column]; SQL > SELECT department_id, AVG(salary) GROUP BY department_id ; SQL > SELECT AVG(salary) GROUP BY department_id ; SQL > SELECT department_id dept_id, job_id, SUM(salary) GROUP BY department_id, job_id ; Emrah UYSAL www.emrahuysal.com 13

ÖRNEK HATALAR SQL > SELECT department_id, COUNT(last_name) ; // YANLIŞ KULLANIM SELECT department_id, COUNT(last_name) * ERROR at line 1: ORA-00937: not a single-group group function SQL > SELECT department_id, count(last_name) GROUP BY department_id; // DOĞRU KULLANIM SELECT department_id, AVG(salary) WHERE AVG(salary) > 8000 GROUP BY department_id; //YANLIŞ KULLANIM WHERE AVG(salary) > 8000 * ERROR at line 3: ORA-00934: group function is not allowed here Emrah UYSAL www.emrahuysal.com 14

SQL > SELECT department_id, AVG(salary) HAVING AVG(salary) > 8000 GROUP BY department_id; HAVİNG CLAUSE SQL > SELECT column, group_function FROM table [WHERE condition] [GROUP BY group_by_expression] [HAVING group_condition] [ORDER BY column]; Group by işlemlerinde sorgumuza bir kısıt koymak istiyorsak Having cümleciğini kullanmalıyız. SQL > SELECT department_id, MAX(salary) GROUP BY department_id HAVING MAX(salary)>10000 ; SQL > SELECT department_id, AVG(salary) GROUP BY department_id HAVING max(salary)>10000; Emrah UYSAL www.emrahuysal.com 15

SQL > SELECT job_id, SUM(salary) PAYROLL WHERE job_id NOT LIKE %REP% GROUP BY job_id HAVING SUM(salary) > 13000 ORDER BY SUM(salary); SQL > SELECT MAX(AVG(salary)) GROUP BY department_id; ÖRNEK UYGULAMALAR SORU? Personel tablosundaki bütün kayıtların ortalama maaşını hesaplayınız. SQL > SELECT AVG (MAAŞ) FROM PERSONEL; SORU? Personel tablosundaki kayıt sayısını hesaplayınız. SQL > SELECT SELECT COUNT (*) FROM PERSONEL; SORU? Personel tablosundaki her görev grubunun ortalama maaşını hesaplayınız ve kayıtları büyükten küçüğe doğru sıralayınız. SQL > SELECT GÖREV, AVG (MAAŞ) FROM PERSONEL GROUP BY GOREV ORDER BY 2 DESC; SORU? Her departmandaki en yüksek maaşları listeleyiniz. SQL > SELECT DEPARTMAN, MAX (MAAŞ) FROM PERSONEL GROUP BY DEPARTMAN; SORU? Ortalama maaşı 100 milyondan büyük olan departmanları listeleyiniz. SQL > SELECT DEPARTMAN, AVG (MAAŞ) FROM PERSONEL GROUP BY DEPARTMAN HAVING AVG(MAAŞ)>100000000; SORU? Her departmandaki ortalama maaşları GENEL MÜDÜR hariç olmak üzere listeleyiniz ve kayıtları en yüksek ortalamadan en düşük ortalamaya doğru sıralayınız. SQL > SELECT DEPARTMAN, AVG(MAAŞ) FROM PERSONEL WHERE GÖREV!=! GENEL MÜDÜR GROUP BY DEPARTMAN ORDER BY 2 DESC; SORU? Bütün personelin ad, soyad ve departman adı bilgilerini listeleyiniz. SQL > SELECT AD, SOYAD, DEPARTMAN_AD FROM PERSONEL, DEPARTMAN WHERE PERSONEL. DEPARTMAN=DEPARTMAN. DEPARTMAN_KOD; Emrah UYSAL www.emrahuysal.com 16

SORU? Bütün personelin emsanno, ad, soyad ve departman adı bilgilerini listeleyiniz ve her alanın başına ilgili tablonun ismini yazınız. SQL > SELECT P.EMSANNO, P.AD,P.SOYAD,D.DEPARTMAN_AD FROM PERSONEL P,DEPARTMAN D WHERE P.DEPARTMAN = DEPARTMAN_KOD; SORU? Bütün personelin ad, soyad ve ev telefonu alanlarını listeleyiniz. SQL > SELECT P.AD, P.SOYAD, A.EV_TLF FROM PERSONEL P, ADRES A WHERE P.EMSANNO = A.EMSANNO; SQL > SELECT P.AD, P.SOYAD, A.EV_TLF FROM PERSONEL P,ADRES A WHERE P.EMSANNO = A.EMSANNO (+); Emrah UYSAL www.emrahuysal.com 17