wtorek, 13 czerwca 2017

Lekcja 27. Instrukcja MERGE

Instrukcja MERGE umożliwia aktualizację i dołączenie wierszy z jednej tabeli do drugiej. Możemy na przykład złączyć z tabelą customer zmiany wprowadzone w klientach w innej tabeli. Aby dobrze zobrazować działanie instrukcji MERGE należy utworzyć nową tabelę customer_changes. Czynność tą realizuje poniższa instrukcja:


Poniższe zapytanie pobiera z tabeli customer_changes kolumny cust_no, customer i city:


Dla porównania poniższe zapytanie pobiera z tabeli customer kolumny cust_no, customer city:


Załóżmy, że chcemy scalić wiersze z tabeli customer_changes z tabelą customer zgodnie z poniższymi regułami:
  • W przypadku wierszy z takimi samymi wartościami cust_no w obu tabelach do istniejących wierszy tabeli customer. Na przykład w tabeli customer_changes miasto klienta numer 1009 jest inne niż w tabeli customer, dlatego też miasto tego klienta musi zostać zmienione w tabeli ­customer. Klient numer 1010 ma inną nazwę i cenę, więc w tabeli customer muszą zostać zmienione obydwie wartości.
  • Wiersze występujące tylko w tabeli customer_changes powinny zostać wstawione do tabeli customer. Klienci nr 1017 i 1018 występują tylko w tabeli ­customer_­changes, muszą więc zostać wstawione do tabeli customer.
Instrukcję MERGE najłatwiej zrozumieć analizując przykład (poniższy wykonuje scalanie zgodnie z przedstawioną listą reguł):


W instrukcji MERGE są następujące części:
  • Klauzula INTO określa nazwę tabeli, z którą będą scalane wiersze. W przykładzie jest to tabela customer, której nadano alias c.
  • Klauzula USING … ON określa złączenie tabeli. W przykładzie złączenie jest dokonywane przez kolumny cust_no tabel customer i customer_changes. Tabeli . Tabeli customer_changes nadano alias cc.
  • Klauzula WHEN MATCHED THEN określa czynność wykonywaną, gdy wiersz spełnia klauzulę USING … ON. W przykładzie czynnością jest instrukcja UPDATE, która przypisuje wartościom kolumn customer i city wiersza istniejącego w tabeli customer wartości odpowiedniego wiersza tabeli customer_changes.
  • Klauzula WHEN NOT MATCHED THEN określa czynność wykonywaną, gdy wiersz nie spełnia klauzuli USING … ON. W przykładzie czynnością jest instrukcja INSERT, która wstawia wiersz do tabeli customer, pobierając wartości kolumn z wiersza z tabeli customer_changes.
Po uruchomieniu przedstawionej instrukcji MERGE widzimy, że zostały scalone cztery wiesze. Są to wiesze, w których cust_no ma wartość 1009, 1010, 1017 i 1018.  Poniższe zapytanie pobiera z tabeli customer cztery scalone wiersze:

 


W tych wiersza zostały wprowadzone następujące zmiany:
  • klient numer 1009 ma nowe miasto
  • klient numer 1010 ma nową nazwę oraz miasto
  • klienci numer 1017 i 1018 zostali dodani do tabeli

Brak komentarzy:

Prześlij komentarz