-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathday4_subQuery.sql
More file actions
88 lines (71 loc) · 4.1 KB
/
day4_subQuery.sql
File metadata and controls
88 lines (71 loc) · 4.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
------SUBQUERY---------------
--Sorgu icinde calisan sorguya subquery (alt sorgu) denir.
-- VERILER DEGİSMEZ SADECE SORGULANIR VE GETIRILIR. UPDATE VE DELETE KI GIBI VERI DEGISMEZ.
-- bu benim yorumum parent child iliskisi olmayan 2 tablo icin kulllanilir. birbirleri ile ayni verileri iceren 2 sutundaki veriler ile baglanti kurmaya calisma yapmaya yarar.
CREATE TABLE personel
(
id NUMBER(9),
isim VARCHAR2(50),
sehir VARCHAR2(50),
maas NUMBER(20),
sirket VARCHAR2(20)
);
INSERT INTO personel VALUES(123456789, 'Ali Seker', 'Istanbul', 2500, 'Honda');
INSERT INTO personel VALUES(234567890, 'Ayse Gul', 'Istanbul', 1500, 'Toyota');
INSERT INTO personel VALUES(345678901, 'Veli Yilmaz', 'Ankara', 3000, 'Honda');
INSERT INTO personel VALUES(456789012, 'Veli Yilmaz', 'Izmir', 1000, 'Ford');
INSERT INTO personel VALUES(567890123, 'Veli Yilmaz', 'Ankara', 7000, 'Hyundai');
INSERT INTO personel VALUES(456789012, 'Ayse Gul', 'Ankara', 1500, 'Ford');
INSERT INTO personel VALUES(123456710, 'Fatma Yasa', 'Bursa', 2500, 'Honda');
CREATE TABLE sirketler
(
sirket_id NUMBER(9),
sirket_adi VARCHAR2(20),
personel_sayisi NUMBER(20)
);
INSERT INTO sirketler VALUES(100, 'Honda', 12000);
INSERT INTO sirketler VALUES(101, 'Ford', 18000);
INSERT INTO sirketler VALUES(102, 'Hyundai', 10000);
INSERT INTO sirketler VALUES(103, 'Toyota', 21000);
INSERT INTO sirketler VALUES(104, 'Mazda', 17000);
SELECT *FROM sirketler;
SELECT * FROM personel;
--ORNEK1: PERSONEL SAYISI 15.000’den COK OLAN SİRKETLERİN İSİMLERİNİ (alt sorgu şirketler)ve bu
-- sirkette calisan personelin isimlerini ve maaşlarını (asıl sorgu personel) listeleyin
SELECT isim, maas, sirket FROM personel
WHERE sirket IN(SELECT sirket_adi FROM sirketler WHERE personel_sayisi>15000);
--ORNEK2: sirket_id’si 101’den büyük olan şirket çalışanlarının isim, maaş ve
--şehirlerini listeleyiniz.
SELECT isim,maas,sehir FROM personel
WHERE sirket IN(SELECT sirket_adi FROM sirketler WHERE sirket_id>101);
--ORNEK3: Ankara’da personeli olan şirketlerin şirket id'lerini ve personel sayılarını listeleyiniz
SELECT sirket_id, personel_sayisi FROM sirketler
WHERE sirket_adi IN(SELECT sirket FROM personel WHERE sehir='Ankara');
/* ===================== AGGREGATE METOT KULLANIMI ===========================
Aggregate Metotları(SUM,COUNT, MIN,MAX, AVG) Subquery içinde kullanılabilir.
Ancak, Sorgu tek bir değer döndürüyor olmalıdır.
-- *** SELECT den sonra SUBQUERY yazarsak sorgu sonucunun sadece 1 deger getireceginden emin olmaliyiz
--SELECT id,isim,maas
--FROM personel
--WHERE sirket='Honda';
-- bir tablodan tek deger getirebilmek icin ortalama AVG , toplam SUM, adet COUNT, MIN, MAX gibi AVG ORTALAMA
-- fonksiyonlar kullanilir ve bu fonksiyonlara AGGREGATE FONKSIYONLAR denir
==============================================================================*/
--ORNEK4: Her şirketin ismini, personel sayısını ve o şirkete ait personelin
--toplam maaşını listeleyen bir Sorgu yazınız.
SELECT sirket_adi, personel_sayisi, (SELECT SUM(maas)FROM personel WHERE sirketler1.sirket_adi=personel2.sirket) AS toplam_maas
FROM sırketler;
--ORNEK5: Her şirketin ismini, personel sayısını ve o şirkete ait personelin
-- ortalama maaşını listeleyen bir Sorgu yazınız.
SELECT sirket_adi , personel_sayisi, (SELECT ROUND(AVG(maas)) FROM personel WHERE sirket_adi=sirket)AS ort_maas
FROM sirketler;
-- ROUND YUVARLAMA YAPAR AVG MAAS 2666.66666... GIBI CIKAR. ROUND KULLANARAK YUVARLAMA KURALLARINA UYDUK.
-- ORNEK6: Her şirketin ismini, personel sayısını ve o şirkete ait personelin
-- maksimum ve minumum maaşını listeleyen bir Sorgu yazınız.
SELECT sirket_adi,personel_sayisi, (SELECT MAX(maas) FROM personel WHERE sirket_adi= sirket ) AS max_maas,(Select MIN(maas) FROM personel WHERE sirket_adi= sirket )AS min_maas
FROM sirketler;
-- burada tek () max ve min yazilamaz. pl oracle bunlardan hangisini sececegine karar veremeyebilir.
-- ORNEK7: Her sirketin id’sini, ismini ve toplam kaç şehirde bulunduğunu
-- listeleyen bir SORGU yazınız.
SELECT sirket_id,sirket_adi,(SELECT COUNT(sehir) FROM personel WHERE sirket_adi=sirket ) AS sehir_sayisi
FROM sirketler;