Məzmuna keçin
  • Kateqoriyalar
  • Ən yeni
  • Teqlər
  • Populyar
Yığmaq
Brend loqosu
  1. Əsas səhifə
  2. Oracle
  3. Oracle SQL-də JOIN əməliyyatları (Birləşdirmələr)

Oracle SQL-də JOIN əməliyyatları (Birləşdirmələr)

Planlaşdırılıb Sabitlənib Kilidlənib Köçürülüb Oracle
oracleinnerjoinleftjoinrightjoinsql
1 Yazı 1 Yazarlar 14 Baxış
  • Ən köhnədən yeniyə
  • Ən yenidən köhnəyə
  • Ən çox səs
Cavab ver
  • Mövzu olaraq cavablandır
🔑 Daxil ol
Bu mövzu silindi. Yalnız mövzu idarəçiliyi imtiyazlarına malik olan istifadəçilər onu görə bilər.
  • codexC Oflayn
    codexC Oflayn
    codex
    yazdı sonuncu dəfə tərəfindən redaktə edilib
    #1

    Verilənlər bazasında məlumatlar adətən normalizasiya edilmiş, yəni müxtəlif cədvəllərdə saxlanılır. Bu cədvəlləri əlaqələndirmək üçün JOIN əməliyyatlarından istifadə olunur. Oracle SQL-də bir neçə növ JOIN mövcuddur və hər biri fərqli ehtiyaclara cavab verir.


    🔗 1. INNER JOIN – Daxili birləşdirmə

    INNER JOIN iki və ya daha çox cədvəldə yalnız uyğun gələn (ortaq açar dəyəri olan) sətirləri birləşdirir. Nəzəri olaraq, inner join SQL sorğusu iki cədvəl arasında müqayisə edilən sətrlərin hamısının eyni dəyərlərə malik olması tələb olunur. Nəticədə, yalnız uyğunluq olan sətrləri nəticəyə əlavə edir.

    image (1).jpg

    Nümunə üçün iki cədvəli düşünək:

    Cədvəl 1: sifarişlər (orders)

    order_id customer_id goods_name order_date
    101 1 Laptop 2024-05-01
    102 1 Telefon 2024-05-03
    103 2 Tablet 2024-05-02
    104 3 Kamera 2024-05-04
    105 3 Klaviatura 2024-05-05

    Cədvəl 2: müştərilər (customers)

    customer_id name surname
    1 Ali Məmmədov
    2 Nigar Əliyeva
    3 Cavid Məmmədli

    Bu iki cədvəli birləşdirmək üçün aşağıdakı SQL sorğusunu istifadə edə bilərik:

    SELECT customers.name, customers.surname, orders.goods_name, orders.order_date
    FROM orders
    INNER JOIN customers ON customers.customer_id = orders.customer_id;
    

    Bu sorğunun nəticəsi belə olacaq:

    name surname goods_name order_date
    Ali Məmmədov Laptop 2024-05-01
    Ali Məmmədov Telefon 2024-05-03
    Nigar Əliyeva Tablet 2024-05-02
    Cavid Məmmədli Kamera 2024-05-04
    Cavid Məmmədli Klaviatura 2024-05-05

    Bu sorğu “müştərilər” və “sifarişlər” cədvəllərini customer_id sütunu əsasında birləşdirir. Nəticədə, hər bir sifarişin hansı müştəri tərəfindən verildiyi və sifariş tarixi ilə birlikdə müştəri adını və soyadını göstərir.

    -- müştərilərilər cədvəlinin yaradılması              
    CREATE TABLE customers (
        customer_id NUMBER PRIMARY KEY,
        name VARCHAR2(50),
        surname VARCHAR2(50)
    );
    
    -- müştərilər cədvəlinin doldurulması
    INSERT INTO customers (customer_id, name, surname) VALUES
    (1, 'Ali', 'Məmmədov'),
    (2, 'Nigar', 'Əliyeva'),
    (3, 'Cavid', 'Məmmədli');
    
    -- sifarişlər cədvəlinin yaradılması
    CREATE TABLE orders (
        order_id NUMBER PRIMARY KEY,
        customer_id NUMBER,
        goods_name VARCHAR2(100),
        order_date DATE,
        FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
    );
    
    -- sifarişlər cədvəlinin doldurulması
    INSERT INTO orders (order_id, customer_id, goods_name, order_date) VALUES
    (101, 1, 'Laptop', DATE '2024-05-01'),
    (102, 1, 'Telefon', DATE '2024-05-03'),
    (103, 2, 'Tablet', DATE '2024-05-02'),
    (104, 3, 'Kamera', DATE '2024-05-04'),
    (105, 3, 'Klaviatura', DATE '2024-05-05');
    


    🔍 2. LEFT JOIN – Sol birləşdirmə

    LEFT JOIN sol cədvəldəki bütün sətirləri, sağ cədvəldə isə yalnız uyğun gələnləri birləşdirir. Əgər sağ tərəfdə uyğun sətir yoxdursa, həmin sütunlarda NULL göstərilir.

    image.jpg

    İki cədvəl nümunəsi:

    employees cədvəli:

    employee_id name department_id
    1 John Smith 10
    2 Jane Doe NULL
    3 Emily Davis 20
    4 Michael Brown 30

    departments cədvəli:

    department_id department_name
    10 IT
    20 HR
    30 Finance
    SELECT employees.employee_id, employees.name, departments.department_name
    FROM employees
    LEFT JOIN departments
    ON employees.department_id = departments.department_id;
    

    Bu sorğunun nəticəsi belə olacaq:

    employee_id name department_name
    1 John Smith IT
    2 Jane Doe NULL
    3 Emily Davis HR
    4 Michael Brown Finance

    CREATE TABLE departments (
        department_id NUMBER PRIMARY KEY,
        department_name VARCHAR2(100)
    );
    
    INSERT INTO departments (department_id, department_name)
    VALUES 
        (10, 'IT'),
        (20, 'HR'),
        (30, 'Finance');
    
    
    CREATE TABLE employees (
        employee_id NUMBER PRIMARY KEY,
        name VARCHAR2(100),
        department_id NUMBER,
        FOREIGN KEY (department_id) REFERENCES departments(department_id)
    );
    
    INSERT INTO employees (employee_id, name, department_id)
    VALUES 
        (1, 'John Smith', 10),
        (2, 'Jane Doe', NULL),
        (3, 'Emily Davis', 20),
        (4, 'Michael Brown', 30);
    


    🔎 3. RIGHT JOIN – Sağ birləşdirmə

    RIGHT JOIN sağ cədvəldəki bütün sətirləri, sol cədvəldə isə uyğun gələnləri birləşdirir. Əgər sol cədvəldə uyğun gələn sətir yoxdursa, onda nəticə dəstində sol cədvəldəki sütunlar üçün NULL dəyərləri olacaq.

    e602b870-cd54-4536-a665-283a9b565074-image.png

    Bir nümunə ilə izah edək. İki cədvəlimiz var:

    • Orders (Sifarişlər)
    • Customers (Müştərilər)

    Orders cədvəli:

    OrderID CustomerID OrderDate
    1 1001 2023-01-15
    2 1002 2023-02-20
    3 1003 2023-03-12

    Customers cədvəli:

    CustomerID CustomerName
    1001 Ali
    1002 Ayşe
    1004 Mehmet

    RIGHT JOIN sorğusu ilə Orders və Customers cədvəllərini birləşdirək:

    SELECT Orders.OrderID, Orders.OrderDate, Customers.CustomerName
    FROM Orders
    RIGHT JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
    

    Bu sorğunun nəticəsi belə olacaq:

    OrderID OrderDate CustomerName
    1 2023-01-15 Ali
    2 2023-02-20 Ayşe
    NULL NULL Mehmet

    Göründüyü kimi, Customers cədvəlindəki bütün müştərilər nəticədə göstərilir, hətta Orders
    cədvəlində uyğun gələn sifariş olmadıqda belə. Mehmet üçün sifariş məlumatı olmadığından, onun üçün
    NULL dəyərləri qaytarılır.

    CREATE TABLE customers (
        CustomerID NUMBER PRIMARY KEY,
        CustomerName VARCHAR2(100)
    );
    
    INSERT INTO customers (CustomerID, CustomerName)
    VALUES 
        (1001, 'Ali'),
        (1002, 'Ayşe'),
        (1004, 'Mehmet');
    
    CREATE TABLE orders (
        OrderID NUMBER PRIMARY KEY,
        CustomerID NUMBER,
        OrderDate DATE
    );
    
    INSERT INTO orders (OrderID, CustomerID, OrderDate)
    VALUES 
        (1, 1001, TO_DATE('2023-01-15', 'YYYY-MM-DD')),
        (2, 1002, TO_DATE('2023-02-20', 'YYYY-MM-DD')),
        (3, 1003, TO_DATE('2023-03-12', 'YYYY-MM-DD'));
    


    🔄 4. FULL OUTER JOIN – Tam birləşdirmə

    Bu JOIN həm sol, həm də sağ cədvəldəki bütün sətirləri qaytarır. Uyğun gəlməyənlər üçün NULL istifadə olunur.

    Nümunə:

    SELECT employees.name, departments.name
    FROM employees
    FULL OUTER JOIN departments
    ON employees.dept_id = departments.id;
    

    🔁 5. CROSS JOIN – Çarpaz birləşdirmə

    CROSS JOIN hər bir sətiri digər cədvəldəki bütün sətirlərlə birləşdirir. Bu zaman kartesian hasil yaranır.

    Nümunə:

    SELECT A.name, B.name
    FROM tableA A
    CROSS JOIN tableB B;
    

    Əgər tableA 3 sətir, tableB 2 sətirdirsə, nəticə 6 sətirdən ibarət olacaq (3 × 2).


    💡 Alternativ JOIN Sintaksisi

    Oracle-da daha əvvəlki dövrlərdə istifadə olunan sintaksis belə idi:

    SELECT e.name, d.name
    FROM employees e, departments d
    WHERE e.dept_id = d.id;
    

    Bu yazılış INNER JOIN-in qısa formasıdır. Amma müasir SQL-də açıq şəkildə JOIN yazmaq daha oxunaqlı və texniki cəhətdən üstün sayılır.


    ✅ Nəticə

    JOIN Növü İzahı
    INNER JOIN Hər iki cədvəldə uyğun olan sətirləri qaytarır
    LEFT JOIN Sol cədvəldə olan bütün sətirləri, uyğun olanları sağdan
    RIGHT JOIN Sağ cədvəldə olan bütün sətirləri, uyğun olanları soldan
    FULL OUTER JOIN Hər iki cədvəldə olan bütün sətirləri qaytarır
    CROSS JOIN Bütün mümkün birləşmələri (kartesian hasil) qaytarır
    1 cavab Son cavab
    Cavab ver
    • Mövzu olaraq cavablandır
    🔑 Daxil ol
    • Ən köhnədən yeniyə
    • Ən yenidən köhnəyə
    • Ən çox səs




    Bilik paylaşdıqca artan bir sərvətdir
    • Daxil ol

    • Sizin hesabınız yoxdur? Qeydiyyatdan keç

    • Axtarış etmək üçün daxil olun və ya qeydiyyatdan keçin.
    • İlk yazı
      Son yazı
    0
    • Kateqoriyalar
    • Ən yeni
    • Teqlər
    • Populyar