database management systems - hash.atspace.euhash.atspace.eu/dbms/cap2.pdf · utilizare interactiv...

86
Database Management Systems Cap 2. Structured Query Language (1) March 8, 2017 Database Management Systems March 8, 2017 1 / 86

Upload: vutram

Post on 05-Feb-2018

213 views

Category:

Documents


0 download

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 1

query simpluDatabase Management Systems March 8, 2017 9 / 86

Declaratia SELECT

Query 2

query fara coloana gpaDatabase Management Systems March 8, 2017 10 / 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 9

ordine descrescatoare

Database Management Systems March 8, 2017 17 / 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 14

folosirea calculelor

Database Management Systems March 8, 2017 22 / 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 5

toate cele 8 tupleDatabase Management Systems March 8, 2017 30 / 86

Relatii si operatori

Query 6

reuniune, cu atribut redenumit

Database Management Systems March 8, 2017 31 / 86

Relatii si operatori

Query 7

cu tot cu duplicate

Database Management Systems March 8, 2017 32 / 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

Relatii si operatori

Query 12

doar doi sudenti

Database Management Systems March 8, 2017 37 / 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

Exercitii

Exercitiul 9 - raspuns

Raspuns:

0.0555555555556

Database Management Systems March 8, 2017 86 / 86