Combinarea interogărilor selectate. Folosind UNION în SQL

Am scris deja despre. Și acolo rezultatul unui tabel depindea de conținutul altuia. Dar uneori este necesar atunci când este necesară independența completă a ieșirii unui tabel față de altul. Tot ce vrei este simplu extrage înregistrări din mai multe tabele simultan într-o singură interogare, nimic mai mult. Și pentru asta cuvântul cheie UNION este folosit în SQL.

Hai să rezolvăm cu tine Interogare SQL folosind UNION:

SELECT `login`, `mount` FROM `employers` UNION SELECT `login`, `mount` FROM `staff`;

Această solicitare va returna datele de conectare și sumele din conturile tuturor angajatorilor și angajaților unui anumit site. Adică datele erau în tabele diferite, dar asemănarea lor permite afișarea lor imediată. Aceasta, apropo, vine din regula de utilizare interogări UNION: Numărul și ordinea câmpurilor trebuie să fie aceleași în toate părțile cererii.

Astfel de UNION-piese pot fi multe, dar cel mai important lucru După ultima UNIRE trebuie să puneți punct și virgulă.

O altă caracteristică bună UNIUNE este lipsa repetarii. De exemplu, dacă aceeași persoană se află atât printre angajați, cât și printre angajatori, desigur, cu aceeași sumă în cont, atunci va fi în eșantion nu de 2 ori, ci doar 1, care este de obicei ceea ce este necesar. Dar dacă mai aveți nevoie de repetări, atunci există UNIREA TOȚI:

SELECT `login`, `suma` FROM `employers` UNION ALL SELECT `login`, `mount` FROM `staff`;

Ca aceasta în interogarea SQL este folosit un operator UNION destul de simplu, care simplifică procedura de ieșire din mai multe tabele de același tip de date simultan, ceea ce la rândul său va avea un efect foarte bun asupra performanței.

Operatorul UNION pentru lucrul cu seturi de date combină seturile de rezultate a două sau mai multe interogări și afișează toate rândurile tuturor interogărilor ca un singur set de rezultate.

UNION aparține clasei de operatori pentru lucrul cu seturi de date (operator set). Alți astfel de operatori includ INTERSECT și EXCERT (EXCERT și MINUS sunt echivalente funcționale, dar EXCERT face parte din standardul ANSI Toți operatorii setului de date sunt utilizați pentru a manipula simultan seturile de rezultate a două sau mai multe interogări, de unde și numele lor).

Sintaxă S0L2003

Nu există restricții tehnice privind numărul de interogări în operatorul UNION. Sintaxa generală este următoarea.

UNIUNE

UNIUNE

Cuvinte cheie

UNIUNE

Indică faptul că seturile de rezultate vor fi îmbinate într-un singur set de rezultate. Rândurile duplicat sunt eliminate implicit.

TOATE

Rândurile duplicate din toate seturile de rezultate sunt, de asemenea, îmbinate.

DISTINCT

Rândurile duplicat sunt eliminate din setul de rezultate. Coloanele care conțin valori NULL sunt considerate duplicate. (Dacă nu sunt folosite cuvintele cheie ALL și DISTINCT, valoarea implicită este DISTINCT.)

Reguli generale

Există o singură regulă importantă de reținut atunci când utilizați operatorul UNION: ordinea, numărul și tipul de date al coloanelor trebuie să fie identice în toate interogările.

Tipurile de date nu trebuie să fie identice, dar trebuie să fie compatibile. De exemplu, tipurile CHAR și VARCHAR sunt compatibile. În mod implicit, tsaborul rezultat utilizează dimensiunea celui mai mare tip compatibil și, într-o interogare care combină trei coloane CHAR - CHAR(5), CHAR(IO) și CHAR(12), rezultatele vor fi în format CHAR(12) , iar în coloane dimensiuni mai mici vor adăuga spații suplimentare.

Deși standardul ANSI specifică că operatorul INTERSECT are o prioritate mai mare decât alți operatori de set, pe multe platforme acești operatori sunt tratați ca având aceeași prioritate. Puteți controla în mod explicit prioritatea operatorului folosind paranteze. În caz contrar, cel mai probabil DBMS le va executa în ordine de la stânga la dreapta.

Clauza DISTINCT poate avea (în funcție de platformă) o suprasolicitare semnificativă a performanței, deoarece necesită adesea o trecere suplimentară prin setul de rezultate pentru a elimina înregistrările duplicate. Clauza ALL poate fi specificată pentru a îmbunătăți performanța în toate cazurile în care nu sunt așteptate duplicate (sau în care duplicatele sunt acceptabile).

Conform standardului ANSI, puteți utiliza o singură clauză ORDER BY într-o interogare. Plasați-l la sfârșitul ultimei instrucțiuni SELECT. Pentru a evita ambiguitatea atunci când specificați coloanele și tabelele, asigurați-vă că oferiți tuturor coloanelor din toate tabelele aliasuri adecvate. Cu toate acestea, atunci când se specifică nume de coloane într-o interogare SELECT ... UNION, este folosit doar aliasul de la prima interogare. De exemplu:

SELECT au_lname AS prenume, au_fname AS prenume FROM autori UNION SELECT emp_lname AS nume, emp_fname AS prenume FROM angajați ORDER BY nume, prenume;

În plus, deoarece interogările operatorului UNION pot conține coloane cu tipuri de date compatibile, pot exista variații în comportamentul codului între platforme, în special în ceea ce privește lungimea tipului de date al coloanei. De exemplu, dacă coloana au_fname a primei interogări este vizibil mai lungă decât coloana emplname a celei de-a doua interogări, atunci diferite platforme pot avea reguli diferite pentru a determina lungimea de utilizat. Cu toate acestea, în general, platformele aleg un tip de date mai lung (și mai puțin restrictiv) pentru setul de rezultate.

Fiecare RDBMS poate aplica propriile reguli pentru determinarea numelui coloanei dacă coloanele din tabele diferite au nume diferite. De obicei, sunt folosite numele de la prima solicitare.

DB2

Platforma DB2 acceptă cuvintele cheie ANSI UNION și UNION ALL plus clauza VALUES.

[, (expresie-!, expresie2, …)] […] […]

Vă permite să specificați unul sau mai multe seturi de valori definite manual pentru înregistrările dintr-un set de rezultate combinat. Fiecare dintre aceste valori trebuie să conțină exact același număr de coloane ca interogările operatorului UNION. Rândurile de valori din setul de rezultate sunt separate prin virgule.

Deși clauza UNION DISTINCT nu este acceptată, echivalentul funcțional este clauza UNION. Clauza CORRESPONDANT nu este acceptată.

Tipurile de date precum VARCHAR, LONG VARGRAPHIC, BLOB, CLOB, DBCLOB, DATALINK și tipurile de structură nu pot fi utilizate cu cuvântul cheie UNION (dar pot fi utilizate cu clauza UNION ALL).

Dacă toate tabelele folosesc același nume de coloană, setul de rezultate folosește acel nume. Dacă numele coloanelor sunt diferite, DB2 generează un nou nume de coloană. Coloana nu poate fi folosită atunci într-o clauză ORDER BY sau într-o clauză FOR UPDATE.

Dacă se folosesc mai mulți operatori pe seturi de date într-o singură interogare, cei încadrați în paranteze sunt executați mai întâi. Instrucțiunile sunt apoi executate în ordine de la stânga la dreapta. Cu toate acestea, toate operațiunile INTERSECT sunt efectuate înaintea operațiunilor UNION sau EXCEPT. De exemplu:

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

În acest exemplu, obținem toate ID-urile angajaților din tabelul de angajați care se află în orice departament cu un nume care începe cu „E”, precum și ID-urile tuturor angajaților din tabelul de contabilitate emp_act care lucrează în proiectele IF1000 „, „IF2000” și „AD3110”. În plus, ID-urile angajaților „AA000T, „AB0002” și „AC00031” sunt întotdeauna incluse aici.

MySQL

Nu este acceptat.

Oracol

Platforma Oracle acceptă standardul ANSI SQL UNION și UNION ALL cuvintele cheie. Sintaxa este următoarea.

Oracle nu acceptă clauza CORRESPONDING. Clauza UNION DISTINCT nu. este acceptat, dar echivalentul funcțional este clauza UNION. Platforma Oracle nu acceptă utilizarea clauzelor UNION ALL și UNION în următoarele situații.

Dacă prima interogare din instrucțiune conține expresii din lista de elemente, atunci aliați coloana folosind clauza AS. În plus, numai ultima interogare din instrucțiune poate conține o clauză ORDER BY. De exemplu, puteți obține toate ID-urile unice ale magazinului (store_ids), fără duplicate, folosind următoarea interogare.

SELECT stor_id FROM magazine UNION SELECT stor_id FROM vânzări;

PostgreSQL

Platforma PostgreSQL acceptă cuvintele cheie UNION și UNION ALL din sintaxa standard ANSI.

instructiuni SELECT 2 UNION

Platforma PostgreSQL nu acceptă utilizarea clauzelor UNION și UNION ALL în interogările cu o clauză FOR UPDATE. PostgreSQL nu acceptă clauza CORRESPONDING. Clauza UNION DISTINCT nu este acceptată; echivalentul funcțional este clauza UNION.

Prima interogare din instrucțiune nu poate conține clauze ORDER BY sau LIMIT. Interogările ulterioare cu clauze UNION și UNION ALL pot conține aceste clauze, dar astfel de interogări trebuie incluse între paranteze. În caz contrar, clauza ORDER BY sau LIMIT din dreapta se va aplica întregii operațiuni.

SELECT a.au_lname FROM autorii AS a WHERE a.au_lnanie LIKE "P%" UNI0N SELECT e.lname FROM angajati AS e WHERE e.lname LIKE "P%";

SQL Server

Platforma SQL Server acceptă cuvintele cheie UNION și UNION ALL în sintaxa standard ANSI.

SELECT 1 instrucțiune UNION

Instrucțiunea SELECT 2 UNION

SQL Server nu acceptă clauza CORRESPONDING. Clauza UNION DISTINCT nu este acceptată, dar echivalentul funcțional este clauza UNION.

Cu clauzele UNION și UNION ALL, puteți utiliza instrucțiunea SELECT...INTO, dar cuvântul cheie INTO trebuie să apară în prima interogare a operatorului union. Cuvinte cheie speciale precum SELECT TOP și GROUP BY...WITH CUBE pot fi folosite în toate interogările de alăturare. Cu toate acestea, asigurați-vă că includeți aceste sugestii în toate solicitările de înscriere. Dacă utilizați clauzele SELECT TOP sau GROUP BY... WITH CUBE în aceeași interogare, operația va eșua.

Toate interogările dintr-o îmbinare trebuie să conțină același număr de coloane. Tipurile de date ale coloanelor nu trebuie să fie identice, dar trebuie să fie implicit castabile unele cu altele. De exemplu, coloanele CHAR și VARCHAR pot fi utilizate împreună. La ieșirea datelor, SQL Server utilizează dimensiunea celei mai mari coloane atunci când determină dimensiunea tipului de date pentru o coloană de set de rezultate. Astfel, dacă o instrucțiune SELECT... UNION folosește coloanele CHAR(5) și CHAR(IO), datele din ambele coloane vor fi scoase în coloana CHAR(IO). Tipurile de date numerice sunt turnate și afișate ca tipul cu cea mai mare precizie.

De exemplu, următoarea interogare combină rezultatele a două interogări independente care utilizează clauza GROUP BY...WITH CUBE.

Operatorul SQL UNION este conceput pentru a combina tabelele rezultate din bazele de date obținute folosind cuvântul SELECT. Condiție de îmbinare a tabelelor rezultate: coincidența numărului, ordinii și tipului de date al coloanelor. ORDER BY ar trebui aplicat rezultatului unei îmbinări și plasat numai la sfârșitul unei interogări compuse. Operatorul UNION are următoarea sintaxă:

SELECTAȚI COLUMN_NAMES (1..N) DIN TABLE_NAME UNION SELECTAȚI COLUMN_NAMES (1..N) FROM TABLE_NAME

În acest design, interogările care sunt alăturate pot avea sau nu condiții în clauza WHERE. Folosind operatorul UNION, puteți combina interogări pentru a prelua date atât dintr-un tabel, cât și din altele.

Când se folosește operatorul UNION fără cuvântul ALL, rezultatul nu conține duplicate, dar cu cuvântul ALL, rezultatul conține duplicate.

Totaluri și valori individuale într-un singur tabel folosind operatorul SQL UNION

Cu o singură interogare, puteți afișa valori individuale ale coloanei din tabel, de exemplu, numărul de ani lucrați de angajații companiei, salariile acestora și altele. O altă cerere - folosind funcții agregate- puteți obține, de exemplu, suma salariilor primite de angajații departamentelor sau care dețin anumite funcții, sau numărul mediu de ani de experiență în muncă (în astfel de interogări, gruparea este utilizată folosind operatorul GROUP BY).

Ce se întâmplă dacă trebuie să obținem atât un rezumat al tuturor valorilor individuale, cât și al valorilor totale într-un singur tabel? Aici vine în ajutor operatorul SQL UNION, cu ajutorul căruia sunt combinate două interogări. Rezultatul unirii trebuie ordonat folosind clauza ORDER BY. De ce este necesar acest lucru va fi mai bine înțeles din exemple.

Exemplul 1. Baza de date a companiei are un tabel Staff care conține date despre angajații companiei. Conține coloanele Salariu (suma salariului), Loc de muncă (poziție) și Ani (durata experienței de muncă). Prima interogare returnează sumele salariale individuale, sortate după post:

SELECTAȚI Numele, Postul, Salariul DIN COMANDA PERSONALULUI DUPĂ Job

NumePostSalariu
SandersMgr18357.5
MarenghiMgr17506.8
PernalVânzări18171.2
DoctorVânzări12322.4
factorVânzări16228.7

A doua interogare va returna salariul total pe post. Pregătim deja această interogare pentru a se conecta cu prima, așa că ne vom aminti că condiția de conectare este un număr egal de coloane, coincidența numelor lor, a ordinii și a tipurilor de date. Prin urmare, includem și coloana Nume cu o valoare arbitrară „Z-TOTAL” în tabelul cu totaluri:

SELECTAȚI „Z-TOTAL” CA Nume, Postă, SUMA (Salariu) CA Salariul DIN GRUP DE PERSONAL PE Post

Rezultatul interogării va fi următorul tabel:

NumePostSalariu
Z-TOTALMgr35864.3
Z-TOTALVânzări46722.3

Acum să combinăm interogări folosind operatorul UNION și să aplicăm operatorul ORDER BY la rezultatul uniunii. Ar trebui să grupați pe două coloane: Job și Nume, astfel încât rândurile cu valori totale, în care valoarea numelui este „Z-TOTAL”, să fie sub rândurile cu valori individuale. Concatenarea rezultatelor interogării va fi după cum urmează:

(SELECTAȚI Nume, Loc, Salariu DIN PERSONAL ) SINDICAT (SELECTARE „Z-TOTAL” CA Nume, Postă, SUMA (Salariu) CA Salariul DIN GRUP DE PERSONAL DUPĂ Loc de muncă) ORDINAȚI PE Post, Nume

Rezultatul rulării unei interogări cu operatorul UNION va fi următorul tabel, în care fiecare prim rând din fiecare grupă de posturi va conține salariul total al angajaților care lucrează în această poziție:

NumePostSalariu
MarenghiMgr17506.8
SandersMgr18357.5
Z-TOTALMgr35864.3
DoctorVânzări12322.4
factorVânzări16228.7
PernalVânzări18171.2
Z-TOTALVânzări46722.3

Scrieți dvs. interogări folosind UNION și apoi vedeți soluția

Exemplul 2. Datele sunt aceleași ca în exemplul 1, dar sarcina este puțin mai complicată. Este necesar să se afișeze într-un singur tabel nu numai salariile individuale, sortate după post și salariul total pe post, ci și salariul total pentru toți angajații.

Exemplul 3. Baza de date a companiei are un tabel Staff care conține date despre angajații companiei. Conține coloanele Nume (nume), Departament (numărul departamentului) și Ani (durata experienței de muncă).

NumeDeptDe ani
Sanders20 7
Pernal20 8
Marenghi38 5
Doctor20 5
factor38 8

Afișați într-un singur tabel vechimea medie în muncă pe departament și valorile individuale ale duratei de experiență de muncă a angajaților grupate pe numerele departamentelor.

Alte utilizări pentru alăturarea interogărilor pe același tabel utilizând operatorul SQL UNION

Exemplul 4. Baza de date a companiei are un tabel Staff care conține date despre angajații companiei. Conține coloanele Salariu (suma salariului), Loc de muncă (poziție) și Ani (durata experienței de muncă). Prima solicitare este necesară pentru a obține date despre angajații al căror salariu este mai mare de 21.000:

Rezultatul interogării va fi următorul tabel:

Acum aveți nevoie de date care să combine criteriile de selecție aplicate în cele două interogări. Combinăm interogări folosind operatorul UNION:

Rezultatul rulării unei interogări cu operatorul UNION va fi următorul tabel:

IDNume
10 Sanders
30 Marenghi
100 Plot
140 Fraye
160 Molinare
240 Daniels
260 Jones

O interogare cu operatorul UNION poate returna un număr mai mare de coloane este important, repetăm, ca în interogările care se combină, numărul de coloane, ordinea acestora și tipurile de date.

Să presupunem că doriți mai întâi să obțineți date despre categorii și părți ale categoriilor de anunțuri în care sunt trimise peste 100 de anunțuri pe săptămână. Scriem următoarea cerere:

Rezultatul interogării va fi următorul tabel:

Rezultatul interogării va fi următorul tabel:

Acum trebuie să extrageți date care corespund criteriilor primei și celei de-a doua interogări. Combinăm interogări folosind operatorul UNION:

Rezultatul interogării va fi următorul tabel:

Unirea rezultatelor interogării pe două tabele folosind operatorul SQL UNION

Până acum, am analizat interogările cu operatorul UNION, care combină rezultatele dintr-un singur tabel. Acum vom combina rezultatele din cele două tabele.

Exemplul 6. Există o bază de date a unui depozit de materiale de construcție. Conține tabele care conțin date de fundal. Tabelul Vinil conține date despre tapetul din vinil, Tabelul Paper - despre tapetul din hârtie. Trebuie să aflați date despre prețurile tapetului dintr-un tabel și altul.

Pentru a extrage date neduplicate despre prețurile pentru tapet de vinil, creați o interogare cu cuvântul DISTINCT:

SELECTAȚI PREȚUL DISTINCT DIN VINIL

Rezultatul interogării va fi următorul tabel:

Acum să creăm o interogare combinată cu operatorul UNION:

SELECTAȚI PREȚ DIFERENT DIN VINIL UNION SELECTEȚI PREȚ DIFERENT DIN HÂRTIE

Deoarece nu folosim cuvântul ALL, valorile duplicate de 400, 500 și 530 nu vor fi afișate. Rezultatul interogării va fi următorul tabel:

Preţ
300
320
360
400
430
500
530
610
720
800
850

Exemplul 7. Baza de date și tabelele sunt aceleași ca în exemplul anterior.

Este necesar să obțineți toate datele de preț, inclusiv cele repetate. Solicitarea de combinare a rezultatelor folosind operatorul UNION va fi similară cu solicitarea din exemplul anterior, dar în loc de doar UNION scriem UNION ALL:

SELECTAȚI PREȚ DIFERENT DIN VINIL UNION TOATE SELECTEȚI PREȚ DIFERENT DIN HÂRTIE

Rezultatul interogării va fi următorul tabel:

Preţ
300
320
360
400
400
430
500
500
530
530
610
720
800
850

Folosind operatorul SQL UNION, puteți combina atât interogări simple cât și interogări care conțin subinterogări (interogări imbricate). Să ne uităm la un exemplu corespunzător.

Exemplul 8. Există o bază de date „Teatru”. Tabelul său Play conține date despre producții (nume în coloana Nume), iar tabelul Director conține date despre regizori (prenume în coloana Fname, prenume în coloana Lname). Cheia primară a tabelului Director este dir_id - numărul de identificare al directorului. Dir_id este, de asemenea, o cheie externă a tabelului Play, se referă la cheia primară a tabelului Director. Este necesar să producă producții regizate de John Barton și Trevor Nunn.

Soluţie. Să combinăm rezultatele a două interogări - una returnează spectacole ale regizorului John Barton, cealaltă - ale regizorului Trevor Nunn. Și facem fiecare dintre aceste interogări îmbinate în tabelul Play cu o subinterogare în tabelul Director, care returnează dir_id după numele și prenumele directorului. Fiecare interogare exterioară ia valoarea cheii dir_id din interogarea imbricată și returnează numele producțiilor (Nume):

Baze de date relaționale și limbaj SQL

În acest tutorial veți învăța cum să utilizați Operatorul MySQL UNION cu sintaxa si exemple.

Descriere

Operatorul MySQL UNION folosit pentru a combina seturi de rezultate din 2 sau mai multe clauze SELECT. Îndepărtează liniile duplicate între diferite clauze SELECT.

Fiecare clauză SELECT din operatorul UNION trebuie să aibă același număr de câmpuri în seturile de rezultate cu aceleași tipuri de date.

Sintaxă

Sintaxa operatorului UNION din MySQL este:

Parametri sau Argumente

expresie1 , expresie2 , ... expresie_n sunt coloanele sau calculele pe care doriți să le returnați.
tabele - tabele din care doriți să obțineți înregistrări. Trebuie să existe cel puțin un tabel listat în clauza FROM.
Condiții WHERE - opțional. Condiții care trebuie îndeplinite pentru înregistrările selectate.
DISTINCT - opțional. Elimină duplicatele din setul de rezultate, dar includerea modificatorului DISTINCT nu afectează setul de rezultate al operatorului UNION, deoarece operatorul UNION elimină deja duplicatele în mod implicit.

Nota

  • Ambele clauze SELECT trebuie să aibă același număr de expresii.
  • Deoarece operatorul UNION elimină în mod implicit toate rândurile duplicate din setul de rezultate, furnizarea modificatorului UNION DISTINCT nu afectează rezultatele.
  • Numele coloanelor din prima clauză SELECT din instrucțiunea UNION sunt folosite ca nume de coloane pentru setul de rezultate.

Exemplu care returnează un câmp

Mai jos este un exemplu de operator MySQL UNION care returnează un câmp din mai multe clauze SELECT (și ambele câmpuri au același tip de date):

MySQL

SELECT furnizor_id FROM furnizori UNION SELECT furnizor_id FROM detalii_comandă;

SELECT furnizor_id

DE LA furnizori

UNIUNE

SELECT furnizor_id

FROM detalii_comandă;

În acest exemplu de operator MySQL UNION, dacă supplier_id este folosit atât în ​​tabelul furnizori, cât și în tabelul order_details, acesta va apărea o dată în setul de rezultate. Operatorul MySQL UNION va elimina duplicatele. Dacă nu doriți să eliminați duplicatele, încercați să utilizați operatorul MySQL UNION ALL.

Exemplu - Utilizarea ORDER BY

Operatorul MySQL UNION poate folosi o clauză ORDER BY pentru a determina rezultatele unei interogări.

Lecția va acoperi subiectul utilizării operațiilor de interogare de unire, intersecție și diferență. Exemple de utilizare Interogare SQL Unire, Există și utilizarea cuvintelor cheie SOME, ANY și All. Funcțiile șirurilor acoperite


Puteți efectua operațiunile de unire, diferență și produs cartezian pe un set. Aceleași operații pot fi folosite și în interogările sql (efectuați operații cu interogări).

Un cuvânt special este folosit pentru a combina mai multe interogări UNIUNE.
Sintaxă:

< запрос 1 >UNIRE[TOATE]< запрос 2 >

<запрос 1>UNIUNE<запрос 2>

Interogarea Union SQL este utilizată pentru a combina rândurile de ieșire ale fiecărei interogări într-un singur set de rezultate.

Dacă este folosit parametrul ALL, apoi toate liniile de ieșire duplicate sunt salvate. Dacă parametrul lipsește, în setul de rezultate rămân doar rânduri unice.

Puteți combina orice număr de interogări împreună.

Utilizarea operatorului UNION necesită îndeplinirea mai multor condiții:

  1. numărul de coloane de ieșire pentru fiecare interogare trebuie să fie același;
  2. coloanele de ieșire ale fiecărei interogări trebuie să fie comparabile între ele după tipul de date (în ordinea priorității);
  3. setul rezultat folosește numele coloanelor specificate în prima interogare;
  4. ORDER BY poate fi folosit doar la sfârșitul unei interogări compuse, deoarece se aplică rezultatului îmbinării.

Exemplu: Afișați prețurile pentru computere și laptopuri, precum și numerele acestora (adică, descărcați din două tabele diferite într-o singură interogare)


✍ Soluție:
1 2 3 4 5 6 SELECTAȚI `Număr` , `Preț` FROM PC UNION SELECTați `Număr` , `Preț` DIN notebook ORDER BY `Preț`

SELECTAȚI `Număr` , `Preț` FROM PC UNION SELECTați `Număr` , `Preț` DIN notebook ORDER BY `Preț`

Rezultat:

Să ne uităm la un exemplu mai complex cu o îmbinare interioară:

Exemplu: Găsiți tipul de produs, numărul și prețul computerelor și laptopurilor


✍ Soluție:
1 2 3 4 5 6 7 8 SELECTARE produs. `Tip` , pc. `Număr` , `Preț` FROM pc INNER JOIN produs PE pc. `Număr` = produs. `Număr` produs UNION SELECT. `Type` , caiet. `Număr` , `Preț` FROM notebook INNER JOIN produs PE notebook. `Număr` = produs. `Număr` COMANDAȚI DUPĂ `Preț`

SELECT produs.`Tip` , buc.`Număr` , `Preț` FROM pc INNER JOIN produs ON pc.`Număr` = produs.`Număr` UNION SELECT produs.`Tip` , caiet.`Număr` , `Preț` FROM notebook INNER JOIN produs PE notebook.`Number` = produs.`Number` ORDER BY `Price`

Rezultat:

SQL Union 1. Găsiți producătorul, numărul piesei și prețul tuturor laptopurilor și imprimantelor

SQL Union 2. Găsiți numerele și prețurile tuturor produselor produse de producătorul Rusia

Predicatul de existență SQL EXISTĂ

SQL are facilități pentru efectuarea de operații de intersecție și diferență pe interogări - clauza INTERSECT (intersecție) și clauza EXCEPT (diferență). Aceste clauze funcționează într-un mod similar cu modul în care funcționează UNION: setul de rezultate include numai acele rânduri care sunt prezente în ambele interogări - INTERSECT , sau numai acele rânduri ale primei interogări care lipsesc în a doua - EXCEPTĂ . Dar problema este că multe SGBD-uri nu acceptă aceste propuneri. Dar există o cale de ieșire - folosind predicatul EXISTĂ.

Predicatul EXISTS evaluează la TRUE dacă subinterogarea returnează cel puțin câteva rânduri, în caz contrar EXISTS evaluează la FALS. Există și un predicat NU EXISTĂ, care face invers.

În mod obișnuit, EXISTS este utilizat în subinterogări dependente (de exemplu, IN).

EXISTĂ (subinterogare tabel)

Exemplu: Găsiți producători de computere care produc și laptopuri


✍ Soluție:

SELECTARE DISTINCT Producător FROM produs AS pc_product WHERE Tip = "Computer" ȘI EXISTĂ (SELECTARE Producător FROM produs WHERE Tip = "Laptop" AND Manufacturer = pc_product.Manufacturer)

Rezultat:

Găsiți acei producători de computere care nu produc imprimante

SQL CATEVA Cuvinte Cheie | ORICE și TOATE

Cuvintele cheie SOME și ANY sunt sinonime, așa că puteți utiliza oricare dintre ele în interogarea dvs. Rezultatul unei astfel de interogări va fi o coloană de valori.

Sintaxă:

< выражение>< оператор сравнения>UNELE |< подзапрос> )

<выражение><оператор сравнения>ORICE (<подзапрос>)

UNELE | ORICE (

Exemplu: Dacă pentru orice valoare X returnată dintr-o subinterogare, rezultatul operației „ ” returnează TRUE , atunci predicatul ORICE evaluează de asemenea la TRUE .


✍ Soluție:

Găsiți furnizori de computere ale căror numere nu sunt la vânzare (adică nu sunt în tabelul PC)

Rezultat:

Date sursă tabel:
În exemplu, predicatul Number = ANY(SELECT Number FROM pc) va returna valoarea TRUE atunci când Numărul din interogarea principală se găsește în lista de Numbers of table pc (returnată de subinterogare). În plus, NOT este utilizat. Setul de rezultate va consta dintr-o coloană - Producător. Pentru a preveni afișarea de mai multe ori a unui producător, a fost introdus cuvântul de serviciu DISTINCT.

Exemplu: Acum să ne uităm la utilizarea cuvântului cheie ALL:


✍ Soluție:

Găsiți numerele și prețurile laptopurilor care costă mai mult decât orice computer Important:


Exemplu: Este de remarcat faptul că, în general, o interogare cu ANY returnează un set de valori. Prin urmare, utilizarea unei subinterogări într-o clauză WHERE fără operatorii EXISTS , IN , ALL și ANY, care produc o valoare booleană, poate duce la o eroare de rulare a interogării.


✍ Soluție:


Găsiți numerele și prețurile computerelor al căror cost depășește costul minim al laptopurilor

Această interogare este corectă deoarece expresia scalară Preț este comparată cu o subinterogare care returnează o singură valoare

Funcții pentru lucrul cu șiruri în SQL

Funcția LEFT reduce numărul de caractere specificat de al doilea argument din stânga unui șir:<строка>,<число>)

STÂNGA (

Funcția RIGHT returnează numărul specificat de caractere la dreapta dintr-o expresie șir:<строка>,<число>)

Exemplu: CORECT(


✍ Soluție:

Tipăriți primele litere ale numelor tuturor producătorilor

Rezultat:

Exemplu: SELECTAȚI DISTINCT LEFT(`Producător`, 1) DIN `produs`


✍ Soluție:

Tipăriți numele producătorilor care încep și se termină cu aceeași literă

Sintaxă:

Funcția de înlocuire SQL