Access 2. Kwerendy (zapytania) wybierające Kwerendy wybierające (nazywane też zapytaniami wybierającymi) są podstawowymi obiektami w MS Access służącymi do wyszukiwania danych w tabelach. W wyniku uruchomienia wcześniej zdefiniowanej kwerendy możemy oglądać na ekranie arkusz danych prezentujący wybrane pola oraz wybrane rekordy. O rekordach oglądanych w wyniku uruchomienia kwerendy mówimy, że stanowią one dynamiczny zestaw danych. Zestaw ten jest tworzony na bieżąco w momencie uruchomienia kwerendy. W bazie danych w sposób trwały przechowywany jest tylko projekt kwerendy (czyli przepis na to, które pola i rekordy mają być wybrane). W najprostszym przypadku kwerenda wybierająca kierowana jest do jednej tabeli. W ogólności kwerenda może wyświetlać dane z wielu tabel jednocześnie, ale zagadnienie to będzie omawiane na następnym wykładzie. Wybór kolumn z tabeli określany jest jako operacja projekcji. Wybór wierszy to operacja selekcji. Za wybór wierszy odpowiadają kryteria wyboru. Okno projektu kwerendy wybierającej (siatka QBE - Query By Example). W powyższym przykładzie z tabeli Pracownicy wybierane są cztery kolumny: Nazwisko, Imię, Zarobki oraz Data zatrudnienia. Tylko te kolumny będą wyświetlone po uruchomieniu kwerendy. Kwerenda wybiera dane o osobach, których nazwisko rozpoczyna się na literę K i data zatrudnienia jest późniejsza niż 01-01-1990.
Linia Sortuj powoduje sortowanie w porządku alfabetycznym rosnąco według pola Nazwisko, a jeśli nazwiska byłyby jednakowe, to kolejność będzie ustalona na podstawie imion (też w porządku alfabetycznym rosnąco). MS Access sortuje rekordy według pierwszego pola licząc od lewej strony, dla którego ustawiona jest wartość Rosnąco lub Malejąco w linii Sortuj. Jeśli w tabeli jest więcej rekordów o jednakowej wartości w takim polu, wówczas następuje sortowanie według kolejnego pola (licząc od lewej strony) z ustawionym sortowaniem. Flaga widoczności (linia Pokaż) określa czy pole ma być widoczne w arkuszu danych, który powstanie po uruchomieniu kwerendy. Konstruowanie kryteriów wyboru Kryterium wyboru zastosowane do jednego pola to odpowiednio konstruowane wyrażenie logiczne (wartością wyrażenia jest PRAWDA lub FAŁSZ). Po uruchomieniu kwerendy wyświetlone zostaną tylko te rekordy, dla których wartość wyrażenia (dla konkretnych danych z rekordu) jest PRAWDA. Przykład: Chcemy wyświetlić osoby, które mają więcej niż dwoje dzieci. W siatce projektu kwerendy powinniśmy umieścić pola Nazwisko, Imię, Liczba Dzieci. W kolumnie Liczba dzieci, w linii kryteria piszemy: >3 Trochę przypomina to zapis nierówności, który znany jest ze szkoły, np. x > 3. Brakuje tu jednak lewej strony. W miejsce brakującego x możemy w myślach dać nazwę pola. Zatem napis > 3 można w tym przypadku interpretować tak: Liczba dzieci > 3. Access w wyniku realizacji kwerendy wyświetli wszystkie rekordy, dla których wartością skonstruowanego wyrażenia (kryterium wyboru) jest PRAWDA. Dla pól typu liczba, waluta, autonumer możemy stosować również inne operatory porównania: >, >=, <=, <>, =, A jak konstruować bardziej skomplikowane kryteria dla jednego pola? Możemy użyć operatorów logicznych. 2
OR (LUB), alternatywa (suma logiczna) a OR b NOT (NIE) zaprzeczenie NOT a a b a OR b Prawda Prawda Prawda Prawda Fałsz Prawda Fałsz Prawda Prawda Fałsz Fałsz Fałsz a Prawda Fałsz NOT a Fałsz Prawda AND (I) koniunkcja (iloczyn logiczny) a AND b a b a AND b Prawda Prawda Prawda Prawda Fałsz Fałsz Fałsz Prawda Fałsz Fałsz Fałsz Fałsz XOR różnica symetryczna a XOR b a b a XOR b Prawda Prawda Fałsz Prawda Fałsz Prawda Fałsz Prawda Prawda Fałsz Fałsz Fałsz Priorytet operatorów NOT, AND, OR, XOR Czy poniższe zdania określiłbyś jako prawdziwe czy fałszywe? Trawa jest czerwona AND Mleko jest białe. Trawa jest czerwona OR Mleko jest białe. Warszawa jest stolicą Polski AND Nowy Sącz leży w południowej części Polski. MS Access jest edytorem tekstu OR MS Word jest systemem zarządzania bazami danych. Przykłady kryteriów wyboru: W kolumnie Zarobki definiujemy kryterium: a) >1500 And <= 3200 Oznacza to, że w wyniku realizacji kwerendy otrzymamy te rekordy, dla których wartość w polu Zarobki jest większa od 1500 i mniejsza bądź równa 3200. b) <1200 Or > 5000 Chcemy zobaczyć dane tych osób, dla których wartość w polu zarobki jest mniejsza od 1200 lub większa od 5000. Chcemy otrzymać listę osób z najmniejszymi i największymi zarobkami. 3
Bazy danych wykład 1. Inne operatory: Between... And... Between 200 And 300 jest równoważne wyrażeniu >=200 And <=300 Is Null Pole jest puste (nie wypełnione = ma wartość Null). Is Not Null pole ma wartość niepustą. Dla pól typu data/godzina: Operatory takie same jak dla liczb, daty powinny być ujęte w znaki # Przykład dla pola [Data zatrudnienia]: >=#1999-01-01# And <#2000-01-01# - wybrane zostaną osoby zatrudnione w roku 1999. Is Null wybrane zostaną osoby, które nie mają wpisanej daty zatrudnienia. Dla pól typu tekst, memo: Operator porównywania ciągów znaków ( napisów ): LIKE Sposób użycia w kryteriach wyboru: Like wzorzec wzorzec powinien być ujęty w cudzysłów. Znaki specjalne:? Dowolny pojedynczy znak. * Dowolna liczba znaków lub brak znaku. # Dowolna pojedyncza cyfra (0 9). [lista_znaków] Dowolny pojedynczy znak należący do listy_znaków. [!lista_znaków] Dowolny pojedynczy znak nie należący do listy_znaków Przykłady listy znaków: [acx] jeden znak: albo a, albo c, albo x. [a-cf-nz,] jeden znak: albo litera z zakresu a do c, albo f do n albo litera z albo przecinek. Przykłady stosowania: Dla pola Nazwisko: Like K* oznacza wybór osób, których nazwisko rozpoczyna się na literę K. Like *icz wybór osób, których nazwisko kończy się na icz. Like [a-z][a-z]###* oznacza wybór rekordów, które w określonym polu mają ciąg znaków rozpoczynający się od dwóch liter, po których następują trzy cyfry (potem może być cokolwiek). Dla pól tekstowych i memo można również stosować operatory porównania i operatory logiczne. Operatory porównania przyjmują uporządkowanie wszystkich możliwych napisów zgodne z przyjętą tabelą znaków.
Przykład: > L* w polu nazwisko oznacza żądanie listy osób, których nazwisko po uporządkowaniu alfabetycznym znajduje się za napisem L. Leszczyński znajdzie się w takim zestawieniu, Kowalski nie. Jak konstruować kryteria wyboru odnoszące się do większej liczby pól? Na przykład chcemy wybrać te rekordy, dla których spełnione jest kryterium: Liczba dzieci > 3 i kryterium: Like K* dla pola Nazwisko. Odpowiedź: wszystkie kryteria zapisane w jednym wierszu w siatce projektu łączone są operatorem AND. Natomiast kolejne wiersze (oznaczone LUB) łączone są za pomocą operatora OR. Zatem kryterium wyboru: Pole: Nazwisko Imię Liczba dzieci Data zatrudnienia............... Kryteria: Like K* >3 Lub: >#90-01-01# oznacza żądanie wyświetlenia rekordów, dla których wyrażenie logiczne: (Nazwisko Like K* AND Liczba dzieci > 3 ) OR (Data zatrudnienia >#90-01-01#) przyjmuje wartość PRAWDA.W wyrażeniu tym nazwy pól zostały podane jedynie dla przejrzystości. W zestawieniu wynikowym znajdą się osoby, których nazwiska rozpoczynają się na K i które mają jednocześnie więcej dzieci niż 3 (nie ważne kiedy byli zatrudnieni). W zestawieniu znajdą się też osoby, które zostały zatrudnione po 01-01-90, bez względu jak się nazywają i ile mają dzieci. Dla takich rekordów powyższe wyrażenie przyjmie wartość PRAWDA (patrz tabelki dla OR i AND). Pola wyliczeniowe W kwerendzie można konstruować nowe pola ich wartość będzie wyliczana za pomocą pewnego wyrażenia MS Access. Przykład: Pole Premia powinno zawierać wartość 11.5% wartości pola Zarobki. Premia: [Zarobki]*0,115 Po nazwie nowo tworzonego pola umieszczamy dwukropek, potem wyrażenie. Wyrażenia w MS Access mogą być budowane przy pomocy stałych (np. 0,115), nazw pól ujętych w nawiasy prostokątne (w powyższym przykładzie: [Zarobki]), operatorów (np. arytmetyczny operator mnożenia) a także funkcji. MS Access zawiera pewną liczbę funkcji predefiniowanych (zdefiniowanych w systemie). Można też konstruować własne funkcje, jednak wymaga to znajomości języka programowania Visual Basic for Applications (VBA). 5
Przykłady funkcji: Date ( ) wyświetla bieżącą datę, Now ( ) wyświetla bieżącą datę i godzinę Year ( tu należy wpisać datę ) podaje liczbę, która oznacza rok wpisanej daty. Inne przykłady pól wyliczeniowych: Liczba dni zwolnienia: [Koniec zwolnienia] [Początek zwolnienia] Lata pracy: Year(Date()) Year ([Data zatrudnienia]) Kwerendy wybierające z parametrem Kryteria typu Zarobki > 1900 nie są uniwersalne. Jeśli chcielibyśmy wyświetlić osoby o zarobkach większych od 2000 musimy budować nową kwerendę, lub zmieniać kryterium w już istniejącej. Można tego uniknąć przez konstrukcję kwerendy, w której nie określimy od razu kwoty progowej, tylko w miejsce 1900 wstawimy parametr. Przykład: > [próg] Po uruchomieniu kwerendy Access zapyta o wartość parametru, który nazwaliśmy próg. Po wpisaniu w specjalnym oknie, wartość zostanie automatycznie podstawiona w miejsce parametru w kryterium wyboru i nastąpi wybranie odpowiednich rekordów. W zapytaniach z parametrem do pola tekstowego musimy zastosować specjalną konstrukcją, np.: Like [Początek nazwiska] & *. Początek nazwiska jest tu parametrem, którego wartość zostanie sklejona ze znakiem * we wzorcu wybierającym. Kwerendy podsumowujące Czasem zachodzi potrzeba wykonania pewnych podsumowań dla grupy rekordów. Grupę mogą stanowić rekordy o takiej samej wartości w pewnym wybranym polu. Na przykład w tabeli Pracownicy grupę mogą stanowić wszyscy pracownicy z jednakowym kodem działu (zatrudnieni w określonym dziale firmy). W tym przypadku grup będzie tyle ile jest działów. Dla każdej grupy w pewnym polu (lub pewnych polach) może być policzona tzw. funkcja agregująca. Taką funkcją może być na przykład średnia arytmetyczna. Na przykład dla każdego działu możemy uzyskać wartość średnich zarobków w dziale. Grupy wyznacza się przez wybranie w linii Podsumowanie wyrażenia: Grupuj według. Linia Podsumowanie pojawia się po wciśnięciu przycisku z dużą literą sigma na pasku narzędziowym w oknie projektowania kwerendy. Inne funkcje agregujące: Średnia, Minimum, 6
Maksimum, Zlicz (liczy rekordy w grupie), OdchStd, Wariancja. Kwerenda podsumowująca nie wyświetla poszczególnych rekordów w grupie!! Dla każdej grupy wyświetla tylko jeden rekord z wynikami wybranych funkcji agregujących!! Dlatego w projekcie kwerendy podsumowującej nie powinniśmy wybierać pól, które nie służą ani do grupowania, ani do wykonania operacji agregującej. Wyjątkowo można wybrać dodatkowe pole, które służyłoby do wyboru rekordów. Dla takiego pola w linii Podsumowanie w projekcie kwerendy należy wpisać słowo Gdzie, natomiast w linii Kryteria natomiast odpowiednie kryteria wyboru. Dla takiego pola nie da się włączyć flagi widoczności!! Przykład: Poniższa kwerenda podsumowująca wyświetla dla każdego działu średnią zarobków osób, które mają prawo jazdy 7
Poniższa kwerenda liczy pracowników w każdym dziale i średnią zarobków w dziale, przy czym brane są pod uwagę tylko te rekordy, dla których (gdzie) data zatrudnienia jest późniejsza niż 01-01-1990: Pole: Kod działu Nazwisko Zarobki Data zatrudnienia............... Podsumowanie Grupuj według Zlicz Średnia Gdzie >#90-01-01# 8