296 5. JĘZYK BAZ DANYCH SOL
W wyniku tego zapytania zostają przeszukane pary krotek, pierwsza z nich pochodzi z relacji Film, a druga z relacji FilmDyr. Warunek określający, które krotki mają być dołączone do wyniku, jest formułowany w klauzuli WHERE:
1. Wartość atrybutu tytuł w relacji Film musi mieć wartość
'Gwiezdne Wojny'.
2. Wartość atry butu producentC# w krotce Film ma być taka sama jak wartość atrybutu cer Lr w krotce relacji FilmDyr. Obie krotki w tej parze musza się odnosić do tego samego producenta.
Jeśli rozpatrywana krotka spełnia oba przedstawione wyżej warunki, to wówczas do wyniku zapytania zostaje dołączona wartość atrybutu nazwisko z relacji FilmDyr. W tym przypadku jedyna para, która spełnia oba te warunki, zaw iera krotkę z relacji Film, opisującą film Gwiezdne Wojny, oraz krotkę dotyczącą George'a Lucasa z relacji FilmDyr. Tylko ten tytuł jest właściwy oraz tylko w tym przypadku równe są numery certyfikatu. A więc w wyniku będzie umieszczone wyłącznic nazwisko George Lucas.
□
Czasami trzeba utworzyć zapytanie dotyczące jednocześnie wielu relacji, w których znajdują się atrybuty o takich samych nazwach. Wówczas staje się niezbędne określanie w zapytaniu, które atrybuty pochodzą z których relacji. W SQL stosuje się wówczas notację, która polega na tym, że przed nazwą atrybutu umieszcza się nazwę relacji, z której pochodzi atrybut, i oddzielają od nazwy atrybutu kropką. Na przykład RA oznacza atrybut zł relacji R.
PRZYKŁAD 5.11
W obu wymienionych poniżej relacjach występują atrybuty nazwisko i adres:
Gwiazda (nazwisko, adres, pięć, dataUrodzenia)
FilmDyr (nazwisko, adres, cerr.it, cenaSieci)
Zapytanie polega na wyszukaniu par producentów i gwiazd o tym samym adresie. Ma ono następującą postać:
SELECT Gwiazda.nazwisko, FilmDyr.nazwisko
FROM Gwiazda, FilmDyr
WHERE Gwiazda.adres = FilmDyr.adres
W przedstawionym wyżej zapytaniu poszukuje się par krotek, jednej z relacji Gwiazda, a drugiej / relacji FilmDyr, które mają zgodne składowe adresu.
Następnie /. krotek, które mają takie same składowe dla atrybutu adres, tworzymy pary złożone ze składowych atrybutów nazwisko. Otrzymujemy w ten sposób zbiór par nazwisk, takich jak na przykład:
Gwiazda, nazwisko FilmDyr. naz wis ko
Jane Fonda Ted Turner
□
Stosowanie konwencji zapisu atrybutu z poprzedzającą jego nazwę nazwą relacji i kropką jest dopuszczalne nawet wówczas, gdy nazwy atrybutów nie są takie same. Możemy zatem zapisać na przykład zapytanie z przykładu 5.10 w sposób następujący:
SELECT FilmDyr.nazwisko
FROM Filin, FilmDyr
WHERE Film.tytuł = 'Gwiezdne Wojny'
AND Film.producentC# = FilmDyr.cert#
Można także w jednym zapytaniu zapisywać w notacji „kropkowej” tylko niektóre, wybrane atrybuty, a inne nic.
Zmienne krotkowc i nazwy relacji
Od strony technicznej odwołania do atrybutów w klauzulach SELECT i WHERE są zawsze odwołaniami do zmiennych krotkowych. Jeśli relacja R występuje w klauzuli FROM tylko jeden raz, to tej nazwy używa się jako zmiennej krotkowej. To znaczy, że R w klauzuli FROM jest po prostu skrótowym zapisem wyrażenia R AS R.
Unikanie niejednoznaczności oznaczeń atrybutów przez stosowanie notacji kropkowej jest skuteczne tylko wówczas, gdy w zapytaniu tworzy sic kombinacje krotek z różnych relacji. Jednakże czasami trzeba zapisać zapytanie, którego działanie dotyczy kombinacji krotek z tej samej relacji. W klauzuli FROM relację R można wymienić tyle razy, ile trzeba, ale potrzebny jest sposób odróżniania poszczególnych wystąpień R. W SQL polega on na definiowaniu w klauzuli FROM synonimów dla nazwy relacji, których polem używa się jako zmiennych krotkowych. Po każdym wystąpieniu nazwy relacji R w klauzuli FROM umieszcza się w tym celu opcjonalne słowo AS, a następnie nazwę zmiennej krotkowej.
W klauzulach SELECT oraz WHERE różne wystąpienie tych samych atrybutów relacji R odróżnia się wówczas, poprzedzając ich nazwy właściwą