Basi Di Dati 05

Embed Size (px)

Citation preview

  • 1. BASI DI DATI ESERCITAZIONI -05- MSSQL - SQL Email: [email protected] Universit di Trento Corso di Laurea in Ingegneria dellInformazione e dellOrganizzazione

2. Subquery

  • Le subquery permettono di esprimere dellecondizioni basate sul risultato di interrogazioni

3. Subquery

  • selezionare tutti i dati relativi ai cd di lagabue (senza join)
    • SELECT*
    • FROMtCd
    • WHERE
    • (cd_cantante_id =
      • (
      • SELECTcantante_id
      • FROMtCantante
      • WHEREcantante_nome = 'ligabue')
      • )

4. Subquery

  • inserire dati di Ella con
    • genere di tipo "soul"
    • INSERT INTO tCantante (cantante_genere_id, cantante_nome, cantante_sitointernet, cantante_descrizione)
    • select genere_id, 'Ella', 'www.ella.it', 'Ella Fitzgerald' from tGenere wheregenere_tipo='soul '

5. Subquery

  • inserire dati di Ella con
    • genere di tipo "soul
    • label con di id 2
  • INSERT INTO tCantante (
  • cantanti_nome, cantanti_sitointernet,
  • cantanti_descrizione, cantanti_genere_id )
  • SELECT ella ', 'www. ella .it',
  • ( SELECT label_nome FROM tLabel WHERE Label_id = '2' ),
  • ( SELECT generi_id FROM tGenere WHERE generi_tipo = 'soul' ) ;

6. Stored procedure: Vantaggi

  • Evitareal client diriscrivere querycomplesse offrendo la possibilit di richiamare una procedura archiviata all'interno del database.
  • Quantitinformazioni scambiatetra client e server sarminorea tutto vantaggio delle prestazioni.
  • 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.
  • Possibilit di assegnare permessi di modifica o di lettura limitati sulle tabelle concedendo solo permesso di eseguire le sp.

7. Stored procedure: Svantaggi

  • Le stored procedureaumentano il carico di lavoro per il server SLQ .
  • A volte non si pu utilizzare il linguaggio che si vorrebbe utilizzare, perch il DBMS non lo supporta.
  • La logica del programma viene spostata sul server SQL; (incompatibilit con il modello logico di applicativi a tre livelli) (dati|logica|applicativodati-procedure|logica|applicativo)

8. Una view..

  • SELECTOrderID, OrderDate, RequiredDate, ShippedDate
  • FROMdbo.Orders
  • WHERE(CustomerID = N'VINET')

9. ..una stored procedure!

  • set ANSI_NULLS ON
  • set QUOTED_IDENTIFIER ON
  • GO
  • ALTER PROCEDURE[dbo].[CustOrdersOrders] @CustomerIDnchar(5 )
  • AS
  • SELECTOrderID, OrderDate,RequiredDate, ShippedDate
  • FROMOrders
  • WHERECustomerID = @CustomerID
  • ORDER BYOrderID

10. (Per eseguirla dentro SQLServer)

  • USE [Northwind]
  • GO
  • DECLARE @return_value int
  • EXEC @return_value = [dbo].[CustOrdersOrders]
  • @CustomerID = N'VINET'
  • SELECT 'Return Value' = @return_value
  • GO

11. Sp 1

  • ALTER PROCEDURE[dbo].[CustOrdersOrders] @CustomerIDnchar(5 )
  • AS
  • SELECTOrderID, OrderDate,
  • RequiredDate=CONVERT(datetime, RequiredDate + 1),
  • ShippedDate
  • FROMOrders
  • WHERECustomerID = @CustomerID
  • ORDER BYOrderID

12. Sp 2

  • ALTER PROCEDURE[dbo].[CustOrdersOrders] @CustomerIDnchar(5 )
  • AS
  • SELECTOrderID, OrderDate,
  • RequiredDate AS RequiredDateORIGINALE,
  • RequiredDate=DATENAME(mm,CONVERT(datetime, RequiredDate + 1)),
  • ShippedDate
  • FROMOrders
  • WHERECustomerID = @CustomerID
  • ORDER BYOrderID

13. Sp 3

  • ALTER PROCEDURE[dbo].[CustOrdersOrders] @CustomerIDnchar(5 )
  • AS
  • SET ROWCOUNT 2
  • SELECTOrderID, OrderDate,
  • RequiredDate AS RequiredDateORIGINALE,
  • RequiredDate=DATENAME(mm,CONVERT(datetime, RequiredDate + 1)),
  • ShippedDate
  • FROMOrders
  • WHERECustomerID = @CustomerID
  • ORDER BYOrderID

14. Sp 4

  • ALTER PROCEDURE[dbo].[CustOrdersOrders] @CustomerIDnchar(5 )
  • AS
  • SET ROWCOUNT 2
  • SELECTOrderID, OrderDate,
  • RequiredDat e ,
  • RequiredDate MODIF =DATENAME(mm,CONVERT(datetime, RequiredDate + 1)),
  • ShippedDate
  • FROMOrders
  • WHERECustomerID = @CustomerID
  • ORDER BYOrderID