SQLShack (Italiano)

0 Comments

Questo articolo fornirà un tuffo profondo nell’operatore SQL Union, descrivendone i molti usi insieme ad esempi ed esplorando alcune domande comuni come le differenze tra Union vs Union All.

Per soddisfare i requisiti di dati reali, potremmo aver bisogno di combinare set di risultati da più origini dati in modo da poter eseguire l’analisi dei dati o creare nuovi set di dati. I set di dati possono essere identici ma ci sono possibilità che facciano riferimento a tabelle diverse., C’è un modo per combinare i dati in una singola query? Gli operatori impostati sono un’opzione praticabile? Iniziamo e vediamo come alcuni degli operatori esistenti possono essere utilizzati per aiutarci ad affrontare queste sfide comuni.,n vs Unione

  • Operatore SQL Sintassi
  • Come utilizzare SQL semplice Unione della clausola di istruzione select
  • utilizzo di SQL Unione con le query con la clausola WHERE
  • Come utilizzare la clausola SELECT INTO con Union
  • utilizzo di SQL Unione con la query che hanno una clausola WHERE e order by
  • Come utilizzare Unione di SQL e SQL Pivot
  • utilizzo di SQL Unione con il GRUPPO e HAVING
  • Operatori

    un operatore è un simbolo o una parola chiave che definisce un’azione che viene eseguita su una o più espressioni nell’istruzione Select.,

    Set Operatore

    andiamo nel dettaglio di Operatori in SQL Server, e il loro utilizzo

    Ci sono quattro principali Operatori in SQL Server:

    1. Unione
    2. Unione
    3. SALVO
    4. si INTERSECANO

    Unione

    L’operatore Union combina i risultati di due o più query in un distinto set unico risultato che include tutte le righe che appartengono a tutte le query di Unione. In questa operazione, combina altre due query e rimuove i duplicati.,

    Ad esempio, la tabella ‘A’ ha 1,2 e 3 e la tabella ‘B’ ha 3,4,5.,

    UNIONE
    SELEZIONARE 2
    UNIONE
    SELEZIONARE 3
    )
    UNIONE
    (
    SELEZIONARE 3
    UNIONE
    SELEZIONARE 4
    UNIONE
    SELEZIONARE 5
    );

    il risultato, si può vedere un distinto elenco dei record da due set di risultati

    Unione

    Quando si guarda Unione vs Unione di Tutti noi scoprire che sono molto simili, ma hanno alcune differenze importanti da un dei risultati di performance in prospettiva.,

    L’operatore Union combina i risultati di due o più query in un unico set di risultati che include tutte le righe che appartengono a tutte le query nell’Unione. In termini semplici, combina i due o più set di righe e mantiene i duplicati.

    Ad esempio, la tabella ‘A’ ha 1,2 e 3 e la tabella ‘B’ ha 3,4,5.,iv>

    7
    8
    9
    10
    11
    12
    13
    14
    15
    (
    SELEZIONARE 1 ID
    UNIONE
    SELEZIONARE 2
    UNIONE
    SELEZIONARE 3
    )
    UNIONE
    (
    SELEZIONARE 3
    UNIONE
    SELEZIONARE 4
    UNIONE
    SELEZIONARE 5
    );

    In uscita, è possibile vedere tutte le righe che includono la ripetizione dei record.,>4

    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    (
    SELEZIONARE 1 ID
    UNIONE
    SELEZIONARE 2
    UNIONE
    SELEZIONARE 3
    )
    si intersecano
    (
    SELEZIONARE 3
    UNIONE
    SELEZIONARE 4
    UNIONE
    SELEZIONARE 5
    );

    La riga ‘3’ è comune tra le due serie di risultati.,

    EXCEPT

    L’operatore EXCEPT elenca le righe nella prima che non sono nella seconda.,/div>

    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    (
    SELEZIONARE 1
    UNIONE
    SELEZIONARE 2
    UNIONE
    SELEZIONARE 3
    )
    SALVO
    (
    SELEZIONARE 3 B
    UNIONE
    SELEZIONARE 4
    UNIONE
    SELEZIONARE 5
    );

    Elencare il nome-il comune di righe dal primo set.,

    Nota: È molto facile visualizzare un operatore impostato utilizzando un diagramma di Venn, in cui ciascuna delle tabelle è rappresentata da forme intersecanti. Le intersezioni delle forme, in cui le tabelle si sovrappongono, sono le righe in cui viene soddisfatta una condizione.,olumns che sono definiti in ogni query deve avere lo stesso ordine

  • la Successiva istruzione SQL set di righe deve corrispondere al tipo di dati della prima query
  • le Parentesi sono permesso di costruire altri operatori nella stessa istruzione
  • e ‘ possibile avere una clausola ORDER BY, ma che dovrebbe essere l’ultima istruzione di SQL
  • clausole GROUP BY e HAVING può essere applicato a singoli query
  • Nota:

    1. Tutti questi operatori di rimuovere i duplicati, tranne che per l’operatore Union All
    2. L’uscita nomi di colonna sono indicati dalla prima query che ho.,e. quando eseguiamo le istruzioni SELECT con uno qualsiasi degli operatori Set e il set di risultati di ciascuna query può avere nomi di colonne diversi, quindi il risultato dell’istruzione SELECT fa riferimento ai nomi delle colonne dalla prima query nell’operazione.
    3. SQL JOIN è più spesso utilizzato combina colonne da più tabelle correlate mentre SET Operators combina righe da più tabelle.,
    4. Quando i tipi di espressione sono uguali ma differiscono per precisione, scala o lunghezza, il risultato viene determinato in base alle stesse regole per combinare le espressioni

    Esempi:

    Le seguenti query T-SQL vengono preparate ed eseguite sul database Adventureworks2014. È possibile scaricare il database di esempio AdventireWorks2014 qui

    1. Come utilizzare la clausola simple SQL Union nell’istruzione select

      In questo esempio, il set di risultati include un set distinto di righe dal primo set e dal secondo set.,L’esempio seguente si basa sulla regola 1 ,3 & 5.,

      SELEZIONARE 1
      UNIONE
      SELEZIONARE 2
      UNIONE
      SELEZIONARE 3
      )
      UNIONE
      (
      SELEZIONARE 3 B
      UNIONE
      SELEZIONARE 4
      UNIONE
      SELEZIONARE 5
      )
      UNIONE
      (
      SELEZIONARE 8 c
      UNIONE
      SELEZIONARE 9
      UNIONE
      SELEZIONARE 1
      )
      ) T;

      L’uscita è la combinazione di Unione e l’Unione di Tutti gli operatori che utilizzano le parentesi.,

    2. Come usare SQL Union con le query che hanno la clausola WHERE

      Il seguente esempio mostra l’uso di Union in due istruzioni SELECT con una clausola WHERE e una clausola ORDER BY.,

      The following example is based on the rule 1,2 and 3

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10

      SELECT P1.ProductModelID,
      P1.Name
      FROM Production.ProductModel P1
      WHERE ProductModelID IN(3, 4)
      UNION
      SELECT P2.ProductModelID,
      P2.,Nome
      DALLA Produzione.ProductModel P2
      DOVE P2.ProductModelID IN(3, 4)
      ORDINE DA P1.Nome;

    3. Come utilizzare la clausola SELECT INTO con Unione di SQL

      L’esempio seguente crea un nuovo dbo.tabella fittizia che utilizza la clausola INTO nella prima istruzione SELECT che contiene il set di risultati finali dell’unione delle colonne ProductModel e name da due set di risultati diversi., In questo caso, è derivato dalla stessa tabella ma in una situazione del mondo reale, questo può anche essere due tabelle diverse. L’esempio seguente si basa sulla regola 1, 2 e 4.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16

      DROP TABLE IF EXISTS dbo.,dummy;
      SELECT P1.ProductModelID,
      P1.Name
      INTO dummy
      FROM Production.ProductModel P1
      WHERE ProductModelID IN(3, 4)
      UNION
      SELECT P2.ProductModelID,
      P2.Name
      FROM Production.ProductModel P2
      WHERE P2.ProductModelID IN(3, 4)
      ORDER BY P1.Name;
      GO
      SELECT *
      FROM dbo.,Manichino;

    4. utilizzo di SQL Unione con la query che hanno una clausola WHERE e ORDER BY

      Questo è possibile solo quando usiamo SUPERIORE o funzioni di aggregazione in di ogni istruzione select dell’Unione operatore. In questo caso, le prime 10 righe vengono elencate da ciascun set di risultati e combinate le righe utilizzando la clausola Union per ottenere un risultato finale. Vedi anche che la clausola order by è inserita in tutta l’istruzione select.,

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21

      SELEZIONARE.ModelID,
      il.,Name
      FROM
      (
      SELECT TOP 10 ProductModelID ModelID,
      Name
      FROM Production.ProductModel
      WHERE ProductModelID NOT IN(3, 4)
      ORDER BY Name DESC
      ) a
      UNION
      SELECT b.ProductModelID,
      b.Name
      FROM
      (
      SELECT TOP 10 ProductModelID,
      Name
      FROM Production.,ProductModel
      DOVE ProductModelID IN(5, 6)
      ORDER BY Nome DESC
      ) b;

    5. utilizzo di Unione di SQL e SQL Pivot

      Nell’esempio seguente stiamo cercando di combinare più di un set di risultati. In una situazione reale, è possibile disporre di numeri finanziari provenienti da varie regioni o dipartimenti e le tabelle potrebbero avere le stesse colonne e tipi di dati, ma si desidera inserirli in un set di righe e in un singolo report., In tale scenario, si utilizza la clausola Union ed è molto facile combinare i risultati e trasformare i dati in un rapporto più significativo.

      In questo esempio, il ProductModel viene classificato in Top10, Top100, Top 100 e trasformando le righe come un insieme aggregato dei valori nelle rispettive colonne. Il seguente esempio si basa sulla regola 2.,/div>

      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      SELECT MAX(Top10) Top10,
      MAX(Top100) Top100,
      MAX(Top1000) Top100
      DAL
      (
      SELECT COUNT(*) Top10,
      0 Top100,
      0 Top1000
      DALLA Produzione.,ProductModel
      WHERE ProductModelID < 10
      UNION
      SELECT 0,
      COUNT(*),
      0
      FROM Production.ProductModel
      WHERE ProductModelID > 11
      AND ProductModelID < 100
      UNION
      SELECT 0,
      0,
      COUNT(*)
      FROM Production.,ProductModel
      DOVE ProductModelID > 101
      ) T;

      NULL i valori sono molto importanti con gli Operatori e sono trattati come database cittadini. Poiché i NULL sono considerati unici e se due righe hanno un NULL nella stessa colonna, allora sarebbero considerati identici, quindi in tal caso, si sta effettivamente confrontando un NULL con un NULL e ottenendo l’uguaglianza. Nell’esempio seguente, si vede l’uso di valori NULL. In questo caso, viene gestito con la funzione di aggregazione, max.,

      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      SELECT MAX(Top10) Top10,
      MAX(Top100) Top100,
      MAX(Top1000) Top100
      DAL
      (
      SELECT COUNT(*) Top10,
      NULL Top100,
      NULL Top1000
      DALLA Produzione.,ProductModel
      WHERE ProductModelID < 10
      UNION
      SELECT NULL,
      COUNT(*),
      NULL
      FROM Production.ProductModel
      WHERE ProductModelID > 11
      AND ProductModelID < 100
      UNION
      SELECT NULL,
      NULL,
      COUNT(*)
      FROM Production.,ProductModel
      DOVE ProductModelID > 101
      ) T;

    utilizzo di SQL Unione con il Gruppo e Having

    L’esempio seguente viene utilizzato l’operatore di Unione per combinare il risultato della tabella che tutti hanno la clausola condizionale definito utilizzando Group by e Having.

    Il cognome viene analizzato specificando le condizioni nella clausola having.

    Il seguente esempio si basa sulla regola 5.,

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

    SELEZIONARE pp.lastname,
    COUNT ( * ) repeatedtwice,
    0 Repeatedthrice
    DALLA Persona.Persona COME pp
    JOIN HumanResources.Dipendente COME e SU e. BusinessEntityID = pp.,BusinessEntityID
    GRUPPO DI pp.lastname
    AVENDO COUNT ( * ) = 2
    UNION
    SELEZIONA pp.LastName,
    0,
    COUNT(*) NtoZRange
    DALLA Persona.Persona COME pp
    JOIN HumanResources.Dipendente COME e SU e. BusinessEntityID = pp.BusinessEntityID
    GRUPPO DI pp.,Cognome
    HAVING COUNT(*) > 2;

    Possiamo vedere che gli ultimi nomi sono derivati in due colonne diverse utilizzando l’operatore Union

    questo è tutto per ora…

    Sommario

    finora, abbiamo affrontato varie opzioni disponibili e le regole da utilizzare, gli operatori e capire quando usarli. Nel determinare se utilizzare Union vs Union Tutti ci sono alcuni punti da considerare., Usa Union All se sai che i set di risultati da più query non si sovrappongono o generano duplicati e ricorda, se hai bisogno di usare le parentesi, puoi farlo. È inoltre possibile ruotare e trasformare l’output.

    Assicurati che i tuoi tipi di dati corrispondano e se hai bisogno di fare un ORDINE, fallo alla fine dopo aver eseguito tutte quelle query impostate. Per sua natura, quando si tratta di Union vs Union All, Union All è più veloce di Union; poiché gli operatori dell’Unione subiscono un sovraccarico aggiuntivo per eliminare i duplicati.

    Spero che ti sia piaciuto questo articolo sull’operatore SQL Union., Sentitevi liberi di fare tutte le domande nei commenti qui sotto.

    • Autore
    • Post Recenti
    Ho un Database di tecnologo avendo 11 anni di ricca esperienza hands-on su tecnologie di Database. Sono Microsoft Certified Professional e sostenuto con una laurea in Master of Computer Application.
    La mia specialità consiste nel progettare & implementando soluzioni ad alta disponibilità e migrazione DB multipiattaforma., Le tecnologie attualmente in lavorazione sono SQL Server, PowerShell, Oracle e MongoDB.,
    Visualizza tutti i messaggi di Prashanth Jayaram

    Ultimi messaggi di Prashanth Jayaram (vedi tutti)
    • Una rapida panoramica di controllo del database in SQL – gennaio 28, 2021
    • Come impostare la Sincronizzazione di Dati Azure tra Azure SQL database e di SQL Server-edificio – 20 gennaio 2021
    • Come eseguire Azure SQL database di Importazione/Esportazione, le operazioni di utilizzo di PowerShell – 14 gennaio 2021


    Lascia un commento

    Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *