SQL: Lezione 6 Nataliya Rassadko

Slides:



Advertisements
Presentazioni simili
Principale limitazione di AR e SQL-92: interrogazioni ricorsive
Advertisements

DBMS (DataBase Management System)
Sicurezza e concorrenza nelle basi di dati
Stored Procedure Function Trigger
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità D3 Sicurezza e concorrenza nelle basi di dati.
Structured Query Language (SQL) Presentazione 13.1 Informatica Generale (Prof. Luca A. Ludovico)
1 Comandi per la manipolazione dei dati. 2 Tipi di comandi INSERT UPDATE DELETE COMANDI COMANDI 2.
Principale limitazione di AR e SQL-92: interrogazioni ricorsive IMPIEGATO NOMENOMECAPO RossiVerdi NeriVerdi DeSio TucciDeSio DeLucaDeSio Lazio selezionare.
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
Elementi di PL/SQL.
SQL per la modifica di basi di dati. 29/01/2014SQL per la modifica di basi di dati2 Data Manipulation Language Introduciamo ora il Data Manipulation Language.
Laboratorio di Basi di Dati Introduzione ad Access 2ª Parte.
Access: Query semplici
Basi di dati Università Degli Studi Parthenope di Napoli
SQL Esercitazione per il corso “Basi di Dati” Gabriel Kuper
SQL: Lezione 7 Nataliya Rassadko
SQL: Lezione 2 Esercitazione per il corso Basi di Dati Gabriel Kuper Nataliya Rassadko
Nataliya Rassadko SQL: Lezione 9 Nataliya Rassadko
Nataliya Rassadko SQL: Lezione 5 Nataliya Rassadko
Esercitazione per il corso “Basi di Dati”
Nataliya Rassadko SQL: Lezione 8 Nataliya Rassadko
SQL Esercitazione per il corso “Basi di Dati” Gabriel Kuper
SQL: Lezione 10 Nataliya Rassadko
SQL Per la modifica di basi di dati
Esercizio zSi consideri la tabella Panorami, memorizzata in una base di dati Oracle 8i. Tale tabella contiene i seguenti campi: yId, di tipo NUMBER yNome,
SQL1 Modifica dei dati inserimento cancellazione modifica.
Esercitazione.
Duplicati Lalgebra relazionale non ammette duplicati, SQL li ammette. Quindi select Città from Persona where Cognome= Rossi estrae una lista di città in.
Manipolazione dei dati I comandi SQL che permettono di modificare il contenuto di una base di dati sono insertdeleteupdate insert ha la seguente sintassi:
Daniel Stoilov Tesi di Laurea
SELECT STATEMENT Clausola WHERE permette di limitare il numero di record da estrarre SELECT */ [DISTINCT] colonna/ espressione [alias],… FROM table [WHERE.
Viste. Cosè una vista? è possibile creare un subset logico di dati o una combinazione di dati una vista è una tabella logica basata su una tabella o su.
Basi di dati Claudia Raibulet
Corso di INFORMATICA anno scolastico 2009/10 Linguaggio SQL OPERATORI INSIEMISTICI IN SQL Siano due tabelle: GiochiSolitari(CodiceGioco, NomeGioco, PrezzoGioco)
Corso di INFORMATICA anno scolastico 2009/10 Linguaggio SQL IDENTIFICATORI di tabelle e attributi: stringhe di lunghezza max 18 caratteri, composte da.
SQL.
BIOINFO3 - Lezione 51 INSERIMENTO DEI DATI Visto come si creano le tabelle (sinora tristemente vuote), cominciamo ad occuparci di come riempirle con dei.
CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre Utenti e privilegi del database - 1 Root è lutente amministratore predefinito, ma.
Informatica II – Basi di Dati (07/08) – Parte 2 Gianluca Torta Dipartimento di Informatica dell’Università di Torino
Microsoft Access (parte 5) Introduzione alle basi di dati Scienze e tecniche psicologiche dello sviluppo e dell'educazione, laurea magistrale Anno accademico:
SEFOC – SETTORE FORMAZIONE CONTINUA DEL PERSONALE CORSO MYSQL AVANZATO ROBERTO PENNOLINO – CARMELO MASSIMO PRIOLO PALERMO – 07 | 06 | 2011.
Microsoft Access Query (II), filtri.
Modulo 5 DataBase ACCESS. Informazioni e Dati INFORMAZIONI vengono scambiate con linguaggio scritto o parlato DATI rappresentazione di informazioni in.
Esercitazione 7.
Le query in SQL Unità didattica sviluppata per l’ITIS “A. Volta” – Classe 5 sez. I Ing Domenico Liguori - Università degli studi di Napoli “Federico.
Pagine ASP parte 3 I data base Stefano Schacherl.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità D3 Sicurezza e concorrenza nelle basi di dati.
Microsoft Access Maschere (II).
Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le.
SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.
Interazione col DB Per interagire con una base dati da una pagina PHP occorre procedere come segue: Eseguire la connessione al DBMS MySQL in ascolto;
1 Basi di Dati S tructured Q uery L anguage Appunti Matteo Longhi.
SQL (III) Data Definition Language/ Data Manipulation Language.
MySQL Database Management System
Database Elaborato da: Claudio Ciavarella & Marco Salvati.
Nozione ed uso Operazioni eseguite automaticamente ogni volta che avviene un certo evento Uso: –Gestione di vincoli di integrità: Per fallimento Per modifica.
Raggruppamenti e target list scorretta select padre, avg(f.reddito), p.reddito from persone f join paternita on figlio = nome join persone p on padre =
Lezione 6 - SQL. Linguaggi per DB Per interagire con le basi di dati occorre un linguaggio Linguaggio SQL (Structured Query Language), linguaggio standardizzato.
Corso integrato di Matematica, Informatica e Statistica Informatica di base Linea 1 Daniela Besozzi Dipartimento di Informatica e Comunicazione Università.
Funzionalità del DBMS relazionale l Funzioni per –definizione della base di dati –inserimento / rimozione /aggiornamento di informazioni deve soddisfare.
Approfondimenti SQL.
Microsoft Access Filtri, query. Filtri Un filtro è una funzione che provoca la visualizzazione dei soli record contenenti dati che rispondono a un certo.
Linguaggio SQL prima parte Linguaggio SQL prima parte A. Lorenzi, E. Cavalli INFORMATICA PER SISTEMI INFORMATIVI AZIENDALI Copyright © Istituto Italiano.
Elementi di statistica con R e i database LEZIONE 2 Rocco De Marco rocco.demarco(a)an.ismar.cnr.it Ancona, 12 Aprile 2012.
Linguaggio SQL. Linguaggi per database La diffusione del modello relazionale ha favorito l’uso prevalente di linguaggi non procedurali: in questo modo.
SQLite. Introduzione a SQLite Oltre alla possibilità di memorizzare informazioni persistenti attraverso Preferences e files, Android mette a disposizione.
Il linguaggio SQL (Structured Query Language) è il linguaggio standard per creare, manipolare e interrogare database relazionali. SQL non è case-sensitive:
Esercizi SQL Group by. CREATE TABLE dipendente (codDip CHAR(8) NOT NULL UNIQUE PRIMARY KEY, cognome CHAR(60) NOT NULL, nome CHAR(60) NOT NULL, stipendio.
* R AMAN K AZHAMIAKIN O SCAR Z G IOVANNI D E ITT M. B UONARROTI, T RENTO A NDROID D EVELOPMENT P ERSISTENZA.
Transcript della presentazione:

SQL: Lezione 6 Nataliya Rassadko

Agenda Risposte alla provetta Modifiche di DB INSERT UPDATE DELETE Creazione di DB

Risposte alla Provetta: 1.a – 4 punti Visualizzarre gli studenti che sono nati prima di 1986 e frequentano il corso Databases iniziate nellanno Anche in algebra SELECT Students.Name FROM Students NATURAL JOIN Enrollment NATURAL JOIN Courses WHERE Title=Databases AND Year=2008 and Birthday< π Students.Name (σ Title=Databases AND Year=2008 and Birthday< (Students Enrollment Courses)) Se in SQL si usava prodotto cartesiano e nellalgebra si usava join, -1 Students (Sid, Name, Birthday) Courses (Cid, Title, Year) Enrollment (Sid, Cid, Enrollment, Grade) CoursePrerequisites(Cid, PCId, Credits)

Risposte alla Provetta: 1.b – 4 punti Visualizzarre gli studenti che sono iscritti a Settembre 2008 ai corsi con valore di 3 crediti. Anche in algebra SELECT Students.Name FROM Students NATURAL JOIN Enrollment NATURAL JOIN CoursePrerequisites WHERE Credits=3 AND EnrollmentDate>= and EnrollmentDate<= π Students.Name (σ Credits=3 AND EnrollmentDate>= and EnrollmentDate<= (Students Enrollment CoursePrerequisites)) Se in SQL si usava prodotto cartesiano e nellalgebra si usava join, -1 Students (Sid, Name, Birthday) Courses (Cid, Title, Year) Enrollment (Sid, Cid, Enrollment, Grade) CoursePrerequisites(Cid, PCId, Credits)

Risposte alla Provetta: 1.c – 2 punti Visualizzarre la media di voti per ciascuno corso iniziato nellanno SELECT Title, AVG(Grade) FROM Courses NATURAL JOIN Enrollment WHERE CId IN (SELECT Cid FROM Courses WHERE Year=2008) GROUP BY Cid SELECT Title, AVG(Grade) FROM (SELECT Title FROM Courses WHERE Year=2008) NATURAL JOIN Enrollment GROUP BY Cid Rappresentazione in algebra non esiste Niente HAVING! Students (Sid, Name, Birthday) Courses (Cid, Title, Year) Enrollment (Sid, Cid, Enrollment, Grade) CoursePrerequisites(Cid, PCId, Credits)

Risposte alla provetta 1.d – 2 punti WITH RECURSIVE IReq(ICId, IPCId) AS (SELECT CId, PId FROM CoursePrerequisites) UNION (SELECT IReq.ICId, CourcePrerequites.PId FROM IReq, CoursePrerequisites WHERE IReq.IPCId=CoursePrerequisites.CId) SELECT Title FROM IReq JOIN Courses ON IPCid=Cid WHERE Title=Databases AND Year=2008 Students (Sid, Name, Birthday) Courses (Cid, Title, Year) Enrollment (Sid, Cid, Enrollment, Grade) CoursePrerequisites(Cid, PCId, Credits) Relazione finale con attributi (Dependee, Dependant) Base ri recorsia Non *! Ci sono Credits! Step ri recorsia

Risposte alla Provetta: 2.a – 2 punti ABC NULL SELECT A FROM R WHERE B=C Risposta: Relazione vuota Condizione in clausola WHERE deve essere TRUE Quando NULL e parte di un espressione di comparazione, il risultato e UNKNOWN, e.g., 5 > x = UNKNOWN, se x = NULL

Risposte alla Provetta: 2.b – 6 punti AVG(A)=(2+5)/2 SUM(B)=6 COUNT(C)=2 Gli operatori ignorano i campi con valore NULL Anche COUNT(C) COUNT(*) avrebbe calcolato tutti i campi, anche con NULL ABC NULL

ER

Weak Entity Relazione è del tipo parte di Unit-of, Belongs-to, is-a Questo significa che entità non è unica Es: professore di università Chiave: profId, facoltàId universitàId Le chiave di queste entità si formano dalle chiave delle altre entità, con quali sono in relazione del tipo parte di Se le entità referenti sono anche deboli, le chiavi si formano dalle chiavi di entità referenti di entità referenti ecc.

Risposte alla Provetta: 3 – 5 punti Student(matricola, name, Uname) FK Uname to University.name University(name, address, rector) FK rector to Professor.id Professor(id, name, Fname, Uname) FK Fname to Faculty.Fname FK Uname to University.Uname Faculty(Fname, Uname) FK Uname to University.name

Risposte alla Provetta: 4 – 5 punti R(A, B, C, D, E) FD: AB->C, BC->D, E->D BCNF: per ogni FD X->Y Y X (non-trivial FD) X è superkey (determina tutta R) Nel nostro caso Tutti FD sono non-trivial - OK Che ne dite di superkey?

Test di chiusura AB + =ABCD BC + =BCD E + =ED Nessuna FD è superkey (devono essere tutti) ABE – candidato alla chiave Quindi, R(ABCDE) non è in BCNF Dobbiamo normalizzarla BCD, ABC, ABE ED, ABC, ABE

Normalizzazione 1 ABCDE ABCD ABE AB->C R si decompone in R 1 e R 2 R 1 =X + R 2 =R-(X + -X) BCDABC Chiave, quindi normalizzata BC->D E->D Non sono superchiavi BC->D Mai ABC a questo punto! R-X +R-X + XX +-XX +-X R2R2 R1R1 R

Normalizzazione 2 ABCDE BCD ABCE BC->D ABCABE AB->C E->D Non sono superchiavi AB->C

Normalizzazione 3 ABCDE ED ABCE E->D ABEABC AB->C BC->D Non sono superchiavi AB->C

Statistics 15,5% hanno ricevuto piu di 25 62,1% hanno ricevuti tra 18 e 25 22,4% hanno ricevuti meno di 18

Collegamento a PostgreSQL Command line psql -U user01 -d db01 -h ares.science.unitn.it user01 puo essere sostituito da user02, user03, …, user99, user100 Stessa cosa per db01 Ci bisognerà di inserire password – stessa cosa Visualizzare tutte le tabelle SET search_path TO imdb,public Query Nomi di tabelle e attributi vanno, e.g., Movie Prima di nomi di tabelle va imdb., e.g., imdb.Movie Tutti nomi sono case sensitive, e.g., tabella movie non esiste Query finiscono con simbolo ;

TORNIAMO ALLA LEZIONE INSERT UPDATE DELETE

INSERT Il comando di inserimento di righe nella base di dati presenta due sintassi alternative: INSERT INTO Nome Tabella [lista attributi] VALUES(valore1, valore2,...) INSERT INTO Nome Tabella [lista attributi] VALUES(select SQL)

INSERT Le colonne (o campi) di destinazione dei valori possono essere o meno dichiarate nel comando. Se non vengono dichiarate, è necessario passare al comando un valore per ogni colonna della tabella, rispettando rigorosamente l'ordine delle colonne stesse.

INSERT E possibile indicare le sole colonne per le quali vengono passati dei valori, purché vengano inseriti comunque i valori per tutte le colonne not null (che non possono essere nulle) della tabella. INSERT INTO Nome Tabella (col1, col2,..) VALUES (valore1, valore2,...)

INSERT Il comando INSERT opera inserendo in tabella una sola riga per volta. È possibile inserire più di una riga "in modo automatico" passando al comando INSERT una serie di righe (o tuple) risultanti da un comando di SELECT, purché tali righe siano compatibili con le colonne della tabella su cui si inseriscono i dati.

ESERCIZIO Aggiungere, alla tabella Movie, il film La ricerca della felicità del regista Gabriele Muccino (Medusa Films, 117 minuti) Movie(title,year,length,inColor,studioName,producerC#) StarsIn(movieTitle,movieYear,starName) MovieStar(name,address,gender,birthdate) MovieExec(name,address,cert#,netWorth) Studio(name,address,presC#) INSERT INTO "Movie ("title","year","length","inColor","studioName","producerC#) VALUES (La ricerca della felicità,2006,117, true,Medusa,x);<- dato dallinserimento di GM in MovieExec

ESERCIZIO Aggiungere, alla tabella Studio, i nomi degli studi cinematografici presenti nella tabella Movie (StudioName) ma non nella tabella Studio Movie(title,year,length,inColor,studioName,producerC#) StarsIn(movieTitle,movieYear,starName) MovieStar(name,address,gender,birthdate) MovieExec(name,address,cert#,netWorth) Studio(name,address,presC#) INSERT INTO Studio" (Name) SELECT DISTINCT studioName FROM Movie WHERE studioName NOT IN (SELECT name FROM imdb.Studio);

INSERT Ciascuna forma del comando possiede uno specifico campo di applicazione La prima è quella tipicamente usata allinterno di programmi per riempire una tabella con i dati forniti direttamente dagli utenti La seconda forma permette invece di inserire dati di una tabella a partire da altre informazioni presenti nella base di dati

UPDATE Il comando UPDATE permette di aggiornare uno o più attributi delle righe di una specifica tabella che soddisfano unevantuale condizione. UPDATE NomeTabella SET(valore1, valore2,...) WHERE(condizione)

UPDATE Se la condizione non compare, come al solito si suppone di default un valore vero e si esegue la modifica su tutte le righe. Il nuovo valore cui viene posto lattributo può essere: Il risultato della valutazione di unespressione sugli attributi della tabella il risultato di una generica interrogazione SQL il valore nullo il valore di default per il dominio

ESERCIZIO Aumentare del 10% il networth dei produttori che hanno prodotto almeno 10 film in bianco e nero Movie(title,year,length,inColor,studioName,producerC#) StarsIn(movieTitle,movieYear,starName) MovieStar(name,address,gender,birthdate) MovieExec(name,address,cert#,netWorth) Studio(name,address,presC#) UPDATE MovieExec set netWorth=netWorth*1.1 WHERE cert# in (select producerC# from Movie where inColor=false Group by producerC# Having count(*)>=10)

UPDATE E possibile modificare più colonne contermporaneamente in una riga mediante l'uso della virgola per separare i campi UPDATE NomeTabella SET Nome_Colonna1 = Nuovo_Valore1, Nome_Colonna2 = Nuovo_Valore2, Nome_Colonna3 = Nuovo_Valore3 WHERE (condizione)

ESERCIZIO Aggiunger il prefisso Pres. ai nomi di produttori che sono presidenti di uno Studio: UPDATE MovieExec SET name='Pres. '|| name WHERE cert# IN (SELECT presC# FROM Studio); Movie(title,year,length,inColor,studioName,producerC#) StarsIn(movieTitle,movieYear,starName) MovieStar(name,address,gender,birthdate) MovieExec(name,address,cert#,netWorth) Studio(name,address,presC#)

DELETE Il comando DELETE elimina righe dalle tabelle della base di dati seguendo la semplice sintassi: DELETE FROM NomeTabella WHERE (condizione)

DELETE Quando la condizione argomento della clausola where non viene specificata, il comando cancella tutte le righe della tabella. DELETE FROM Nome_Tabella DELETE * FROM Nome_Tabella

ESERCIZIO Eliminare i riferimenti al film 'City by the Sea prodotto nellanno 2002 a cui ha partecipato lattore Rober De Niro (De Niro, Robert). DELETE FROM StarsIn WHERE movieTitle='City by the Sea' AND movieYear=2002 AND starName =De Niro, Robert; DELETE FROM Movie WHERE title='City by the Sea' AND year=2002 Movie(title,year,length,inColor,studioName,producerC#) StarsIn(movieTitle,movieYear,starName) MovieStar(name,address,gender,birthdate) MovieExec(name,address,cert#,netWorth) Studio(name,address,presC#)

DDL (Data Definion Language) DML è finito SELECT, INSERT, UPDATE, DELETE DDL Domini elementari Definizione di domini Valori predefiniti di domini Definizione di schema Definizione di tabella Intra-relational constraints Inter-relational constraints Modificazioni delle tabelle esistenti

Domini elementari 1/2 Character [varying][(Length)][character set CharsetName] Character(20) character set Greek Character varying, varchar Bit [varying][(length)] bit(5) – stringa di 5 bit varbit(100) – stringa di massimo 100 bit Numeric[(precision[, scale])] numeric(5,2): [ ,999.99] Default scale = 0, default precision dipende dalla implementazione (e.g., 10 in mySQL, 18 in MSQ SQL) Decimal[(precision[, scale])] Diverso da numeric: precision di decimal è minimo richiesto integer smallint

Domini elementari 2/2 Float[(Precision)] Double precision Real Date Data, mese, anno Time[(Precision)][with time zone] Ore, minute, seconde Precision=6 microsecondi With time zone: timezone_hour, timezone_minute 21:03:04+1:00 = 20:03:04+0:00 Timestamp [(Precision)][with time zone] Dallanno ai secondi Interval FirstUnitOfTime [LastUnitOfTime] Floating point rappresentazione: mantissa+esponenta, e.g., 0.17E16 = 1.7X10 15

Lavoriamo con Tempo SELECT CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP; SELECT now(); SELECT EXTRACT(YEAR FROM CURRENT_DATE); Lo stesso con MONTH, DAY Lo stesso con FROM CURRENT_TIME (con HOUR, MINUTE, SECOND) Lo stesso con FROM CURRENT_TIMESTAMP (con tutto) SELECT date_part('day', TIMESTAMP ' :38:40'); Risultato = 16

Altri domini Boolean BLOB OLE Text Memo Long Smalldatetime Bigint Tinyint

Definione di Schema CREATE SCHEMA [SchemaName][[authorization]Authorization]{Sche maElementDefinions} Tabelle View Assertions ecc

DEFINIZIONE TABELLE Una tabella SQL è costituita da una collezione ordinata di attributi e da un insieme di vincoli (eventualmente vuoto). CREATE TABLE NomeTable { NomeAttributo Dominio [ValoreDiDefault][Vincoli] NomeAttributo Dominio [ValoreDiDefault][Vincoli] NomeAttributo Dominio [ValoreDiDefault][Vincoli] … AltriVincoli }

DEFINIZIONE TABELLE Ogni tabella, viene definita associandole un nome ed elencando gli attributi che ne compongono lo schema. Per ogni attributo si definisce un nome, un dominio ed eventualmente un insieme di vincoli che devono essere rispettati dai valori dellattributo. Dopo aver definito gli attributi, si possono definire i vincoli che coinvolgono più attributi della tabella. Una tabella è inizialmente vuota e il creatore possiede tutti i privilegi sulla tabella.

ESERCIZIO Ricreare la tabella Movie nel db di lavoro work. CREATE TABLE Movie (title VARCHAR(255), year INT2, length INT2, inColor BOOL, studioName VARCHAR(255), producerC# VARCHAR(255));