ŁĄCZENIE ZBIOROW DANYCH cd,
USING (fotl(reSQl) umożliwia podmie o«ldfirlonjrch przecinkami ni/w kolumn występujących «ł^ciofiych ubelach Dane z rjrrti kolumn będą wykorzystane do sprawdzenia warunku ilącicniai Np, USING (kolumn#!, kolumna?) jest odpowiednikiem ON (tabrlal.kolumna! ■ Ubel«?.kolumnal ANI) tabeł# 1.kolumna? ■ tabela?.kolumna?).
Pr/yklad (pobieramy mlormac|ł o nazwiskach autorów i tytułach napisanych prici nich książek Nazwiska autorów, którry nu napnali iadn«| książki, orai tytuły książek nieznanych autorów mo zostaną zwrócone): SELECT aulname, tltTe FROM authors AS a INNER JOIN ti 11cauthor ta ON a.au Id * ta.au id INNER JOllf tltles t (JN ta.tltlf id * t.tltlo id
Wskazówki
1. Nalerv łączyć tabele za pomocą kolumn przeiriowujących pary kluczy pod nawowy obcy
2. Do złączenia na Iny wykorryitywać calt kluctr podstawowe tabel, (etrli dla |akit|i tabeli tdefimowano Hotony (składający się i kilku atrybutów) kłuci podstawowy, łącząc taką tabelą, trieba odwolai sią do całego kluua
). Obukty należy łączyć ta pomocą kolumn tego samego typu.
4 Nazwy kolumn należy poprzedzać aliasem nuwy obiektu łródłowego, nawet |tżeli kh nazwy są unikatowe w ten sposób poprawia się oytelnołć zapytania.
S. Naloty ogranicza! liczbą łączonych obiektów do mttbądnego minimum Na przykład (cieli wymagany |etl tylko identyfikator obiektu, 1 reguły me trzeba odwoływał się do p inłormac|e o tym obiekcie I
Złąacnlt naturalna __
Wynikiem rlączeiua naturalnego jest tbiór wierszy łączonych tabel, dla których wartości kolumn określonych pako warunek złączenia są takie same Ponieważ w relacyjnych bazach danych inlormac|e są podmiocie pomiąłby tabele zawierające dane
0 obiektach jednego typu, złączenie naturalne jest najczyściej wykorzystywanym (i domyślnym) złączeniem obiektów łącząc w ten sposób obiekty, należy pamiętać o naitąpujących zasadach
1 Ponieważ złączenie naturalne jest domyślnym typem złączenia, można pominąć słowo kluczowe INNER.
2. Należy podać pełną nazwą atrybutu, ta pomocą którego łączy sią obiekty.
3. łączenie obiektów za pomocą atrybutów, które przyjmują wartość NtllL, zakończy sią niespodziewanymi wynikami
4 Serwety baz 4anjrch nie sortu|ą wyniku złączenia naturalnego aby uzyskać posortowani dane, należy utyć klauzuli ORDER BY,
Zlzącgwnla zmwriftrznm_____
Wynikiem lewo lub prawostronnego złączenia
do przechowującej z tabeli
zewnątrznego jen zbiór wierszy łączonych tabel, dla których wartości kolumn określonych |ako warunek zlącteeiia są takee same; zbiór ten uzupełniony jeit
0 pozostało wierne z lewej lub prawe| łączonej tabeli Nieistniejące warioici reprezentowane tą w wyniku złączenia przez wartość NULI.
Przykład:
SELECT au lnome, title EROM authors AS a LEE! OŚJTLR JOIN tltleauthor ta ON a.au id ■ ta.au id IEFT OUTEIE JO IN lltles t ON ta.1111 r_1 d - t.tltlejd
Wskazówki
1 Należy korzystać ze złączeń zewnątrznyrh do pobrerama kompletnych informacji o wszystkich obiektach danego typu, nawet jeżeli me istnieją
i z mmi obiekt]
zewnętrznego |
zbiór wierszy łączonych tabel, dla których wartości
powiązane z mmi obiekty innego typu.
2. Wynikiem pełnego złączenia zewnętrznego jest
kolumn określonych jako warunek złączenia są takie same, uzupełniony o pozostałe wiersze z obu łączonych ubel
Zł^catanła kiryiowt
Wynikiem złączenia krzyżowego jest iloczyn
' ‘ i łącznych o......
ń, w tym wj obiekty nie musrą mieć wspólnych atrybutów Przykład
SFLECT au Wiame, tttle FROH authors AS a CROSS JOIN tltlcs AS ta
kirtrijaritki łącznych obiektów W przeciwieństwie do innych typów złączeń, w tym wypadku łączone
Wskazówka
Złączenia tego typu ta rzadko w znormalizowanych barach <
notowane
danych i służą raczej
do generowania danych testowych mi do pobierania
istniejących danych.
Złączanie tabeli z nią samą
Złączenie tabeli z nią samą stosujemy, kiedy chcemy wybrać rekordy z tabeli na podstawie wspólnych wartości atrybutów rekordów tej samej tabeli Przykład:
SELECT a.empłoyeeld, a.lastname, b.employeeid, łz.lastname EROM empłoyocs AS a INNER JOIN employees AS b ON a.title - b. title WHERE a.empłoyeeld > b.employeeid
Wskazówki
1. Należy utworzyć różne altasy dla łączonej tabeli i konsekwentni* odwoływać sią do aliatów,
a me do nazwy tabeli w ramach zapytania
2. Uzdy rekord, w którym wartości atrybutu złączenia bądą sobie równe, zostanie dodany do wyniku złączenia, co spowoduje powstanie duplikatów rekordów Korwiązimem (ego problemu jest użycie asymetrycznego (np większy niz) warunku logicinegu w klauzuli WHERE.
Złączenie wyników - operator UNION la pomocą operatora teonomiwzościowego UNI ON morirny dodać wyniki poszczególnych zapytań. Łączone wyniki muszą składać sią z takiej samej liczby kolumn, a poszczególne kolumny muzzą być tego samego typu, poza tym konieczne jest, aby wystypowały one w tej tame| kolejności w obu wynikach
Tabele tą reprezentacjami cbiorów, tak wiąc na sumą składają tle wiersze obu tabel:
Tabelal L/TabeM = (wiersz: wtersi 6 Tabelal
lub wiersz <■ Tabela}}.
Przykład:
SELECT (flrstname ♦ ' ' ♦ lastname) AS nazwa, city FROM employees UNION
SELECT companyname. city FROM customers ORDER BY nazwa DESC
Wskazówki
1. Domyślnie duplikaty są usuwane ze zbioru powstałego przez złączenie wyników zapytań Utycie słowa kluczowego ALL po operatorze UN I ON spowoduje, u me bądą one usuwane (dotyczy to wszystkich operatorów
teorio mnogościowych).
2. Dzielenie skomplikowanych zapytań i łączenie ich wyników jest jednym te sposobów poprawy wydajności zapytań,
Cząk wspólna - operator INTEWSEC (Po»tqraSQL)_
W wyniku użycia operatora INTERSEC uzyskujemy wiersze wspólne dla wtryttkich tabel wchodzących w skład instrukcji SELECT: Tabelal r .1abela2 -(wiersz: wiersz € Tabelal i wlerti c Tabela]}.
Przykład
SELECT descrłptłon FROM pruducts WHERE Id G*1 INIERSEC”
SELECT descrłptłon FROM products WHLRE Id G*2
Wskazówka
W serwerach bar danych nieoblługu|ących operatora INHRSEC tam sam wynik można uzyskać za pomocą podzapytania
Róinica - operator MINUS (Po»tgraSQL)_
W wyniku użycia operatora MINUS utyskujemy tr wiersze, które rosiały zwrócone tylko przer pierwtrą instrukcją SELECT i nie zostały zwrócone przez którakolwiek z następnych instrukcji SELECT:
Tabelal \Tabela2 “ (wiersz: wiersz e Tabelal i wiersz«Tabelal}.
Przykład:
SELECT descrłptłon FROM products WHERE Id G*3 MINUS “
SELECT descrlptton FROM products WHFRE Id G-1
Wskazówka
W serwerach baz danych nieobslugującyth operatora INTERSEC tam sam wynik moirsa uzyskać za pomocą podzapytania
GRUPOWANIE DANYCH
W języku SQ1 dostępnych jest kilka funkcji grupujących. Wykorzystując funkcje tego typu, uzyskujemy pojedynczy wynik obliczony na podstawie wielu argumentów Na pmrklad możemy w tabeli policzyć liczbą wiersry spełniających określone kryteria lub możemy wyrlicryć wartość łredma dla wszystkich wartości i wybranei kolumny Użycie tych łunltcji rseyłde związane jest z operacją na jednej kolumnie (na której wykonywane są obliczenia), a jako wynik zwracany jest tylko jeden wiersz
Funkcje grupujące
Wszystkie opisywane lunkcje domyślnie nie eliminują powtarzających uę wierszy, co odpowiada użyciu operatora ALL jako pierwsrrgo argumentu wywołania leżeli chcemy ograniczyć dziedzinę lunkcji do unikatowych wartości wiertcy, należy użyć operatora OISTINCT.
COUNTO
funkcja zawraca liczbę wystąpień wartości wyrażeń różnych od NUU, chyba że jako argumentu użyto znaku * - takie wywołanie funkcji spowoduje obliczenie liczby wszystkich wierszy, łącznie z duplikatami i wartościami NULI,
Przykład
SELECT COUNI (•) AS (liczba wszystkich wierszy w tabeli]
IROM Cateyorles
Wskazówka
Wykonanie powyższego zapytania dla bardzo dużych tabel może być czasochłonne Ponieważ serwery baz danych prrechowują (w peitaci niezbędnych dla optymalizacji zapytań statystyk) informacje o liczbie wierire luzdej tabeli, leptrym rozwiązaniem jest odwołanie uę do specyficznej dla danego serwera tabeli systemowej.
funkcja iwraca sumę wszystkich argumentów wywołania.
W przeciwieństwie do funkcji COUNI, która dnala dla wirystkich typów danych, funkcja SIJM dnala tytko dla argumentów herbowych luk dających się automatycznie na liczby (konwertować funkcja SUM nie uwzględnia wartości NULL.
Przykład:
SELECT SUM (UnitPrtce)
FROM Products
funkcja zwraca wartość średnią przekazanych argumentów Wartości NIM L mc są uwzględniane Argumentami lunkcji AVG musrą być dane liczbowe.
Przykład:
SELECT AVG (UnttPrlce)
FROM Products
funkc|i MIN ilury do znajdowania wartości na|mnitjwt| w zbiorze wartości, a funkcja P1AX najwięksiej Obie lunkcje, podobnie jak funkcja COUNT, mogą być utyte dla różnych typów danydi. Przykład
SELECT MAX (OrdnrOate)
FROM Orders
?*?ąuzuU sRDUfMJY
Okrtila grupy wieruy, dla których będą obliczane wyniki funkcji grupujących wymienionych w poleceniu SELECT. jeżeli rosiała użyta, na liście argumentów klauzuli GROUP BY muszą znaleźć uę wszystkie niebędarr wynikiem funkcji grupującej wyrażenia wymienione w poleceniu SELECT.
Składnia:
(GROUP BY (ALI] wyrażenie [,...n]
(WITH ICUBE | ROLLUP)]
]
gdzie:
ALL (MS SQl Serwer) powoduje, że do wyniku (osuną dodane wiersze mespefmające warunku okrellonego w klauzuli WHt RE. Wynik funkcji grupowych dla tych wiersry jest wartością NULL, CUBE (MS SQl Serwer) powoduje (wrócenie dodathoweeo wiersza, zawierającego sumę wyników oolicronych dla wszystkich możliwych kombinacji poszczególnych grup,
ROLLUP (nS SQt Serwer) powoduje (wrócenie dodatkowego wierna, uwierającego sumę wyników oblKtonych grup wartości.
Wikaiówkl
1. Serwer baz danych zwróci jeden wiersz dla każdej grupy wartości
2. Kolumny wymienione w klauzuli GROUP BY muszą zostać wymienione w poleceniu SFLECT.
PODZAPYTANIA
Podzapytamem nazywamy instrukcję SELECT umieszczoną w ramach innej instrukcji języka SQL (instrukcji SELECT, INSERT, UPOAtr lub DELETE) Podrapytama i reguły mogą rostać zastąpione zlącremami lub wyrażeniami. Najczęstszymi powodami tworzenia podrapylaó są
I. Chęć uprouuema zapytania przez podzielenie go na kilka
prostszych zapytań 2. Wykonyst,
ykorzystanie wyniku jednego zapytania jako danych źródłowych dla innego zapytania
Wikarówki
1. Podzapytanie musi zostać zapisane w nawiasie
2. Wyntk podzapytania me może zawierać danych typów
HIOBlubCLOB.
). Maksymalna liczba kolumn ograniczona jest typem
poszczególnych danych zwróconych przez funkc|e grupujące
SritCT CuStcrmerlO, SIIM(frelgHt)
FROM orders
GROUP BY ALL CustomerlO
SELECT aulname;. COUNI(tttle id)
TROM authors AS a LEFT OtlTFR JOIN tltleauthor AS ta ON a.au_1d • ta.au Id GROUP BY au Irianie
SELECT ordertd, CustomerlD,
SUM(Frelght) AS Suma TROM orders
GROUP BY orderld, CustomerlD Ul TH CUBE
ORDER BY orderld, CustomerlD
Klauzula HAVING
Określa warunki wyszukiwania dla grup luk lunkcji grupujących Za pomocą klauzuli HAVING określa się warunki, które musrą zoitać spełnione przez grupy wymienione w klauzuli GROUP HY, tak jak za pomocą klauzuli WHFRE okreila się warunki, które muszą spełnić wiersze wymienione w klauzuli SELECT. Składnia:
(HA1MNG < warunek wyszukiwania »]
Przykład:
SELECT aulname, COUNT(title id)
FRCJM authors AS a LEFT OUTFR JOIN tltleauthor AS ta ON a.au_td * ta.au id GROUP BY au Iname HAVING COUNT(t1tle_1d)>?
Wskazówki
1. Używanie klauruli HAV ING w zapytaniu, w którym mr występuje klauzula GROUP BY, choć dopuszczalne, jest niczym nieuzasadnione.
2. Warunek wystukiwania morę dotyczyć dowolnych danych wymienionych w poleceniu SELECT.
J Warunek umieszczony w klauzuli HAVI NG wyrażony jest za pomocą dowolnej funkcji grupującej 4 Klauzula HAVI NG ma wyżery priorytet niż słowo kluczowe AU i jeżeli wystąpi w zapytaniu zawierającym to słowo, zapylanie rwnki wyłącznie grupy spełniające podany warunek wystukiwania.
Klauzule COMPUTE i COMPUTE BY (MS SQL Scrver)
Obie klauzule zwracają dodatkowy wiersz, zawierający obliczone dla wyniku podsumowania. Klauzula COMPUTl BY dodatkowo zwraca obliczone sumy ctęiciowr Obie klauzule mogą być wielokrotnie użyte w tym samym zapytaniu.
Składnia:
[COMPUTE
(IAYG | COUNT | MAX | MIN | ST0FV | 5TDEYP | YAR | VARP | SUM) (wyrażeni*)) (,...n]
(BY wyrażenie [,...n]]
]
Przykład:
SFLFCT CateyorylD, ProductNamr, UnitPrtce FROM Products OROFR HY CateyorylD COMPUTE SUM(UnUPrice) BY CategorylO COMPUTE SUM(UnłtPrice)
Wskazówki
1. Niemożliwe jest sformatowanie danych zwracanych prnz obie klauzule.
2. Niemożliwe jest obłic/eme wyniku na podstawie danych rypu teit, rstent luk image.
). Dane, na podstawie których będzie obliczony wynik, muszą
któcych I
zostać wymienione w poleceniu SE IFC T.
Należy u/ywać klauzuli COMPUTE BY łącznie z klauzulą OROFR HY • w innym wypadku obliczone sumy częłciowe będą nieuporządkowane i nieczytelne
lista i kolejność kolumn wymieniona w klauruli COMPUTE HY musi dokładnie odpowiadać liście kolumn wymienionych w klauzuli ORDER BY.
3 Serwery pozwalają na zagnieżdżanie zapytaó do ohreilonego poziomu ■ w przypadku skomplikowanych lub rwracającycb duzi liczby danych podzapytań maksymalny poziom Zagnieżdżenia może wynosić kilkanakie, a nawet kilka zapytań
Podzapytania niepowiązane
Podzapytania niepowiązane w pierwtzej kolejności wykonują zagmezdzoną instrukcję SELECT, a zwrócone przez mą dane przekazują do zapytania zewnętrznego i wykonują je W lego typu podzapytaniach zapytanie wewnętrzne wykonywane |fil tylko raz
Podzapytania Jako źródła danych _
Wynik podzapytania może być zbiorem danych źródłowych dla innego zapytania W takim przypadku podzapytanie znajduj* seą w klauzuli IRĆJM zapytania nadrzędnego