Typy znakowe
char reprezentuje riM znaków o określonej,
_____ni* wijkszej nłi 11 000 znaków, dlugołci
m (wir (MS \Ql lereer) reprezentuj* <iąf linków o okrtłlontj, im wigkszej niż 4 000 maków, dlugoki zapisanej w postaci Unicode
yarchar reprezentuj* ciąg maków o zmiennej,
-* ni* witkiitj nu 1000 maków, dlafoici.
nvarchar (MS JQl ienrer) reprezentuje (ioi maków o zmi*iin*|, nie wigkszej nii 4 000 maków, długoki zapisano! w postaci Unkoói. t#stt irpirmnup nu maków « określonej,
gig wijkuai aatti11 • I (2 147 413 *47), długości nteat (MS SOI Strvtr) reprezentuj* cią( maków • zmiennej, ni* wigkszej ma 2'® * I (I 073 741 123), długości upiiam) w postaci Miaac>d>._
Typy binarne
Typy binarny tg bardio podobne do typów makowych, i tg różnicą, tr dam zapisane tg jako potici(|ólm bity b 1 nary (MS SQl Sanrrr) i bit (fostgrcSQl^ reprezentują cig* bitów o okreilonej. ni* wifkiit) nit a 000 bitów, dlugoici yarblnary (MSSOtSamr) i yarbtt (roitgrtlQi)
reprezentują cige bilów * zmiennej, ni* wifkirej im 1000 bitów, óługoici
Image (MS SQl Sonrer) i bytea (Postgr*iQl)
repreimtują dań* bi nożne, na przykład riafikj _twMpiogd 0 do 7" -1 (71474|]447)
Identyfikatory
uniqueidant<f1«r (MS SQL Strm) zeprezentuje globalny identyfikolor (GUI0), który pelt 14 bajtową Iktbg
Typy logiczne
(PoiłgrśQl) reprezentuje prawd) lab fałti.
Wartości nieznane lub nieokreślone
Kardy system rangdrania barami danych obsługuje specjalną wartok NUl U która repreientupe dam braku|gce lub o nieokreślonej wartoin Wartoit NULI jut warloicig tpecjalng, rórng od wi/yttkich innych wartości, w tym od U i pustego ciągu maków Wskazówki
I Wszelki* operacje i wartoUig NULL (np łączeni* ciągu tnaków lub mnożeni* liub) powinny zwracać NULL.
7 jedynym dopuwtralnytn operatorem porównania i tg warioltig poat operator IS |NOT] NULL-chociaż nit wiemy, |akg wartoit reprtrentu|e NUl L, to motamy iprewdik, ery dana wartoit jen nieokreślona
Typy użytkowników
Tworzsni*
Podilawg (wabłonem) wtryitkKb typów danych użytkownika |eit pteóehmowany typ danych lakrritm itasowania typu danych użytkownika |*it okrtilona baca danych MS SOL Serwer
Moremy uiworryt własny typ danych, wywołuje procedury systemową sp addtype Składnia:
spaddtype [Ptypersame -] typ,
Pphystype *] typ predefiniowany , [Pnuntype -] TNULL']
, [Powner •] 'wfaSciciel'] PostgreSOL
Do twociema nowych typów ciury imtnikcia CREATE TYPE Składnia:
CREATE TYPE typ AS ( narwa atrybutu typ danych (, ,,,n ) )
Usuwanie
MS SQL Serwer
Wywołanie procedury cp droptypr spowoduje usumgcie wybranego typu danych urylkownika Składnia:
sp_droptype [Ptypename -] 'typ'
PostgreSOL
Składnia:
DROP TYPE typ [, ...n]
( CASCADE | RESTRICT |
|dri*.
myci* opcji C.ASADE powoduje automatyem* usunigtie wwyitkich talttnych od danego typu obiektów, utycie opcji RFS1RICT powoduje igłowani* błydu, jeżeli ictmeją jakiekolwiek raltrm od domgo typu obiekty (opcja domyślna)
iC DANYCH
Inlocmacji przechowywane w barach danych mogą loitat pobram ta pomocą initrukcji (gryka SOI SELECT Initniktja SELECT (lapytame) okleiła, Jakie dane mają ioiLat rwrócone w Wyniku jej wykonania, a nie w jaki tpoaób serwer bar danych ma wykonaó tą instrukcją SQl pil jgzykiem strukturalnym, a ni* proceduralnym
Instrukcja SELECT
Instrukcja SELECT itu/y do pobierania danych t hory, Instrukcja musi zawierać (z wyjątkiem polecenia SFl ECT, odwoluigtego tą wyiącinie do stałych, imiennych lub wyraieó arytmetycznych) co najmniej jedną klauzulą: ta pomocą polecenia SELECT określamy interesujące nas
kolumny (dokonujemy operacji selekcji pionowej, jri ojekcJI), ia pomocą klauruli I RUM wskaru|emy tabelą, z której pobieramy dane 7 reguły ogtanicta tią równin, ta pomocą klauzuli WHERE, babą (wracanych wiemy do rekordów spełniających okrtiłone kryteria (operacji selekcji poiiomej, selekcji)
Składnia
SELECT [ALL | OISTINCT]
(TOP n (PERCENT] [WIIH TIES]]
< 1tsta_wyboru »
« listo wyboru > z:*
I *ł
I(na7wa_tabeli nazwa widoku | alias).*
(nazwa kolumny | wyrażenie) [(AS] ałlasjioliimny]
I alias kolumny** wyrażenie ) | (LIMIT | n | ALL )) [OFFSET n]
gdtie:
ALE (wartość' domyłlna) otnacia, te (wrócone zostaną wwystkie wybrane wiersze,
OISTINCT omacza, ie i wyniku (ostaną usuniąte duplikaty wybranych wierszy,
TOP (MS SQl Serwer) oznacza, że zwrócona zostanie tylko określona liczba wiemy,
PERCENT pozwala na wzglądne określenie liczby zwracanych wierszy jeżeli użyto znacznika Pt Rf FNT, waitoic n muli należeć óo zakresu <0,100 >,
Wl TH TIES oznacza, ze zostaną rwrócone wszystkie wiersze, których wartość kolumny wymiemonej w klauzuli ORDER BY lądzie równa najmniejszej wartoici wiersza wyniku. Np peieli wybieramy S towarów o najwyższej marzy, a w tabeli znajduje sią 7 towarów o tej tamt|, najwyiszej marży, zapytanie zwróci 7, a nie S wierszy,
LIMIT (PostgreSQl) jeil odpowiednikiem klauzuli IDP, OEESl I (PostgreSOL) określa, ile wierszy zostanie pommątyrh. zanim zwrócony zoitame pierwszy wiersz wyniku. Przykłady
SELECT OrderDate, Fretght/2 AS wyrażenie EROM Orders
SELECT TOP 3 'autor: ' AS literał,
au fname ♦ ' '♦ «u lname AS konkatencja fROM authors
Wskazówki
I Wartości są zwracane w kolejności okiellone| w poleceniu SELECT )ezeli użyto tymbołu wieloznacznego (*), dane bądą zwrócone w kolejności odpowioóa|ące| kolejności kolumn w tabeli 2. Nazwy kolumn należy oddzielał przecinkami.
3. 2e wzglądu ni wydajno ił należy unikał stosowania symbolu * w zapytaniach
4 Słowa kluczowy TOP i LIMIT są używane razem z klauzulą ORDTR BY, ponieważ w przeciwnym wypadku serwer zwróci pierwszych n wierszy z przypadkowo uporządkowanego wyniku.
Klauzula FROM
Określa, z których obiektów bądą pobierane dane źródłowe Składnia:
[FROM |< tobola >)
« tabela » ts*
nazwa tabeli [[AS] al1as_tabeli] [WITM (» optymalizacja >”[,... rsj)]
gdzie:
nazwa widoku [[AS] altoswtdoku] funkcja rowset [[AS] alias funkcji] OPFNXMt
wynikpodzapytania [AS] alias tabeli (allas kolumny [,.,,n]))
optyma 11 aacja (MS SQL Serwer) wymuiza użycie przez optymalizator konkretnej metody skanowania tabeli, indeksu czy trybu blokowania,
0PłNXML (MS SQL Serwer) spowoduje zapuanit wyniku
w lormacie xML
Przykład
SEIECT f.oteqoryID, CategoryName fROM Categorles
Klauzula WHERE
Okrełla, które wiersze zostaną zwrócone przez rapytamt Składnia:
[WHERE < warunek_wysiuk1wan1o » | < z1ączen1e_starego typu »]
« złączenie starogojlypu » z:»
nazwa kolumny (*”• j • *) nazwakolumny
< warunek wyszukiwania > tz*
(< warunek wyszukiwania >))
[(ANO 1 OR| (NOT] (< predykat
> I (< warunek wyszukiwania >))]
< predykat * i i*
( wyrażenie (« | < » | I • | >
wyrażenie
| wyrałcn1e_znakowo (NOT]
IIKE wyrażenie znakowe (ESCAPE 'wzorzec']
| wyrażenie [NOT] BETWEEN wyrażenie AND wyrażenie wyrażenie IS [NOT] NULE wyrażenie [NOT] IN pndzapytanle | wyrażenie
| wyrażenie (* | * > | 1 • I
> [ w . | j > ( < I « . ( | <)
(AlL | SONĘ | ANY) (podzapytanie)
| EXISTS (podzapytanie)
I
gdzie:
z1ączenle_starego_typu jest niestandardowym
okrtilemem warunków ztgćzenia tabel
Symbol * - odpowiada złączeniu lewoilronnemu,
symbol - * prawostronnemu,
predykat jest wyrażeniem o wartoła 1 (prawda),
0 (fałsz) lub NULL,
ESCAPt 'wzorzec' (MS SQl Serwer) okreila znak eliminujący
z wyniku wiersze, które go zawierają
Przykład:
SELECT lastname, firstname, tftle TROM employees WHERE employeeld * 1
Wybierani* danych na podstawi* warunków różnego rodzaju
(gryk SQl nie nakłada żadnych ogranitzeó na łiczbg argumentów wyszukiwania wymienionych w klauzuli WHERE. W zołeżaaici od rodzaju kryteriów i typu wytzukrwanych danych, możemy skorzystać i:
I. Operatorów porównania - jeżeli chcemy iprawd/W, czy wirtołł zapisana w tabeli odpowiada wartoici warunku wyszukiwania. Na ptzyklad aby wybrał nazwiska i nazw
wystukiwania Na ptzyklad aby wybrał nazwiska i nazwy miast pracowników ze Stanów [jednoctonych urodzonych przed 1 sierpnia IfSS roku, napiszemy:
ELECT lastname, city fROM employees
WHERE country • 'USA' ANO BlrthOate
----a'B/1/óó; ^
2. Operatora 11NE ■ jeżeli chcemy sprawdził zgodnoił tekstu i podanym wiortem Operator LIFE może został użyty dla danych tekstowych, binarnych oraz daty i czas* Operator LIKE óapusziza stosowanie nastgpujących symboli wiełaznoanycb:
ŁĄCZENIE ZBIORÓW DANYCH
W klauzuli F ROM możemy odwołał lig óo dowolnej liczby obiektów tabel, widoków, lunkcji typu RowSet czy
wyników podzapytaż) I reguły łączy tie obiekty na podstawie wartoici wspólnego atrybutu, na prtyklaó wartoici pity klucz jiodiiiwowy klucz obcy W takim pnypadku muiimy użył jednoznacznego identyfikatora obiektu (kolumny) Ponieważ nazwy kolumn zawi*n|ących klucz podstawowy i obcy isajcząioei są takie same, musimy poprzedzał nazwy kolumn nazwami ubel. Jeżeli dodatkowo stosujemy konwencją, w myśl której poprzedzamy nazwy obiektów nazwą Kh wUiciciela, zapytanie wybierające dane i kilku obiektów staje ug mało czytelne Kozwiązamem tego problemu tą iliaiy Składnia
[TROM (« złączono tabela >| [,,,,n]]
« złąr/onatnbela » it«
< tabela > < typ złączenia >
« tabela >
ON < warunek > | USING (kolumna, ,..n)
I < tabela > CROSS JOtN « tabela >
| « zfączona_tabela >
« typ złączenia » s!•
(INNfR I ((LEfT I RIGHT | FULL)
[OUTER])]
optymaltzacjazłączenla >]
JO IN gdzie:
CROSS JOIN okreila, że wynik bgd/» obliczony jako iloczyn kartezjański złączonych tabel,
Minimalną liczbą Warunków utytych do łączenia tabel można wyliczył ze wzoru: minimalna liczba warunków » liczba złączonych tabel - I
INNER JOIN okreila, ze wynik bgdzie obliczony jako złączenie naturalni* złączanych tabel Wynikiem złączenia naturalnego są tylko te wiersze, w których w powiązanych
a V odpowiada dowolnemu ciągowi maków o dlugoici równej 0 lub większej,
b odpowiada dowolnemu pojedynczemu znakowi, c. I] ■ odpowiada pojedynczemu znakowi i określonego rbioru lub zakresu,
d [A] odpowiada pojedynczemu znakowi menależącrmu do okreilonrgo zbioru lub zakresu Na przykład aby wyłwietlił nerwy (irm zawierające w nazwie słowo Rnstaurant, których nazwiska przedstawicieli zaczynają lig na literą M, napiszemy SELECT companynomr TROM customers
WHFRE componyname LIFE 'SRestourontS'
ANO ContactNnmr UFF 'MS'
3 Operatorów logicznych - jeżeli chcemy połączył kilka warunków wyszukiwania. Na przykład aby wyiwietlic informacje o tych towarach, któnrrh nazwy me zec/yneją lig na literg T lub R lub zostały dostarczone przet dostawcą o identyfikator ie równym ?\ i jednoczeime kantowały mniej mz 15 i. napiszemy SELECT productnwne, luppllertd, unitprlcn TROM proriucts
WHERE (produetname NOT UKF 'T%' AND produetname NOT LIFE 'Rh')
OR (suppltertd • 21 ANO unltprlce « 15.00)
4. Operatora BETWEEN AND leżeli chcemy sprawdził, uy wartoił zapisana w tabeli należy (lub nie) do okrtilonego przedziału zamknigtego Na przykład aby wyświetlił nazwy lowo/ów, których cena me nilery do pneóziaiu < S, SS >, napiszemy
SELECT produetname FROM products
WHERE unltprfce NOT BETWEEN 5 ANT) 55
5. Operatora IN jczełi chcemy sprawdził, czy wartoił zapisana w tabeli należy de określonego zbioru Na przykład
5 wyświetlił nazwy firm r* Iranów lub Włoch, nipnrtmy T companynnmr, country FROM supplłars
WHERE country IN ('USA', 'IŁa1y') ó Operatora IS NULL - jeżeli chcemy sprawdził, czy wartoił zapisana w tabeli lest wartoicią nieokreśloną.
Na przykład aby wyświetlił nazwy i numery tełelonów tych firm, dla których me znamy numeru faksu, napinrmy SEIECT companyname, phon*
FROM suppliers WHERE fan IS NULL
Klauzula ORDER BY
Wynik rapytama mozr został ilotmatowany zgodnie
z wymaganiami użytkownika: • h pomoc
pomocą słowa kluczowego DIS U NCI możemy wyeliminował duplikaty
• 2a pomocą aliaiów możemy zmienił nazwy kolumn
• 2a pomocą literałów rnozrmy dodał do wyniku dowolnt wyrażenia.
• Za pomocą klauzuli ORDER BY możemy posonował wiersze wyniku
Składnia:
(ORDER BY (wyrażeni* [ASC | OfSC]| [,..,n]| gdzie
wyrażeni et okreila kolumną, według którt| bądą sortowane dane,
ASC (wartoił domyłlna) okreila, ze dane bądą sortowinr w porządku rosnącym (od warloki najmniejszej do najwigkszej),
OC SC określa, zr dane bądą sortowane w porządku malejącym.
.Przykład:
SEIECT OrderlD, CustomerlO,
TmployeelU, OrderDate fROM Orders
te DESC
S&TWWW*......
zapylania pnez posortowanie wierszy, eliminacjr duplikatów
•rat wykorzystanie aliaiów i literałów
SELECT OISTINCT 'Nazwa kraju: —CBOTTryTrs FraJ' fROM supplleri ORDER BY country
kolumnach zapisane były le same wartoici,
LEfT OUTER JOIN okreila, z* wynik bgdzie zawierał wszystkie wiersz* z lewej tabeli i wyłącznie te wiersze z prawej tabeli, w których « powiązanych kolumnach zapisane były te same wartoici,
RIGHT OUTER JOIN okreila, ze wynik bgdnr rawieral wszystkie witrizr r prawej tabeli i wyłącznie te wiersze z lewej tabeli, w których w powiązanych kolumnach zapisane kyły le same wartoici Złączenie prawostronne jest rzadko stosowani przez osoby przyzwyczajone do czytania od strony lewi| do prawej,
fULL OUTER JOIN okreila, z* wynik bgdzie zawierał wszystkie wiersze z obu złączonych tabel optymalizacjo złączania (Mi JQl iereer) wymusza użycie pnez optymalizator konkretnej metody złączenia tabel (złączenie przez odłączenie, złączenie na podstawie zgodnotci funkcji skrótu lub złączenie przez pgtłg wyszukania)