SAP HANA Union & Union All: Operator-exempel

⚡ Smart sammanfattning

SAP HANA Operator utför beräkningar, värdejämförelser eller tilldelningar i SQL. Det finns sex familjer: unära och binära, aritmetiska, sträng-, jämförelse-, logiska och mängdoperatorer som UNION och INTERSECT.

  • Unär och binär: En unär operator tar en operand och en binär operator tar två.
  • 🧮 Aritmetisk: Tillägg, subtracmultiplikations- och divisionsarbete med numeriska operander.
  • 🔗 Strängsammansättning: Två vertikala streck sammanfogar strängar, uttryck eller konstanter till ett enda värde.
  • ⚖️ Jämförelse: Lika med, större, mindre och deras kombinationer returnerar ett sanningsvärde för filtrering.
  • 🔀 Logisk: AND, OR och NOT kombinerar villkor inuti en WHERE-klausul.
  • 🧩 uppsättning Operators: UNION tar bort dubbletter, UNION ALL behåller dem, INTERSECT returnerar gemensamma rader, EXCEPT subtracts.
  • 📊 Utarbetat exempel: Två tabeller som delar värden visar de olika utdata för varje uppsättningsoperator.

SAP HANA UNION och UNION ALL-operatörerna

SAP HANA Operator kan användas för beräkning, värdejämförelse eller för att tilldela värde.

SAP HANA Operatorer

  • Unär och binär Operator
  • Aritmetik Operator
  • Sträng Operatorer
  • Jämförelse Operator
  • logisk Operator
  • uppsättning Operator

Varje operator returnerar ett värde, vilket är anledningen till att de kan kapslas inuti varandra. Ordningen i vilken de utvärderas bestäms av prioritet, vilket förklaras efter de enskilda familjerna.

Unär och binär Operator

Operator Operation BESKRIVNING
unär En unäroperator gäller för en operand Unär plusoperator(+) Unär negationsoperator(-) Logisk negation(NOT)
Binary En binär Operator gäller på två operander Multiplikativa operatorer (*, /) Additiva operatorer (+,-) Jämförelseoperatorer (=,!=,<,>,<=,>=) Logiska operatorer (OCH, ELLER)

Aritmetik Operator

  • Tillägg (+)
  • Subtraction (-)
  • Multiplikation ( * )
  • Division ( / )

Sträng Operator

En sträng Operator är en sammanlänkningsoperator som kombinerar två objekt som strängar, uttryck eller konstanter till en.

Två vertikala streck "||" används som sammanlänkningsoperator.

Jämförelse Operator

Jämförelseoperator används för att jämföra två operander. Nedan finns en lista över jämförelser Operator-

  • Lika med ( = )
  • Större än ( > )
  • Less Än (<)
  • Större än eller lika med ( >= )
  • Less än eller lika med (<=)
  • Inte lika (!= , <> )

logisk Operator

Logisk operator används i sökkriterier.

T.ex. WHERE condition1 OCH / ELLER / NOT condition2

Nedan finns en lista över logiska operatorer -

  • OCH – (t.ex. DÄR villkor1 OCH villkor2)
    Om både Villkor1 OCH Villkor2 är sanna, är Kombinera-villkoret sant, annars blir det falskt.
  • ELLER – (t.ex. VAR villkor1 ELLER villkor2)
    Om villkor1 ELLER villkor2 är sant, är kombinera villkor sant eller falskt om båda villkoren är falska.
  • INTE – (t.ex. VAR INTE-villkor)
    INTE villkoret är sant Om villkoret är falskt.

uppsättning Operatorer

  • UNION – Kombinerar två eller många SELECT-satser eller frågor utan dubblett.
  • UNION ALL – Kombinerar två eller många SELECT-satser eller frågor, inklusive alla dubbletter av rader.
  • INTERSECT – Kombinerar två eller många SELECT-satser eller frågor och returnerar alla gemensamma rader.
  • EXCEPT – Hämtar utdata från den första frågan och tar bort raden som markerats av den andra frågan.

T.ex Jag har två tabeller (tabell1, tabell2) där vissa värden är vanliga.

uppsättning Operators in SAP HANA

Vi använder Set-operator (Union, Union ALL, Intersect, utom) för dessa två tabeller in SQL som nedan -

Skapa tabell 1- SQL-skript

CREATE COLUMN TABLE DHK_SCHEMA.TABLE1
( ELEMENT CHAR(1),
  PRIMARY KEY (ELEMENT)
);
INSERT INTO DHK_SCHEMA.TABLE1 VALUES ('P');
INSERT INTO DHK_SCHEMA.TABLE1 VALUES ('Q');
INSERT INTO DHK_SCHEMA.TABLE1 VALUES ('R');
INSERT INTO DHK_SCHEMA.TABLE1 VALUES ('S');
INSERT INTO DHK_SCHEMA.TABLE1 VALUES ('T');

Skapa tabell 2- SQL-skript

CREATE COLUMN TABLE DHK_SCHEMA.TABLE2
( ELEMENT CHAR(1),
  PRIMARY KEY (ELEMENT)
);
INSERT INTO DHK_SCHEMA.TABLE2 VALUES ('S');
INSERT INTO DHK_SCHEMA.TABLE2 VALUES ('T');
INSERT INTO DHK_SCHEMA.TABLE2 VALUES ('U');
INSERT INTO DHK_SCHEMA.TABLE2 VALUES ('V');
INSERT INTO DHK_SCHEMA.TABLE2 VALUES ('W');

Anmärkningar: Här är "DHK_SCHEMA" ett schemanamn, användaren kan ändra schemanamnet i SQL följaktligen.

uppsättning OperaExempel är enligt nedan

Operator SQL-fråga Produktion du använder
UNION VÄLJA *
FRÅN
(
VÄLJA ELEMENT
FRÅN DHK_SCHEMA.TABLE1
UNION
VÄLJA ELEMENT
FRÅN DHK_SCHEMA.TABLE2
)
SORTERA EFTER ELEMENT;

UNION-inställningsoperatorutgång

Kombinera Resultat av två eller flera frågor utan dubblett.
UNION ALLA VÄLJA *
FRÅN
(
VÄLJA ELEMENT
FRÅN DHK_SCHEMA.TABLE1
UNION ALLA
VÄLJA ELEMENT
FRÅN DHK_SCHEMA.TABLE2
)
SORTERA EFTER ELEMENT;

UNION ALL-inställning för operatörsutgång

Kombinera resultatet av två eller flera frågor med alla dubbletter.
KORSAS VÄLJA *
FRÅN
(
VÄLJA ELEMENT
FRÅN DHK_SCHEMA.TABLE1
KORSAS
VÄLJA ELEMENT
FRÅN DHK_SCHEMA.TABLE2
)
SORTERA EFTER ELEMENT;

INTERSECT-uppsättningsoperatorutgång

Kombinera Resultat av två eller flera frågor med alla vanliga rader.
BORTSETT FRÅN VÄLJA *
FRÅN
(
VÄLJA ELEMENT
FRÅN DHK_SCHEMA.TABLE1
BORTSETT FRÅN
VÄLJA ELEMENT
FRÅN DHK_SCHEMA.TABLE2
)
SORTERA EFTER ELEMENT;

UNDANTAG inställd operatorutgång

Tar utdata från den första frågan och tar bort rad vald av den andra frågan

uppsättning Operator-regler och krav

Mängdoperatorer ser enkla ut men avvisar frågor lätt, eftersom de jämför hela resultatmängder snarare än enskilda värden. Fyra regler styr dem.

  1. Kolumnantalet måste matcha. Båda SELECT-satserna måste returnera samma antal kolumner. En avvikelse misslyckas omedelbart och meddelandet namnger positionen istället för kolumnen.
  2. Datatyper måste vara kompatibla. Kolumn ett i den första frågan matchas mot kolumn ett i den andra, och så vidare efter position, inte efter namn. Kompatibla numeriska typer konverteras automatiskt; en teckenkolumn mot ett datum görs inte.
  3. Kolumnnamnen kommer från den första frågan. Vad den andra satsen än kallar sina kolumner ignoreras i utdata, vilket förvånar alla som läser resultatet av en UNION för första gången.
  4. ORDER BY gäller för hela resultatet. Den hör hemma i slutet, efter den sista SELECT-koden, och det är därför exemplen ovan omsluter unionen i en yttre SELECT.

Prestandaskillnaden mellan UNION och UNION ALL är värd att notera. UNION måste sortera eller hasha det kombinerade resultatet för att ta bort dubbletter, medan UNION ALL bara lägger till. Där dubbletter är omöjliga eller acceptabla är UNION ALL betydligt snabbare på stora tabeller. Kolumndefinitionerna som används i dessa tabeller behandlas i SAP HANA-datatyper.

Operator Precedens i SAP HANA SQL

När flera operatorer förekommer i ett uttryck avgör prioritet vilken som utvärderas först. Om detta görs fel produceras en fråga som körs perfekt och returnerar fel rader, vilket är mycket farligare än ett syntaxfel.

Ordersammanställning Operatorer Kategori
1 () Parenteser, alltid utvärderade först
2 + – (enkel operand) Unär plus och negation
3 * / Multiplikation och uppdelning
4 + – || Tillägg, subtraction, sammankoppling
5 = != < > <= >= Jämförelse
6 INTE Logisk negation
7 AND Logisk konjunktion
8 OR Logisk disjunktion

Den klassiska fällan sitter på rad 7 och 8. Eftersom OCH binder hårdare än ELLER, är villkoret DÄR region = 'ÖST' ELLER region = 'VÄST' OCH status = 'ÖPPEN' läses som ÖST, eller VÄST som är öppenVarje östra rad returneras oavsett status. Att lägga till parenteser runt de två regiontesterna åtgärdar det.

💡 Tips: Skriv parenteser runt varje blandat OCH- och ELLER-villkor även när prioritet redan ger det avsedda resultatet. Frågan blir självdokumenterande och klarar senare redigeringar av en annan utvecklare.

Daglig satssyntax behandlas i SAP HANA SQL handledning och den bredare plattformen i SAP HANA-handledning serien.

Vanliga frågor

UNION ALL. Den lägger helt enkelt till resultaten, medan UNION dessutom måste ta bort dubbletter. Använd UNION ALL när dubbletter är omöjliga eller acceptabla i utdata.

Ja, SAP HANA konverterar talet implicit.ping det i TO_VARCHAR är fortfarande bättre att göra, eftersom formatet då förblir under din kontroll snarare än sessionens standardinställning.

Ja. AI upprepar ett blandat OCH- och ELLER-villkor i enkelt språk, vilket omedelbart avslöjar om gruppenping matchar avsikten och föreslår sedan parenteserna som fixar det.

Ja. INTERSECT och EXCEPT skrivs ofta om som en inner join eller en NOT EXISTS-klausul, vilket kan prestera bättre. Jämför exekveringsplaner innan du använder omskrivningen.

Att jämföra något med NULL returnerar okänt snarare än sant eller falskt, så raden filtreras bort. Använd IS NULL och IS NOT NULL istället för lika-operatorn.

Sammanfatta detta inlägg med: