upiętych e minią
ROIIP HY,
U,
LECI
PODZAPYTANIA cd.
Przykład:
SfLtCl wynik.*
FROM (SELECT CategorylD, CatrcjoryName
rROM Categories
WMEHF CategorylD<3) AS. wynik
Wynik podzapytania moir tosta/ potraktowany |j(o Ima wartold wyrażenia, pod warunkiem. u podrapytamr minio wartoU skalarną
SElfCT ProductName, UnłtPrłce, (SELECT AVG(Un1tPrlce)
I ROM Products) AS [średnia],
UniLPrice-fSELLCf AVG(UnttPrice) EROM Products) AS [rOZnlcaj FHON Products
W trjo typu podiapytamacb zapytanie wewnętrzne wykonywane jeil dla kaidejo wierna wyniku rapytinia zewnętrznego i dnąki temu wyniki obu zapytań mogą byt le tobą porównywane Podrapytanie powiązane jett prrykładem dynamianejo złączenia wyniku tapytania t ka/dym kolejnym wierwem wyniku tapytania zewnętrznego Serwery bat danych wykonują podzapytania powiąune według następującego schematu:
I Zapytanie zewnętrzne zwraca wiem, który jett I wynikiem tapytania wewnęirinego 2. fodzapytame jest wykonywane, a jego wynik roiuje prrekatany do tapytania zewnętrznego Zapytane rewnątrine rwrau kolejny włeest i cały
Dodat pojedynczy wiersz do tabeli możemy za pomocą
instrukcji INSERT, uwierającej klauzulą VAIUES.
Składnia'
INSERT (_INTO)
(tabela WITH (<optymal1zacja> [,..,n]) I widok
| funkcja typu RowSet
I
{ [(lista kolumn)]
(VAI.UES
((OEEAULT | NULI I wyrażenie) [,...n])
I Instrukcja SELECT | dyrektywa fXECUT£
rym nię
nr. jest mi/ym
i danych
ony |(»i
« klurrowr i iłowo, liny warunek
y obliczone dodslkowo < by<
>r V
tPrice
t)
ih prm obie
lanych typu
iik. muszą
kUu/uł^ częściowe będą
CONPUTE RY ntonych
prom uę powtarza tyle rwy, ile wiemy rwrótrlo rewnątrine rapytarwe
Prrykład (oderytojemy informacje o wsryitkiih produktach należącym do tej samej kategorii to produkt o podanej narwie a więc me podajemy narwy kategorii):
SELECT CategoryName, ProductName
1 nom Categortes AS C INNER JO IN Products AS P
ON C.CategoryID*P.CategorylD WHtRE C.CategorylO IN (SELECT CategorylD (ROM Products
WHERE ProductName IIKE 'Chał') Wskaiówki
I. Podiapytama powiązane, (hot tą funkcjonalnym odpowiednikiem złączenia tabel, i reguły tą wykonywane dlutej i wymagają przetworzenia większej Holci danych.
2 jeteli jett to możliwe, nalery zastąpi/ podrapytanie powiąune klauzulą ma v i nr. poprawia to crytelnoit i wrydajnoid zapytania
Podzapytania z operatoram EXISTS la pomocą operatorów EX1 STS i NOT FX1 ST S moremy ograniczy/ wynik tapytania zewnętrznego do wiemy odpowiednio (wróconych (lub me) pizet podiapytanie powiązane Operator [XISI mau wartość logiczną I (prawda), jeieli okreilony wiem istnieje w wyniku podzapytania, operator NOT F* ISTS - jeieli wynik podrapytama nie uwiera określonego wierna.
Przykład (odczytujemy informacje o tych autorach, któuy maja te urno imię i naiwuko, a wiec dane, które prawdopodobnie zostały pnei pomyłką kilkakrotnie wprowadione do bary)
Ml (CI nu_td, au fnaimr.au Iname.phone
THOM authors as~tl
WHERE EXISTS (SELECT au id
EROM authors AS tZ WHERE tZ.auJname -tl .aulname ANO l?7au fnamr • tt.au tname ANO tlTau id <» tz.auidj
Wskazówka
Podrapytama i operatorem EXISTS lub NOT EXISTS nie (wracają żadnych danych, a jedynie prawdą lub taisz
gdzie:
lista kolumn fest opcjonalnym okieilemem nazw kolumn, do których dopisywane będą dane Niepodame listy kolumn spowoduje dodawanie wailoio do kolumn wrdług porządku ich wystąpowama w definicji tabeli docelowej.
Przykład
INSIRT INTO authors (au id, au fnamr, au Iname, contract)
'Szczęśliwy', 1)
Wskazówki
I. Wstawiane dane muszą uwzględnia/ zawązenia nafozene na tabelą
2 Dane poszczególnyrh typów muszą byt wyszczególnione w klauzuli VALUf S zgodnie z konwencją nazewniczą serwera baz danych.
Wstawiani* danych wybranych w zapytaniu __
Instrukcja INSERT z klauzulą SELECT pozwala na dodanie do tabeli dowołne| liczby wierszy wybranych w zapytaniu Przykład
INSERI Customers (CustomerlD,
ContactNamr, CompanyName)
SELECT EmployeelD, FirstName ♦ ' ’ t LastName, Title t ROM Employees WHERE EnęiloyeelO < 3
Wskazówki
I. Wynik zapytania w rafoin rastame dodany do tabeli docelowej.
2 Tabela docelowa musi tostz( wczeiniej stworzona 3. Próba dodania danych innych typów nu typy kolumn tabeli docelowej zakończy tią błędem 4 Wstawiane dane muszą uwzględniać zawązenia nałożone na tabelą
Tworzeni* tabeli za pomocą instrukcji SELECT INTO _
Instrukcja MIKI INTO umożliwia utworienie Ubeli, do której zostaną wstawione dane wybrane w zapytaniu Pnyklad
SELECT ProductID, ProductName, linttPrtce, UnUPr1ce*0.Z2 AS Vat INTO Podatki EROM Products
Wskazówki
1 Instrukcja SELECT I NT O (worry tabelą docelową
0 podane| narwie, wiąc próba jej wykonania dla ti(me|ące| tabeli skończy Sią błędem
2 lomecrne |ist podanie nazwy kolumny lub stworzenie aliasu dla wszystkich wyrażeń wymienionych w poleceniu
SELECT.
1. Przechowywanie wyników zapytania w tymczasowej tabeli jest często spotykanym tposobem na podneleme skomplikowanego zapytania pomiędzy kilka prostszych
1 szybciej wykonywanych zapytań
Wstawiani* wartości domyślnych DiFAULT
Jeżeli dla danej kolumny tabeli docelowej utworzono zawązenie DEFAU11 w instrukcji INSERT, możemy wstawić wartość okrtiloną jako wartefo domyilna dla kolumny
Przykład:
INSERT INTO authors (au id, aujname.
au fnamr, phone, address, cońtrart) VALUfS ('I7Z-32-///6'. 'Gibson',
'fiodor', OEEAULT, OFFAULT,0)
Wskazówki
I. Próba wstawienia wartości domyślnej dla kolumny, dla której me została ona określona, spowoduje wstawienie wartości nieokreślonej
2 Próba wstawienia wartości domyślnej dla kofomn typów autonumerowama (I0ENTI TY wprrypadku ffi SQL Sewera i SERIAL w przypadku PostgreSQ() skończy saą błędem ). Niewymiemenie słowa kluczowego OEEAULT spowoduje wstawienie wartości NUII dla kolumn, dla których nie określono wartości domyślnej, lub wiuwtenie wartości domjrilnej dla kolumn, dla których zostali ona określona.
Język SQl umożliwia nam również, za pomocą iłów kluczowych OFFAULT VAlUES, witawieme wiersza zawierającego wyłącznie wartości domyślne, bez konieczności wirlokrotnego wymieniania iłowa kluczowego DEEAULI.
Przykład:
INSERT INTO Products OtrAULT VALUES
Wskazówki
1. Do wszystkich kolumn, dla których me zdefiniowano zawązenia OEf AULT, roitaną wstawione wartości nieokreślone.
2. Próba wykonania instrukqi dla tabeli, która zawiera kolumny nieierwalaiąu na wstawienie wartości NULL
i nieposiadające zawązenia DEEAUII, skończy sią błądem
Instrukcja DEIETE usuwa wybrane wiersze tabeli Składnia
OELETE
[FROMJ
(tabela WITH (<optymaHzocJ*> [,...nJJ I widok
I funkcja typu RowSet
I
[FRCTM |<tabe1a źródłowa*) [,...n]] [WHLRF
|*-warunek_wywukiwanła*)
(OPTION (<optynwil i/aLja* [,,..n])J Wskazówka
Próba usumącia wierszy, które są powiązane z wierszami w innych tabelach, morę ikończyć sią niepowodzeniem W takim wypadku najpierw nalery usuną!/ odpowiednie wiersze z tabel barowych
MS SQL S*rv*r __
Serwer umorliwu uiuwame wierszy wybranych w wyniku złączenia tabel oraz zwróconych przez podrapytanie powiązane
Przykłady
DE L ET '
ETC Products WHERE CategorylD »-6
(Usuwamy infonnacje o pięciu najdroższych produktach)
DELETE Products FROM (SELECT TOP S *
FRUŃ Products
OHUER BY UnłtPrłce DFSC) AS tl
WHtRE Products.ProductID • tl.ProductID
Usuwani* danych wybranych na podstawi* danych zapisanych w inn*J ta»*il
Warunek określony w klauzuli WHtRE określa, które wierwe zoitaną usumąte i ubeli Język Transact SQl umożliwia, przez wymienienie dodatkowej klauzuli EROM, wybór uiuwanyih i wienry na podstawie danych zapiianych w mne| ubeli. Przykład:
DELETE EROM [order detalIs]
‘ EROM Products AS p | INNER J01N [order detalIs] AS od ON I p.ProductID • od.ProductID | WHERE p.ProductName * 'Chang'
Wszystkie dane mażemy usuną/ r wybranej ubeli, wykonując instrukcje FRUNĘ AI f (ABLE. Chociaż funkcjonalnym odpowiednikiem wykonania instrukcji TRUNEATE jest wykonanie instrukcji DELCIE ber klauzuli WHERE, to pierwsza operacja zostanie wykonana szybciej, a informacje o poszczególnych usuwanych wierszach nie zostaną zapisane w dzienniku transakcyjnym Składnia
TRUNEATE TABLE tabel*
Wskazówki
I. Próba obcięcia Ubeh powiązanej / innymi tabelami przez Idutze obu skończy się błędem (wykonanie instrukcji DLII 11 ber UaundiWHtRI spowodowałoby iisuniąue danych)
2 Obciąoe Ubeh jest najszybszym sposobem usunięcia danyth ). Obcięcie danych jeit operacją mezapisywaną w dzienniku transakcyjnym, co oznacza, ze po jej przeprowadzeniu należy wykona/ kopią zapasową pliku bazy danych 4. Wartości danyth przechowywanych w kolumnie typu autonumerowama zostaną rresetowane.
la pomocą mstnAcji UPDAIF moremy aktuakrowa/ islmejące dane Składnia:
UPDATE
SET
(kolumna * (wyrażenie |
OEFAUir | NULL) |,.,.n]
(|[FROM (*t*bela_żródłowa*| [,...n]] [WHERE
^warunek wyszukiwania*))
Przykład:
UPDAFE authors
SET au Iname * UPPER (au tname)
WHERE Itate * 'CA'
Wskazówki
I (aktualizowane zoiuną wizystkie dane ipełnująte warunek podany w klauzuli WHFRI. Brak tej klauzuli ipowoduje zmianą wartold wszystkich danych rapisanyth w Ubeli 2. Próba imany typu danych rakońuy się błędem, chyba re serwer bar danyth będzie potraFd dokona/ nwjjwne| konwen| nowego typu do typu idehn»warieeo dla danej kolumny 3 Aktualizowane dane mutrą uwzględnia/ rawąrema nałożone na tabelą
4. Niemożliwe jest jednoczesne aktualizowanie danych zapisanych w kilku tabelach Aktualizowani* danych na podftawi* danych zapisanych w Inn*) tab*li (MS SQL S*rv*r)
Język Tzmmci-SQI pozwala na aktualizowanie danych do warioici wybranych lub obliczonych na poditawie danych rapiunych w mne| tabeli Przykład
UPtlATE tltles
SET ytd sales « (SELECT SUM(qty)
FROM sales
WHERE sales.title Id ■ tltles.titlejd AND sales.ord datę IN (SELECT MAX(ord datę) FROM sales))
FROM tltles, sales
Aktualizowani* danych wybranyd na podstawi* danych zapisanych w inna) tab*ii (MS SQL SfWf) lak jak moremy usuwu nową wartoś/ aktualizowanych danyth na podslaww danyth zapnariyth w mne| tabeli, dam i innej ub mogą posłuży/ jako kryterium wyboru aktualirowanyth wierszy Prryhlad.
UPDATE Products
SET unftprlce • unltprtce * 1.1 FROM Products AS p INNER JOIN Categortes AS C ON p.CategorylD ■ C.CategorylO '
WHERE c.CategoryName UKF 'C%*
okrnlofiryo
Hasających
lom
kilka zapytań
wjkonują i mą dani l» W trjo typu >|Hi tylko rai nych
owych dli tna|duje ti|
Transakcja jen lekwencją operacji traktowanych |ak pojedyncza, niepodzielna jidnoitka, która muli roitat w taloici przeprowadzona lub w caloki wycolana Przetwarzanie transakep przebiega w dwóch larach Pierwsza z mdi to inkjalizacja po zainicjalizowaniu transakcji wszystkie kolejne wyraiema SQl traktowane są jako część transakcji, at do momentu jej zakończenia Oiugą Iną jest r^wiwrdzeme lub wycofanie transakcji. Jest ono równoznaczne i jej zakoAcremem i sprawia, ze wszelkie wprowadione przez mą modyfikacje są na stale zapisywane lub anulowane w bazie danyth Bo momentu, kiedy transakcja me zastanie utwierdzona, wprowadzone przez nią zmiany są widoczne dla innych użjrtkowników
1 Rozpoczynanie transakcji |
1 Zatwierdzanie transakcji f |
Aby |awme rozpoczą/ nową transakcją, należy wykona/ ratrufceję BEGIN [TRAN j IRANSACTION] [nazwa transakcji] gdzie nazwa transakcj 1 umożliwi w przyszłości jej zatwierdzenie, anulowanie lub odtworzenie z kopii zapasowej Wskazówki ! 1. Więktroi/ serwerów baz danych posiada specjalny tryb pracy (ang Aotocomrrsrt morfę), w którym wykonanie kaaóej instrukcji powoduje me|awne rozpoczęcie i zatwierdzenie traniakcji 2 Rozpoczęcie traniakcji związane fest z zablokowaniem określonych zasobów (wierszy, kluczy indeksów, stron, tabel lub całej bazy danych) |
Aby jawnie zatwierdzi/ traniakcją, należy wykona/ instrukcją COfftIT [WORK | TRAN | IRANSACTION] j [nazwa transakcji) Wskazówki 1. Zatwierdzając transakcją, zapiszemy i udostępnimy (mienione dane pozostałym użytkownikom | 2. Zatwierdzenie tranukrji powoduje zdjęcie wszystkich założonych blokad i punktów tac Kowania 3. W niektórych serwerach baz danych możemy zatwierdzi/ traniakcją, wykonując instrukcją CREATE, ALTER lub DROP albo poprawnie kończąc sesją, w ramach której rozpoczęliśmy transakcję |
Aby jawne wycofa/ rozpoczętą transakcję, należy wykona/ imtruki
ROILBACK [WORK | TRAN | TRANSACH ONI
[nazwa transakcji]
Wskazówki
I Wycofując transakcję, anulujemy wszystkie dokonane od jt| rozpoczęcia zmiany.
2. Wycofanie transakcji powoduje zdjęcie wszystkie wszystkich założonych blokad i punktów tathowama
3 Przekroczenie trasu transakcji luli przerwanie sesji powoduje wycofanie transakcji IMS SQi Senrer).
W przypadku serwera PostgreJIH 2.4 zerwanie sesji powoduje powstanie nieaktywnych, ale wciąż blokujących zasoby traniakcji