Contacte

Intersectează exemplele SQL. Operator pentru seturi de date intersecte. Un exemplu cu o singură expresie

SQL oferă două modalități de combinare a tabelelor:
  • specificarea tabelelor conectate (inclusiv subqueries) din fraza din instrucțiunea SELECT. În primul rând, se efectuează conectarea tabelelor și numai condițiile specificate de fraza grupului prin agregare, ordonarea datelor etc. sunt utilizate la setul rezultat.
  • definirea integrării seturilor rezultate obținute în timpul procesării instrucțiunii SELECT. În acest caz, cei doi operatori selectați sunt conectați de expresia Uniune, Intersectează., Cu exceptia sau corespunzătoare.

Uniunea Uniunii

Fraza Uniune Combină rezultatele a două cereri privind următoarele reguli:

Standardul nu impune restricții asupra rândurilor de streaming în setul rezultat. Deci, unele dbms afișează mai întâi rezultatul primei cereri și apoi rezultatul celei de-a doua interogări. Oracle DBMS sortează automat înregistrările de pe prima coloană specificată, chiar dacă indicele nu este creat pentru acesta.

Pentru a specifica în mod explicit ordinea de sortare dorită, ar trebui utilizată ordinea cu fraza. În acest caz, puteți utiliza atât numele coloanei, cât și numărul acestuia (figura 4.3).


Smochin. 4.3.

Fraza Uniune Toate efectuează unirea a două subquerie în același mod ca și fraza Uniunii cu următoarele excepții:

  • liniile de coincidare nu sunt eliminate din setul rezultat rezultat;
  • interogările combinate sunt afișate în setul rezultat secvențial fără a comanda.

Când combinați mai mult de două cereri de modificare a ordinului operației de îmbinare, puteți utiliza paranteze (figura 4.4).


Smochin. 4.4.

Intersect-Association

Fraza Intersectează. Vă permite să selectați numai acele linii care sunt prezente în fiecare set rezultat unic. În fig. 4.5 Un exemplu de combinare a cererilor ca seturi de intersectare este dată.


Smochin. 4.5.

Cu excepția Uniunii

Fraza Cu exceptia Vă permite să selectați numai acele linii care sunt prezente în primul set rezultat combinat, dar sunt absente în cel de-al doilea set de rezultate.

Fraze Intersectează. și Cu exceptia Trebuie să fie susținută numai cu nivelul complet de conformitate al standardului SQL-92. Deci, unele dbms în loc de expresie

Există o singură regulă importantă de utilizare a instrucțiunii cu excepția că trebuie să vă amintiți.

Ordinea, cantitatea și tipurile de coloane de date trebuie să fie de același tip în toate solicitările.

Potrivit standardului ANSI, operatorii cu unire și cu excepția seturilor au aceeași prioritate, dar declarația intersectează în fața altor operatori pentru seturi. Vă recomandăm în mod explicit pentru a gestiona prioritatea operatorilor care utilizează paranteze. Aceasta este, în general, o practică foarte bună.

Conform standardului ANSI, poate fi utilizată o singură comandă prin ofertă. Introduceți-l la cea mai ușoară dintre cele mai recente instrucțiuni de selecție. Pentru a evita ambiguitatea în specificarea coloanelor și a tabelelor, asigurați-vă că ați atribuit aceleași alias la toate celelalte coloane ale tabelelor. De exemplu:

Selectați AU_LNAME ca "LastName", AU_FNAME ca "FirstName" de la autori, cu excepția selectată Emp_lname ca "Lastname", Emp_Fame ca "FirstName" de la comenzile angajaților după numele de familie, Prenume;

În plus, deoarece în fiecare listă de coloane, coloanele pot fi indicate cu tipuri de date compatibile, pot să apară diverse opțiuni pentru a lucra cu coloane de diferite lungimi pe diferite platforme de surbd. De exemplu, dacă coloana AU_LNAME de la prima solicitare din exemplul anterior este mult mai lungă decât coloana EMP_LNAME de la a doua cerere, atunci diferite platforme pot aplica reguli diferite pentru determinarea lungimii rezultatului final. Dar, în general, platformele vor alege rezultatul unei mărimi mai lungi (și mai puțin limitate).

Fiecare surgd poate aplica propriile reguli pentru utilizarea numelui coloanei dacă numele din listele coloanelor diferă. În cazul general, sunt utilizate numele primelor coloane de solicitare.

Tipurile de date nu ar trebui să fie identice, dar trebuie să fie compatibile. De exemplu, tipurile de caractere și varchar sunt compatibile. În mod prestabilit, setul rezultat din fiecare coloană va fi utilizat dimensiunea corespunzătoare celui mai mare tip din fiecare poziție specifică. De exemplu, o cerere care extrage datele din coloane care conțin valori de tip Varchar (IO) și Varchar (15) vor folosi tipul și dimensiunea Varchar (15).

Niciuna dintre platforme nu acceptă oferta corespunzătoare) cu excepția

(SELECT STATELOR.2 | Valori (expresie, expresie2 [, ...])) cu excepția

Vă permite să specificați una sau mai multe coloane definite manual, care sunt incluse în setul de rezultat final. (Aceasta se numește designerul rândului.) În valoarea valorilor, trebuie să existe exact atât de multe coloane, deoarece acestea sunt specificate în interogările cu excepția operatorului. Deși instrucțiunea distinctă, nu este acceptată, echivalentul funcțional este cu excepția. Oferta corespunzătoare nu este acceptată. De asemenea, varchar lung, vargrafic lung, blob, clob, dbcob, datalink, datalink și tipuri structurale nu sunt utilizate în oferta, dar ele pot fi utilizate în afară de toate.

Dacă setul de date rezultat este o coloană care are același nume în toate instrucțiunile selectate, atunci acest nume este utilizat ca nume final pentru coloana returnată de instrucțiuni. Dacă această coloană este numită diferită în instrucțiuni diferite de selectare, atunci trebuie să redenumiți coloana în toate solicitările folosind același ca un pseudonim în toate acestea.

Dacă mai mulți operatori sunt utilizați într-o întrebare pentru a lucra cu seturi de date, atunci se efectuează primul care este închis în paranteze. După aceasta, ordinea de executare va fi lăsată la dreapta. Cu toate acestea, toate declarațiile intersectează sunt efectuate înainte de unire și cu excepția operatorilor. De exemplu:

Selectați Empno de la angajat în cazul în care WorkEpt-ul de lucru ca "E%", cu excepția SELECT EMPNO de la EMP_ACT, unde projno în (TF1000 ", TF2000", -AD3110 "), (" AB0002 "), (" AC0003 ");

În exemplul de mai sus din tabelul angajatului, identificatorii (ID) al tuturor angajaților care operează în departament, numele căruia începe cu "e", atunci ID-ul celor angajați în proiectele IF1000, IF200 și AD3110 sunt excluse din EMP_ACT Tabelul de cont. Și, în final, sunt adăugate trei ID-uri suplimentare - AA0001, AB0002 și AC0003 utilizând operatorul seturilor Uniunii.

Mysql.

În MySQL, declarația de excepție nu este acceptată. Alternativ, puteți utiliza nu în operațiuni sau nu există.

Intersectarea operatorului extrage linii identice din seturile rezultate ale uneia sau mai multor cereri. În anumite privințe, declarația intersectează este foarte reamintată de un se alătură interiorului.

Intersecte se referă la clasa de clasă pentru a lucra cu seturi de date (operator setat). Alți astfel de operatori includ, cu excepția Uniunii. Toți operatorii pentru seturile de date sunt utilizate pentru a manipula simultan seturile de două sau mai multe cereri, de aici și numele lor.

SQL2003 Sintaxă

Restricțiile tehnice privind numărul de solicitări din declarația intersectează nu există. Sintaxa generală este următoarea.

Intersectează.

] Intersectează.

Cuvinte cheie

Linii duplicate din toate seturile de rezultate sunt incluse.

Distinct.

Corzile duplicate sunt îndepărtate din toate seturile rezultate înainte de a compara operatorul intersectului. Coloanele cu valori goale (nul) sunt considerate duplicate. Dacă nici cuvântul cheie, nici distinct este indicat, atunci implicit este distinct.

Corespunzător

Se indică faptul că numai acele coloane care au un nume în ambele solicitări vor fi returnate, chiar dacă simbolul (*) este utilizat în ambele solicitări.

Se indică faptul că numai aceste coloane vor fi returnate, chiar dacă cererile detectează alte coloane cu numele corespunzătoare. Această propunere ar trebui utilizată cu cuvântul cheie corespunzător.

Reguli generale

Există o singură regulă importantă pe care doriți să o amintiți când lucrați cu operatorul intersectului.

Ordinea și numărul de coloane în toate cererile ar trebui să fie în mod egal. Tipurile de date ale coloanelor corespunzătoare trebuie, de asemenea, să fie compatibile.

De exemplu, tipurile de caractere și varchar sunt compatibile. În mod prestabilit, setul rezultat din fiecare coloană va fi utilizat dimensiunea corespunzătoare celui mai mare tip din fiecare poziție specifică.

Niciuna dintre platforme nu acceptă oferta corespunzătoare.

Conform standardului ANSI, declarația intersectează are o prioritate mai mare față de alți operatori de a lucra cu seturi, deși pe platforme diferite, prioritatea acestor operatori este procesată diferit. Puteți gestiona în mod explicit prioritatea operatorilor care utilizează paranteze. În caz contrar, DBMS-ul le poate interpreta în ordine de la stânga la dreapta sau de la primul până la ultima.

Conform standardului ANSI, poate fi utilizată o singură comandă prin ofertă. Introduceți-l la cea mai ușoară dintre cele mai recente instrucțiuni de selecție. Pentru a evita ambiguitatea în specificarea coloanelor și a tabelelor, asigurați-vă că ați atribuit aceleași alias la toate celelalte coloane ale tabelelor. De exemplu:

Pe platformele care nu acceptă declarația Intersectect, îl puteți înlocui cu o subquey Full Alăturați-vă.

Selectați A.AU_LNAME ca "LastName", A.AU_FNAME ca "FirstName" de la autori ca un intersectați selectați E.EMP_LNAME ca "LastName", E.Emp_FName ca "FirstName" de la angajați ca E Or Comandă cu numele de familie, Prenume;

Deoarece tipurile de date ale coloanei din diferite cereri din cadrul operatorului intersecțional pot fi compatibile, pot apărea diferite opțiuni pentru coloanele cu diferite lungimi pe diferite platforme surbd. De exemplu, dacă coloana AUJAME de la prima solicitare din exemplul anterior este mult mai lungă decât coloana Empjame de la a doua interogare, atunci diferite platforme pot aplica reguli diferite pentru determinarea rezultatului final. Dar, în general, platformele vor alege rezultatul unei mărimi mai lungi (și mai puțin limitate).

Fiecare surgd poate aplica propriile reguli pentru utilizarea numelui coloanei dacă numele din listele coloanelor diferă. Numele primelor coloane de solicitare sunt de obicei utilizate.

DB2.

Platforma DB2 acceptă cuvintele cheie intersecte și intersectează standardul ALSI plus o valoare suplimentară a valorilor.

(Instrucțiuni._Select_7 | Valorile (exprimarea7 [, ...])) se intersectează

] (instrucțiuni_scj_2 | Valorile (exprimarea 2 [, ...])) se intersectează

Deși declarația distinctă intersectată nu este acceptată, echivalentul funcțional este intersectat. Oferta corespunzătoare nu este acceptată.

În plus, varchar lung, vargrafic lung, blob, clob, dbcob, datalink și tipuri structurale nu sunt utilizate în oferta Intersect, dar puteți utiliza Intersect Totul.

Dacă setul de date rezultat este o coloană care are același nume în toate instrucțiunile selectate, atunci acest nume este utilizat ca nume final pentru coloana returnată de instrucțiuni. Dacă se utilizează diferite nume în interogări pentru coloană, platforma DB2 va genera un nume nou pentru coloana rezultată. După aceasta, ea devine nepotrivită pentru utilizare în ordine și pentru ofertele de actualizare.

Dacă mai mulți operatori sunt utilizați într-o întrebare pentru a lucra cu seturi de date, atunci se efectuează primul care este închis în paranteze. După aceasta, ordinea de executare va fi lăsată la dreapta. Cu toate acestea, toate declarațiile intersectează sunt efectuate în Uniune și cu excepția situațiilor, de exemplu:

Selectați Empno de la angajat în cazul în care WorkEpt-ul de lucru ca "E%" se intersectează (selectați Empno de la EMP_ACT, unde projno în ("IF1000", "IF1000" "," AD3110 "), (" AA0001 "), (" Ab0002 "), ( "AC0003"))

În exemplul de mai sus, identificatorii (ID) al tuturor angajaților care operează în departament, al căror nume începe cu "E" este recuperat din tabelul angajatului. Cu toate acestea, identificatorii sunt recuperați numai dacă există și în tabelul conturilor angajatului cu numele EMP_ACT și participați la proiectele IF1000, IF200 și AD3110.

În acest tutorial, veți învăța cum să utilizați cu excepția operatorului în SQL Server (Transact-SQL) cu sintaxă și exemple.

Descriere

Cu excepția operatorului SQL Server (TRANSACT-SQL) folosit pentru a returna toate rândurile din prima instrucțiune selectată, care nu sunt returnate de a doua instrucțiune SELECT. Fiecare instrucțiune selectată va defini un set de date. Operatorul fără excepție va extrage toate înregistrările de la primul set de date, apoi va șterge toate înregistrările de la cel de-al doilea set de date din rezultate.

Cu excepția cererii

Explicaţie: Cu excepția cererii va returna înregistrarea într-o zonă gri umbrită. Acestea sunt înregistrările care există în selectarea 1 și nu în selectarea 2.
Fiecare instrucțiune selectată într-o întrebare cu excepția interogării trebuie să aibă același număr de câmpuri din rezultatele seturilor cu tipuri de date similare.

Sintaxă

Cu excepția sintaxei operatorului în SQL Server (Transact-SQL):

Parametri sau argumente

expresii - coloane sau calcule pe care doriți să le comparați între doi operatori selectați. Acestea nu ar trebui să fie aceleași câmpuri în fiecare dintre declarațiile selectate, dar coloanele corespunzătoare ar trebui să fie cu tipuri de date similare.
tabele - tabele din care doriți să primiți înregistrări. Trebuie să existe cel puțin o masă enumerată în propoziție.
Unde condițiile - opțional. Condiții care trebuie completate pentru intrările selectate.

Notă

  • În ambele operatori selectați, trebuie să existe același număr de expresii.
  • Coloanele corespunzătoare din fiecare dintre instrucțiunile selectate ar trebui să aibă tipuri similare de date.
  • Cu excepția operatorului returnează toate înregistrările din prima instrucțiune selectată care nu este inclusă în a doua instrucțiune SELECT.
  • Cu excepția operatorului din SQL Server este echivalent cu operatorul minus din Oracle.

Un exemplu cu o singură expresie

Să luăm în considerare un exemplu de un operator, cu excepția operatorului SQL (Transact-SQL), care returnează un câmp cu același tip de date.
De exemplu:

Transact-SQL.

Selectați Product_ID din produse, cu excepția Selectați Product_ID din inventar;

Selectați produs_id.

De la produse.

Selectați produs_id.

Din inventar;

Acest exemplu de operator, cu excepția operatorului, returnează toate valorile Product_ID care sunt în tabelul de produse și nu în tabelul de inventar. Acest lucru înseamnă că, dacă valoarea produsului_ID există în tabelul Produse și există, de asemenea, în tabelul de inventar, valoarea produsului_ID nu va fi afișată în rezultatele cu excepția interogării.

Exemplu cu expresii multiple

Apoi, să luăm în considerare un exemplu de interogare cu excepția SQL Server (Transact-SQL), care returnează mai mult de o coloană.
De exemplu:

Transact-SQL.

În acest exemplu, cererea, cu excepția returnează înregistrările din tabelul de contacte cu numele contact_id, ultimul_name și primul nume, care nu se potrivește cu valoarea angajatului_ID, Last_Name și First_Name în tabelul Angajați.



Ți-a plăcut articolul? Împărtășește-l