Kazdy z Państwa z listy z pierwszego tygodnia ma założoną bazę danych na serwerze
mssql.labs.wmi.amu.edu.pl
o nazwie
dbad_sXXXXXX
Zamiast localhost po włączeniu trzeba wpisać mssql.labs.wmi.amu.edu.pl i znaleźć swoją bazę. Tylko do niej macie Państwo prawa dostępu. Dalsze procedowanie podobnie jak na pierwszych zajęciach.
Gdy chcemy odpytywać wiele tabel będziemy się do nich odwoływać w select poprzez nazwa_tabeli.nazwa_kolumny. Przykład:
select pracownicy.nazwisko, oddzialy.Nazwa miasto,
from Pracownicy, Oddzialy
Służą do przekształcania danych, pobranych przez polecenie SQL, lub wyliczają nowe dane.
Funkcje dzielimy na:
* wierszone - działające na wartościach jednego rekordu* grupowe - operaujące na wartościach wielu rekordów
Funkcje te będziemy póki co umieszczać w klauzuli select lub where
SELECT
funkcja_A(wyrażenie_1, wyrażenie_2) AS wynik
FROM tabela
LOWER(wartość) - zamienia WIELKIE litery na małe
select LOWER(Nazwisko) as prac
from Pracownicy
UPPER(wartość) - zamienia małe litery na WIELKIE
select UPPER(Nazwisko) as prac
from Pracownicy
LEFT(string,dlugość) - zwraca tyle początkowych znaków stringa ile określono przez długość, lub NULL jeżeli wartość stringa to NULL.
select LEFT(Nazwisko,3) as prac
from Pracownicy
REPLACE(str,from_str,to_str) - zwraca string określony w str gdzie wszystkie wystąpienia from_str zostają zamienione na to_str. Uwaga! dopasowania do from_str nie są case-sensitive.
select REPLACE(Nazwisko,'R','*') as prac
from Pracownicy
select REPLACE(Nazwisko,'r','*') as prac
from Pracownicy
LEN(string) - zwraca liczbę bitów, na których zapisany jest string
select LEN(Nazwisko) as Dlugosc, Nazwisko
from Pracownicy
select LEN(placa_dod) as Dlugosc, Placa_dod
from Pracownicy
select LEN(placa_dod) as Dlugosc, Placa_dod
from Pracownicy
where LEN(placa_dod)>5
W drugim przypadku dane sÄ… traktowane jak ciÄ…gi binarne. Zwracany przez LEN typ to INT, lub BIGINT.
CHARINDEX(expressionToFind,expressionToSearch [ , start_location ]) - Wyszukuje pozycje danej podsekwencji w ciągu znaków. Trzeci argument jest opcjonalny, jeżeli nie jest zdefiniowany, jest ujemny lub równy zero, wtedy wyszukiwanie rozpoczynamy od początku stringa.
Uwaga! porządek argumentów jest odwrotny niż w replace, najpierw co szukamy, a potem gdzie szukamy.
select CHARINDEX('E',Nazwisko) as Gdzie, Nazwisko
from Pracownicy
select CHARINDEX('E',Nazwisko,4) as Gdzie, Nazwisko
from Pracownicy
select CHARINDEX('E',LOWER(Nazwisko),4) as Gdzie, Nazwisko
from Pracownicy
Charindex zwraca 0 jeżeli nie znajdzie dopasowania.
Pełną listę funkcj znakowych można znaleźć tutaj:
UWAGA! Istnieją funkcje znakowe dostępne w innych silnikach baz danych jak np INITCAP, które nie występują w Transact-SQL.
POWER(float,p) - zwraca wartość argumentu float podniesionego do potęgi p.
select POWER(placa_pod,2) as Potega
from Pracownicy
ROUND(numeric_expression,length [ ,function ]) - zwraca wartość liczbową podaną jako pierwszy parametr w zaokrągleniu. Trzeci parametr jest opcjonalny jezeli znajduje się tam wartość różna od zera zamiast zaokrąglenia otrzymamy obcięcie wartośći.
Uwaga! Dla pełnych dziesiątek stosujemy wartości ujemne
select ROUND(placa_pod,-2) as Potega
from Pracownicy
/* Obciecie*/
select ROUND(placa_pod,-2,1) as Potega
from Pracownicy
select ROUND(placa_pod,1) as Potega
from Pracownicy
Pełną listę funkcj znakowych można znaleźć tutaj:
Funkcje pobierające wartośći czasu systemowego:
SELECT SYSDATETIME()
,SYSDATETIMEOFFSET()
,SYSUTCDATETIME()
,CURRENT_TIMESTAMP
,GETDATE()
,GETUTCDATE();
DATEDIFF(datepart,startdate,enddate) - zwraca okres pomiędzy startdate a enddate. Typ jaki ma być zwrócony określony jest w datepart. Możliwe wartości:
Wartość |
Skrót |
---|---|
year |
yy, yyyy |
quarter |
qq, q |
month |
mm, m |
dayofyear |
dy, y |
day |
dd, d |
week |
wk, ww |
hour |
hh |
minute |
mi, n |
second |
ss, s |
SELECT DATEDIFF(Day,Zatrudniony,SYSDATETIME()) as Staz
from Pracownicy
DATENAME(datepart,date) - zwraca określoną w datepart część z daty
Set language polish
SELECT DATENAME(Weekday,Zatrudniony) as Dzien
from Pracownicy
Datepart do wyboru są takie same jak podane powyżej w tabeli, plus weekday, dayofyear
Uwaga! Funkcja set langugage, zmienia język, wystarczy ją wykonać raz, aby kolejne funkcje zachowały język polski.
YEAR(date) - zwraca rok
SELECT YEAR(Zatrudniony) as ROK
from Pracownicy
CAST(wartość_konwertowana AS typ_danych [ ( length ) ] )
CONVERT ( typ_danych [ ( length ) ] , wyrażenie [ , style ] )
Służą do zamiany (rzutowania) z jednego typu na inny. Domyślna wartość length to 30.
select nazwisko + ' Jest z nami od : ' + CAST (Zatrudniony as varchar(100)) as Info
from Pracownicy
SELECT CAST(10.6496 AS int);
SELECT CAST(10.3496847 AS money);
select CAST(ROUND(Placa_pod+Placa_dod, 0) AS int) AS Computed
from pracownicy
select nazwisko, convert(int, placa_pod) placa_pod
from pracownicy
/*Convert the binary value 0x4E616d65 to a character value*/
SELECT CONVERT(char(8), 0x4E616d65, 0) AS [Style 0, binary to character];
Dokładniejszy opis styli można znaleźć tutaj:
CASE - słówko kluczowe po którym podajemy liste wartości, z których wybierana jest jedna.
CASE dzielimy na prosty i przeszukujący, składnia:
CASE input_expression
WHEN when_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
Przeszukujący, składnia:
CASE
WHEN Boolean_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
Input_expression porównywany jest z wartościami when_expression, result_expression to zwracany wynik w przypadku dopasowania.
SELECT Nazwisko, "Zarobki" =
CASE Stanowisko
WHEN 'Dyrektor' THEN 'Dyro'
ELSE 'Nie dyro!'
END
FROM Pracownicy
SELECT Nazwisko, "Zarobki" =
CASE
WHEN Placa_pod = 0 THEN 'zero!'
WHEN Placa_pod < 2000 THEN 'niskie'
WHEN Placa_pod >= 2000 and Placa_pod < 4000 THEN 'średnie'
WHEN Placa_pod >= 3000 and Placa_pod < 20000 THEN 'B.Wysokie'
ELSE 'Za wysokie!'
END
FROM Pracownicy
Zadanie Domowe
Wykonaj i przeœlij rozwi¹zania do zadañ numer: 2,4,5,7,9Termin wykonania zadania: Sobota 15.10.2016 do godziny 24.00.
Rozwiązania proszę przesłać przez stronę:
Logujemy się jak na komputery Wydziałowe, dodajemy się do grupy BAD i przesyłamy plik (jeden wspólny dla wszystkich) z rozwiązaniami.
UWAGA! Rozwiązania można przesłać tylko raz.
Wykorzystano materiały z
http://www.cs.put.poznan.pl/pboinski/files/SBD/03aFunkcjeWierszowe.pdf
https://msdn.microsoft.com/pl-pl/library/ms181984(v=sql.110).aspx
https://msdn.microsoft.com/pl-pl/library/ms177516(v=sql.110).aspx