database management systems - hash.atspace.euhash.atspace.eu/dbms/cap2.pdf · utilizare interactiv...
Post on 05-Feb-2018
214 Views
Preview:
TRANSCRIPT
Database Management SystemsCap 2. Structured Query Language (1)
March 8, 2017
Database Management Systems March 8, 2017 1 / 86
1 Introducere
2 Declaratia SELECT
3 Relatii si operatori
4 Subquery-uri ın clauza WHERE
5 Subquery-uri ın FROM si SELECT
6 Context
7 Exercitii
Database Management Systems March 8, 2017 2 / 86
Introducere
1 Introducere
2 Declaratia SELECT
3 Relatii si operatori
4 Subquery-uri ın clauza WHERE
5 Subquery-uri ın FROM si SELECT
6 Context
7 Exercitii
Database Management Systems March 8, 2017 3 / 86
Introducere
SQL
“sequel”
suportat de toate sistemele comerciale majore
standardizat, sunt multe features adaugate de-a lungul timpului
ın principal standardul SQL 92
utilizare interactiva folosind un GUI (mysql-workbench), sauembedded ın programe (cea mai comuna folosire)
limbaj declarativ, bazat pe algebra relationala; se descrie ce se dorestede la DB, query-urile nu au nevoie sa descrie cum se obtin datele dinDB
query optimizer: preia ıntregul query si determina modul optim (celmai rapid) de executie a sa ın DB
Database Management Systems March 8, 2017 4 / 86
Introducere
Categorii
DDL
crearea tabelelor, drop table, crearea index-urilor si a view-urilor
DML
creare query-urilor (select), modificarea DB (insert, update, delete)
alte comenzi
indecsi, constraints, views, triggers, transactions, autorizari etc.
Database Management Systems March 8, 2017 5 / 86
Introducere
SELECT
(3) Select A1,A2, . . . ,An /* de fapt proiectia */
(1) From R1,R2, . . . ,Rm /* relatiile ce se compun */
(2) Where condition /* conditia, filtrarea */
πA1,...,An(σcondition(R1 × . . .× Rm))
limbajele de interogare relationale sunt compozitionale
Database Management Systems March 8, 2017 6 / 86
Declaratia SELECT
1 Introducere
2 Declaratia SELECT
3 Relatii si operatori
4 Subquery-uri ın clauza WHERE
5 Subquery-uri ın FROM si SELECT
6 Context
7 Exercitii
Database Management Systems March 8, 2017 7 / 86
Declaratia SELECT
Database schema
Relatiile sunt (cu cheile):
College(cName, state, enroll)
Student(sID, sName, GPA, sizeHS)
Apply(sID, cName, major, decision)
Database Management Systems March 8, 2017 8 / 86
Declaratia SELECT
Query 3
natural join (conditia e necesara) ; multiset (duplicate)Database Management Systems March 8, 2017 11 / 86
Declaratia SELECT
Query 4
eliminarea duplicatelor din multiset (ca ın alg. relationala)
Database Management Systems March 8, 2017 12 / 86
Declaratia SELECT
Query 5
aplicanti de la un liceu mic
Database Management Systems March 8, 2017 13 / 86
Declaratia SELECT
Query 6
numele colegiilor unde s-a aplicat
de ce nu functioneaza ?
Database Management Systems March 8, 2017 14 / 86
Declaratia SELECT
Query 7
numele colegiilor unde s-a aplicat
duplicatele se pot elimina (cum ?)
Database Management Systems March 8, 2017 15 / 86
Declaratia SELECT
Query 8
toate aplicarile (odinea e aleatoare; de ce exista duplicate?)Database Management Systems March 8, 2017 16 / 86
Declaratia SELECT
Query 10
mai multe criterii de sortare
Database Management Systems March 8, 2017 18 / 86
Declaratia SELECT
Query 11
cautare dupa un substring
Database Management Systems March 8, 2017 19 / 86
Declaratia SELECT
Query 12
select * (toate atributele)
Database Management Systems March 8, 2017 20 / 86
Declaratia SELECT
Query 13
cate tuple vor fi, si cum se numeste operatia (. . . join) ?
Database Management Systems March 8, 2017 21 / 86
Declaratia SELECT
Query 15
asignare de nume noului atribut (rename, ρ)
Database Management Systems March 8, 2017 23 / 86
Relatii si operatori
1 Introducere
2 Declaratia SELECT
3 Relatii si operatori
4 Subquery-uri ın clauza WHERE
5 Subquery-uri ın FROM si SELECT
6 Context
7 Exercitii
Database Management Systems March 8, 2017 24 / 86
Relatii si operatori
Relatii si operatori
1 relatii ın clauza FROM
numirea tabelelor
redenumirea lor ca variabile (rename, ρ)
2 operatori care produc seturi
Union (∪)
Intersect (∩)
Except (−)
Database Management Systems March 8, 2017 25 / 86
Relatii si operatori
Query 1
natural join, 19 tuple
Database Management Systems March 8, 2017 26 / 86
Relatii si operatori
Query 2
cresterea lizibilitatii prin redenumire (variabile)Database Management Systems March 8, 2017 27 / 86
Relatii si operatori
Query 3
perechile de studenti care au aceeasi nota
cum scoatem perechea cu ambii studenti identici?
Database Management Systems March 8, 2017 28 / 86
Relatii si operatori
Query 4
ce nu e totusi ın regula? cum rezolvam?
Database Management Systems March 8, 2017 29 / 86
Relatii si operatori
Query 6
reuniune, cu atribut redenumit
Database Management Systems March 8, 2017 31 / 86
Relatii si operatori
Query 8
MySQL nu are ’intersect’
Database Management Systems March 8, 2017 33 / 86
Relatii si operatori
Query 9
doi studenti au aplicat la ambele
Database Management Systems March 8, 2017 34 / 86
Relatii si operatori
Query 10
o alta varianta, numai ca va trebui sa eliminam duplicatele
Database Management Systems March 8, 2017 35 / 86
Relatii si operatori
Query 11
studenti care au aplicat la ’CS’ dar nu si la ’EE’
MySQL nu are operator ’except’
ce nu este ın regula ?Database Management Systems March 8, 2017 36 / 86
Subquery-uri ın clauza WHERE
1 Introducere
2 Declaratia SELECT
3 Relatii si operatori
4 Subquery-uri ın clauza WHERE
5 Subquery-uri ın FROM si SELECT
6 Context
7 Exercitii
Database Management Systems March 8, 2017 38 / 86
Subquery-uri ın clauza WHERE
Query 1
studentii care au aplicat la ’CS’ la vreun colegiu
Database Management Systems March 8, 2017 39 / 86
Subquery-uri ın clauza WHERE
Query 2
varianta cu natural join
de unde vin duplicatele ?
Database Management Systems March 8, 2017 40 / 86
Subquery-uri ın clauza WHERE
Query 3
numele studentilor care au aplicat la ’CS’
nu e un duplicat !Database Management Systems March 8, 2017 41 / 86
Subquery-uri ın clauza WHERE
Query 4
numele studentilor care au aplicat la ’CS’, cu ./
de unde vin duplicatele ? cum pot fi eliminate ?
Database Management Systems March 8, 2017 42 / 86
Subquery-uri ın clauza WHERE
Query 5
atentie unde punem ’distinct’ !
Database Management Systems March 8, 2017 43 / 86
Subquery-uri ın clauza WHERE
Query 6
difference, studenti care au aplicat la ’CS’ dar nu si la ’EE’
Database Management Systems March 8, 2017 44 / 86
Subquery-uri ın clauza WHERE
Query 7
colegiile pentru care exista un alt colegiu ın acelasi stat
constructie noua: correlated reference
ce mai trebuie adaugat?Database Management Systems March 8, 2017 45 / 86
Subquery-uri ın clauza WHERE
Query 8
sunt doar doua colegii pentru care exista un alt colegiu ın acelasi stat
Database Management Systems March 8, 2017 46 / 86
Subquery-uri ın clauza WHERE
Query 9
aflarea celei mai mari valori pentru enroll
Database Management Systems March 8, 2017 47 / 86
Subquery-uri ın clauza WHERE
Query 10
aflarea studentilor cu cea mai mare nota
de ce sunt totusi mai multe tuple?
Database Management Systems March 8, 2017 48 / 86
Subquery-uri ın clauza WHERE
Query 11
ıncercam acelasi lucru fara subquery
cum gasim maximul ?Database Management Systems March 8, 2017 49 / 86
Subquery-uri ın clauza WHERE
Query 12
gpa mai mare decat toate gpa-urile
Database Management Systems March 8, 2017 50 / 86
Subquery-uri ın clauza WHERE
Query 13
query ce nu presupune ca exista doar un singur student cu maxim gpa
Database Management Systems March 8, 2017 51 / 86
Subquery-uri ın clauza WHERE
Query 14
acelasi lucru, dar folosind clauza ’any’
Database Management Systems March 8, 2017 52 / 86
Subquery-uri ın clauza WHERE
Query 15
ce genereaza acest subquery ?
Database Management Systems March 8, 2017 53 / 86
Subquery-uri ın clauza WHERE
Query 16
forma echivalenta pentru studentii care vin de la licee mai numeroase
Database Management Systems March 8, 2017 54 / 86
Subquery-uri ın clauza WHERE
Query 17
am dori sa aflam studentii ce au aplicat la ’CS’ dar nu si la ’EE’
de ce nu este ın regula formularea ?
Database Management Systems March 8, 2017 55 / 86
Subquery-uri ın clauza WHERE
Query 18
doua variante corecte
Database Management Systems March 8, 2017 56 / 86
Subquery-uri ın FROM si SELECT
1 Introducere
2 Declaratia SELECT
3 Relatii si operatori
4 Subquery-uri ın clauza WHERE
5 Subquery-uri ın FROM si SELECT
6 Context
7 Exercitii
Database Management Systems March 8, 2017 57 / 86
Subquery-uri ın FROM si SELECT
Query 1
gasirea studentilor cu abateri de la GPA mai mari ca 1
Database Management Systems March 8, 2017 58 / 86
Subquery-uri ın FROM si SELECT
Query 2
calcularea abaterii ıntr-un sub-query
Database Management Systems March 8, 2017 59 / 86
Subquery-uri ın FROM si SELECT
Query 3
nota cea mai mare pe fiecare colegiu; cum scapam de duplicate ?
Database Management Systems March 8, 2017 60 / 86
Subquery-uri ın FROM si SELECT
Query 4
folosind subquery ın SELECT
Database Management Systems March 8, 2017 61 / 86
Subquery-uri ın FROM si SELECT
Query 5
’Error Code: 1242. Subquery returns more than 1 row’
ıntotdeauna subquery-ul din SELECT va trebui sa ıntoarca un singurrezultat !
Database Management Systems March 8, 2017 62 / 86
Context
1 Introducere
2 Declaratia SELECT
3 Relatii si operatori
4 Subquery-uri ın clauza WHERE
5 Subquery-uri ın FROM si SELECT
6 Context
7 Exercitii
Database Management Systems March 8, 2017 63 / 86
Context
Pornirea serverului MySQL
Porniti VirtualBox si adaugati Fedora22.vdi ca imagine
La ’Devices’, ’Shared Folder Settings. . . ’ adaugati un nou folder ınsectiunea ’Machine folders’. La ’Folder Path’ alegeti calea Windowspe care masina virtuala va pune fisierele, de exemplu ’D:’. La ’FolderName’ puneti ’winshare’. Asigurati-va ca optiunile ’Auto-mount’ si’Make Permanent’ sunt checked.
Porniti masina virtuala si deschideti un terminal.
Luati drepturi de root, folosind comanda ’sudo su -’. Nu exista parolade root
Porniti serviciul mysqld si inspectati starea:
[root@cbook ~]# systemctl start mysqld.service
[root@cbook ~]# systemctl status mysqld.service
...
Feb 29 14:48:17 cbook systemd[1]: Starting MySQL Server...
Feb 29 14:48:18 cbook systemd[1]: Started MySQL Server.
Database Management Systems March 8, 2017 64 / 86
Context
Crearea userului si a bazei de dateAbandonati prompt-ul ’root’ cu ’exit’, sau ’Ctrl-D’. NU LUCRATINICIODATA CA ROOT!Porniti consola de administrare MySQL, sub credentialele user-ului’user’. Parola este ’OpQw120-’:
[user@cbook]$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
...
mysql>
Creati DB-ul:
mysql> create database userdb;
Query OK, 1 row affected (0.00 sec)
Creati utilizatorul (va esua daca aveti deja unul creat):
> create user ’user’@’localhost’ identified by ’OpQw120-’;
Query OK, 0 rows affected (0.00 sec)
Database Management Systems March 8, 2017 65 / 86
Context
Crearea userului si a bazei de date
Acordati-i drepturi depline pe aceasta baza si comiteti modificarile cu’flush’:
mysql> grant all on userdb.* to ’user’@’localhost’;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> quit
Bye
Porniti MySQL Workbench
’Database’, ’Connect to Database’, schimbati utilizatorul la ’user’,apasati OK si introduceti aceeasi parola
Database Management Systems March 8, 2017 66 / 86
Context
Copierea fisierelor
Dintr-un terminal, copiati fisierele laboratorului ın directorul curent:
$ cp /media/sf_winshare/create.py .
$ cp /media/sf_winshare/seedb.py .
$ cp /media/sf_winshare/rating.sql .
Verificati conexiunea cu baza:
$ python seedb.py
Database version : 5.7.11
Script-ul ’create.py’ contine baza ca sa puteti rula exemplele de lacurs.
In SQL Workbench, ’File’, ’Open SQL script’ si alegeti ’rating.sql’.
Adaugati la ınceput ’use database userdb;’ si rulati script-ul (’Executeeverything’, primul ’thunderbolt’)
Database Management Systems March 8, 2017 67 / 86
Exercitii
1 Introducere
2 Declaratia SELECT
3 Relatii si operatori
4 Subquery-uri ın clauza WHERE
5 Subquery-uri ın FROM si SELECT
6 Context
7 Exercitii
Database Management Systems March 8, 2017 68 / 86
Exercitii
Exercitiul 1
Gasiti titlurile tuturor filmelor regizate de Steven Spielberg.
Database Management Systems March 8, 2017 69 / 86
Exercitii
Exercitiul 1 - raspuns
Raspuns:
E.T
Raiders of the Lost Ark
Database Management Systems March 8, 2017 70 / 86
Exercitii
Exercitiul 2
Gasiti toti anii care au un film care a primit un rating de 4 sau 5, sisortati-i ın ordine crescatoare.
Database Management Systems March 8, 2017 71 / 86
Exercitii
Exercitiul 2 - raspuns
Raspuns:
1937
1939
1981
2009
Database Management Systems March 8, 2017 72 / 86
Exercitii
Exercitiul 3
Gasiti titlurile tuturor filmelor care nu au rating.
Database Management Systems March 8, 2017 73 / 86
Exercitii
Exercitiul 3 - raspuns
Raspuns:
Star Wars
Titanic
Database Management Systems March 8, 2017 74 / 86
Exercitii
Exercitiul 4
Unii revieweri nu au furnizat o data a review-ului lor. Gasiti numeletuturor reviewer-urilor care au ratinguri asociate cu o valoare NULLpentru data.
Database Management Systems March 8, 2017 75 / 86
Exercitii
Exercitiul 4 - raspuns
Raspuns:
Chris Jackson
Daniel Lewis
Database Management Systems March 8, 2017 76 / 86
Exercitii
Exercitiul 5
Scrieti un query care ıntoarce ca rezultat rating-urile ıntr-o formacitibila: numele reviewer-ului, titlul filmului, stars, ratingDate. Deasemenea, sortati rezultatul, mai ıntai dupa numele reviewer-ului, apoidupa titlul filmului, iar apoi dupa numarul de stele.
Database Management Systems March 8, 2017 77 / 86
Exercitii
Exercitiul 5 - raspuns
Ashley White E.T. 3 2011-01-02Brittany Harris Raiders of the Lost Ark 2 2011-01-30Brittany Harris Raiders of the Lost Ark 4 2011-01-12Brittany Harris The Sound of Music 2 2011-01-20Chris Jackson E.T. 2 2011-01-22Chris Jackson Raiders of the Lost Ark 4 NULLChris Jackson The Sound of Music 3 2011-01-27Daniel Lewis Snow White 4 NULLElizabeth Thomas Avatar 3 2011-01-15Elizabeth Thomas Snow White 5 2011-01-19James Cameron Avatar 5 2011-01-20Mike Anderson Gone with the Wind 3 2011-01-09Sarah Martinez Gone with the Wind 2 2011-01-22Sarah Martinez Gone with the Wind 4 2011-01-27
Database Management Systems March 8, 2017 78 / 86
Exercitii
Exercitiul 6
Pentru toate cazurile ın care acelasi reviewer a notat un film de douaori si i-a dat un rating mai mare a doua oara, returnati numelereviewer-ului si titlul filmului.
Database Management Systems March 8, 2017 79 / 86
Exercitii
Exercitiul 6 - raspuns
Raspuns:
Sarah Martinez Gone with the Wind
Database Management Systems March 8, 2017 80 / 86
Exercitii
Exercitiul 7
Pentru fiecare film care are cel putin un rating, gasiti cel mai marenumar de stele pe care l-a primit filmul. Returnati titlul filmului sinumarul de stele. Sortati dupa titlul filmului.
Database Management Systems March 8, 2017 81 / 86
Exercitii
Exercitiul 7 - raspuns
Raspuns:
Avatar 5E.T. 3Gone with the Wind 4Raiders of the Lost Ark 4Snow White 5The Sound of Music 3
Database Management Systems March 8, 2017 82 / 86
Exercitii
Exercitiul 8
Pentru fiecare film, returnati titlul si ’rating spread’, adica diferentadintre cel mai mare si cel mai mic rating al filmului. Sortati dupaacest ’rating spread’ de la cel mai mare spre cel mai mic, apoi dupatitlul filmului.
Database Management Systems March 8, 2017 83 / 86
Exercitii
Exercitiul 8 - raspuns
Raspuns:
Avatar 2Gone with the Wind 2Raiders of the Lost Ark 2E.T. 1Snow White 1The Sound of Music 1
Database Management Systems March 8, 2017 84 / 86
Exercitii
Exercitiul 9
Gasiti diferenta dintre media rating-urilor filmelor lansate ınainte de1980 si media rating-urilor filmelor lansate dupa 1980. Asigurati-va caveti calcula media rating-ului pentru fiecare fim, apoi media acestormedii pentru filmele de dinainte de 1980 si pentru filmele dupa. Nucalculati doar media totala ınainte si dupa 1980.
Database Management Systems March 8, 2017 85 / 86
top related