3 Eylül 2025 Çarşamba

ÇALIŞANLAR VE BİRİMLER TABLOSU OLUŞTURMA, KAYIT GİRİŞİ VE SORULAR

1-Çalışanları birim adları ile birlikte listeleyiniz.

2-Birim adı boş olan kayıtları listeleyiniz ve sayılarını tespit ediniz.

3-Toplam çalışan sayısını bulunuz.

4-) Her birimde çalışan sayısını bulunuz.

5-)Her birimin ortalama maaşını bulunuz.

6-)Satınalma biriminin en yüksek maaş alan personelini bulunuz.

7-)Her birimin en yüksek maaş alan personelini bulunuz.

8-)En yüksek maaş alan kişiyi bulunuz.

9-)Adı veya Soyadında a harfi olmayan kişilerin sayısını bulunuz.

10-)Adı ve Soyadında b harfi olan kişilerin sayısını bulunuz.

11-)Birimi DİĞER olanların maaş toplamının, tüm personelin maaşına oranını bulunuz.

12-)Maaşların(toplam) birim bazlı yüzde olarak dağılımını bulunuz.        


create table dbtools.calisanlar

(

ad varchar2(50),

soyad varchar2(50),

anne_adi varchar2(50),

baba_adi varchar2(50),

birim number,

maas float

);



create table dbtools.birimler

(

id number,

ad varchar2(50)

);





INSERT /*+ APPEND */ INTO dbtools.calisanlar (ad, soyad, birim, maas, anne_adi, baba_adi)

WITH

-- Küçük sözlükler

adlar AS (

    SELECT 'Ahmet' ad FROM dual UNION ALL

    SELECT 'Mehmet' FROM dual UNION ALL

    SELECT 'Ayşe'   FROM dual UNION ALL

    SELECT 'Fatma'  FROM dual UNION ALL

    SELECT 'Ali'    FROM dual UNION ALL

    SELECT 'Zeynep' FROM dual UNION ALL

    SELECT 'Emre'   FROM dual UNION ALL

    SELECT 'Can'    FROM dual UNION ALL

    SELECT 'Elif'   FROM dual UNION ALL

    SELECT 'Merve'  FROM dual

),

soyadlar AS (

    SELECT 'Yılmaz' soyad FROM dual UNION ALL

    SELECT 'Demir'  FROM dual UNION ALL

    SELECT 'Kaya'   FROM dual UNION ALL

    SELECT 'Şahin'  FROM dual UNION ALL

    SELECT 'Çelik'  FROM dual UNION ALL

    SELECT 'Aydın'  FROM dual UNION ALL

    SELECT 'Aslan'  FROM dual UNION ALL

    SELECT 'Koç'    FROM dual UNION ALL

    SELECT 'Öztürk' FROM dual UNION ALL

    SELECT 'Doğan'  FROM dual

),

anne_adlari AS (

    SELECT 'Ayşe'  anne FROM dual UNION ALL

    SELECT 'Fatma' FROM dual UNION ALL

    SELECT 'Zeynep'FROM dual UNION ALL

    SELECT 'Emine' FROM dual UNION ALL

    SELECT 'Havva' FROM dual UNION ALL

    SELECT 'Meryem'FROM dual UNION ALL

    SELECT 'Hatice'FROM dual UNION ALL

    SELECT 'Rabia' FROM dual UNION ALL

    SELECT 'Aysel' FROM dual UNION ALL

    SELECT 'Gül'   FROM dual

),

baba_adlari AS (

    SELECT 'Mustafa' baba FROM dual UNION ALL

    SELECT 'Ahmet'   FROM dual UNION ALL

    SELECT 'Mehmet'  FROM dual UNION ALL

    SELECT 'Ali'     FROM dual UNION ALL

    SELECT 'Hüseyin' FROM dual UNION ALL

    SELECT 'Hasan'   FROM dual UNION ALL

    SELECT 'Osman'   FROM dual UNION ALL

    SELECT 'İsmail'  FROM dual UNION ALL

    SELECT 'Kemal'   FROM dual UNION ALL

    SELECT 'Yusuf'   FROM dual

),

-- Her dış satır için rastgele indeksleri ÖNCE üret (tek kez)

seed AS (

    SELECT /*+ materialize */

           LEVEL AS id,

           TRUNC(DBMS_RANDOM.VALUE(1,11)) rnd_ad,

           TRUNC(DBMS_RANDOM.VALUE(1,11)) rnd_soyad,

           TRUNC(DBMS_RANDOM.VALUE(1,11)) rnd_anne,

           TRUNC(DBMS_RANDOM.VALUE(1,11)) rnd_baba,

           TRUNC(DBMS_RANDOM.VALUE(1,11)) rnd_birim,

           TRUNC(DBMS_RANDOM.VALUE(20000,150001), 2) rnd_maas

    FROM dual

    CONNECT BY LEVEL <= 500000

),

-- Sözlükleri 1..10 arası sabit anahtarla numaralandır

ad_rn    AS (SELECT ad,    ROW_NUMBER() OVER (ORDER BY ad)    rn FROM adlar),

soyad_rn AS (SELECT soyad, ROW_NUMBER() OVER (ORDER BY soyad) rn FROM soyadlar),

anne_rn  AS (SELECT anne,  ROW_NUMBER() OVER (ORDER BY anne)  rn FROM anne_adlari),

baba_rn  AS (SELECT baba,  ROW_NUMBER() OVER (ORDER BY baba)  rn FROM baba_adlari)

SELECT

    a.ad,

    s.soyad,

    sd.rnd_birim AS birim,

    sd.rnd_maas  AS maas,

    an.anne      AS anne_adi,

    bb.baba      AS baba_adi

FROM seed sd

JOIN ad_rn    a  ON a.rn    = sd.rnd_ad

JOIN soyad_rn s  ON s.rn    = sd.rnd_soyad

JOIN anne_rn  an ON an.rn   = sd.rnd_anne

JOIN baba_rn  bb ON bb.rn   = sd.rnd_baba;


COMMIT;


INSERT INTO DBTOOLS.birimler SELECT 1, 'FİNANS' FROM DUAL;

INSERT INTO DBTOOLS.birimler SELECT 2, 'İK' FROM DUAL;

INSERT INTO DBTOOLS.birimler SELECT 3, 'BİLGİ_İŞLEM' FROM DUAL;

INSERT INTO DBTOOLS.birimler SELECT 4, 'MUHASEBE' FROM DUAL;

INSERT INTO DBTOOLS.birimler SELECT 5, 'ARGE' FROM DUAL;

INSERT INTO DBTOOLS.birimler SELECT 6, 'TEKNİK SERVİS' FROM DUAL;

INSERT INTO DBTOOLS.birimler SELECT 7, 'SATINALMA' FROM DUAL;

INSERT INTO DBTOOLS.birimler SELECT 8, 'SATIŞ' FROM DUAL;

INSERT INTO DBTOOLS.birimler SELECT 9, 'DİĞER' FROM DUAL;

INSERT INTO DBTOOLS.birimler SELECT 10, NULL FROM DUAL;




Hiç yorum yok:

Yorum Gönder