Alturai-v (SQL)



Internetul este o sursă inepuizabilă de cunoștințe, și atunci când vine vorba de Alturai-v (SQL). Secole și secole de cunoștințe umane despre Alturai-v (SQL) au fost turnate în rețea și continuă să fie turnate, și tocmai de aceea este atât de dificil să-l accesăm, deoarece putem găsi locuri în care navigarea poate fi dificilă sau direct impracticabilă. Propunerea noastră este să nu vă naufragiați într-o mare de date referitoare la Alturai-v (SQL) și să puteți ajunge rapid și eficient în toate porturile înțelepciunii.

Cu privirea îndreptată spre acest obiectiv, am făcut ceva care depășește ceea ce este evident, colectând cele mai actualizate și mai bine explicate informații despre Alturai-v (SQL). De asemenea, l-am aranjat în așa fel încât citirea sa să fie plăcută, cu un design minimalist și plăcut, care asigură cea mai bună experiență de utilizare și cel mai scurt timp de încărcare.Ți-l ușurăm astfel încât să-ți faci griji doar să înveți totul despre Alturai-v (SQL)! Așadar, dacă crezi că ne-am îndeplinit scopul și știi deja ce ai vrut să știi despre Alturai-v (SQL), ne-ar plăcea să te avem înapoi în aceste mări calme ale sapientiaro.com ori de câte ori se trezește foamea ta de cunoaștere.

Un SQL - Join (german: Verbund) formeaz din înregistrrile a dou tabele ale unei baze de date relaionale un tabel de rezultate ale crui înregistrri conin atribute ale ambelor tabele în funcie de o condiie de unire specificat. Este implementarea conceptului de federaie a algebrei relaionale în limbajul de interogare SQL. Standardul ISO pentru SQL descrie urmtoarele tipuri de îmbinri:

  • Produsul cartezian CROSS JOIN,
  • legtura interioar sub forma legturii naturale NATURAL JOINi a altor variante, precum i
  • compusul exterior în formele LEFT OUTER JOIN, RIGHT OUTER JOINi FULL OUTER JOIN.

Ca un caz special, o mas poate fi, de asemenea, unit cu ea însi, aceasta este cunoscut sub numele de unire de sine .

Exemple de tabele

Tabelele Mitarbeiteri Abteilungsunt utilizate ca exemple pentru a demonstra diferitele forme de interconectare . Se înregistreaz MIdnumele de identificare al unui angajat , precum i cel al AbtIddepartamentului în care este angajat. Departamentul are atributele AbtIdcare identific departamentul i numele acestuia. O reea leag informaii din cele dou tabele.

Angajat
MId Nume de familie Departamentul
M1 Müller 31
M2 Schmidt 32
M3 Müller 32
M4 Meyer ZERO
Departament
Departamentul Numele Stareului
31 vânzare
32 tehnologie
33 marketing

Tabelele de exemplu au urmtoarele caracteristici speciale:

  • Angajatul numit Meyer nu este repartizat în niciun departament. Valoarea NULLca AbtIdîn SQL înseamn c aceast valoare este necunoscut .
  • Departamentul Marketing nu are angajai desemnai.

Aceste dou tabele pot fi utilizate pentru a ilustra diferitele forme de asociere.

Produs cartezian (CROSS JOIN)

Cele CROSS JOINdou tabele formeaz produsul cartezian al înregistrrilor de date din cele dou tabele. Fiecare înregistrare de date din primul tabel este legat de orice alt înregistrare din al doilea tabel. Dac cele dou tabele au atribute cu acelai nume, acestea sunt completate prin plasarea numelui tabelei în fa.

Exemplu de CROSS JOINs:

SELECT *
FROM Mitarbeiter CROSS JOIN Abteilung

Denumirea explicit a produsului cartezian a fost introdus cu standardul SQL SQL-92 . În standardul SQL din 1989, acelai rezultat poate fi obinut cu urmtoarea declaraie:

SELECT *
FROM Mitarbeiter, Abteilung

Rezultatul are înregistrri 4 × 3 deoarece exist 4 angajai i 3 departamente; const din toate combinaiile posibile ale înregistrrilor de date din cele dou tabele. Deoarece acest lucru AbtIdse întâmpl în ambele tabele, cele dou atribute din tabelul de rezultate sunt fcute unice prin plasarea numelui tabelei în fa.

MId Nume de familie Angajat.AbtId Departament.AbtId Numele Stareului
M1 Müller 31 31 vânzare
M1 Müller 31 32 tehnologie
M1 Müller 31 33 marketing
M2 Schmidt 32 31 vânzare
M2 Schmidt 32 32 tehnologie
M2 Schmidt 32 33 marketing
M3 Müller 32 31 vânzare
M3 Müller 32 32 tehnologie
M3 Müller 32 33 marketing
M4 Meyer ZERO 31 vânzare
M4 Meyer ZERO 32 tehnologie
M4 Meyer ZERO 33 marketing

Legtur interioar

Rezultatul îmbinrii interioare a dou tabele este combinaia înregistrrilor de date ale tabelelor implicate care îndeplinesc condiia de îmbinare. De regul, condiia de asociere necesit egalitatea valorilor anumitor atribute din cele dou tabele. Cu toate acestea, poate conine i ali operatori de comparaie decât egalitatea.

ÎNREGISTRARE NATURAL

Forma de baz a legturii interioare este legtura natural NATURAL JOIN.

În cazul unei naturale se alture, în înregistrrile de date ale celor dou tabele implicate sunt legate între ele, valorile care se potrivesc atributele cu acelai nume . Deci, se formeaz numai combinaiile potrivite i nu toate combinaiile posibile ca la produsul cartezian .

Exemplu pentru NATURAL JOIN:

SELECT *
FROM Mitarbeiter NATURAL JOIN Abteilung

În exemplul nostru, cele dou tabele au un atribut comun AbtID,. În reeaua natural, fiecrui angajat i se atribuie departamentul al crui departament este înregistrat AbtIdla el. Deoarece valoarea lui AbtIdeste identic în ambele tabele din fiecare linie , atributul apare o singur dat în tabelul de rezultate:

MId Nume de familie AbtID Numele Stareului
M1 Müller 31 vânzare
M2 Schmidt 32 tehnologie
M3 Müller 32 tehnologie

Deoarece angajatul numit Meyer nu este repartizat la niciun departament, M4 nu apare în rezultat. Nici departamentul Marketing nu apare, deoarece nu i se atribuie niciun angajat.

ÎNSCRIEI-V ... FOLOSIND ...

Cu îmbinarea natural, combinaiile sunt formate prin compararea valorilor tuturor atributelor cu acelai nume din ambele tabele. Cu toate acestea, de multe ori dorii s specificai în mod explicit care dintre atribute trebuie utilizat pentru a lega seturile de date. Exist o form pentru astaJOIN ... USING ...

În exemplul nostru:

SELECT *
FROM Mitarbeiter JOIN Abteilung USING (AbtID)

În acest exemplu, rezultatul este identic cu cel al legturii naturale.

Aceast form de asociere este NATURAL JOINpreferabil variantei, deoarece specificarea explicit a atributelor asigur faptul c nu se formeaz combinaii nedorite atunci când tabelele implicate sunt extinse. În exemplul nostru, dac Mitarbeiternoul atribut Ortpentru locul de reedin al angajatului este introdus în tabel Abteilungi un atribut numit Ortpentru locaia departamentului este de asemenea adugat în tabel , atunci NATURAL JOINatributele AbtId i Ort crearea înregistrrilor de date legate sunt comparate, ceea ce nu corespunde inteniei de a repartiza angajai în departamentele lor.

ÎNSCRIEI-V ... PE ...

De asemenea, este posibil s se creeze o îmbinare între tabele în care numele atributelor de comparat nu se potrivesc sau în care =s fie folosit un alt operator decât cel .

Pentru tabelele de exemplu, este o declaraie cu aceast form de unire

SELECT *
FROM Mitarbeiter JOIN Abteilung ON Mitarbeiter.AbtId = Abteilung.AbtId;

Rezultat:

MId Nume de familie Angajat.AbtId Departament.AbtId Numele Stareului
M1 Müller 31 31 vânzare
M2 Schmidt 32 32 tehnologie
M3 Müller 32 32 tehnologie

Putei pune în faa celor dou forme JOIN ... USING ...i JOIN ... ON ..., de asemenea, cuvântul cheie opional INNERpentru a sublinia c este un compus interior.

În standardul SQL din 1989 s-ar formula afirmaia de mai sus dup cum urmeaz:

SELECT *
FROM Mitarbeiter, Abteilung
WHERE Mitarbeiter.AbtId = Abteilung.AbtId

În prima form a enunului, compusul este specificat în mod explicit , în timp ce în a doua variant, se formeaz mai întâi un produs cartezian i compusul este obinut prin restrângerea ulterioar cu condiia Mitarbeiter.AbtId = Abteilung.AbtId.

Formele uniunii interioare din exemplele anterioare sunt, de asemenea, menionate în literatur ca echijoin (german: Gleichverbund ), deoarece operatorul egalitii este utilizat în condiia unirii. În variant, este, de JOIN ... ON ...asemenea, posibil specificarea oricrei condiii pentru conectarea înregistrrilor de date ale tabelelor implicate, de ex. B. cu operatorul de comparaie . În acest caz, unirea se numete unire theta .

Alturare exterioar (ALTUR EXTERN)

Angajatul cu MIdM4 nu apare în niciuna dintre formele gruprii interne a tabelelor de exemplu , deoarece nu i se atribuie niciun departament. Iar departamentul Marketing nu apare pentru c nu are angajai.

Formele îmbinrii externe includ înregistrri de date în îmbinarea pentru care nu exist un echivalent al valorilor din cele dou tabele. Prin urmare, reeaua extern trebuie utilizat întotdeauna atunci când sunt implicate informaii necunoscute sau lips.

Dac, în exemplul angajailor i departamentelor, urmeaz s fie emii toi angajaii i departamentele acestora, inclusiv cei care nu sunt repartizai la niciun departament, atunci este necesar o reea extern.

EXTERIORUL STÂNGAT ÎNSCRIEI-V

Rezultatul din tabelele T 1 i T 2 conine toate înregistrrile de date din tabelul T 1 din stânga cuvântului cheie , chiar dac nu exist nicio înregistrare de date corespunztoare în tabelul T 2 din dreapta . Valorile lips din T 2 sunt completate cu NULL. Cuvântul cheie nu este necesar în niciunul dintre exemple, dar poate fi scris pentru a atrage atenia cititorului asupra compusului exterior. T1 LEFT OUTER JOIN T2JOINOUTER

În exemplul angajailor i departamentelor

SELECT *
FROM Mitarbeiter LEFT OUTER JOIN Abteilung USING (AbtId)
MId Nume de familie Departamentul Numele Stareului
M1 Müller 31 vânzare
M2 Schmidt 32 tehnologie
M3 Müller 32 tehnologie
M4 Meyer ZERO ZERO

Rezultatul conine acum i angajatul cu MIdM4, iar atributele din Departamentul tabelului legat sunt NULL.

ÎNREGISTRAI-V EXTERIOR

Una RIGHT OUTER JOIN formeaz legtura interioar dintre cele dou tabele i o completeaz cu câte o înregistrare de date pentru înregistrrile de date din tabelul din dreapta pentru care nu exist coresponden în tabelul din stânga.

În exemplul angajailor i departamentelor

SELECT *
FROM Mitarbeiter RIGHT OUTER JOIN Abteilung USING (AbtId)
MId Nume de familie Departamentul Numele Stareului
M1 Müller 31 vânzare
M2 Schmidt 32 tehnologie
M3 Müller 32 tehnologie
ZERO ZERO 33 marketing

Rezultatul conine acum o înregistrare de date pentru departamentul Marketing cruia nu i se atribuie niciun angajat, motiv pentru care atributele MIdi sunt NameNULL.

Un alt exemplu în care este necesar reeaua extern: toate departamentele vor fi afiate cu numrul angajailor lor. Întrucât AbtIdnu se va produce nicio înregistrare de date cu legtura intern pentru departamentul cu 33, declaraia trebuie formulat cu legtura extern:

SELECT AbtName, count(MId) as Mitarbeiterzahl
FROM Mitarbeiter RIGHT OUTER JOIN Abteilung USING (AbtId)
GROUP BY AbtId, AbtName

Rezultat:

Numele Stareului Numar de angajati
vânzare 1
tehnologie 2
marketing 0

ÎNREGISTRARE COMPLET

Unul FULL OUTER JOINeste unirea rezultatelor din LEFTi RIGHT OUTER JOINs.

Exemplul pentru angajai i departamente:

SELECT *
FROM Mitarbeiter FULL OUTER JOIN Abteilung USING (AbtId)
MId Nume de familie Departamentul Numele Stareului
M1 Müller 31 vânzare
M2 Schmidt 32 tehnologie
M3 Müller 32 tehnologie
M4 Meyer ZERO ZERO
ZERO ZERO 33 marketing

Alte variante ale sintaxei compusului exterior sunt coninute în diagrama de sintax de mai jos.

Unirea de sine

O auto-asociere este o asociere a unui tabel cu el însui. Aceasta înseamn c înregistrrile din tabel trebuie comparate cu alte înregistrri din acelai tabel. Pentru a putea compara valorile înregistrrilor de date ale aceluiai tabel în SQL , trebuie s atribuii nume explicite pentru dou variabile de tuplu din instruciune, ambele putând rula prin înregistrrile de date ale tabelului.


De exemplu, ar trebui verificat dac exist doi angajai cu acelai nume, dar MId diferit în tabelul Angajai. În urmtorul self join , variabilele tuplului MAi sunt definite MBpentru tabelul Angajai pentru a putea efectua comparaia.

SELECT MA.MId, MA.Name
FROM Mitarbeiter MA CROSS JOIN Mitarbeiter MB
WHERE MA.MId <> MB.MId AND MA.Name = MB.Name

Rezultatul este:

MId Nume de familie
M1 Müller
M3 Müller

De fapt, SQL creeaz o variabil tupl pentru fiecare tabel atunci când proceseaz o instruciune SELECT, care are în mod normal acelai nume cu tabelul în sine. Dac instruciunea este, de exemplu select * from Mitarbeiter where Mitarbeiter.MId = 'M1', se utilizeaz o variabil tupl care are acelai nume ca tabelul Mitarbeiteri accept fiecare înregistrare a tabelului aa cum poate coninutul acestuia. Starea filtrului MId = 'M1'este apoi verificat executând variabila tuplu prin tabel. De exemplu, este posibil s se numeasc variabila tuplu în mod explicit select * from Mitarbeiter M where M.MId = 'M1'. Aceasta este utilizat în auto-îmbinare pentru a avea dou variabile de tuplu pentru una i acelai tabel, prin care înregistrrile lor de date pot fi comparate între ele.

Diagrama de sintax

Urmtoarea diagram de sintax arat toate formele de unire în SQL.

Sintaxa variantelor compusului din SQL

Combinaia a dou referine de tabel este prezentat în diagrama de sintax. O referin de mas poate fi ea însi o instruciune pentru un compus, i. Aceasta înseamn c nu numai îmbinrile pot fi formate cu dou, ci cu mai multe tabele.

În exemplul nostru, s ne imaginm c exist un al treilea tabel Adressecare utilizeaz atributul pentru a atribui AdrIdangajatului adresa sa. Apoi, urmtoarea declaraie are ca rezultat atribuirea adresei i a departamentului ctre angajatul respectiv:

SELECT *
FROM Mitarbeiter JOIN Adresse using (AdrId)
                 JOIN Abteilung using (AbtId)

Compusul interior este (în afar de ordinea atributelor din rezultat) atât comutativ, cât i asociativ . Îmbinarea exterioar nu este comutativ i, în general, nici asociativ. Dac se utilizeaz diferite forme de compus într-o declaraie cu mai multe tabele, este recomandabil s folosii paranteze pentru claritate.

Produs specific

Diferitele sisteme de gestionare a bazelor de date deviaz parial de la standardul SQL sau au alte variante pentru formularea reelei externe. Urmtoarele linkuri indic documentaia de alturare pentru unele dintre produsele populare:

  • IBM Db2
    • IBM Db2NATURAL JOIN nu accept varianta .
  • Microsoft SQL Server
    • Dialectul SQL pentru Microsoft SQL Server se numete Transact-SQL .
    • Transact SQL nu accept formularele NATURAL JOINi JOIN ... USING ...asocierile, deci exist doar varianta ONcu care, totui, toate sarcinile pot fi gestionate.
  • MySQL
    • MySQL accept toate formele de unire conform SQL-92.
    • MySQL are STRAIGHT JOINo variant special a unirii. De obicei, optimizatorul de interogare al unui sistem de gestionare a bazelor de date decide cum va fi realizat de fapt federaia. Cu STRAIGHT JOINoptimizatorul MySQL este dat ordinea în care ar trebui s se execute unirea.
    • MySQL FULL [OUTER] JOINnu accept acest lucru . Aceast form a compusului exterior poate fi creat LEFT/RIGHT OUTER JOINîmpreun cu operatorul printr-o construcie din UNION.
  • Oracol
    • Oracle are, de asemenea, o sintax proprietar pentru îmbinarea exterioar, doar în 2001 cu versiunea 9 a fost introdus sintaxa SQL-92 pentru îmbinarea exterioar.
    • Astzi, Oracle recomand sintaxa standard SQL pentru îmbinarea exterioar.
  • PostgreSQL
  • SQLite
    • SQLite accept numai fiierulLEFT OUTER JOIN . Celelalte dou forme ale compusului exterior pot fi generate LEFT OUTER JOINutilizând împreun cu operatorul UNION.

Vezi si

literatur

  • CJ Date cu Hugh Darwen: un ghid pentru standardul SQL . Ediia a IV-a. Addison-Wesley, 1997.
  • Wolfgang Panny cu Alfred Taudes: Introducere în limbajul de baz al SQL-99 . Springer, 2000.
  • Gunter Saake, Kai-Uwe Sattler i Andreas Heuer: baze de date: concepte i limbi . Ediia a IV-a. mitp, 2010, p. 221 f. i 339 f .
  • Alfons Kemper i André Eckler: Sisteme de baze de date: o introducere . Ediia a 6-a. Oldenbourg, 2006, p. 125 f .

Observaii

  1. Sintaxa SQL92 folosete cuvintele cheie pentru a sublinia CROSS JOINintenia ca produsul cartezian s fie format.
  2. Exist multe articole pe Internet despre reea, în care este ilustrat prin diagrame Venn pentru operaiuni de set. În aceste articole, îmbinarea interioar este adesea format din dou tabele care au aceeai schem i numai în acest caz special îmbinarea natural este de fapt identic cu intersecia celor dou tabele. În general, îns, acest lucru nu este cazul. În exemplul nostru, putei admira intersecia celor dou tabele Mitarbeiteri Abteilungnu v putei forma, deoarece înregistrrile celor dou tabele au structuri diferite i nu sunt comparabile. Vizualizarea operatorilor compui utilizând diagrame Venn este în general inexact i, prin urmare, îneltoare.

Dovezi individuale

  1. CJDate with Hugh Darwen: A Guide to the SQL Standard, Fourth Edition, Addison-Wesley, 1997, pp. 135ff
  2. a b Diferitele tipuri de compui sunt descrise în standardul SQL SQL: 2011 în Partea 2 Fundaia Seciunea 7.7.
  3. ^ Gunther Saake, Kai-Uwe Sattler i Andreas Heuer: baze de date: concepte i limbi . mitp, S. 339 .
  4. ^ Gunther Saake, Kai-Uwe Sattler i Andreas Heuer: baze de date: concepte i limbi . mitp, S. 220 f .


Opiniones de nuestros usuarios

Denis Ardelean

Informația de pe Alturai-v (SQL) este foarte interesantă și de încredere, ca și restul articolelor pe care le-am citit până acum, care sunt deja multe, pentru că de aproape o oră aștept data mea Tinder și nu apare, Așa că asta m-a ridicat. Profit de ocazie să las niște vedete pentru companie și să mă cac de viața mea.

Ana Danciu

Mulțumesc pentru această postare pe Alturai-v (SQL), este exact ceea ce aveam nevoie.

Jozsef Panait

În sfârșit! În zilele noastre se pare că dacă nu scriu articole de zece mii de cuvinte nu sunt fericiți. Domnilor scriitori de conținut, acest DA este un articol bun despre Alturai-v (SQL).

Dorel Dima

Acest articol despre Alturai-v (SQL) mi-a atras atenția, mi se pare curios cât de bine măsurate sunt cuvintele, parcă... elegant.