Kontakty

Pretiahnite príklady SQL. Prevádzkovateľ pre pretínanie súborov údajov. Príklad s jedným výrazom

SQL poskytuje dva spôsoby, ako kombinovať tabuľky:
  • zadanie pripojených tabuliek (vrátane podkokeries) vo fráze výberu. Po prvé, na výsledný súbor sa používa pripojenie tabuliek a iba podmienky špecifikované frázou skupiny agregáciou, objednávkou údajov atď.
  • definovanie integrácie výsledných súborov získaných počas spracovania výberu. V tomto prípade sú obidva operátori pripojené frázou Únie, Pretína., S výnimkou alebo zodpovedajúce.

Únia

Fráza Únie Kombinuje výsledky dvoch žiadostí o tieto pravidlá:

Norma neukladá žiadne obmedzenia pre streamingové riadky v výslednej súpravu. Takže niektoré DBMS najprv zobrazia výsledok prvej žiadosti a následne výsledok druhého dotazu. Oracle DBMS automaticky triedi záznamy na prvom zadanom stĺpci, aj keď nie je index vytvorený pre neho.

Aby sa explicitne zadá požadovaný poradie triedenia, mal by sa použiť poradie podľa výrazu. V tomto prípade môžete použiť aj názov stĺpca a jeho číslo (Obr. 4.3).


Obr. 4.3.

Fráza Únie Všetky vykonávajú Úniu dvoch podkoholov rovnakým spôsobom ako veta Únie s nasledujúcimi výnimkami:

  • z výsledného výsledného súboru nie sú odstránené
  • kombinované dotazy sa zobrazujú v výslednej súpravu postupne bez objednania.

Pri kombinácii viac ako dvoch požiadaviek na zmenu poradia prevádzky zlúčenia môžete použiť konzoly (obr. 4.4).


Obr. 4.4.

Preťaženie

Fráza Pretína. Umožňuje vybrať iba tie čiary, ktoré sú prítomné v každom zjednotenom výslednej súpravu. Na obr. 4.5 Je uvedený príklad kombinácie požiadaviek ako pretínavých súborov.


Obr. 4.5.

S výnimkou Úni

Fráza S výnimkou Umožňuje vybrať iba tie čiary, ktoré sú prítomné v prvom kombinovanom výslednej súpravu, ale chýbajú sa v druhej sade výsledkov.

Frázy Pretína. a S výnimkou Musia byť podporované len s úplnou úrovňou súladu s normou SQL-92. Tak, niektoré dbms namiesto frázy

Existuje len jedno dôležité pravidlo používania okrem inštrukcií, ktoré potrebujete na pamäti.

Objednávka, množstvo a typy dátových stĺpcov musia mať rovnaký typ vo všetkých požiadavkách.

Podľa štandardu ANSI majú prevádzkovateľov s Úniou a okrem súborov rovnakú prioritu, ale externé vyhlásenie sa vykonáva pred ostatnými prevádzkovateľmi pre súbory. Odporúčame výslovne riadiť prioritu operátorov pomocou zátvoriek. To je vo všeobecnosti veľmi dobrá prax.

Podľa štandardu ANSI sa môže použiť iba jedna objednávka podľa ponuky. Vložte ho na najostupnejšie vyhlásenie o výbere. Aby ste sa vyhli nejednoznačnosti pri špecifikovaní stĺpcov a tabuliek, uistite sa, že priraďte rovnaké alias na všetky zodpovedajúce navzájom stĺpca tabuliek. Napríklad:

Vyberte AU_LNAME ako "LastName", AU_FNAME ako "FirstName" od autorov okrem výberu EMP_LNAME ako "LastName", EMP_FNAME as "FirstName" od zamestnancov objednaní podľa poslednommene, krčmy;

Okrem toho, pretože v každom zozname stĺpcov môžu byť stĺpce označené resp. Kompatibilnými typmi údajov, môžu sa vyskytnúť rôzne možnosti práce so stĺpikmi rôznych dĺžok na rôznych platformách Surbd. Napríklad, ak je stĺpec AU_LNAME z prvej žiadosti v predchádzajúcom príklade oveľa dlhšie ako stĺpec EMP_LNAME z druhej požiadavky, potom rôzne platformy môžu aplikovať rôzne pravidlá na určenie dĺžky konečného výsledku. Ale všeobecne povedané, platformy si vyberú výsledok dlhšej (a menej obmedzenej) veľkosti.

Každý SURGD môže aplikovať svoje vlastné pravidlá pre použitie názvu stĺpca, ak sa názvy v zoznamoch stĺpcov líšia. Vo všeobecnosti sa používajú názvy stĺpcov prvej požiadavky.

Typy údajov by nemali byť identické, ale musia byť kompatibilné. Napríklad typy Char a Varchar sú kompatibilné. V predvolenom nastavení bude výsledná nastavená v každom stĺpci použitá veľkosť zodpovedajúca najväčšiemu typu v každej konkrétnej polohe. Požiadavka, ktorá extrahuje dáta zo stĺpcov obsahujúcich hodnoty typu varchar (IO) a varchar (15), použije typ a veľkosť varchar (15).

Žiadna z platforiem nepodporuje príslušnú ponuku))

(Zvoľte StateMenr.2 | Hodnoty (expresné, expresia2 [, ...]))

Umožňuje určiť jeden alebo viac ručne definovaných stĺpcov, ktoré sú zahrnuté v konečnom súbore výsledkov. (Toto sa nazýva dizajnér riadkov.) V hodnote hodnôt musí existovať presne toľko stĺpcov, pretože sú špecifikované v otázkach okrem prevádzkovateľov. Hoci okrem výnimočného pokynu nie je podporované, funkčný ekvivalent je okrem. Zodpovedajúca ponuka nie je podporovaná. Aj dlhé varchar, dlhý vargrafický, BLOB, CLOB, DBCLOB, DATLINK, DATALINK a konštrukčné typy sa nepoužívajú v okrem ponuky, ale môžu byť použité okrem všetkých.

Ak je výsledný súbor údajov stĺpec, ktorý má rovnaký názov vo všetkých pokynoch, potom sa tento názov používa ako konečný názov pre stĺpec vrátenú inštrukciou. Ak sa tento stĺpec nazýva inak v rôznych pokynoch Select, potom musíte premenovať stĺpec vo všetkých požiadavkách pomocou rovnakej ako pseudonym vo všetkých z nich.

Ak sa viacerí operátori používa v jednom dotaze na prácu s dátovými súbormi, potom sa vykonáva prvý, ktorý je uzavretý v zátvorkách. Potom bude objednávka vykonania ponechaná vpravo. Všetky preťažené vyhlásenia sa však vykonávajú pred Úniou a okrem prevádzkovateľov. Napríklad:

Vyberte EMPNO od zamestnanca, kde WorkDep, ako je "E%", okrem výberu EMPNO z EMP_Act, kde PROJNO IN (TF1000 ", TF2000", -AD3110 ")) Hodnoty Únie (" AB0001 "), (ďalej len" AB0002 ") ");

Vo vyššie uvedenom príklade zo stola zamestnancov, identifikátorov (ID) všetkých zamestnancov pôsobiacich v oddelení, ktorých názov začína "E", potom ID tých, ktorí sa zaoberajú IF1000, IF200 projektov a AD3110, sú vylúčené z EMP_Act Účtovná tabuľka (EMP_Act). A konečne, tri ďalšie IDS sú pridané - AA0001, AB0002 a AC0003 pomocou prevádzkovateľa súborov Únie.

MySQL

V MySQL, okrem vyhlásenia nie je podporované. Prípadne môžete použiť nie v operáciách alebo neexistuje.

Prekročenie operátora extrahuje identické riadky z výsledných súborov jednej alebo viacerých požiadaviek. V niektorých ohľadoch je vyhlásenie prelínania veľmi pripomínané vnútorným pripojením.

Intersect sa vzťahuje na triedu triedy, ktorá pracuje s dátovými súbormi (nastavený operátor). Ostatní títo operátori zahŕňajú okrem Únie. Všetci operátori pre súbory údajov sa používajú na súčasné manipulovanie výsledných súborov dvoch alebo viacerých požiadaviek, odtiaľto a ich mena.

SQL2003 Syntax

Technické obmedzenia počtu požiadaviek v externerskom vyhlásení neexistujú. Všeobecná syntax je ďalej.

Pretína.

] Pretína.

Kľúčové slová

Sú zahrnuté duplicitné riadky zo všetkých súborov výsledkov.

Odlišný.

Duplicitné reťazce sa odstránia zo všetkých výsledných súborov pred porovnaním operátora prelínania. Stĺpce s prázdnymi hodnotami (null) sa považujú za duplikát. Ak nie sú uvedené žiadne kľúčové slovo ani odlišné, potom je predvolená hodnota odlišná.

Zodpovedajúci

Uvádza sa, že sa vrátia len tie stĺpce, ktoré majú jedno meno v oboch žiadostiach, sa vrátia, aj keď sa symbol (*) používa v oboch požiadavkách.

Uvádza sa, že sa vrátia len tieto stĺpce, aj keď požiadavky detekovať iné stĺpce s príslušnými menami. Tento návrh by sa mal používať s kľúčovým slovom zodpovedajúcim.

Všeobecné pravidlá

Existuje len jedno dôležité pravidlo, ktoré chcete zapamätať pri práci s operátorom prelínania.

Objednávka a počet stĺpcov vo všetkých požiadavkách by mal byť rovnako. Typy údajov zodpovedajúcich stĺpcov musia byť tiež kompatibilné.

Napríklad typy Char a Varchar sú kompatibilné. V predvolenom nastavení bude výsledná nastavená v každom stĺpci použitá veľkosť zodpovedajúca najväčšiemu typu v každej konkrétnej polohe.

Žiadna z platforiem nepodporuje príslušnú ponuku.

Podľa štandardu ANSI má externé vyhlásenie vyššie priority v porovnaní s inými prevádzkovateľmi pracovať so súbormi, hoci na rôznych platformách sa priorita takýchto prevádzkovateľov spracúva odlišne. Môžete explicitne riadiť prioritu operátorov pomocou zátvoriek. V opačnom prípade môžu DBMS vykonávať v poriadku zľava doprava alebo od prvého posledného.

Podľa štandardu ANSI sa môže použiť iba jedna objednávka podľa ponuky. Vložte ho na najostupnejšie vyhlásenie o výbere. Aby ste sa vyhli nejednoznačnosti pri špecifikovaní stĺpcov a tabuliek, uistite sa, že priraďte rovnaké alias na všetky zodpovedajúce navzájom stĺpca tabuliek. Napríklad:

Na platformách, ktoré nepodporujú vyhlásenie pre prevodenie, môžete ho nahradiť poddopätím plného spoja.

Vyberte A.AU_LNAME ako "lastName", a.au_fname ako "FirstName" od autorov ako pretínavé zvoľte E.EMP_LNAME ako "lastName", E.EMP_FNAME ako "FirstName" od zamestnancov ako E order by lastName, FirstName;

Keďže typy údajov stĺpcov v rôznych požiadavkách v operátorov prelínania môžu byť kompatibilné, môžu sa vyskytnúť rôzne možnosti práce s stĺpmi rôznych dĺžok na rôznych platformách na chibri. Napríklad, ak je stĺpec Aujname z prvej žiadosti v predchádzajúcom príklade oveľa dlhšie ako stĺpec EMPJNAME z druhého dotazu, potom rôzne platformy môžu aplikovať rôzne pravidlá na určenie konečného výsledku. Ale všeobecne povedané, platformy si vyberú výsledok dlhšej (a menej obmedzenej) veľkosti.

Každý SURGD môže aplikovať svoje vlastné pravidlá pre použitie názvu stĺpca, ak sa názvy v zoznamoch stĺpcov líšia. Zvyčajne sa používajú názvy stĺpcov prvej požiadavky.

DB2.

Platforma DB2 podporuje kľúčové slová prelínania a prelínajte sa štandard ALSI plus dodatočnú hodnotu hodnôt.

(Inštrukcie._select_7 | Hodnoty (Express7 [, ...])) pretínajú

] (inštrukcie_scj_2 | Hodnoty (vyjadrenie 2 [, ...]))

Hoci sa nepodporuje odlišné odlišné vyhlásenie, funkčný ekvivalent sa pretína. Zodpovedajúca ponuka nie je podporovaná.

Okrem toho, dlhý varchar, dlhý vargrafický, BLOB, CLOB, DBCLOB, DATALINK a konštrukčné typy sa nepoužívajú v priebežnej ponuke, ale môžete použiť všetko.

Ak je výsledný súbor údajov stĺpec, ktorý má rovnaký názov vo všetkých pokynoch, potom sa tento názov používa ako konečný názov pre stĺpec vrátenú inštrukciou. Ak sa v dotazníku pre stĺpci používajú rôzne názvy, platforma DB2 vytvorí nový názov pre výsledný stĺpec. Potom sa stane nevhodným na použitie v objednávke a pre aktualizáciu.

Ak sa viacerí operátori používa v jednom dotaze na prácu s dátovými súbormi, potom sa vykonáva prvý, ktorý je uzavretý v zátvorkách. Potom bude objednávka vykonania ponechaná vpravo. Avšak, všetky preťažené vyhlásenia sa vykonávajú do Únie a okrem vyhlásení, napríklad:

Vyberte EMPNO od zamestnanca, kde Workdept ako "E%" pretína (vyberte EMPNO z EMP_Act, kde PROJNO IN ("IF1000", "IF2000", "AD3110") Únie ("AA0001"), ("AB0001"), ("AB0001") "AC0003"))

Vo vyššie uvedenom príklade, identifikátory (ID) všetkých zamestnancov pôsobiacich v oddelení, ktorého meno začína "E", získava sa z tabuľky zamestnancov. Identifikátory sú však získané len vtedy, ak existujú aj v tabuľke účtov zamestnancov s názvom EMP_Act a zúčastňuje sa na projektoch IF1000 IF 200 a AD3110.

V tomto návode sa naučíte používať okrem operátora v SQL Serveri (Transact-SQL) so syntaxou a príkladmi.

Popis

Okrem operátora SQL Server (Transact-SQL) používaný na vrátenie všetkých riadkov v prvom výbere, ktoré nie sú vrátené podľa druhého výberu. Každé výbere definuje súbor údajov. Okrem toho, okrem operátora získajú všetky záznamy z prvého súboru údajov a potom odstrániť všetky záznamy z druhého súboru údajov z výsledkov.

Okrem žiadosti

Vysvetlenie: S výnimkou požiadavky vráti nahrávanie v sivej oblasti. Toto sú záznamy, ktoré existujú vo výbere 1, a nie na položku Vybrať 2.
Každé výbere výberu v s výnimkou dotazu musí mať rovnaký počet polí vo výsledkoch súborov s podobnými typmi údajov.

Syntax

Okrem syntaxe operátora v SQL Server (Transact-SQL):

Parametre alebo argumenty

výrazy - stĺpce alebo výpočty, ktoré chcete porovnať medzi dvoma vybranými operátormi. Nemali by to byť rovnaké polia v každej z výberových príkazov, ale zodpovedajúce stĺpce by mali byť s podobnými typmi údajov.
tabuľky - tabuľky, z ktorých chcete prijímať záznamy. Od vety musí byť aspoň jedna tabuľka.
Kde podmienky - nepovinné. Podmienky, ktoré musia byť vyplnené pre vybrané položky.

Poznámka

  • V oboch voľných operátoroch musí existovať rovnaký počet výrazov.
  • Zodpovedajúce stĺpce v každom z vybraných výrokov by mali mať podobné typy údajov.
  • Okrem operátora vráti všetky záznamy z prvého výberu, ktorý nie je zahrnutý v druhom výbere.
  • S výnimkou operátora v SQL Serveri je ekvivalentná prevádzkovateľovi mínus v Oracle.

Príklad s jedným výrazom

Poďme zvážiť príklad okrem operátora SQL Server (Transact-SQL), ktorý vráti jedno pole s rovnakým typom údajov.
Napríklad:

Transact-SQL.

Vyberte položku Product_ID z produktov okrem Select Product_ID z inventára;

Vyberte položku Product_ID.

Z produktov.

Vyberte položku Product_ID.

Z inventára;

Tento príklad A okrem operátora sa vracia všetky hodnoty produktu_id, ktoré sú v tabuľke produktov, a nie v tabuľke zásob. To znamená, že ak hodnota produktu_id existuje v tabuľke produktov a tiež existuje v tabuľke inventarizácie, hodnota Product_ID sa nebude zobrazovať v výsledkoch okrem dotazu.

Príklad s viacerými výrazmi

Potom poďme zvažovať príklad okrem dotazu v SQL Serveri (Transact-SQL), ktorý vracia viac ako jeden stĺpec.
Napríklad:

Transact-SQL.

V tomto príklade, okrem požiadavky vráti záznamy v tabuľke kontaktov s názvom Contact_ID, LAST_NAME a FIRST_NAME, ktorý sa nezhoduje s hodnotou zamestnancov_id, last_name a first_name v tabuľke zamestnancov.



Páči sa vám článok? Zdieľaj to