Domov / Sociálne siete / Operátor pre množiny údajov INTERSECT. Vykonávanie zložitých funkcií reťazca SQL dotazov v SQL

Operátor pre množiny údajov INTERSECT. Vykonávanie zložitých funkcií reťazca SQL dotazov v SQL

Príkaz INTERSECT získava identické riadky z výsledkových sád jedného alebo viacerých dotazov. V niektorých ohľadoch je operátor INTERSECT veľmi podobný INNER JOIN.

INTERSECT patrí do triedy operátorov pre prácu s dátovými množinami (set operator). Ďalšími takými operátormi sú EXCEPT a UNION. Všetky operátory množín údajov sa používajú na manipuláciu s množinami výsledkov dvoch alebo viacerých dopytov súčasne, odtiaľ pochádza ich názov.

Syntax SQL2003

Neexistuje žiadne technické obmedzenie počtu dotazov v príkaze INTERSECT. Všeobecná syntax je nasledovná.

INTERSECT

]INTERSEC

Kľúčové slová

Zahrnuté sú duplicitné riadky zo všetkých sád výsledkov.

ODLIŠNÝ

Duplicitné riadky sa odstránia zo všetkých sád výsledkov predtým, ako sa vykoná porovnanie príkazom INTERSECT. Stĺpce s hodnotami NULL sa považujú za duplikáty. Ak nie je zadané ALL ani DISTINCT, predvolene sa predpokladá DISTINCT.

Zodpovedajúci

Určuje, že sa vrátia iba stĺpce, ktoré majú rovnaký názov v oboch dotazoch, aj keď oba dotazy používajú zástupný znak (*).

Určuje, že sa vrátia iba pomenované stĺpce, aj keď dopyty nájdu iné stĺpce so zodpovedajúcimi názvami. Táto klauzula sa musí použiť v spojení s kľúčovým slovom CORRESPONDING.

Všeobecné pravidlá

Pri práci s operátorom INTERSECT je potrebné pamätať len na jedno dôležité pravidlo.

Poradie a počet stĺpcov vo všetkých dopytoch musia byť rovnaké. Typy údajov zodpovedajúcich stĺpcov musia byť tiež kompatibilné.

Napríklad typy CHAR a VARCHAR sú kompatibilné. V predvolenom nastavení použije množina výsledkov v každom stĺpci veľkosť zodpovedajúcu najväčšiemu typu na každej konkrétnej pozícii.

Žiadna platforma nepodporuje klauzulu CORRESPONDING.

Podľa štandardu ANSI má operátor INTERSECT vyššiu prioritu ako iní operátori množiny, aj keď priorita takýchto operátorov je na rôznych platformách riešená odlišne. Prednosť operátorov môžete explicitne ovládať pomocou zátvoriek. V opačnom prípade ich môže DBMS vykonať v poradí zľava doprava alebo od prvého po posledný.

Podľa štandardu ANSI môže byť v dotaze použitá iba jedna klauzula ORDER BY. Vložte ho na úplný koniec posledného príkazu SELECT. Aby ste sa vyhli nejednoznačnosti pri zadávaní stĺpcov a tabuliek, nezabudnite priradiť rovnaký alias všetkým zodpovedajúcim stĺpcom tabuľky. Napríklad:

Na platformách, ktoré nepodporujú operátor INTERSECT, ho môžete nahradiť poddotazom FULL JOIN.

SELECT a.au_lname AS "priezvisko", a.au_fname AS "krstne meno" FROM autorov AS INTERSECT SELECT e.emp_lname AS "priezvisko", e.emp_fname AS "krstne meno" FROM zamestnancov AS e ORDER BY priezvisko, meno;

Keďže typy údajov stĺpcov v rôznych príkazoch INTERSECT môžu byť kompatibilné, môžu sa stretnúť rôzne platformy RDBMS rôzne varianty pracovať so stĺpcami rôznych dĺžok. Ak je napríklad stĺpec aujname z prvého dotazu v predchádzajúcom príklade výrazne dlhší ako stĺpec empjname z druhého dotazu, môžu mať rôzne platformy odlišné pravidlá na určenie dĺžky konečného výsledku. Vo všeobecnosti si však platformy pre výsledok vyberú dlhšiu (a menej obmedzujúcu) veľkosť.

Každý RDBMS môže presadiť svoje vlastné pravidlá pre používanie názvu stĺpca v prípade, že sa názvy v zoznamoch stĺpcov líšia. Zvyčajne sa používajú názvy stĺpcov prvého dotazu.

DB2

Platforma DB2 podporuje kľúčové slová ANSI INTERSECT a INTERSECT ALL plus voliteľnú klauzulu VALUES.

(inštrukcia._SELECT_7 | HODNOTY (výraz7 [, ...])) PRIESKNUTIE

] (inštrukcia_SCJ_2 | HODNOTY (výraz2 [, ...])) PRIESK

Hoci príkaz INTERSECT DISTINCT nie je podporovaný, funkčným ekvivalentom je INTERSECT. Klauzula CORRESPONDING nie je podporovaná.

Navyše, typy údajov LONG VARCHAR, LONG VARGRAPHIC, BLOB, CLOB, DBCLOB, DATALINK a typy štruktúr sa nepoužívajú v klauzule INTERSECT, ale možno ich použiť v klauzule INTERSECT ALL.

Ak má sada výsledkov stĺpec, ktorý má rovnaký názov vo všetkých príkazoch SELECT, potom sa tento názov použije ako konečný názov pre stĺpec vrátený príkazom. Ak sa však v dotazoch použijú rôzne názvy stĺpcov, platforma DB2 vygeneruje nový názov pre výsledný stĺpec. Potom sa stane nepoužiteľným v klauzulách ORDER BY a FOR UPDATE.

Ak sa v jednom dotaze na prácu s množinami údajov použije viacero operátorov, najskôr sa vykoná ten, ktorý je v zátvorkách. Potom bude exekučný príkaz zľava doprava. Všetky príkazy INTERSECT sa však vykonajú pred príkazmi UNION a EXCEPT, napríklad:

SELECT empno FROM zamestnanca WHERE workdept LIKE "E%" INTERSECT (SELECT empno FROM emp_act WHERE projno IN ("IF1000", "IF2000", "AD3110") UNION VALUES ("AA0001"), ("AB0002"), ("AC0003") "))

Vyššie uvedený príklad získa ID zamestnancov všetkých zamestnancov v oddelení, ktorých meno začína na „E“ z tabuľky zamestnancov. Identifikátory sa však získajú iba vtedy, ak existujú aj v tabuľke zamestnaneckých účtov s názvom emp_act a sú zapojené do projektov IF1000, IF200" a AD3110.

V tom študijná príručka naučíte sa používať EXCEPT príkaz v SQL Server(Transact-SQL) so syntaxou a príkladmi.

Popis

SQL Server OKREM vyhlásenia(Transact-SQL) sa používa na vrátenie všetkých riadkov v prvom príkaze SELECT, ktoré nie sú vrátené druhým príkazom SELECT. Každý príkaz SELECT bude definovať množinu údajov. Príkaz EXCEPT extrahuje všetky záznamy z prvého súboru údajov a potom z výsledkov odstráni všetky záznamy z druhého súboru údajov.

Okrem Žiadosti

Vysvetlenie: Dotaz EXCEPT vráti položky v sivej oblasti. Toto sú záznamy, ktoré existujú v SELECT 1 a nie v SELECT 2.
Každý príkaz SELECT v dotaze EXCEPT musí mať rovnaký počet polí v množinách výsledkov s podobnými typmi údajov.

Syntax

Syntax pre príkaz EXCEPT v SQL Server (Transact-SQL) je:

Možnosti alebo Argumenty

výrazy sú stĺpce alebo výpočty, ktoré chcete porovnať medzi dvoma príkazmi SELECT. Nemusia to byť rovnaké polia v každom z príkazov SELECT, ale zodpovedajúce stĺpce musia mať podobný typ údajov.
tabuľky - tabuľky, z ktorých chcete získať záznamy. V klauzule FROM musí byť uvedená aspoň jedna tabuľka.
WHERE podmienky - voliteľné. Podmienky, ktoré musia byť splnené pre vybrané záznamy.

Poznámka

  • Oba príkazy SELECT musia mať rovnaký počet výrazov.
  • Zodpovedajúce stĺpce v každom z príkazov SELECT musia mať podobné typy údajov.
  • Príkaz EXCEPT vráti všetky záznamy z prvého príkaz SELECT, ktorý nie je zahrnutý v druhom príkaze SELECT.
  • Príkaz EXCEPT v SQL Server je ekvivalentný príkazu MINUS v Oracle.

Príklad s jedným výrazom

Pozrime sa na príklad príkazu EXCEPT v SQL Server (Transact-SQL), ktorý vracia jedno pole s rovnakým typom údajov.
Napríklad:

Transakcia SQL

SELECT product_id FROM products EXCEPT SELECT product_id FROM inventár;

SELECT product_id

Z produktov

SELECT product_id

Z inventára ;

Tento príklad príkazu EXCEPT vráti všetky hodnoty product_id, ktoré sú v tabuľke produktov a nie v tabuľke inventára. To znamená, že ak hodnota product_id existuje v tabuľke produktov a existuje aj v tabuľke inventára, hodnota product_id sa nezobrazí vo výsledkoch dopytu EXCEPT.

Príklad s viacerými výrazmi

Ďalej sa pozrime na príklad dotazu EXCEPT v SQL Server (Transact-SQL), ktorý vracia viac ako jeden stĺpec.
Napríklad:

Transakcia SQL

V tomto príklade dotaz EXCEPT vráti záznamy v tabuľke kontaktov s názvom contact_id , last_name a first_name , ktoré sa nezhodujú s hodnotami zamestnanec_id , last_name a first_name v tabuľke zamestnancov.

SQL poskytuje dva spôsoby spájania tabuliek:
  • zadaním tabuliek na spojenie (vrátane poddotazov) v klauzule FROM príkazu SELECT. Najprv sa spoja tabuľky a až potom sa na výslednú množinu aplikujú podmienky špecifikované klauzulou WHERE, agregácia, usporiadanie dát atď., určené klauzulou GROUP BY;
  • definovanie spojenia množín výsledkov vytvorených spracovaním príkazu SELECT. V tomto prípade sú dva príkazy SELECT spojené frázou UNION, INTERSECT, OKREM alebo Zodpovedajúce .

UNION

Fráza UNION kombinuje výsledky dvoch dopytov podľa nasledujúcich pravidiel:

Norma nekladie žiadne obmedzenia na zoradenie riadkov v sade výsledkov. Takže niektoré DBMS najprv zobrazia výsledok prvého dotazu a potom výsledok druhého dotazu. Oracle DBMS automaticky triedi záznamy podľa prvého určeného stĺpca, aj keď preň nebol vytvorený žiadny index.

Ak chcete explicitne špecifikovať požadované poradie triedenia, použite klauzulu ORDER BY. V tomto prípade môžete použiť názov stĺpca aj jeho číslo (obr. 4.3).


Ryža. 4.3.

Fráza UNION ALL vykoná spojenie dvoch poddotazov rovnakým spôsobom ako klauzula UNION, s nasledujúcimi výnimkami:

  • zhodné riadky sa z vygenerovanej sady výsledkov neodstránia;
  • zlúčené dotazy sa zobrazia postupne v sade výsledkov bez zoradenia.

Pri kombinovaní viac ako dvoch dopytov možno použiť zátvorky na zmenu poradia, v ktorom sa vykoná operácia spojenia (obrázok 4.4).


Ryža. 4.4.

INTERSECT pripojiť sa

Fráza INTERSECT umožňuje vybrať len tie riadky, ktoré sa nachádzajú v každej zlúčenej množine výsledkov. Na obr. 4.5 ukazuje príklad kombinovania dopytov ako pretínajúcich sa množín.


Ryža. 4.5.

OKREM únie

Fráza OKREM umožňuje vybrať len tie riadky, ktoré sa nachádzajú v prvej sade výsledkov, ktoré sa majú zlúčiť, ale nie sú prítomné v druhej sade výsledkov.

Frázy INTERSECT a OKREM by mali byť podporované len na úplnej úrovni zhody s SQL-92. Takže nejaké DBMS namiesto frázy

Keď často narazíte na akúkoľvek technológiu, programovací jazyk, štandard, vytvorí sa určitý obraz o ich schopnostiach, hraniciach, v ktorých sa používajú. Takto sa dá pokračovať dlho, kým sa neobjavia príklady, ktoré rozšíria zatvrdnuté obzory vedomostí. Dnes by som rád hovoril o takýchto príkladoch a demonštroval ich pre jazyk SQL. V tomto článku na vás čakajú zaujímavé a vzácne vzory, zabudnuté výrazy, zvláštne triky. Kto má záujem, vitajte pod kat.

Nuansy

Často sa ma pýtajú, pre koho je tento článok určený? Ale verte mi, nie vždy je ľahké odpovedať: na jednej strane sú ninja vývojári, ktorých je ťažké niečím prekvapiť, a na druhej strane mladí padawani. Jedno však môžem povedať s istotou - pre čitateľa, ktorý sa zaujíma o SQL, ktorý je schopný doplniť svoj bohatý obraz o malé, ale veľmi zaujímavé detaily. Tento článok nebude obsahovať kilometrové stránky sql dotazu, maximálne 1, 2 riadky a len to, čo je podľa mňa zriedkavé. Ale keďže chcem byť úplne úprimný, ak máte na starosti sql, článok sa vám bude zdať nudný. Všetky príklady v článku, s výnimkou prvého a štvrtého, možno pripísať štandardu SQL-92.

Údaje

Aby sme si uľahčili život, hodil som jednoduchý dátový štítok, na ktorom sa budú testovať určité body a pre stručnosť na nich uvediem výsledok pokusu. Kontrolujem všetky požiadavky na PostgreSql.

Skripty a dátová tabuľka

VYTVORIŤ TABUĽKU tovar(id bigint NIE JE NULL, znak mena sa mení (127) NIE JE NULL, znak popisu sa mení (255) NIE JE NULL, cena numerická (16,2) NIE JE NULL, znak článku sa mení (20) NIE JE NULL, časová značka_aktu NIE JE NULL , dostupnosť boolean NOT NULL, CONSTRAINT pk_goods PRIMARY KEY (id)); VLOŽIŤ DO tovaru (id, názov, popis, cena, articul, act_time, dostupnosť) VALUES (1, "Papuče", "Soft", 100,00, "TR-75", (ts "2017-01-01 01:01: 01,01"), PRAVDA); VLOŽIŤ DO tovaru (id, názov, popis, cena, articul, act_time, dostupnosť) VALUES (2, "Vankúš", "Biela", 200,00, "PR-75", (ts "2017-01-02 02:02: 02,02"), PRAVDA); VLOŽIŤ DO tovaru (id, názov, popis, cena, articul, act_time, dostupnosť) VALUES (3, "Prikrývka", "Dole", 300,00, "ZR-75", (ts "2017-01-03 03:03: 03,03"), PRAVDA); VLOŽIŤ DO tovaru (id, názov, popis, cena, articul, act_time, dostupnosť) VALUES (4, "Obliečka na vankúš", "Sivá", 400,00, "AR-75", (ts "2017-01-04 04:04: 04.04"), NEPRAVDA); VLOŽIŤ DO tovaru (id, názov, popis, cena, articul, act_time, dostupnosť) VALUES (5, "Plátno", "Hodváb", 500,00, "BR-75", (ts "2017-01-05 05:05: 05,05"), NEPRAVDA);

Žiadosti

1. Dvojité úvodzovky

A prvá vec, ktorú mám, je jednoduchá otázka: Mohli by ste uviesť príklad dotazu sql pomocou dvojitý citácie?Áno, nie s dvojhrou, štvorhrou?

Príklad s dvojitými úvodzovkami

VYBERTE názov "Názov produktu" Z tovaru


Bol som veľmi prekvapený, keď som to videl prvýkrát. Ak sa pokúsite zmeniť dvojité úvodzovky na jednoduché, výsledok bude úplný rôzne!

Môže sa zdať, že to nie je príliš užitočný príklad pre skutočný rozvoj. Pre mňa nie. Teraz ho aktívne používam vo všetkých mojich sql-blankoch. Podstata je jednoduchá, keď sa o pol roka vrátite na sql-query 40 stĺpcov, ach, ako ich „naše“ meno šetrí. Napriek tomu, že som nenaznačil SQL-92, v najnovšom vydaní je zmienka o dvojitých úvodzovkách.

2. Pseudo tabuľka. SQL-92

Trochu nie presne, čo sa týka terminológie, ale podstata je jednoduchá – tabuľka vyplývajúca z poddotazu v sekcii FROM. Možno najviac známy fakt v tomto článku

Pseudo stôl

SELECT mock.nickname "Prezývka", (prípad, keď mock.huff THEN "Yes" ELSE "No" END) "Huffed?" OD (VYBERTE meno AKO prezývku, dostupnosť AKO huff FROM tovaru) zosmiešňovať

V našom príklade je mock pseudo tabuľka (niekedy nazývaná virtuálny stôl). Prirodzene, vôbec nie sú určené na skreslenie pravého významu. Príkladom je toto.

3. Konštruktor dátových blokov. SQL-92

Znie to desivo, len preto, že som nenašiel dobrý preklad alebo interpretáciu. A ako vždy, je to jednoduchšie vysvetliť na príklade:

Príklad konštruktora dátových blokov

SELECT názov "Názov produktu", cena "Cena" FROM (VALUES ("Papuče", 100,00), ("Vankúš", 200,00)) AKO tovar (názov, cena)

Meno Produktu cena
Papuče 100.00
Vankúš 200.00

V sekcii OD použité kľúčové slovo HODNOTY, za ktorým nasledujú údaje v zátvorkách, riadok po riadku. Základom je, že údaje nevyberáme vôbec zo žiadnej tabuľky, ale jednoducho ich vytvoríme za chodu, „pomenujeme“ tabuľku, pomenujeme stĺpce a potom ich použijeme podľa vlastného uváženia. Táto vec sa ukázala ako mimoriadne užitočná pri testovaní rôznych prípadov dotazu sql, keď pre niektoré tabuľky (vo vašej lokálnej databáze) nie sú žiadne údaje a zápis insert je príliš lenivý alebo niekedy veľmi obtiažny, kvôli prepojeniu tabuliek a obmedzenia.

4. Čas, dátum a čas a dátum

Zrejme každý sa stretol pri dopytoch s potrebou špecifikovať čas, dátum alebo dátum a čas. Mnohé DBMS podporujú literály t, d a ts, aby mohli pracovať s týmito typmi. Ale je to jednoduchšie vysvetliť na príklade: Pre literály d a t je všetko rovnaké.
Ospravedlňujem sa čitateľovi za zavádzanie, ale všetko, čo je uvedené v odseku 4, sa nevzťahuje na jazyk SQL, ale odkazuje na možnosti predspracovania dotazov v JDBC.

5. Popieranie. SQL-92

Všetci vieme o operátorovi NIE, ale veľmi často zabúdame, že sa dá použiť na skupinu predikátov aj na jeden stĺpec:

6. Porovnanie dátových blokov. SQL-92

Ešte raz sa ospravedlňujem za terminológiu. Toto je jeden z mojich obľúbených príkladov.

Príklad porovnania dátových blokov

VYBERTE * Z tovaru WHERE (názov, cena, dostupnosť) = ("Obliečka na vankúš", 400,00, FALSE) -- alebo ekvivalent VYBERTE * Z tovaru WHERE názov = "Obliečka na vankúš" A cena = 400,00 A dostupnosť = FALSE

Ako vidíte z príkladu, porovnávanie dátových blokov je podobné porovnávaniu element po elemente. význam_ 1 _blok_1 = hodnota_ 1 _blok_2, hodnota_ 2 _blok_1 = hodnota_ 2 _blok_2, hodnota_ 3 _blok_1 = hodnota_ 3 _blok_2 použitím A medzi nimi.

7. Porovnajte operátory s modifikátormi ANY, SOME alebo ALL. SQL-92

Tu je potrebné vysvetlenie. Ale ako vždy, najprv príklad Čo to znamená VŠETKY v tomto prípade? A to znamená, že podmienku výberu spĺňajú len tie riadky, ktorých identifikátory (v našom prípade sú to 4 a 5) sú väčšie ako akýkoľvek z zistených hodnôt v poddotazi (1, 2 a 3). 4 je väčšia ako 1 a ako 2 a ako 3. 5 je podobná. Čo sa stane, ak vymeníme VŠETKY na AKÝKOĽVEK?
Čo robí AKÝKOĽVEK v tomto prípade? A to znamená, že podmienku výberu spĺňajú len tie riadky, ktorých identifikátory (v našom prípade sú to 2, 3, 4 a 5) sú väčšie ako aspoň jeden z zistených hodnôt v poddotazi (1, 2 a 3). Pre seba som sa spojil VŠETKY s A, a AKÝKOĽVEK s ALEBO. NIEKTORÉ a AKÝKOĽVEK analógy navzájom.

8. Operátori pre prácu s požiadavkami / pod požiadavkami. SQL-92

Je dostatočne známe, že pomocou operátorov je možné kombinovať 2 dotazy navzájom UNION alebo UNION VŠETKO. Toto sa často používa. Ale sú tam ešte 2 operátori OKREM a INTERSECT.

Príklad s EXCEPT

V skutočnosti sú údaje druhého súboru vylúčené z prvého súboru hodnôt.
V skutočnosti existuje priesečník prvého súboru hodnôt a druhého súboru.
To je všetko, ďakujem za pozornosť.

Redakcia

N1. Vďaka streetflush za konštruktívnu kritiku. Pridal článok s informáciami o tom, čo je a čo nie je jazykový štandard.
N2. Opravená položka 4 s objasnením, že ts/d/t nie je súčasťou jazyka SQL. Ďakujem za pozornosť Melkij.

Na používanie príkazu EXCEPT je potrebné pamätať len jedno dôležité pravidlo.

Poradie, počet a typy údajov stĺpcov musia byť rovnakého typu vo všetkých dotazoch.

Podľa normy ANSI operátori pre prácu s súpravy UNION a EXCEPT majú rovnakú prednosť, ale operátor INTERSECT sa vykoná pred ostatnými operátormi množiny. Odporúčame explicitne ovládať prioritu operátorov pomocou zátvoriek. Toto je vo všeobecnosti veľmi dobrá prax.

Podľa štandardu ANSI môže byť v dotaze použitá iba jedna klauzula ORDER BY. Vložte ho na úplný koniec posledného príkazu SELECT. Aby ste sa vyhli nejednoznačnosti pri zadávaní stĺpcov a tabuliek, nezabudnite priradiť rovnaký alias všetkým zodpovedajúcim stĺpcom tabuľky. Napríklad:

SELECT au_lname AS "priezvisko", au_fname AS "krstne meno" FROM autorov EXCEPT SELECT emp_lname AS "priezvisko", emp_fname AS "krstne meno" FROM zamestnancov ORDER BY priezvisko, meno;

Okrem toho, keďže stĺpce môžu byť špecifikované v každom zozname stĺpcov so zodpovedajúcimi kompatibilnými typmi údajov, rôzne platformy RDBMS môžu mať rôzne spôsoby zaobchádzania so stĺpcami rôznych dĺžok. Ak je napríklad stĺpec au_lname z prvého dotazu v predchádzajúcom príklade výrazne dlhší ako stĺpec emp_lname z druhého dotazu, môžu mať rôzne platformy odlišné pravidlá na určenie dĺžky konečného výsledku. Vo všeobecnosti si však platformy pre výsledok vyberú dlhšiu (a menej obmedzujúcu) veľkosť.

Každý RDBMS môže presadiť svoje vlastné pravidlá pre používanie názvu stĺpca v prípade, že sa názvy v zoznamoch stĺpcov líšia. Vo všeobecnosti sa používajú názvy stĺpcov prvého dotazu.

Dátové typy nemusia byť identické, ale musia byť kompatibilné. Napríklad typy CHAR a VARCHAR sú kompatibilné. V predvolenom nastavení použije množina výsledkov v každom stĺpci veľkosť zodpovedajúcu najväčšiemu typu na každej konkrétnej pozícii. Napríklad dotaz, ktorý načítava údaje zo stĺpcov obsahujúcich hodnoty typu VARCHAR(IO) a VARCHAR(15), použije typ a veľkosť VARCHAR(15).

Žiadna z platforiem nepodporuje klauzulu CORRESPONDING )) EXCEPT

(SELECT statemenr.2 | VALUES (expressionl, expression2 [, ...])) OKREM

Umožňuje určiť jeden alebo viac manuálne špecifikovaných stĺpcov, ktoré sú zahrnuté v množine konečných výsledkov. (Nazýva sa to riadkový konštruktor.) Klauzula VALUES musí špecifikovať presne toľko stĺpcov, koľko je špecifikovaných v dotazoch príkazu EXCEPT. Hoci príkaz EXCEPT DISTINCT nie je podporovaný, EXCEPT je funkčný ekvivalent. Klauzula CORRESPONDING nie je podporovaná. Typy údajov LONG VARCHAR, LONG VARGRAPHIC, BLOB, CLOB, DBCLOB, DATALINK a typy štruktúr sa tiež nepoužívajú v klauzule EXCEPT, ale možno ich použiť v klauzule EXCEPT ALL.

Ak má sada výsledkov stĺpec, ktorý má rovnaký názov vo všetkých príkazoch SELECT, potom sa tento názov použije ako konečný názov pre stĺpec vrátený príkazom. Ak je daný stĺpec pomenovaný inak v rôznych príkazoch SELECT, potom musíte premenovať stĺpec vo všetkých dotazoch pomocou rovnakej klauzuly AS alias vo všetkých dotazoch.

Ak sa v jednom dotaze na prácu s množinami údajov použije viacero operátorov, najskôr sa vykoná ten, ktorý je v zátvorkách. Potom bude exekučný príkaz zľava doprava. Všetky príkazy INTERSECT sa však vykonajú pred príkazmi UNION a EXCEPT. Napríklad:

SELECT empno FROM zamestnanca WHERE workdept LIKE "E%" EXCEPT SELECT empno FROM emp_act WHERE projno IN (TF1000", TF2000", -AD3110") UNION VALUES ("AA0001"), ("AB0002"), ("AC0003")

Vyššie uvedený príklad získa ID všetkých zamestnancov, ktorí pracujú na oddelení, ktoré začína na „E“ z tabuľky zamestnancov, potom odstráni ID tých, ktorí pracujú v projektoch IF1000, IF200“ a AD3110 z tabuľky zamestnaneckých účtov (emp_act) Nakoniec , tri ďalšie ID, AA0001, AB0002 a AC0003, sa pridajú pomocou operátora UNION set.

MySQL

MySQL nepodporuje príkaz EXCEPT. Prípadne môžete použiť operátory NOT IN alebo NOT EXISTS.