23
SQL – Structured Query Language (3) Wykład 7 Prowadzący: dr Paweł Drozda

SQL – Structured Query Language (3)

  • Upload
    shelly

  • View
    56

  • Download
    0

Embed Size (px)

DESCRIPTION

SQL – Structured Query Language (3). Wykład 7 Prowadzący: dr Paweł Drozda. Plan wykładu. Podzapytania Perspektywy Wybrane funkcje MySQL Wyrażenia regularne. Podzapytania. Można stosować dla klauzuli: WHERE HAVING FROM Taka sama postać jak zwykłe zapytanie – ujęte w nawiasy - PowerPoint PPT Presentation

Citation preview

Page 1: SQL – Structured Query Language (3)

SQL – Structured Query Language (3)

Wykład 7Prowadzący: dr Paweł Drozda

Page 2: SQL – Structured Query Language (3)

dr Paweł Drozda

Plan wykładu

Podzapytania Perspektywy Wybrane funkcje MySQL Wyrażenia regularne

Page 3: SQL – Structured Query Language (3)

Podzapytania Można stosować dla klauzuli:

WHEREHAVINGFROM

Taka sama postać jak zwykłe zapytanie – ujęte w nawiasy

Podzapytanie jako prawy argument predykatów=, <, <=, >, >=, <>, IN, NOT IN

dr Paweł Drozda

Page 4: SQL – Structured Query Language (3)

Typy Podzapytań Liczba wyników

Wierszowe – wynikiem podzapytania jest pojedynczy wiersz

Tablicowe – wynikiem podzapytania jest wiele wierszy

Zależność od wierszy zapytania głównego Zwykłe – gdy podzapytanie nie zależy od zapytania

głównego Skorelowane – gdy zapytanie wykorzystuje elementy

zapytania głównego

dr Paweł Drozda

Page 5: SQL – Structured Query Language (3)

Podzapytania – przykłady (1) Wierszowe

SELECT * FROM pracownik WHERE zarobki = (SELECT MAX(zarobki ) FROM pracownik);

TablicoweSELECT * FROM pracownik WHERE id_pracownika NOT IN

(SELECT prowadzacy FROM przedmioty);SELECT * FROM student WHERE nazwisko LIKE ‘%a%’ AND

nrindeksu IN (SELECT student FROM oceny WHERE ocena=5);

INSERT INTO student(imie, nazwisko, adres, rok, telefon) SELECT imie, nazwisko, adres, 1, 997 from kandydaci;

dr Paweł Drozda

Page 6: SQL – Structured Query Language (3)

Podzapytania – przykłady(2)

ZwykłeSELECT tytul, autor FROM ksiazki WHERE cena

= (SELECT MAX(cena) from ksiazki);

SkorelowaneSELECT a.imie, a.nazwisko, a.zarobki,

a.stanowisko FROM pracownik a WHERE zarobki = (SELECT MAX(b.zarobki) FROM pracownik b WHERE b.stanowisko = a.stanowisko);

dr Paweł Drozda

Page 7: SQL – Structured Query Language (3)

Podzapytania – kwantyfikatory (1)

ALL – dla wszystkich elementów podzapytania warunek musi być spełniony

SELECT imie, nazwisko FROM pracownik WHERE zarobki > ALL (SELECT zarobki FROM pracownik WHERE stanowisko = ‘adiunkt’);

ANY(SOME) – co najmniej dla jednego elementu podzapytania warunek musi być spełniony

SELECT imie, nazwisko FROM pracownik WHERE zarobki > ANY (SELECT zarobki FROM pracownik WHERE stanowisko = ‘adiunkt’);

dr Paweł Drozda

Page 8: SQL – Structured Query Language (3)

Podzapytania – kwantyfikatory (2)

EXISTS – kwantyfikator egzystencjalny „istnieje”SELECT nazwisko FROM pracownik WHERE EXISTS (SELECT ‘x’

FROM przedmioty WHERE przedmioty.prowadzacy = pracownik.id_pracownika);

NOT EXISTS – kwantyfikator uniwersalny z negacją „dla każdego nieprawda że”SELECT nazwisko FROM pracownik WHERE NOT EXISTS (SELECT

‘x’ FROM przedmioty WHERE przedmioty.prowadzacy = pracownik.id_pracownika);

dr Paweł Drozda

Page 9: SQL – Structured Query Language (3)

Podzapytania – tworzenie tabel

Po FROM SELECT a.stanowisko, 100*a.liczbaprac/b.liczbaprac as

‘procPracowników’, 100*a.zarob/b.zarob as ‘procZarobkow’ FROM (SELECT stanowisko, COUNT(*) AS liczbaprac, SUM(zarobki) as zarob FROM pracownik GROUP BY stanowisko) a, (SELECT COUNT(*) AS liczbaprac, SUM(zarobki) AS zarob FROM pracownik) b;

Tworzenie tabeli (po AS)CREATE TABLE nowa (Imie varchar(30), Nazwisko

varchar(30)) AS SELECT imie, nazwisko FROM pracownik WHERE zarobki >4000;

dr Paweł Drozda

Page 10: SQL – Structured Query Language (3)

Perspektywy (1) Nazwana tabela Nie może istnieć samodzielnie – dane pobiera z

tabel bazowych (stworzonych przez CREATE TABLE) lub innych perspektyw

W MySQL może posłużyć do zapamiętywania wykonywanych zapytań

Gdy dane są aktualizowane w tabeli bazowej – odzwierciedlenie w perspektywie

Gdy struktura tabeli bazowych się zmienia – brak odzwierciedlenia w perspektywie

dr Paweł Drozda

Page 11: SQL – Structured Query Language (3)

Perspektywy (2) Określają widok na bazę danych dla pewnych

grup użytkowników Możliwe usuwanie, dodawanie, aktualizacja

danych w perspektywie – dane w tabeli bazowej również zmieniana

dr Paweł Drozda

Page 12: SQL – Structured Query Language (3)

Perspektywy – SQL (1) Tworzenie – składnia:

CREATE [OR REPLACE] VIEW nazwa AS zapytanie;

Przykład:CREATE OR REPLACE VIEW Pierwszy AS SELECT nazwisko

FROM Student WHERE rok=1;

Usuwanie – składnia:DROP VIEW nazwa [RESTRICT/ CASCADE];

Opcja sprawdzania (WITH CHECK OPTION) – sprawdza czy warunek podany w perspektywie nie zostaje zmieniony przez modyfikację bądź dodanie nowej krotki

dr Paweł Drozda

Page 13: SQL – Structured Query Language (3)

Perspektywy – SQL (2) Przykład

CREATE VIEW bogacze AS SELECT * FROM Pracownik WHERE zarobki > 4000 WITH CHECK OPTION;

INSERT INTO bogacze(nazwisko, imie , zarobki) VALUES (‘Biedak’, ‘Jan’, 2000); - takie zapytanie zwróci błąd

INSERT INTO bogacze(nazwisko, imie , zarobki) VALUES (‘Bogaty’, ‘Stefan’, 5000); - krotka zostanie dodana

UPDATE bogacze SET zarobki = zarobki – 400; - co się stanie dla zarobków pomiędzy 4000 – 4400?

dr Paweł Drozda

Page 14: SQL – Structured Query Language (3)

Funkcje MySQL

Ułatwiają wykonanie wielu zapytań Dają dodatkowe możliwości Typy funkcji

Warunkowe Tekstowe Liczbowe Daty i Czasu

Zbiór wszystkich funkcji http://dev.mysql.com/doc/refman/5.0/en/functions.html

dr Paweł Drozda

Page 15: SQL – Structured Query Language (3)

Funkcje warunkowe(1) CASE – wartość porównywana z opcjami i

zwracany odpowiedni wynik CASE wartosc WHEN opcja1 THEN wynik1 [WHEN opcja2 THEN

wynik2] … [ELSE wynikn] END;SELECT CASE 1 WHEN 1 THEN ‘jeden’ WHEN 2 THEN ‘dwa’ ELSE

‘wiecej’ END; - wynik ‘jeden’

IF – jeśli wyrażenie jest prawdziwe zwracany wynik1, wpp wynik2

IF (wyrazenie, wynik1, wynik2);SELECT IF (1>0,’true’,’false’); - wynik ‘true’

dr Paweł Drozda

Page 16: SQL – Structured Query Language (3)

Funkcje warunkowe(2) IFNULL(wynik1,wynik2) – jeśli wynik1 nie jest

null – jest zwracany, jeśli jest null zwracany wynik2

CREATE TABLE nowa AS SELECT IFNULL(‘xxxxx’,’test’) AS test;

NULLIF (wyr1,wyr2) – gdy wyrażenia są równe zwraca NULL gdy nie – zwraca wyr1

SELECT NULLIF(2,2);

dr Paweł Drozda

Page 17: SQL – Structured Query Language (3)

Funkcje tekstowe (1) ASCII(wyr) – zwraca kod ASCII dla pierwszego

znaku wyrSELECT ASCII(‘xd’);

CHAR(licz1, licz2, …) – odwrotne do ASCIISELECT CHAR(77,121,83,81,'76');

BIT_LENGTH(string) – zwraca ilość bitów zajmowanych przez string

SELECT BIT_LENGTH('text');

CONCAT(str1,str2,...) – łączy str1, str2, … w jeden ciąg znaków

SELECT CONCAT(Imie, „ ”, Nazwisko) FROM student;

dr Paweł Drozda

Page 18: SQL – Structured Query Language (3)

Funkcje tekstowe (2) ELT(N,str1,str2,str3,...) – dla N=i zwraca stri

SELECT ELT(3,’jeden’,’dwa’,’trzy’,’cztery’);

FIND_IN_SET(str,strlist) – szuka miejsca str na liście

SELECT FIND_IN_SET(‘a’,’a,b,c,d’);

LENGTH(str) – zwraca długość ciągu znakówSELECT LENGTH(‘test’);

LOAD_FILE(file) – ładuje plik do MySQL file – ścieżka dostępu do pliku

LOWER(str) – zmienia str na małe litery

dr Paweł Drozda

Page 19: SQL – Structured Query Language (3)

Funkcje tekstowe (3) UPPER(str) – zmienia str na wielkie litery

SELECT UPPER(‘test’);

MAKE_SET(bits,str1,str2,...) – tworzy zbiór z wybranych str1,… w zależności od wartości bits

SELECT MAKE_SET(1|4|16, ‘jeden’,’dwa’,’trzy’,’cztery’,’piec’);

REPLACE(str,from_str,to_str) – w str zamienia wystąpienia from_str na to_str

SELECT REPLACE (‘wuawuawiwa’,’wua’,’x’);

SUBSTRING(str,pos,len) ze str od pozycyji pos wyciąga ciąg znaków o długości len

SELECT SUBSTRING(‘testtesttesttest',5,6);

dr Paweł Drozda

Page 20: SQL – Structured Query Language (3)

Funkcje liczbowe SIN(), COS(), COT(), TAN() – funkcje trygonometryczne SQRT() – pierwiastek, SIGN() – znak liczby LN(), LOG10(), LOG2() – logarytmy ABS() – wartość bezwzględna CONV(N,from_base,to_base) – zamienia liczbę N podaną

w systemie from_base na liczbę w systemie to_baseSELECT CONV(123, 4,16);

PI() – zwraca liczbę pi TRUNCATE(X,D) – obcina liczbę X do D miejsc po

przecinku

dr Paweł Drozda

Page 21: SQL – Structured Query Language (3)

Funkcje daty i godziny CURDATE() – dzisiejsza data NOW() – obecny czas i data CURTIME() – obecny czas DATE_ADD() – dodaje daty DATE_SUB() –

odejmuje datySELECT DATE_ADD('2008-01-02', INTERVAL 31 DAY); SELECT ADDDATE('2008-01-02', 31);

DAYNAME(data) – nazwa dnia DAYOFMONTH (data) – numer dnia w miesiącu MONTH(), YEAR() – numery miesiąca i roku

dr Paweł Drozda

Page 22: SQL – Structured Query Language (3)

Wyrażenia regularne Tworzone za pomocą REGEXP Dostępne symbole

^ - dopasowanie początku ciąguSELECT ‘test’ REGEXP ‘^t’;

$ - dopasowanie końca ciągu SELECT ‘test’ REGEXP ‘t$’;

. – dopasowanie dowolnego znakua* - dopasowanie 0 lub wielu wystąpień aa+ - dopasowanie 1 lub wielu wystąpień aa? – dopasowanie 0 lub 1 wystąpień aa|b – dopasowanie do a lub do b[a-zA-Z] – dopasowanie do dowolnej litery[^0-9] – brak możliwości wystąpienia cyfry

dr Paweł Drozda

Page 23: SQL – Structured Query Language (3)

Wyrażenia regularne - przykłady SELECT '[email protected]' REGEXP '[a-z]@[a-z]\.[a-z]';SELECT ‘123506’ REGEXP ’[0-9]’;SELECT ‘asder12’ REGEXP ‘[a-z][0-9]’

dr Paweł Drozda