Podzapytania proste, odsłona pierwsza :-)



Marcinie,
Fakt, już od pewnego czasu zastanawiam się nad jednym zestawem tabel i przykładowych danych by następnie na tychże prezentować ciekawostki. Tak mają kursy… Ja na blogu nie realizuję co prawda kursu, ale nieco marzy mi się taka sytuacja, takie środowisko, ale go nie mam… To jeszcze przede mną…
Dlatego nadal po staremu, a więc nowy przykład, nowe tabele. Sytuacja jest następująca:

  1. firma handlowa sprzedaje czterem kontrahentom towary, numery kontrahentów od 1 do 4, dane o nazwie i województwie w tabeli KLIENCI,
  2. firma sprzedaje z odroczonym terminem płatności, to jest udziela kredytu kupieckiego,
  3. każdemu kontrahentowi firma określa limit kredytu kupieckiego, jest on zmienny w czasie,
  4. firma co miesiąc rejestruje w tabelce saldo, zadłużenie danego kontrahenta oraz jego limit kredytu kupieckiego,
  5. dane, o których mowa w punktach 2, 3 i 4 są zebrane w tabelce SALDA, mamy zdane za 4 lata, identyfikator klienta umożliwiający powiązanie z tabelą KLIENCI, limit i saldo... tu to jest.

Problem: czy, a jeżeli odpowiedź brzmi tak, to ile razy, kiedy, o ile kwotowo i procentowo zostały przekroczone w badanych czterech latach przyznane limity kredytu kupieckiego.  
By to zrobić szybko i sprawnie, to trzeba przejrzeć tabelkę SALDA i by nie robić tego osobno dla każdego kontrahenta od razu warto znaleźć pary danych: id kontrahenta oraz czas, gdy dla danego kontrahenta wystąpiło przekroczenie limitu, czyli:
(ID, DATA_STANU) IN (SELECT ID,  DATA_STANU FROM SALDA WHERE SALDO/LIMIT>1)
Wynikiem zapytania po lewej będzie zbiór par danych, gdy było przekroczenie limitu - o tym decyduje fakt, iż relacja salda do limitu jest powyżej 1.
To co mamy po prawej, to konieczny element, by napisać kompletny warunek – interesują nas pary danych co są w zbiorze par danych wygenerowanych przez zapytanie po lewej, tak to czytać trzeba J
No to mamy warunek, który użyjemy po WHERE. Właśnie po WHERE podamy, to co wyżej napisałem i to będzie wykonane w pierwszej kolejności, to jest właśnie podzapytanie proste.
Kiedy już wiemy kiedy, w zależności od kontrahenta, nastąpiło przekroczenie limitu możemy się „pobawić” i ustalić co chcemy zobaczyć finalnie „na ekranie”.
Nazwa kontrahenta, województwo jest w osobnej tabeli, dlatego będziemy sięgać do dwóch tabel, obu nadamy aliasy i je powiążemy. To pierwsza rzecz, która przychodzi do głowy przed skonstruowaniem co wyświetlimy, czyli:
FROM Salda s, Klienci k WHERE s.ID=k.KLIENT_ID
Od końca piszemy kwerendę, ale tak do niej po kolei dochodzimy. Jeżeli wiemy skąd, jaki warunek mają spełniać dane  to już wszystko. Wyświetlamy pożądane informacje i koniec.
I przy okazji uczymy się co to jest konkatenacja, to dodanie dwóch tekstów czymś takim ||
Tradycyjnie:
Reszta na obrazku.
W.

Brak komentarzy:

Prześlij komentarz