vod do databzovch systm Cvien 03 SQL Select
Úvod do databázových systémů Cvičení 03 SQL Select Ing. Pavel Bednář pavel. bednar@vsb. cz http: //pavelbednar. aspone. cz
SQL � SQL je zkratka anglických slov Structured Query Language � Standardizovaný dotazovací jazyk používaný pro práci s daty v relačních databázích. � Čtyři základní skupiny ◦ Příkazy pro manipulaci s daty (SELECT, INSERT, UPDATE, DELETE, …) ◦ Příkazy pro definici dat (CREATE, ALTER, DROP, …) ◦ Příkazy pro řízení přístupových práv (GRANT, REVOKE) ◦ Příkazy pro řízení transakcí (START TRANSACTION, COMMIT, ROLLBACK)
Select � Výběr sloupců � Select co From odkud
Select Student Login Příjmení Jméno Věk Dra 025 Drábek Tomáš 25 Zub 011 Zubatá Eva NULL Nov 098 Novák Bohumil 28 � Select * from Student Login Dra 025 Zub 011 Nov 098 Příjmení Drábek Zubatá Novák Jméno Věk Tomáš 25 Eva NULL Bohumil 28
Select Student Login Příjmení Jméno Věk Dra 025 Drábek Tomáš 25 Zub 011 Zubatá Eva NULL Nov 098 Novák Bohumil 28 � Select Věk, Příjmení from Student Věk Příjmení 25 Drábek NULL Zubatá 28 Novák
Select Student Login Příjmení Jméno Věk Dra 025 Drábek Tomáš 25 Zub 011 Zubatá Eva NULL Nov 098 Novák Bohumil 28 � Select Věk as Stáří, Příjmení from Student Stáří Příjmení 25 Drábek NULL Zubatá 28 Novák
Select � Výběr sloupců � Select co From odkud Where podmínka
Podmíněný select Student Login Příjmení Jméno Věk Dra 025 Drábek Tomáš 25 Zub 011 Zubatá Eva 25 Nov 098 Novák Bohumil 28 � Select Věk, Příjmení from Student where (Věk=“ 25“) Věk Příjmení 25 Drábek 25 Zubatá
Podmíněný select Student Login Příjmení Jméno Věk Dra 025 Drábek Tomáš 25 Zub 011 Zubatá Eva 25 Nov 098 Novák Bohumil 28 � Select Věk, Příjmení from Student where (Věk>“ 25“) Věk Příjmení 28 Novák
Podmíněný select Student Login Příjmení Jméno Věk Dra 025 Drábek Tomáš 25 Zub 011 Zubatá Eva 25 Nov 098 Novák Bohumil 28 � Select Věk, Příjmení from Student where (Věk<>“ 28“) Věk Příjmení 25 Drábek 25 Zubatá
Operátor between Login Dra 025 Sip 001 Zub 011 Nov 098 Student Příjmení Jméno Věk Drábek Tomáš 25 Šípková Růžena 29 Zubatá Eva 23 Novák Bohumil 28 � Select * from Student where (Věk between 24 AND 29) Login Dra 025 Sip 001 Nov 098 Příjmení Drábek Šípková Novák Jméno Věk Tomáš 25 Růžena 29 Bohumil 28
Operátor not between Login Dra 025 Sip 001 Zub 011 Nov 098 Student Příjmení Jméno Věk Drábek Tomáš 25 Šípková Růžena 29 Zubatá Eva 23 Novák Bohumil 28 � Select * from Student where (Věk not between 24 AND 29) Login Příjmení Jméno Zub 011 Zubatá Eva Věk 23
Operátor in Login Dra 025 Sip 001 Zub 011 Nov 098 Student Příjmení Jméno Věk Drábek Tomáš 25 Šípková Růžena 29 Zubatá Eva 23 Novák Bohumil 28 � Select * from Student where (Věk in (24, 29, 28)) Login Příjmení Jméno Věk Sip 001 Šípková Růžena 29 Nov 098 Novák Bohumil 28
Operátor not in Login Dra 025 Sip 001 Zub 011 Nov 098 Student Příjmení Jméno Věk Drábek Tomáš 25 Šípková Růžena 29 Zubatá Eva 23 Novák Bohumil 28 � Select * from Student where (Věk not in (24, 29, 28)) Login Příjmení Jméno Dra 025 Drábek Tomáš Zub 011 Zubatá Eva Věk 25 23
Operátor is Login Dra 025 Sip 001 Zub 011 Nov 098 � Select Student Příjmení Jméno Věk Drábek Tomáš NULL Šípková Růžena 29 Zubatá Eva NULL Novák Bohumil NULL * from Student where (Věk is null) Login Dra 025 Zub 011 Nov 098 Příjmení Drábek Zubatá Novák Jméno Věk Tomáš NULL Eva NULL Bohumil NULL
Operátor is not Login Dra 025 Sip 001 Zub 011 Nov 098 � Select Student Příjmení Jméno Věk Drábek Tomáš NULL Šípková Růžena 29 Zubatá Eva NULL Novák Bohumil NULL * from Student where (Věk is not null) Login Příjmení Jméno Věk Sip 001 Šípková Růžena 29
Operátor like Login Dra 025 Sip 001 Zub 011 Dol 098 Student Příjmení Jméno Věk Drábek Tomáš NULL Šípková Růžena 29 Zubatá Eva NULL Dolňák Bohumil NULL � Select * from Student where (Příjmení like “D%“) Login Příjmení Jméno Věk Dra 025 Drábek Tomáš NULL Dol 098 Dolňák Bohumil NULL
Operátor SUM Login Dra 025 Sip 001 Zub 011 Nov 098 � Select Student Příjmení Jméno Věk Drábek Tomáš 23 Šípková Růžena 29 Zubatá Eva NULL Novák Bohumil 13 SUM(Věk) as CelkovýVěk from Student CelkovýVěk 65
Operátor AVG Login Dra 025 Sip 001 Zub 011 Nov 098 � Select Student Příjmení Jméno Věk Drábek Tomáš 23 Šípková Růžena 29 Zubatá Eva NULL Novák Bohumil 13 AVG(Věk) as PrůměrnýVěk from Student PrůměrnýVěk 21, 6666666
Operátor Count Login Dra 025 Sip 001 Zub 011 Nov 098 Student Příjmení Jméno Věk Drábek Tomáš 23 Šípková Růžena 29 Zubatá Eva NULL Novák Bohumil 13 � Select Count(*) as Počet. Studentů from Student Počet. Studentů 4
Operátor Count Login Dra 025 Sip 001 Zub 011 Nov 098 Student Příjmení Jméno Věk Drábek Tomáš 23 Šípková Růžena 29 Zubatá Eva NULL Novák Bohumil 13 � Select Count(*) as Počet. Studentů from Student where (Věk > 20) Počet. Studentů 2
Operátor Min Login Dra 025 Sip 001 Zub 011 Nov 098 � Select Student Příjmení Jméno Věk Drábek Tomáš 23 Šípková Růžena 29 Zubatá Eva NULL Novák Bohumil 13 MIN(Věk) as Nejmladší from Student Nejmladší 13
Operátor Max Login Dra 025 Sip 001 Zub 011 Nov 098 � Select Student Příjmení Jméno Věk Drábek Tomáš 23 Šípková Růžena 29 Zubatá Eva NULL Novák Bohumil 13 MAX(Věk) as Nejstarší from Student Nejstarší 29
Operátor Group By Login Dra 025 Sip 001 Zub 011 Vid 021 Nov 098 Student Příjmení Jméno Věk Ročník Drábek Tomáš 25 1 Šípková Růžena 29 3 Zubatá Eva 23 2 Vidláková Kateřina 18 2 Novák Bohumil 28 1 � Select Ročník, Count(*) as Počet. Studentů from Student group by Ročník Počet. Studentů 1 2 2 2 3 1
Operátor Order By Login Dra 025 Sip 001 Zub 011 Vid 021 Nov 098 � Select Jméno Student Příjmení Jméno Věk Ročník Drábek Tomáš 25 1 Šípková Růžena 29 3 Zubatá Eva 23 2 Vidláková Kateřina 18 2 Drábek Bohumil 28 1 * from Student order by Příjmení, Login Dra 025 Dra 098 Sip 001 Vid 021 Zub 011 Příjmení Drábek Šípková Vidláková Zubatá Jméno Věk Ročník Bohumil 28 1 Tomáš 25 1 Růžena 29 3 Kateřina 18 2 Eva 23 2
Operátor Order By Login Dra 025 Sip 001 Zub 011 Vid 021 Nov 098 Student Příjmení Jméno Věk Ročník Drábek Tomáš 25 1 Šípková Růžena 29 3 Zubatá Eva 23 2 Vidláková Kateřina 18 2 Drábek Bohumil 28 1 � Select * from Student order by Příjmení desc, Jméno asc Login Zub 011 Vid 021 Sip 001 Dra 025 Dra 098 Příjmení Zubatá Vidláková Šípková Drábek Jméno Věk Ročník Eva 23 2 Kateřina 18 2 Růžena 29 3 Bohumil 28 1 Tomáš 25 1
Operátor Concat Login Dra 025 Zub 011 Nov 098 Sip 001 Vid 021 Student Příjmení Jméno Věk Ročník Drábek Tomáš 25 1 Zubatá Eva 23 2 Novák Bohumil 28 1 Šípková Růžena 18 2 Vidláková Kateřina 28 1 � Select login, (Jméno+‘ ‘+Příjmení) as CeléJméno from Student Login Dra 025 Zub 011 Nov 098 Sip 001 Vid 021 CeléJméno Tomáš Drábek Eva Zubatá Bohumil Novák Růžena Šípková Kateřina Vidláková
Operátor Distinct Login Dra 025 Zub 011 Nov 098 Sip 001 Vid 021 � Select Student Příjmení Jméno Věk Ročník Drábek Tomáš 25 1 Zubatá Eva 23 2 Novák Bohumil 28 1 Šípková Růžena 18 2 Vidláková Kateřina 28 1 distinct Ročník from Student Ročník 1 2
Logické operátory Login Dra 025 Zub 011 Nov 098 Sip 001 Vid 021 Student Příjmení Jméno Věk Ročník Drábek Tomáš 25 1 Zubatá Eva 23 2 Novák Bohumil 28 1 Šípková Růžena 18 2 Vidláková Kateřina 28 1 � Select * from Student where (Ročník=1) OR (Věk<23) Login Dra 098 Nov 098 Sip 001 Vid 021 Příjmení Drábek Novák Šípková Vidláková Jméno Věk Ročník Tomáš 25 1 Bohumil 28 1 Růžena 18 2 Kateřina 28 1
Join Student Login Příjmení Jméno Věk Id_Fakulta Dra 025 Drábek Tomáš 25 1 Zub 011 Zubatá Eva 23 2 Nov 098 Novák Bohumil 28 1 Sip 001 Šípková Růžena 18 2 Vid 021 Vidláková Kateřina 28 1 Fakulta Id_Fakulta Název 1 FEI 2 FBI 3 HGB � Select * from Student s JOIN Fakulta f ON s. id_fakulta=f. id_fakulta � Select * from, Student s. Faktura f WHERE s. id_fakulta=f. id_fakulta Login Dra 025 Zub 011 Nov 098 Sip 001 Vid 021 Příjmení Drábek Zubatá Novák Šípková Vidláková Jméno Věk Id_Fakulta Název Tomáš 25 1 FEI Eva 23 2 FBI Bohumil 28 1 FEI Růžena 18 2 FBI Kateřina 28 1 FEI
Další příkazy � LEFT (sloupec, počet_znaků) � RIGHT (sloupec, počet_znaků) � ROUND (sloupec, počet míst) � LOWER (sloupec) � UPPER (sloupec) � REVERSE (sloupec) � CHARINDEX (vyraz 1, vyraz 2 [, start_pozice]) � REPLACE (sloupec, co_nahradit, za_co) � SUBSTRING (sloupec, start, kolik_znaků) � LEN (sloupec)
Další příkazy � UNION � EXCEPT � INTERSECT � JOIN (INNER JOIN) � LEFT JOIN (LEFT OUTER JOIN) � RIGHT JOIN (RIGHT OUTER JOIN)
Příklady k procvičení Clen(rc, jmeno, prijmeni, email) Titul(cislo_titulu, nazev_cez, nazev_angl, delka) Pujceno(rc, cislo_titulu, datum) 1. 2. 3. 4. 5. Číslo titulu, který RČ člena, který si ale ne film 123 RČ člena, který si byl alespoň jednou půjčen dosud nebyl půjčen půjčil film číslo 123 půjčil alespoň jeden film, nepůjčil film 123
Příklady k procvičení Clen(rc, jmeno, prijmeni, email) Titul(cislo_titulu, nazev_cez, nazev_angl, delka) Pujceno(rc, cislo_titulu, datum) 6. 7. 8. 9. 10. RČ člena, který si půjčil jiný film než 123 RČ člena, který si půjčil pouze film 123 Najděte názvy filmů, které byly alespoň jednou půjčeny Najděte jména členů, kteří si dosud nepůjčili žádný film Najděte názvy filmů, které si půjčili členové s příjmením Novák
- Slides: 34