Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

1 Budowa wyrażeń w SQL: Wyrażenia języka SQL występują w instrukcji SELECT, oraz służą do formułowania warunków podawanych w klauzuli WHERE instrukcji.

Podobne prezentacje


Prezentacja na temat: "1 Budowa wyrażeń w SQL: Wyrażenia języka SQL występują w instrukcji SELECT, oraz służą do formułowania warunków podawanych w klauzuli WHERE instrukcji."— Zapis prezentacji:

1 1 Budowa wyrażeń w SQL: Wyrażenia języka SQL występują w instrukcji SELECT, oraz służą do formułowania warunków podawanych w klauzuli WHERE instrukcji takich, jak DELETE czy UPDATE. Kolejność (priorytet) operacji nie jest niestety jawnie podana w dokumentacji MySQL, lecz wydaje się być zgodna z ogólnie przyjętymi konwencjami. W razie wątpliwości stosujemy grupowanie za pomocą nawiasów okrągłych.

2 2 Wyrażenia logiczne: Każda wartość różna od zera i NULL odpowiada w wyrażeniu logicznym prawdzie; a więc NULL i zero reprezentują wartośćfałsz. Złożone wyrażenia logiczne, zbudowane za pomocą operatorów logicznych, zwracają jedynkę jako reprezentację wartości prawdziwej, a zero jako reprezentację fałszu. Operatory logiczne NOT : logiczna negacja. MySQL dopuszcza jako alternatywną notację wykrzyknik ( ! ). OR : logiczna alternatywa. MySQL dopuszcza alternatywną notację ( || ). AND : logiczna koniunkcja. Tu również MySQL dopuszcza notację &&. XOR : logiczna suma modulo 2 (alternatywa wykluczająca )

3 3 Wyrażenia arytmetyczne: Proste operatory arytmetyczne to dodawanie ( + ), odejmowanie ( - ), mnożenie ( * ) i dzielenie ( / ). Wynikiem dzielenia przez zero jest NULL ). Ponadto w MySQL dostępny jest dość bogaty zestaw funkcji matematycznych (wykładnicze, logarytmiczne, trygonometryczne itp.), gdzie w wypadku błędu (nielegalnego argumentu) zwracana jest wartość NULL.

4 4 Wyrażenia warunkowe: IFNULL(A,B) jeśli wartością A jest NULL zwraca B, w przeciwnym wypadku zwraca A. IF(A,B,C) : jeśli wartością logiczną A jest prawda (tzn. nie zero i nie NULL ) zwraca B, w przeciwnym wypadku zwraca C. Wartość A traktowana jest jako całkowitoliczbowa -- aby więc stosować taką konstrukcję dla warunku zależnego od wartości zmiennoprzecinkowej, należy w miejscu A użyć operacji porównania.

5 5 CASE wartość WHEN [wartość_porównywana] THEN wynik [WHEN [wartość_porównywana] THEN wynik...] [ELSE wynik ] END zwraca wynik gdy wartość = wartość_porównywana, w przeciwnym przypadku zwraca wynik po ELSE lub NULL gdy nie zapisano części ELSE. SELECT CASE count(*) WHEN 1 THEN 'a' WHEN 2 THEN 'b' WHEN 3 THEN 'c' ELSE 'Zły wariant END FROM biuro2;

6 6 CASE WHEN [warunek] THEN wynik [WHEN [warunek] THEN wynik...] [ELSE wynik ] END zwraca wynik gdy pierwszy warunek jest prawdziwy, potem kolejny. W przeciwnym przypadku zwraca wynik po ELSE lub NULL gdy nie zapisano części ELSE. SELECT CASE WHEN count(*)>3 THEN 'a' WHEN count(*)>5 THEN 'b' ELSE 'Zły wariant' END FROM biuro2;

7 7 Porównania: W budowie wyrażeń logicznych przydają się oczywiście porównania. Poniższe operatory porównania można stosować również do wyrażeń napisowych. Pamiętać należy jednak, że wynik porównania wyrażeń napisowych zależeć będzie od tego, czy w ich budowie występują wartości zadeklarowane jako BINARY (co znosi utożsamienie małych i wielkich liter). Jeżeli wartością któregokolwiek z argumentów porównania jest NULL, porównanie zwraca jako wynik NULL (oczywiście za wyjątkiem funkcji IS NULL.)

8 8 Równość oznacza się pojedynczym znakiem równości: =. Nierówność można oznaczyć bądź tak: <>, bądź tak: !=.,,Mniejszy lub równy'' oznacza się: =.,,Większy niż'' i,,mniejszy niż'' oznacza się odpowiednio > oraz <. ISNULL(A) zwraca jedynkę, jeżeli wartością A jest NULL, w przeciwnym wypadku zwraca zero. A [NOT] BETWEEN B AND C : wyrażenie takie jest równoważne A>=B AND A<=C o ile porównywane wyrażenia są tego samego typu. W przeciwnym wypadku sposób porównania wyznacza typ pierwszego argumentu ( A ).

9 9 GREATEST(v1, v2,...) : zwraca największy argument mysql> SELECT GREATEST(2,0); -> 2 mysql> SELECT GREATEST(34.0,3.0,5.0,767.0); -> mysql> SELECT GREATEST('B','A','C'); -> 'C' LEAST(v1, v2,...) : zwraca najmniejszy argument mysql> SELECT LEAST(2,0); -> 0 mysql> SELECT LEAST(34.0,3.0,5.0,767.0); -> 3.0 mysql> SELECT LEAST('B','A','C'); -> 'A'

10 10 Porównania napisów: wyrażenie IN (wartość1,...) : zwraca 1 jeżeli wyrażenie jest równe którejkolwiek wartości z listy podanej w nawiasach, w przeciwnym wypadku zwraca 0. Wartość wyrażenia może być numeryczna, a jej typ narzuca sposób porównania. wyrażenie NOT IN (wartość1,...) : równoważne NOT (wyrażenie IN (wartość1,...)). mysql> SELECT 2 IN (0,3,5,7); -> 0 mysql> SELECT 'wefwf' IN ('wee','wefwf','weg'); -> 1

11 11 wyrażenie1 LIKE wyrażenie2 : porównanie wzorców, w których budowie można korzystać z metaznaków % (oznaczającego dowolną liczbę - w tym zero - dowolnych znaków), oraz _ (oznaczającego dowolny pojedynczy znak). Aby we wzorcu umieścić któryś z metaznaków jako znak dosłowny, należy go poprzedzić znakiem \. wyrażenie1 NOT LIKE wyrażenie2 : równoważne NOT (wyrażenie1 LIKE wyrażenie2).

12 12 mysql> SELECT 'David!' LIKE 'David_'; -> 1 mysql> SELECT 'David!' LIKE '%D%v%'; -> 1 mysql> SELECT 'David!' LIKE 'David\_'; -> 0 mysql> SELECT 'David_' LIKE 'David\_'; -> 1 mysql> SELECT 'abc' LIKE 'ABC'; -> 1 mysql> SELECT 'abc' LIKE BINARY 'ABC'; -> 0

13 13 STRCMP(napis1, napis2) - zwraca 0 jeżeli napisy są jednakowe, -1 jeżeli pierwszy argument jest wcześniejszy według obowiązującego porządku sortowania, a w przeciwnym wypadku +1. mysql> SELECT STRCMP('napis', 'napis2'); | STRCMP('napis1', 'napis2') | | -1 | mysql> SELECT STRCMP('napis', 'napis'); | STRCMP('napis', 'napis') | | 0 | mysql> SELECT STRCMP('napis2', 'napis'); | STRCMP('napis2', 'napis') | | 1 |

14 14 wyrażenie1 REGEXP wyrażenie2 : porównanie wzorców zbudowanych zgodnie ze składnią wyrażeń regularnych. Znaki \ w wartościach napisowych MySQL mających służyć za wyrażenia regularne muszą być podwojone (\\) aby były interpretowane według składni wyrażeń regularnych. MySQL dopuszcza jako równoważną notację wyrażenie1 RLIKE wyrażenie2. wyrażenie1 NOT REGEXP wyrażenie2 : równoważne NOT (wyrażenie1 REGEXP wyrażenie2).

15 15 Nazwy zaczynające się na 'b' : mysql> SELECT personelnr, nazwisko FROM personel WHERE nazwisko REGEXP '^b'; | personelnr | nazwisko | | SB20 | Bober | | SB23 | Biały | | SL32 | Brzęczyk |

16 16 Nazwy zaczynające się od małej litery: mysql> SELECT nazwisko FROM personel WHERE nazwisko REGEXP BINARY '^b'; Empty set (0.03 sec)

17 17 Nazwy kończące się na 'ka' : mysql> SELECT personelnr, nazwisko FROM personel WHERE nazwisko REGEXP 'ka$'; | personelnr | nazwisko | | SB22 | Kowalska | | SB30 | Michalska | | SL31 | Lisicka |

18 18 Nazwy zawierające 'w' : SELECT personelnr, nazwisko FROM personel WHERE nazwisko REGEXP 'w'; mysql> SELECT personelnr, nazwisko FROM personel WHERE nazwisko REGEXP 'w'; | personelnr | nazwisko | | SB21 | Frankowski | | SB22 | Kowalska | | SB31 | Piotrowski | | SL20 | Nowak | | SL21 | Kowalski | | SL30 | Wiśniewski |

19 19 Dopasowanie sekwencji składającej się z zero lub więcej znaków ( a* ): mysql> SELECT 'Ban' REGEXP '^Ba*n'; -> 1 mysql> SELECT 'Baaan' REGEXP '^Ba*n'; -> 1 mysql> SELECT 'Bn' REGEXP '^Ba*n'; -> 1 Dopasowanie sekwencji składającej się z jednego lub więcej znaków ( a+ ): mysql> SELECT 'Ban' REGEXP '^Ba+n'; -> 1 mysql> SELECT 'Bn' REGEXP '^Ba+n'; -> 0

20 20 Funkcje operujące na liczbach: ABS() mysql> SELECT ABS(2); -> 2 mysql> SELECT ABS(-32); -> 32 ACOS() mysql> SELECT ACOS(1); -> 0 mysql> SELECT ACOS(1.0001); -> NULL podobnie ASIN()

21 21 ATAN() mysql> SELECT ATAN(2); -> mysql> SELECT ATAN(-2); -> CEIL() synonim CEILING() mysql> SELECT CEILING(1.23); -> 2 mysql> SELECT CEILING(-1.23); -> -1 CONV(N,from_base,to_base) mysql> SELECT CONV('a',16,2); -> '1010' mysql> SELECT CONV('6E',18,8); -> '172' mysql> SELECT CONV(-17,10,-18); -> '-H'

22 22 COS() mysql> SELECT COS(PI()); -> -1 podobnie SIN() COT() mysql> SELECT COT(12); -> mysql> SELECT COT(0); -> NULL podobnie TAN() DEGREES() mysql> SELECT DEGREES(PI()); -> 180 mysql> SELECT DEGREES(PI() / 2); -> 90

23 23 EXP() mysql> SELECT EXP(2); -> mysql> SELECT EXP(-2); -> mysql> SELECT EXP(0); -> 1 FLOOR() mysql> SELECT FLOOR(1.23); -> 1 mysql> SELECT FLOOR(-1.23); -> -2 LN() synonim LOG() mysql> SELECT LN(2); -> mysql> SELECT LN(-2); -> NULL

24 24 LOG10() mysql> SELECT LOG10(2); -> mysql> SELECT LOG10(100); -> 2 LOG2() mysql> SELECT LOG2(65536); -> 16 LOG(B,X) logarytm z X o pdstawie B mysql> SELECT LOG(2,65536); -> 16 mysql> SELECT LOG(10,100); -> 2

25 25 MOD(N,M), N % M, N MOD M – zwraca resztę z dzielenia N przez M mysql> SELECT MOD(234, 10); -> 4 mysql> SELECT 253 % 7; -> 1 mysql> SELECT MOD(29,9); -> 2 mysql> SELECT 29 MOD 9; -> 2 mysql> SELECT MOD(34.5,3); -> 1.5 PI() – w obliczeniach dostępna pełna podwójna precyzja mysql> SELECT PI(); -> mysql> SELECT PI() ; ->

26 26 POW() synonim POWER() mysql> SELECT POW(2,2); -> 4 mysql> SELECT POW(2,-2); -> 0.25 RADIANS() – zamienia stopnie na radiany mysql> SELECT RADIANS(90); -> RAND() – zwraca losową liczbę zmiennoprzecinkową z zakresu 0 <= v < 1.0 mysql> SELECT RAND(); -> mysql> SELECT RAND(); -> mysql> SELECT RAND(); ->

27 27 ROUND(X), ROUND(X,D) mysql> SELECT ROUND(-1.23); -> -1 mysql> SELECT ROUND(-1.58); -> -2 mysql> SELECT ROUND(1.58); -> 2 mysql> SELECT ROUND(1.298, 1); -> 1.3 mysql> SELECT ROUND(1.298, 0); -> 1 mysql> SELECT ROUND(23.298, -1); -> 20

28 28 SIGN() – zwraca -1, 0, lub 1 mysql> SELECT SIGN(-32); -> -1 mysql> SELECT SIGN(0); -> 0 mysql> SELECT SIGN(234); -> 1 SQRT() mysql> SELECT SQRT(4); -> 2 mysql> SELECT SQRT(20); -> mysql> SELECT SQRT(-16); -> NULL

29 29 TRUNCATE() – zwraca wartość X okrojoną do N miejsc po przecinku mysql> SELECT TRUNCATE(1.223,1); -> 1.2 mysql> SELECT TRUNCATE(1.999,1); -> 1.9 mysql> SELECT TRUNCATE(1.999,0); -> 1 mysql> SELECT TRUNCATE(-1.999,1); -> -1.9 mysql> SELECT TRUNCATE(122,-2); -> 100 mysql> SELECT TRUNCATE(10.28*100,0); -> 1028

30 30 Funkcje operujące na napisach: CONCAT(X,Y,...) : zwraca złączenie napisów podanych jako argumenty. SELECT CONCAT(kod,' ',miasto,' ',ulica) AS adres FROM nieruchomosc mysql> SELECT CONCAT(kod,' ',miasto,' ',ulica) AS adres -> FROM nieruchomosc; | adres | | Białystok Nowa 5 | | Białystok Mała 2 | | Białystok Leśna 6 | | Białystok Dobra 18 | | Grajewo Długa 33 | | Łomża Akacjowa 6 |

31 31 HEX(N_or_S) : zamienia zapis szesnastkowy na liczbę bądź odwrotnie: mysql> SELECT HEX(255); -> 'FF' mysql> SELECT 0x616263; -> 'abc' mysql> SELECT HEX('abc'); -> LENGTH(S) : zwraca długość napisu (w znakach). Synonimy: OCTET_LENGTH(S), CHAR_LENGTH(S), CHARACTER_LENGTH(S).

32 32 LOCATE(A, B) : jeżeli napis A stanowi część napisu B, zwraca pozycję początku pierwszego wystąpienia A w B. W przeciwnym wypadku zwraca zero. Synonimem jest POSITION(B IN A). LOCATE(A,B,C) : jeżeli napis A jest częścią napisu B występującą w pozycji dalszej niż (liczba całkowita) C, zwraca pozycję tego wystąpienia. LEFT(napis,długość) : zwraca napis składający się z długość początkowych znaków napisu. MID(napis,pozycja,długość) : zwraca napis składający się z długość znaków napisu od pozycji pozycja i o długości długość. Synonim SUBSTRING(napis,pozycja,długość)

33 33 RIGHT(napis,długość) : podobnie jak LEFT, lecz zwraca końcówkę napisu. Synonimem jest SUBSTRING(napis FROM długość). REPEAT(napis,liczba) : powtarza napis ilość razy liczba REPLACE(A,B,C) : zwraca napis utworzony z napisu A poprzez zastąpienie wszystkich wystąpień pod-napisu B napisem C. REVERSE(napis) : zwraca napis z odwrotną kolejnością znaków.

34 34 SUBSTRING(A,B,C) : zwraca napis składający się z C znaków napisu A, począwszy od znaku w pozycji B. Akceptowana jest również składnia SUBSTRING(A FROM B FOR C). TRIM([[ BOTH | LEADING |TRAILING ] [ A ] FROM ] B) : zwraca napis uzyskany z napisu B poprzez usunięcie wystąpień pod-napisu A z początku ( LEADING ), końca ( TRAILING ) lub obu końców ( BOTH ). Domyślnie stosuje opcję BOTH, i jeżeli A nie podano usuwa spacje. mysql> SELECT TRIM(' bar '); -> 'bar' mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx'); -> 'barxxx' mysql> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx'); -> 'bar' mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz'); -> 'barx'

35 35 Funkcje dotyczące daty i godziny: Funkcje operujące na wartościach oznaczających daty i godziny są zbyt liczne, aby tu je wszystkie wymienić. Ograniczymy się więc na razie do kilku najbardziej użytecznych; jak zwykle, pełny opis dostępny jest w dokumentacji MySQL. CURDATE() lub CURRENT_DATE : zwraca bieżącą datę w postaci YYYY-MM-DD (rok-miesiąc-dzień), lub YYYYMMDD, w pierwszym wypadku jako napis, w drugim jako liczbę całkowitą (jeżeli kontekst wymaga konwersji do typu całkowitoliczbowego). CURTIME() lub CURRENT_TIME : zwraca bieżącą godzinę w postaci HH:MM:SS (godzina:minuta:sekunda), lub HHMMSS -- zależnie od kontekstu, podobnie jak poprzednia funkcja.

36 36 NOW() lub SYSDATE() lub CURRENT_TIMESTAMP : zwraca bieżącą datę i godzinę w postaci napisu YYYY-MM-DD HH:MM:SS lub liczby całkowitej YYYYMMDDHHMMSS, jeśli kontekst wymaga wartości całkowitoliczbowej. DATE_FORMAT(data, format) : konwertuje datę na napis którego format można kontrolować za pomocą napisu formatującego (tabela dalej). TIME_FORMAT(czas, format) : funkcja analogiczna do powyższej, lecz akceptująca jedynie specyfikatory formatu dotyczące godziny, minuty i sekundy.

37 37 mysql> SELECT DATE_FORMAT(' :23:00','%W %M %Y'); | DATE_FORMAT(' :23:00', '%W %M %Y') | | Friday May 2011 | mysql> SELECT DATE_FORMAT(' :23:00','%H:%i:%s'); | DATE_FORMAT(' :23:00', '%H:%i:%s') | | 08:23:00 | mysql> SELECT DATE_FORMAT(' :23:00', -> '%D %y %a %d %m %b %j'); | DATE_FORMAT(' :23:00','%D %y %a %d %m %b %j') | | 14th 11 Fri May 134 | DATE_FORMAT(data, format)

38 38 mysql> SELECT DATE_FORMAT(' :23:00', '%H %k %I %r %T %S %w'); | DATE_FORMAT(' :23:00','%H %k %I %r %T %S %w') | | :23:00 AM 08:23: | mysql> SELECT DATE_FORMAT(' ', '%X %V'); | DATE_FORMAT(' ', '%X %V') | | | mysql> SELECT DATE_FORMAT(' ', '%d'); | DATE_FORMAT(' ', '%d') | | 14 |

39 39 formatopis %a skróty nazw dni tygodnia (Sun..Sat) %b skróty nazw dni miesiąca (Jan..Dec) %c miesiąc liczbowo (0..12) %D dni miesiąca z angielskimi przyrostkami (0th, 1st, 2nd, 3rd, …) %d dni miesiąca, liczbowo (00..31) %e dni miesiąca, liczbowo (0..31) %f mikrosekundy ( ) %H godzina (00..23) %h godzina (01..12) %I godzina (01..12) %i minuty, liczbowo (00..59) %j dzień roku ( ) %k godzina (0..23) %l godzina (1..12) %M nazwa miesiąca (January..December) %m miesiąc, liczbowo (00..12) %pAM lub PM

40 40 formatopis %r czas, 12-godzinny (hh:mm:ss według AM lub PM) %S sekundy (00..59) %s sekundy (00..59) %T czas, 24-godzinny (hh:mm:ss) %U tydzień (00..53), gdzie Sunday jest pierwszym dniem tygodnia %u tydzień (00..53), gdzie Monday jest pierwszym dniem tygodnia %V tydzień (01..53), gdzie Sunday jest pierwszym dniem tygodnia ; używane z %X %v tydzień (01..53), gdzie Monday jest pierwszym dniem tygodnia ; używane z %x %W nazwa dnia tygodnia (Sunday..Saturday) %w dzień tygodnia (0=Sunday..6=Saturday) %X tydzień roku, gdzie Sunday jest pierwszym dniem tygodnia, liczbowo, 4 cyfry ; używane z %V %x tydzień roku, gdzie Monday jest pierwszym dniem tygodnia, liczbowo, 4 cyfry ; używane z %v %Y rok, liczbowo, 4 cyfry %y rok, liczbowo ( 2 cyfry ) % dosłowny % znak

41 41 TO_DAYS(data) : zamienia datę na liczbę całkowitą oznaczającą liczbę dni od początku roku 0. Funkcja ta (oraz następna) przydają się do obliczania liczby dni jakie upłynęły między dwiema datami. FROM_DAYS(liczba) : zamienia liczbę całkowitą, interpretowaną jako liczba dni od początku roku 0, na datę (napis postaci YYYY-MM-DD ). mysql> SELECT TO_DAYS(' '); | TO_DAYS(' ') | | | mysql> SELECT FROM_DAYS(734642); | FROM_DAYS(734636) | | |

42 42 Funkcje dotyczące dat: ADDDATE(data,liczba_dni)- dodaje do daty określoną liczbę dni mysql> SELECT ADDDATE(' ',31); | ADDDATE(' ',31) | | |

43 43 - dodaje do daty przedział czasowy określony wyrażeniem wyr oraz przypisaną mu jednostką (tabela dalej) mysql> SELECT ADDDATE(' ',INTERVAL 2 MONTH); | ADDDATE(' ',INTERVAL 2 MONTH) | | | ADDDATE(data,INTERVAL wyr jednostka)

44 44 jednostkaOczekiwane wyrażenie MICROSECONDMICROSECONDS SECONDSECONDS MINUTEMINUTES HOURHOURS DAYDAYS WEEKWEEKS MONTHMONTHS QUARTERQUARTERS YEARYEARS SECOND_MICROSECOND'SECONDS.MICROSECONDS' MINUTE_MICROSECOND'MINUTES.MICROSECONDS' MINUTE_SECOND'MINUTES:SECONDS' HOUR_MICROSECOND'HOURS.MICROSECONDS' HOUR_SECOND'HOURS:MINUTES:SECONDS' HOUR_MINUTE'HOURS:MINUTES' DAY_MICROSECOND'DAYS.MICROSECONDS' DAY_SECOND'DAYS HOURS:MINUTES:SECONDS' DAY_MINUTE'DAYS HOURS:MINUTES' DAY_HOUR'DAYS HOURS' YEAR_MONTH'YEARS-MONTHS'

45 45 - synonim ADDDATE(data,INTERVAL wyr jednostka) mysql> SELECT DATE_ADD( ' :23:00', -> INTERVAL '-1 10' DAY_HOUR); | DATE_ADD(' :23:00', INTERVAL '-1 10' DAY_HOUR) | | :23:00 | DATE_ADD(data,INTERVAL wyr jednostka)

46 46 mysql> SELECT INTERVAL 1 DAY + CURDATE(); | INTERVAL 1 DAY + CURDATE() | | | mysql> SELECT INTERVAL 1 DAY + NOW(); | INTERVAL 1 DAY + NOW() | | :38:49 | INTERVAL wyr jednostka

47 47 mysql> SELECT ADDTIME(NOW(),'1 1:1:1'); | ADDTIME(NOW(),'1 1:1:1') | | :49:49 | mysql> SELECT ADDTIME(' :59: ','1 1:1: '); | ADDTIME( :59: ','1 1:1: ') | | :01: | mysql> SELECT ADDTIME('01:00: ', '02:00: '); | ADDTIME('01:00: ', '02:00: ') | | 03:00: | ADDTIME(wyr1,wyr2) - do wyr1 (czas) dodaje wyr2 (czas, data-czas)

48 48 synonim SUBDATE(data,INTERVAL wyr jedn) mysql> SELECT DATE_SUB(' ', INTERVAL 31 DAY); | DATE_SUB(' ', INTERVAL 31 DAY) | | | mysql> SELECT DATE_SUB(' ', INTERVAL 31 DAY); | DATE_SUB(' ', INTERVAL 31 DAY) | | | DATE_SUB(data,INTERVAL wyr jedn)

49 49 mysql> SELECT DATE_SUB(' ', INTERVAL 2 MONTH); | DATE_SUB(' ', INTERVAL 2 MONTH) | | | mysql> SELECT DATE_SUB(' ', INTERVAL 2 QUARTER); | DATE_SUB(' ', INTERVAL 2 QUARTER) | | | mysql> SELECT DATE_SUB(' ', INTERVAL 31 DAY); | DATE_SUB(' ', INTERVAL 31 DAY) | | NULL |

50 50 – różnica od wyr1 do wyr2 w dniach mysql> SELECT DATEDIFF(' ',' '); | DATEDIFF(' ',' ') | | 374 | mysql> SELECT DATEDIFF(' ',' '); | DATEDIFF(' ',' ') | | -22 | DATEDIFF(wyr1,wyr2)

51 51 Funkcje dodatkowe: DAY(data) synonim DAYOFMONTH(data) DAYNAME(data) DAYOFWEEK(data) (1 = Sunday, 2 = Monday, …, 7 = Saturday) DAYOFYEAR(data) mysql> SELECT DAY(' '); | DAY(' ') | | 14 | mysql> SELECT DAYNAME(' '); | DAYNAME(' ') | | Saturday |

52 52 mysql> SELECT DAYOFWEEK( ' ' ); | DAYOFWEEK(' ') | | 7 | mysql> SELECT DAYOFYEAR( ' ' ); | DAYOFYEAR(' ') | | 134 |

53 53 EXTRACT(jednostka FROM data) - tabela str 44 mysql> SELECT EXTRACT(YEAR FROM ' '); | EXTRACT(YEAR FROM ' ') | | 2011 | mysql> SELECT EXTRACT(YEAR_MONTH FROM ' :02:03'); | EXTRACT(YEAR_MONTH FROM ' :02:03') | | | mysql> SELECT EXTRACT(DAY_MINUTE FROM ' :02:03'); | EXTRACT(DAY_MINUTE FROM ' :02:03') | | |

54 54 HOUR(czas) MINUTE(czas) SECOND(czas) mysql> SELECT HOUR('10:05:03'); -> 10 mysql> SELECT MINUTE('10:05:03'); -> 5 LAST_DAY(data) – ostatni dzień miesiąca z daty SELECT LAST_DAY(' '); -> ' ' mysql> SELECT LAST_DAY(' '); -> ' '

55 55 MAKEDATE(rok,dzień_roku) - tworzy datę mysql> SELECT MAKEDATE(2011,31), MAKEDATE(2011,32); | MAKEDATE(2011,31) | MAKEDATE(2011,32) | | | | mysql> SELECT MAKEDATE(2011,365), MAKEDATE(2012,365); | MAKEDATE(2011,365) | MAKEDATE(2012,365) | | | |

56 56 MONTH(data) MONTHNAME(data) QUARTER(data) YEAR(data) mysql> SELECT MONTH(' '); -> 5 mysql> SELECT MONTHNAME(' '); | MONTHNAME(' ') | | May | mysql> SELECT QUARTER (' '); -> 2 mysql> SELECT YEAR(' '); -> 2011

57 57 mysql> SELECT WEEKDAY(' '); | WEEKDAY(' ') | | 5 | mysql> SELECT WEEKOFYEAR(' '); | WEEKOFYEAR(' ') | | 19 | WEEKDAY(data) (0 = Monday, 1 = Tuesday, … 6 = Sunday) WEEKOFYEAR(data) odpowiednik polecenia WEEK(data,3)

58 58 TrybPierwszy dzień tygodniaZakres1 tygodniem jest tydzień... 0Sunday0-53z Niedzielą w tym roku 1Monday0-53z więcej niż 3 dniami w tym roku 2Sunday1-53z Niedzielą w tym roku 3Monday1-53z więcej niż 3 dniami w tym roku 4Sunday0-53z więcej niż 3 dniami w tym roku 5Monday0-53z Poniedziałkiem w tym roku 6Sunday1-53z więcej niż 3 dniami w tym roku 7Monday1-53z Poniedziałkiem w tym roku WEEK(data[,tryb]) mysql> SELECT WEEK(' '); -> 19 mysql> SELECT WEEK(' ',0); -> 19 mysql> SELECT WEEK(' ',1); -> 20

59 59 1.Podaj informacje o biurach w danym mieście; 2.Podaj liczbę wszystkich biur w danym mieście. 3.Podaj nazwiska, stanowiska oraz wysokości pensji pracowników zatrudnionych w danym biurze. Wynik uporządkuj według nazwisk. 4.Podaj całkowitą liczbę pracowników firmy oraz ich sumaryczną pensje. 5.Podaj liczbę pracowników zatrudnionych na poszczególnych stanowiskach we wszystkich biurach w Białymstoku. 6.Podaj nazwiska wszystkich dyrektorów biur w kolejności wyznaczonej adresami biur. 7.Podaj nazwiska wszystkich pracowników podległych określonemu dyrektorowi. 8.Podaj numery, adresy, typy i wysokość czynszu dla wszystkich nieruchomości z Białegostoku. Wynik uporządkuj według czynszu. 9.Podaj informacje o wszystkich nieruchomościach nadzorowanych przez określonego pracownika. 10.Podaj liczbę nieruchomości nadzorowanych przez każdego pracownika w każdym z biur. Przykładowe wyszukiwanie danych użytkownika Biuro:

60 60 11.Podaj informacje o nieruchomościach oferowanych do wynajęcia przez właścicieli instytucjonalnych zarejestrowanych w danym biurze. 12.Podaj całkowitą liczbę nieruchomości każdego typu zarejestrowanych w każdym z biur. 13.Podaj informacje o wszystkich właścicielach prywatnych oferujących do wynajęcia więcej niż jedną nieruchomość. 14.Podaj informacje o wszystkich mieszkaniach w Augustowie, w których są przynajmniej trzy pokoje, a czynsz nie przekracza 350 złotych. 15.Podaj numery, nazwiska i numery telefonów oraz preferowany rodzaj nieruchomości dla wszystkich klientów danego biura. 16.Znajdź nieruchomości, które były ogłaszane w prasie częściej, niż wynosi przeciętna liczba ogłoszeń dotyczących jednej nieruchomości. 17.Podaj informacje o wynajęciach nieruchomości zarejestrowanych w danym biurze, których termin końcowy upłynie w następnym miesiącu. 18.Podaj całkowitą liczbę umów najmu zawartych w biurach w Łomży na okres krótszy niż jeden rok. 19.Podaj najwyższą dzienną stawkę za wynajęcie nieruchomości w każdym z biur. Wynik uporządkuj według numerów biur.

61 61 1. Podaj informacje o biurach w danym mieście: SELECT biuroNr, miasto, ulica, kod FROM biuro WHERE miasto Like 'Grajewo'; lub SELECT biuroNr, miasto, ulica, kod FROM biuro GROUP BY biuroNr ORDER BY miasto; Przykładowe wyszukiwanie danych użytkownika Biuro:

62 62 mysql> SELECT biuroNr, miasto, ulica, kod -> FROM biuro -> WHERE miasto Like 'Grajewo'; | biuroNr | miasto | ulica | kod | | B004 | Grajewo | Miodowa 32 | | mysql> SELECT biuroNr, miasto, ulica, kod -> FROM biuro -> GROUP BY miasto -> ORDER BY miasto; | biuroNr | miasto | ulica | kod | | B007 | Augustów | Akacjowa 16 | | | B001 | Białystok | Piękna 46 | | | B004 | Grajewo | Miodowa 32 | | | B002 | Łomża | Cicha 56 | |

63 63 mysql> SELECT biuroNr, miasto, ulica, kod -> FROM biuro -> ORDER BY miasto; | biuroNr | miasto | ulica | kod | | B007 | Augustów | Akacjowa 16 | | | B001 | Białystok | Piękna 46 | | | B003 | Białystok | Mała 63 | | | B006 | Białystok | Słoneczna 55 | | | B004 | Grajewo | Miodowa 32 | | | B002 | Łomża | Cicha 56 | | | B005 | Łomża | Dobra 22 | | Natomiast:

64 64 Podaj liczbę wszystkich biur w danym mieście: SELECT count(*) FROM biuro WHERE miasto Like 'Grajewo'; lub SELECT miasto, count(*) FROM biuro GROUP BY miasto; 2.

65 65 mysql> SELECT count(*) -> FROM biuro -> WHERE miasto Like 'Grajewo'; | count(*) | | 1 | row in set (0.00 sec) mysql> SELECT miasto, count(*) -> FROM biuro -> GROUP BY miasto; | miasto | count(*) | | Augustów | 1 | | Białystok | 3 | | Grajewo | 1 | | Łomża | 2 |

66 66 Podaj nazwiska, stanowiska oraz wysokości pensji pracowników zatrudnionych w danym biurze. Wynik uporządkuj według nazwisk: SELECT nazwisko, stanowisko, pensja FROM personel WHERE biuronr = 'B003' ORDER BY nazwisko; lub SELECT biuronr, nazwisko, stanowisko, pensja FROM personel ORDER BY biuronr, nazwisko; 3.

67 67 mysql> SELECT nazwisko, stanowisko, pensja -> FROM personel -> WHERE biuronr = 'B003' -> ORDER BY nazwisko; | nazwisko | stanowisko | pensja | | Biały | asystent | 1200 | | Bober | dyrektor | 2400 | | Frankowski | kierownik | 1800 | | Kowalska | asystent | 1000 |

68 68 mysql> SELECT biuronr, nazwisko, stanowisko, pensja -> FROM personel -> ORDER BY biuronr, nazwisko; | biuronr | nazwisko | stanowisko | pensja | | B001 | Bogacz | dyrektor | 5000 | | B002 | Kowalski | asystent | 1000 | | B002 | Munk | asystent | 1100 | | B002 | Nowak | kierownik | 1500 | | B003 | Biały | asystent | 1200 | | B003 | Bober | dyrektor | 2400 | | B003 | Frankowski | kierownik | 1800 | | B003 | Kowalska | asystent | 1000 | | B004 | Cybulski | asystent | 1300 | | B004 | Mucha | dyrektor | 2200 | | B005 | Brzęczyk | asystent | 1000 | | B005 | Lisicka | asystent | 900 | | B005 | Wiśniewski | dyrektor | 3000 | | B006 | Michalska | dyrektor | 2500 | | B006 | Piotrowski | asystent | 1100 | | B006 | Plichta | asystent | 1200 | | B007 | Hojna | asystent | 900 | | B007 | Morawska | kierownik | 1700 |

69 69 Podaj całkowitą liczbę pracowników firmy oraz ich sumaryczną pensję: SELECT COUNT(*) AS liczba, SUM(pensja) AS sumaryczna FROM personel; lub SELECT biuronr, COUNT(*) AS liczba, SUM(pensja) AS sumaryczna FROM personel GROUP BY biuronr; 4.

70 70 mysql> SELECT COUNT(*) AS liczba, SUM(pensja) AS sumaryczna -> FROM personel; | liczba | sumaryczna | | 17 | | mysql> SELECT biuronr, COUNT(*) AS liczba, SUM(pensja) AS sumaryczna -> FROM personel -> GROUP BY biuronr; | biuronr | liczba | sumaryczna | | B002 | 3 | 3600 | | B003 | 4 | 6400 | | B004 | 2 | 3500 | | B005 | 3 | 4900 | | B006 | 3 | 4800 | | B007 | 2 | 2600 |

71 71 Podaj liczbę pracowników zatrudnionych na poszczególnych stanowiskach we wszystkich biurach w Białymstoku: SELECT stanowisko, COUNT(*) AS liczba FROM personel WHERE biuronr IN (SELECT biuronr FROM biuro WHERE miasto='Białystok') GROUP BY stanowisko; 5. mysql> SELECT stanowisko, COUNT(*) AS liczba -> FROM personel -> WHERE biuronr IN (SELECT biuronr -> FROM biuro WHERE miasto LIKE Białystok') -> GROUP BY stanowisko; | stanowisko | liczba | | asystent | 4 | | dyrektor | 2 | | kierownik | 1 |

72 72 Podaj nazwiska wszystkich dyrektorów biur w kolejności wyznaczonej adresami biur: SELECT biuro.biuronr, miasto, ulica, nazwisko FROM biuro INNER JOIN personel USING(biuronr) WHERE stanowisko='dyrektor' ORDER BY miasto, ulica; 6. mysql> SELECT biuro.biuronr, miasto, ulica, nazwisko -> FROM biuro LEFT JOIN personel USING(biuronr) -> WHERE stanowisko='dyrektor' -> ORDER BY miasto, ulica; | biuronr | miasto | ulica | nazwisko | | B003 | Białystok | Mała 63 | Bober | | B006 | Białystok | Słoneczna 55 | Michalska | | B004 | Grajewo | Miodowa 32 | Mucha | | B005 | Łomża | Dobra 22 | Wiśniewski |

73 73 Podaj nazwiska wszystkich pracowników podległych określonemu dyrektorowi o nazwisku Bober: SELECT nazwisko FROM personel WHERE biuronr=(SELECT biuronr FROM personel WHERE nazwisko= ' Bober ' ) AND nazwisko<> ' Bober ' ; 7. mysql> SELECT nazwisko -> FROM personel -> WHERE biuronr=(SELECT biuronr FROM personel WHERE nazwisko='Bober') AND nazwisko<>'Bober'; | nazwisko | | Frankowski | | Kowalska | | Biały |

74 74 Podaj numery, adresy, typy i wysokość czynszu dla wszystkich nieruchomości z Białegostoku. Wynik uporządkuj według czynszu: SELECT nieruchomoscnr AS nr, CONCAT(kod,' ', miasto,' ',ulica) AS adres, typ, czynsz FROM nieruchomosc WHERE miasto='Białystok'; 8. mysql> SELECT nieruchomoscnr AS nr, CONCAT(kod,' ',miasto, ' ',ulica) AS adres, typ, czynsz -> FROM nieruchomosc -> WHERE miasto='Białystok'; | nr | adres | typ | czynsz | | B16 | Białystok Nowa 5 | mieszkanie | 495 | | B17 | Białystok Mała 2 | mieszkanie | 412 | | B18 | Białystok Leśna 6 | mieszkanie | 385 | | B21 | Białystok Dobra 18 | dom | 660 |

75 75 Podaj informacje o wszystkich nieruchomościach nadzorowanych przez określonego pracownika nr SB23 lub nazwisko Biały: SELECT nieruchomoscnr AS nr, CONCAT(kod,' ', miasto,' ',ulica) AS adres,typ,pokoje,czynsz FROM nieruchomosc WHERE personelnr='SB23'; 9. mysql> SELECT nieruchomoscnr AS nr, CONCAT(kod,' ', miasto,' ',ulica) AS adres,typ,pokoje,czynsz -> FROM nieruchomosc -> WHERE personelnr='SB23'; | nr | adres | typ | pokoje | czynsz | | B17 | Białystok Mała 2 | mieszkanie | 3 | 412 | | B18 | Białystok Leśna 6 | mieszkanie | 3 | 385 |

76 76 lub SELECT nieruchomoscnr AS nr, CONCAT(kod,' ', miasto,' ',ulica) AS adres,typ,pokoje,czynsz FROM nieruchomosc WHERE personelnr=(SELECT personelnr FROM personel WHERE nazwisko='Biały'); mysql> SELECT nieruchomoscnr AS nr, CONCAT(kod,' ', miasto,' ',ulica) AS adres,typ,pokoje,czynsz -> FROM nieruchomosc -> WHERE personelnr=(SELECT personelnr FROM personel WHERE nazwisko='Biały'); | nr | adres | typ | pokoje | czynsz | | B17 | Białystok Mała 2 | mieszkanie | 3 | 412 | | B18 | Białystok Leśna 6 | mieszkanie | 3 | 385 |

77 77 Podaj liczbę nieruchomości nadzorowanych przez każdego pracownika w każdym z biur: SELECT biuronr, personelnr, COUNT(*) AS liczba FROM nieruchomosc GROUP BY biuronr, personelnr; 10. mysql> SELECT biuronr, personelnr, COUNT(*) AS liczba -> FROM nieruchomosc -> GROUP BY biuronr, personelnr; | biuronr | personelnr | liczba | | B003 | SB21 | 1 | | B003 | SB22 | 1 | | B003 | SB23 | 2 | | B004 | SG21 | 1 | | B005 | SL31 | 1 |

78 78 1.Podaj wszystkich podwładnych danego kierownika z danego biura; 2.Podaj wszystkich podwładnych danego kierownika z danego biura; 3.Podaj szczegółowe informacje o wszystkich asystentach, uporządkowane według nazwiska i biura. 4.Podaj szczegółowe informacje o nieruchomościach (obejmujące także kaucje za wynajęcie), które można uzyskać w biurze, wraz z informacjami o właścicielu. 5.Podaj szczegółowe informacje o nieruchomościach nadzorowanych przez wskazanego pracownika z danego biura. 6.Podaj dane klientów zarejestrowanych w danym biurze oraz dla każdego klienta dane pracownika, który go zarejestrował. 7.Podaj dane nieruchomości znajdujących się w Łomży, dla których miesięczny czynsz nie przekracza 450 funtów. Przykładowe wyszukiwanie danych użytkownika Personel:

79 79 8.Podaj uwagi zgłaszane przez klientów odwiedzających daną nieruchomość. 9.Podaj nazwiska i numery telefonów klientów, którzy oglądali nieruchomość, ale nie zgłosili żadnych uwag. 10.Podaj szczegółowe informacje dotyczące wynajęcia określonej nieruchomości przez określonego klienta. 11.Podaj informacje o wynajęciach nieruchomości, których termin końcowy upłynie w następnym miesiącu. 12.Podaj informacje o nieruchomościach, których nie udało się wynająć przez ponad trzy miesiące. 13.Podaj listę klientów, których wymagania odpowiadają określonej nieruchomości.

80 80 Typ wyliczeniowy pola: Kolumna ustawiona jako ENUM('jeden','dwa','trzy') może przyjmować którąkolwiek z poniższych wartości, gdzie przedstawiono również indeksy dla każdej wartości: ValueIndex NULL ' 0 'jeden'1 'dwa'2 'trzy'3 Typ wyliczeniowy może mieć maksymalnie elementów.


Pobierz ppt "1 Budowa wyrażeń w SQL: Wyrażenia języka SQL występują w instrukcji SELECT, oraz służą do formułowania warunków podawanych w klauzuli WHERE instrukcji."

Podobne prezentacje


Reklamy Google