23 Temmuz 2014 Çarşamba

Sql Merge


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));

Hiç yorum yok:

Yorum Gönder