Przejdź do głównej zawartości

Operacja zapytania SQL


Operacja umożliwia odpytywanie dowolnych baz relacyjnych dowolnymi zapytaniami SQL, co umożliwia realizację scenariuszy wykraczających poza proste bindowanie rekordów modelu podstawowej bazy danych.

Zapytania te mogą wyliczać dowolne agregaty (np. COUNT, MAX itd..), wykonywać złączenia wg kryteriów wykraczających poza zdefiniowane relacje (ograniczenia typu klucz obcy), wywoływać procedury i funkcje itd. Stosując szereg kilku operacji SQL w różnych bazach danych możemy w pewnym zakresie uzyskać efekt złączenia z różnych fizycznych baz danych.

Operacja stanowi połączenie i zawężenie funkcjonalności doczytywania danych dostępnych w bloczkach masowego przetwarzania pt. Loop join i Wczytaj dane z bazy – nie daje możliwości stosowania asynchroniczności i dodatkowych wątków.

wskazówka

Domyślnie nasza operacja jest podłączona do głównej bazy danych plaformy DATA lub CONNECT_STRING We właściwościach operacji możemy wskazać inną bazę.

  1. Przejdź do schematu danych dodaj nowy rekord, a następnie wybierz z menu kontekstowego opcję Wypełnij rekord>SQL query.

image

  1. Treść zapytania podajemy w panelu Szczegóły. Edytor jest wyposażony w podpowiadanie treści SQL na bazie rozpoznanej struktury bazy widocznej w panelu Bazy danych.
  2. Najszybsza metoda tworzenia SQL polega na częstym stosowaniu kombinacji Ctrl+Spacja w celu wywołania kolejnej podpowiedzi.

image

  1. Jak widać na rysunku, zapytanie można korelować do danych istniejących w naszej strukturze.
  2. Odwołanie przez „pojedynczy hash” i nawiasy spowoduje zastosowanie parametrycznego, bardzo wydajnego, kompilowanego zapytania SQL i jest polecane w większości przypadków.
  3. Odwołanie przez „podwójny hasz” spowoduje wykonanie podmiany tekstowej w treści zapytania przed jego wysłaniem, co umożliwia sparametryzowanie np. nazwy schematu, fragmentu nazwy tabeli czy wstrzykiwanie innych fragmentów SQL, np.. hintów.
  4. Każda zmiana treści zapytania wymaga wybrania akcji Uruchom w panelu Szczegółów, co powoduje pobranie nowego schematu wyniku. Operacje o zmienionej treści zapytania bez odświeżenia schematu będą zgłaszać ostrzeżenie w trakcie projektowania.

Operacja zapytania SQL może być podłączona zarówno pod pojedyncze pole struktury, jak i pod rekord.

W przypadku podłączenia pod pole, nasze zapytanie musi zwracać pojedynczą wartość. Próba pobrania wyniku o wielu kolumnach spowoduje wygenerowanie błędu w czasie projektowania. Wygenerowanie wyniku o wielu wierszach doprowadzi do błędu (lub ostrzeżenia) czasu działania.

Podłączenie operacji pod rekord pozwala nam o odpytywanie o wiele wierszy i kolumn.

Operacja zapytania może spróbować przejąć kontrolę nad rekordem, do którego jest podłączona, jeśli nie zawiera on żadnych pól. Wówczas krotność naszego rekordu zmieni się na „wiele” a wymagalność będzie wyłączona.

  1. Jeśli mamy pewność, że nasz wynik będzie ograniczony do co najwyżej jednego wiersza, możemy włączyć we właściwościach operacji opcję wymuszenia pojedynczego wyniku. Spowoduje to uzyskanie pojedynczego rekordu w schemacie danych.

image

  1. Domyślnie operacja przywiązana do rekordu pozwala na korelowanie treści zapytania do rekordu rodzica naszej struktury (zwykle nasz rekord na tym etapie został dopiero co dodany i nie zawiera żadnych pól). Pozwala to na stosowanie „ładnych” ścieżek nie zaczynających się zawsze od przejścia „w górę”, czyli ..\
  2. Jeśli chcemy jednak wczytać zapytaniem co najwyżej jeden wiersz wyniku i uzupełnić jego kolumnami bieżący rekord danych (i korelować dane do treści tego rekordu a nie jego rodzica), możemy to zrobić przełączając opcję Origin operacji z wartości Parent na Here.

image

  1. Jeśli podejrzewamy, że nasze zapytanie może wymagać tuningu na danych docelowych, możemy w opcjach włączyć pobieranie i logowanie planów zapytań (access plan / execution plan). Spowoduje to zalogowane planu spodziewanego oraz treści planów rzeczywistych dla rekordów 1, 10, 100, 1000 (jeśli różnią się od planów poprzednio zalogowanych). Późniejsza lektura logów pozwoli nam na bardzo skuteczną optymalizację treści zapytania.
  2. Pozostałe opcje operacji pozwalają na uproszczenie współpracy z nietypowo zachowującymi się silnikami baz danych – normalizację liczb dziesiętnych, obcinanie białych znaków z początku i końca napisów, wymuszenie małych / wielkich liter w schemacie wyniku.

Inną metodą pobierania danych w ramach operacji mapowań jest: Operacja zapytania do modelu danych Entity Framework.

W pakietach przetwarzania istnieją jeszcze inne metody doczytywania złożonych danych, posiadające inne wymagania i charakterystyki działania:

  1. odczyt danych zdenormalizowanych poleceniami zawierającymi złączenia (JOIN) i późniejsza ich normalizacja do drzew,
  2. użycie bloczków zapytań i odczytu z bazy (LoopJoin) lub złączenia posortowanych strumieni (MergeJoin).

Przykład:

  1. Mamy prostą, rekurencyjną strukturę danych reprezentującą osoby. W bazie danych nasza struktura będzie wyglądać tak:

image

  1. Załóżmy, że mamy w tabeli kilka rekordów układających się koncepcyjnie w następujące drzewo:

image

  1. Chcemy przy pomocy opisywanej operacji uzyskać strukturę danych i rekordy wyglądające mniej więcej tak (z dokładnością do Children / direct children / grandchildren).

image

Operacje dodawania rekordów i zapytań SQL prowadzące do uzyskania pożądanego wyniku wyglądają następująco:

image

Zobacz również​

Masowa zmiana nazw elementów

Kontroler schematów wymaganych

Język programowania