..


Link-uri sponsorizate

Opusul unei INNER JOIN sau pentru a obţine înregistrările nu se potrivesc

Articol scris de Max Bossi

Cine ştie ce cunoştinţe de SQL este JOIN. În ghidurile noastre şi alte articole am explicat cum se alăture şi modul în care puteţi să creaţi relaţii între tabele diferite într-o bază de date.

Cerinţa cea mai comună este îndeplinită de către instrumentul JOIN pentru a găsi meciuri între două tabele, caz în care salvează INNER JOIN clauză care localizează cu precizie şi returnează câmpurile care îndeplinesc Corespondenta solicitat în termen de două sau mai multe tabele implicate în JOIN.

Mult mai puţin intuitiv contrară este necesitatea de a identifica domeniile care nu au un meci în cadrul JOIN.

Să luăm un exemplu.
Să presupunem că doriţi să gestioneze o bază de date a unui e-commerce este format din doar două tabele:

  • clienţilor (care conţine date de bază a clientului)
  • comenzi (care conţine comenzile făcute de clienţii)
Acum, să presupunem că doriţi să extrageţi două liste diferite de clienti: 1) o listă a clienţilor care au plasat deja o comanda, 2) lista clienţilor care nu au cumpărat încă nimic.

Pentru a satisface cerinţa în primul rând, desigur, este destul de simplu:

 



 SELECT CUSTOMER.FIRST, CUSTOMER.LAST







 De la clienţi







 Obligă INNER JOIN







 ON = clienti.id ordini.id_cliente







 ORDER BY ASC CUSTOMER.LAST

 
şi până în prezent nici o problema.

Dar cum putem face pentru a inversa rezultatul? Ei bine ... În primul rând, nu utilizaţi un INNER JOIN, dar o LEFT JOIN pentru a găsi un meci depline, dar nu parţială, în cazul în care, cu toate acestea, rezultatele din tabelul din stânga sunt returnate oricum.
Fără acest lucru ne vom uita (folosind clauza WHERE) înregistrările lipsesc (de exemplu, nu a fost găsit în raport), apoi identificate ca fiind NULL (NULL în SQL este definit ca un fel de "valoare deosebita", care identifică o lipsa de valoare ..)

Să vedem codul:

 



 SELECT CUSTOMER.FIRST, CUSTOMER.LAST







 De la clienţi







 LEFT JOIN Obligă







 ON = clienti.id ordini.id_cliente







 UNDE ESTE NULL ordini.id_cliente







 ORDER BY ASC CUSTOMER.LAST

 
Rezultatul este, de fapt, lista de nume ale clienţilor noştri, care nu au cumpărat nimic.

În aceeaşi categorie ...
E-Learning
MS Access (Avansat) MS Access (Avansat)
Aflaţi cum să creaţi şi să gestionaţi baze de date rapid şi uşor. Incepand de la 29 €.
MySQL (Curs) MySQL (Curs)
De gestionare a bazei de date open-source. De la 39 €.
SQL si baze de date (Curs) SQL si baze de date (Curs)
Crearea şi gestionarea bazelor de date relaţionale. De la 39 €.
Link-uri sponsorizate