Basi Di Dati 05

1,306 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,306
On SlideShare
0
From Embeds
0
Number of Embeds
37
Actions
Shares
0
Downloads
89
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Basi Di Dati 05

  1. 1. BASI DI DATI ESERCITAZIONI -05- MSSQL - SQL Email: francesco.magagnino@ewave.it Università di Trento Corso di Laurea in Ingegneria dell’Informazione e dell’Organizzazione
  2. 2. Subquery <ul><li>Le subquery permettono di esprimere delle condizioni basate sul risultato di interrogazioni </li></ul>
  3. 3. Subquery <ul><li>selezionare tutti i dati relativi ai cd di lagabue (senza join) </li></ul><ul><ul><li>SELECT * </li></ul></ul><ul><ul><li>FROM tCd </li></ul></ul><ul><ul><li>WHERE </li></ul></ul><ul><ul><li>(cd_cantante_id = </li></ul></ul><ul><ul><ul><li>( </li></ul></ul></ul><ul><ul><ul><li>SELECT cantante_id </li></ul></ul></ul><ul><ul><ul><li>FROM tCantante </li></ul></ul></ul><ul><ul><ul><li>WHERE cantante_nome = 'ligabue') </li></ul></ul></ul><ul><ul><ul><li>) </li></ul></ul></ul>
  4. 4. Subquery <ul><li>inserire dati di Ella con </li></ul><ul><ul><li>genere di tipo &quot;soul&quot; </li></ul></ul><ul><ul><li>INSERT INTO tCantante (cantante_genere_id, cantante_nome, cantante_sitointernet, cantante_descrizione) </li></ul></ul><ul><ul><li>select genere_id, 'Ella', 'www.ella.it', 'Ella Fitzgerald' from tGenere where genere_tipo = 'soul ' </li></ul></ul>
  5. 5. Subquery <ul><li>inserire dati di Ella con </li></ul><ul><ul><li>genere di tipo &quot;soul“ </li></ul></ul><ul><ul><li>label con di id 2 </li></ul></ul><ul><li>INSERT INTO tCantante ( </li></ul><ul><li>cantanti_nome, cantanti_sitointernet, </li></ul><ul><li>cantanti_descrizione, cantanti_genere_id ) </li></ul><ul><li>SELECT ‘ ella ', 'www. ella .it', </li></ul><ul><li>( SELECT label_nome FROM tLabel WHERE Label_id = '2' ), </li></ul><ul><li>( SELECT generi_id FROM tGenere WHERE generi_tipo = 'soul' ) ; </li></ul>
  6. 6. Stored procedure: Vantaggi <ul><li>Evitare al client di riscrivere query complesse offrendo la possibilità di richiamare una procedura archiviata all'interno del database. </li></ul><ul><li>Quantità informazioni scambiate tra client e server sarà minore a tutto vantaggio delle prestazioni. </li></ul><ul><li>Mantenere librerie di funzioni da utilizzare all'interno del database stesso. Potenzialmente si potrebbe eseguire ogni operazione richiamando una diversa procedura, senza conoscere la struttura di un database magari complesso, o avendone una conoscenza limitata. </li></ul><ul><li>Possibilità di assegnare permessi di modifica o di lettura limitati sulle tabelle concedendo solo permesso di eseguire le sp. </li></ul>
  7. 7. Stored procedure: Svantaggi <ul><li>Le stored procedure aumentano il carico di lavoro per il server SLQ . </li></ul><ul><li>A volte non si può utilizzare il linguaggio che si vorrebbe utilizzare, perché il DBMS non lo supporta. </li></ul><ul><li>La logica del programma viene spostata sul server SQL; (incompatibilità con il modello logico di applicativi a tre livelli) (dati|logica|applicativo  dati-procedure|logica|applicativo) </li></ul>
  8. 8. Una view.. <ul><li>SELECT OrderID, OrderDate, RequiredDate, ShippedDate </li></ul><ul><li>FROM dbo.Orders </li></ul><ul><li>WHERE (CustomerID = N'VINET') </li></ul>
  9. 9. ..una stored procedure! <ul><li>set ANSI_NULLS ON </li></ul><ul><li>set QUOTED_IDENTIFIER ON </li></ul><ul><li>GO </li></ul><ul><li>ALTER PROCEDURE [dbo].[CustOrdersOrders] @CustomerID nchar(5 ) </li></ul><ul><li>AS </li></ul><ul><li>SELECT OrderID, OrderDate,RequiredDate, ShippedDate </li></ul><ul><li>FROM Orders </li></ul><ul><li>WHERE CustomerID = @CustomerID </li></ul><ul><li>ORDER BY OrderID </li></ul>
  10. 10. (Per eseguirla dentro SQLServer) <ul><li>USE [Northwind] </li></ul><ul><li>GO </li></ul><ul><li>DECLARE @return_value int </li></ul><ul><li>EXEC @return_value = [dbo].[CustOrdersOrders] </li></ul><ul><li>@CustomerID = N'VINET' </li></ul><ul><li>SELECT 'Return Value' = @return_value </li></ul><ul><li>GO </li></ul>
  11. 11. Sp 1 <ul><li>ALTER PROCEDURE [dbo].[CustOrdersOrders] @CustomerID nchar(5 ) </li></ul><ul><li>AS </li></ul><ul><li>SELECT OrderID, OrderDate, </li></ul><ul><li>RequiredDate=CONVERT(datetime, RequiredDate + 1), </li></ul><ul><li>ShippedDate </li></ul><ul><li>FROM Orders </li></ul><ul><li>WHERE CustomerID = @CustomerID </li></ul><ul><li>ORDER BY OrderID </li></ul>
  12. 12. Sp 2 <ul><li>ALTER PROCEDURE [dbo].[CustOrdersOrders] @CustomerID nchar(5 ) </li></ul><ul><li>AS </li></ul><ul><li>SELECT OrderID, OrderDate, </li></ul><ul><li>RequiredDate AS RequiredDateORIGINALE, </li></ul><ul><li>RequiredDate=DATENAME(mm,CONVERT(datetime, RequiredDate + 1)), </li></ul><ul><li>ShippedDate </li></ul><ul><li>FROM Orders </li></ul><ul><li>WHERE CustomerID = @CustomerID </li></ul><ul><li>ORDER BY OrderID </li></ul>
  13. 13. Sp 3 <ul><li>ALTER PROCEDURE [dbo].[CustOrdersOrders] @CustomerID nchar(5 ) </li></ul><ul><li>AS </li></ul><ul><li>SET ROWCOUNT 2 </li></ul><ul><li>SELECT OrderID, OrderDate, </li></ul><ul><li>RequiredDate AS RequiredDateORIGINALE, </li></ul><ul><li>RequiredDate=DATENAME(mm,CONVERT(datetime, RequiredDate + 1)), </li></ul><ul><li>ShippedDate </li></ul><ul><li>FROM Orders </li></ul><ul><li>WHERE CustomerID = @CustomerID </li></ul><ul><li>ORDER BY OrderID </li></ul>
  14. 14. Sp 4 <ul><li>ALTER PROCEDURE [dbo].[CustOrdersOrders] @CustomerID nchar(5 ) </li></ul><ul><li>AS </li></ul><ul><li>SET ROWCOUNT 2 </li></ul><ul><li>SELECT OrderID, OrderDate, </li></ul><ul><li>RequiredDat e , </li></ul><ul><li>RequiredDate MODIF =DATENAME(mm,CONVERT(datetime, RequiredDate + 1)), </li></ul><ul><li>ShippedDate </li></ul><ul><li>FROM Orders </li></ul><ul><li>WHERE CustomerID = @CustomerID </li></ul><ul><li>ORDER BY OrderID </li></ul>

×