MERGE [hint] INTO [table_name]
USING (table_view_or_query)
ON (condition)
WHEN MATCHED THEN (update_clause)
WHEN NOT MATCHED THEN (insert_clause);
- Employee Tablosu oluşturuyoruz. (Create Employee Table)
CREATE TABLE employee (
employee_id int,
first_name varchar(20),
last_name varchar(20),
dept_no varchar(2),
salary money);
- Employee Tablosuna değerleri giriyoruz. (Inset values in to the Employee Table)
INSERT INTO employee VALUES (1, 'Dan', 'Morgan', 10, 100000);
INSERT INTO employee VALUES (2, 'Jack', 'Cline', 20, 100000);
INSERT INTO employee VALUES (3, 'Elizabeth', 'Scott', 20, 50000);
INSERT INTO employee VALUES (4, 'Jackie', 'Stough', 20, 40000);
INSERT INTO employee VALUES (5, 'Richard', 'Foote', 20, 30000);
INSERT INTO employee VALUES (6, 'Joe', 'Johnson', 20, 70000);
INSERT INTO employee VALUES (7, 'Clark', 'Urling', 20, 90000);
- Bonus Tablosu Oluşturuyoruz. (Create Bonuses Table)
CREATE TABLE bonuses (
employee_id int, bonus int DEFAULT 100);
- Bonus Tablosuna değerleri giriyoruz. (Insert Values in to the Bonuses Table)
INSERT INTO bonuses (employee_id) VALUES (1);
INSERT INTO bonuses (employee_id) VALUES (2);
INSERT INTO bonuses (employee_id) VALUES (4);
INSERT INTO bonuses (employee_id) VALUES (6);
INSERT INTO bonuses (employee_id) VALUES (7);
- Aşağıdaki Query'i yazıyoruz. (Write the below Query Code)
Burada eşleştirme yapıyoruz. Dept_no 20 olan verilerin bonus değeri maaşları 0.1 ile çarpılmasıyla hesaplanmış oluyor.
Eğer eşleşmiyorsa Kişini Maaş bonusu maaşının 0.05 ile çarpmı ile Bonuses tablosuna ekleniyor.
Merge INTO bonuses B
USING (
SELECT employee_id,salary from employee where Dept_no=20) E
ON (B.employee_id=E.employee_id)
WHEN MATCHED THEN
UPDATE SET B.bonus =(E.salary * 0.1)
WHEN NOT MATCHED THEN
INSERT (employee_id,bonus)
VALUES (E.employee_id,(E.salary * 0.05));