-
[ Pobierz całość w formacie PDF ]
nieco inny charakter niż warunek na nazwę klasy: pierwszy jest zapisem relacji, drugi - rodzajem filtru.
·ð W zapisie relacji w kwerendzie kolejność też nie jest istotna (równie dobrze może być Klasy.Id =
Uczniowie.Klasa_Id).
Słowo o kwalifikacji nazw: Użyliśmy zapisu z nazwą tabeli (Uczniowie.Klasa_Id i Klasy.Id). Zapis kwerendy
musi być przede wszystkim jednoznaczny. Opcja FROM określa tabele mające brać udział w kwerendzie. Jeśli
chce się użyć jakiegokolwiek pola, które w obydwu tabelach ma tę samą nazwę, trzeba go kwalifikować czyli
zapisywać w postaci Tabela.Pole. Takim polem jest Id, które występuje w obydwu tabelach. Jeśli nazwa pola
jest unikalna, tj. występuje tylko w jednej tabeli (np. Klasa_Id, Nazwa, Nazwisko), możemy podawać tylko ją
(dodatkowe kwalifikowanie takiej nazwy nie jest błędem). Poprawne zatem byłoby podanie w WHERE warunku
Klasa_Id = Klasy.Id, ale już nie Klasa_Id = Id, bo nie wiadomo o jaki Id chodzi (kolumna o takiej nazwie jest
w obydwu tabelach wystepujących w kwerendzie). Można postępować różnie: kwalifikować nazwą tabeli
wszystkie kolumny, zwłaszcza gdy w kwerendzie jest wykorzystywana więcej niż jedna tabela, albo przeciwnie:
kwalifikować tylko to, co kwalifikowania wymaga. Przyjmiemy zasadę pośrednią - używając w kwerendzie
dwóch tabel będziemy kwalifikować warunki podawane w WHERE, a gdzie indziej (np. po SELECT) tylko
wtedy gdy jest to niezbędne. W myśl tej zasady w kwerendzie przykładowej wyżej, w WHERE, napisaliśmy -
dla spójności - Klasy.Nazwa, chociaż wystarczyłaby Nazwa. W sytuacjach zupełnie oczywistych, np. przy polu
'Data_urodzenia', i w dodatku przy długich kwerendach, będziemy robić odstępstwa od tej zasady i nie
kwalifikować nazwy pola nazwą tabeli.
Wyżej w kwerendzie użyto tylko dwóch tabel W realnych komercyjnych bazach danych jedna
kwerenda może obejmować więcej tabel połączonych relacjami, np. klientów, produktów, usług serwisowych,
ofert (te same produkty mogą być sprzedawane w różnych ofertach, z różnymi rodzajami serwisu, w różnych
okresach: promocyjnym, normalnym, wyprzedaży itp.), sprzedawców, serwisantów, kontaktów z klientem etc.
Zadania:
Wypisz imiona i nazwiska wszystkich uczniów klas poziomu 1 (uporządkowanie alfabetycznie).
Wypis listę poziomów klas z liczbą uczniów w każdym poziomie.
1. [s17b] & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & .
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & .
2. [s17b] & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & .
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & .
O modyfikowaniu struktury tabel:
Używamy teraz tabeli Uczniowie o zwiększonej liczbie rekordów i o zmienionej strukturze. Dodawanie nowych
rekordów do tabeli to rzecz naturalna. Ale czy można zmieniać strukturę tabeli zawierającej już jakieś rekordy?
Można, zwłaszcza dodawać nową kolumnę (polecenie SQL - ALTER TABLE (będzie o nim mowa w jednym z
następnych tematów)). Owszem, nie jest to operacja częsta, ale bywa że konieczna. Na ogół wprowadzenie do
tabeli nowej kolumny nie psuje nic (poza sprawami związanymi z rozmiarem tabeli). Można również usunąć
kolumnę z tabeli, ale trzeba mieć świadomość, że wszelkie kwerendy, w których nazwa tej kolumny występuje,
staną się błędne (nie mówiąc o tym, że zawartość kolumny może przepaść). Natomiast zmiana typu kolumny
(zwłaszcza jeśli zawartość kolumny ma zostać zachowana, ale w nowym formacie) może nie dać się już
zrealizować prostymi środkami. Zazwyczaj trzeba przechować zawartość modyfikowanej kolumny, usunąć ją,
wstawić nową i wpisać przechowane zawartości w nowym formacie.
Strona 28 z 44
Relacje - gospodarz klasy
Gospodarz klasy może być z założenia tylko jeden. Załóżmy, ze wybraliśmy go z uczniów danej klasy.
Jak go oznaczyć? Mogliśmy w tabeli Uczniowie wprowadzić dodatkowe pole 'Gospodarz', mogące przybierać
tylko dwie wartości: 0 lub 1. Dla rekordu ucznia pełniącego funkcje gospodarza miałoby ono wartość 1, dla
pozostałych uczniów w klasie (niegospodarzy) - 0 (to, której klasy uczeń jest gospodarzem, wynikałoby z jego
pola Klasa_Id). Ale byłoby to nienaturalne i faktycznie oznaczałoby redundancję: na 30 osób w klasie tylko
jedna miałaby w tym polu wartość 1, a reszta, z założenia - 0. Informacja o gospodarzu klasy dotyczy faktycznie
tylko jednego ucznia i związana jest ściśle z klasą. Zrobiliśmy zatem inaczej: wprowadziliśmy pole określające
gospodarza do tabeli Klasy. Nazywa się ono Uczeń_Id i zawiera identyfikator ucznia, który został wybrany na
gospodarza swojej klasy (Rys.)
Co ważne: to jest też relacja między tabelami
Uczniowie, a Klasy, ale nieco inna od poprzedniej. Tu
jednemu rekordowi z tabeli Klasy odpowiada jeden
rekord w tabeli Uczniowie (klasa nie może mieć dwóch
gospodarzy, ani żaden uczeń nie może być
gospodarzem w więcej niż jednej klasie). Mówimy
zatem, że jest to relacja jeden-do-jeden.
Relacja 1-1 występuje względnie rzadko.
Najczęściej stosuje się ją po to, by nie trzymać w
jednym rekordzie zbyt wielu informacji (nasz sposób
jej użycia nie jest typowy). Przykład: w tabeli Osoby
trzymane sÄ… dane podstawowe np. klienta (imiÄ™,
nazwisko, data urodzenia, wykształcenie), a w tabeli
Adresy jego dane adresowe: tel. zwykły, komórkowy,
prywatny i służbowy, adres prywatny, adres służbowy,
adres do korespondencji, godziny kontaktów etc. Obie
tabele Å‚Ä…czy relacja 1-1 - jednemu rekordowi w
Rys. Klasy-Uczniowie - Zaznaczone obydwie relacje
Osobach odpowiada dokładnie jeden rekord w
(czarna linia - relacja 'gospodarza').
Adresach (ściślej: zero rekordów lub jeden rekord) i
odwrotnie (więcej o relacji jeden-do-jednego znajdziesz w słowniku).
Zadanie: Napisz kwerendÄ™ listujÄ…cÄ… nazwy klas i imiona i nazwiska ich gospodarzy.
[s17b] & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & .
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & .
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & .
Joins [ Pobierz całość w formacie PDF ] - zanotowane.pl
- doc.pisz.pl
- pdf.pisz.pl
- zambezia2013.opx.pl