Ce este o declarație SQL Join?

Pentru acest ghid vom discuta secțiunea JOIN a instrucțiunii SQL. Vom acoperi sintaxa acesteia și diferitele tipuri de îmbinări pe care SQL le permite.

Sintaxa SQL cu accent pe Join

SELECT col1, col2, col3, etc....
FROM  tableNameOne AS a
JOIN tableNameTwo AS b ON a.primeKey = b.primeKey 
etc...

Declarația JOIN ar putea fi doar JOIN sau INNER JOIN, care sunt la fel, sau LEFT JOIN (descris mai jos).

Diferite tipuri de JOIN-uri

  • (INTERIOR) UNIȚI-VĂ
  • Returnează înregistrările care au valori potrivite în ambele tabele
  • STÂNGA (EXTERIOR) ÎNSCRIEȚI-VĂ
  • Returnează toate înregistrările din tabelul din stânga și înregistrările potrivite din tabelul din dreapta
  • DREAPTA (EXTERIOR) ÎNSCRIEȚI-VĂ
  • Returnează toate înregistrările din tabelul din dreapta și înregistrările potrivite din tabelul din stânga
  • COMPLET (EXTERIOR) ÎNSCRIEȚI-VĂ
  • Returnează toate înregistrările când există o potrivire în tabelul din stânga sau din dreapta

A te alatura

Tabelul student va fi în clauza FROM, deci va fi un tabel de pornire sau de STÂNGA.

Vom alătura acest lucru la masa de contact a elevilor sau la masa DREAPTA.

Veți vedea că apar toți studenții care se află și în tabelul de contact.

Așa cum se arată în tabelele de mai jos, studentID 9 este în tabelul studenților, dar NU în tabelul de contact, deci nu va apărea într-o alăturare.

Instrucțiune SQL

SELECT a.studentID, a.FullName, a.programOfStudy,
b.`student-phone-cell`, b.`student-US-zipcode`
FROM student AS a
JOIN `student-contact-info` AS b ON a.studentID = b.studentID;

Date „înscrise”:

+-----------+------------------------+------------------+--------------------+--------------------+
| studentID | FullName               | programOfStudy   | student-phone-cell | student-US-zipcode |
+-----------+------------------------+------------------+--------------------+--------------------+
|         1 | Monique Davis          | Literature       | 555-555-5551       |              97111 |
|         2 | Teri Gutierrez         | Programming      | 555-555-5552       |              97112 |
|         3 | Spencer Pautier        | Programming      | 555-555-5553       |              97113 |
|         4 | Louis Ramsey           | Programming      | 555-555-5554       |              97114 |
|         5 | Alvin Greene           | Programming      | 555-555-5555       |              97115 |
|         6 | Sophie Freeman         | Programming      | 555-555-5556       |              97116 |
|         7 | Edgar Frank "Ted" Codd | Computer Science | 555-555-5557       |              97117 |
|         8 | Donald D. Chamberlin   | Computer Science | 555-555-5558       |              97118 |
+-----------+------------------------+------------------+--------------------+--------------------+

Stânga Alăturați-vă

Folosirea cuvântului cheie STÂNGA înainte de ÎNREGISTRARE face ca sistemul să înceapă cu tabelul student (STÂNGA), dar va returna NUL din tabela DREAPTA dacă nu există rânduri pentru tabelul STÂNGA student.

Rețineți că studentID 9 apare aici, dar datele din tabelul de contact sunt afișate doar ca NULL.

SELECT a.studentID, a.FullName, a.programOfStudy,
b.`student-phone-cell`, b.`student-US-zipcode`
FROM student AS a
LEFT JOIN `student-contact-info` AS b ON a.studentID = b.studentID;
+-----------+------------------------+------------------+--------------------+--------------------+
| studentID | FullName               | programOfStudy   | student-phone-cell | student-US-zipcode |
+-----------+------------------------+------------------+--------------------+--------------------+
|         1 | Monique Davis          | Literature       | 555-555-5551       |              97111 |
|         2 | Teri Gutierrez         | Programming      | 555-555-5552       |              97112 |
|         3 | Spencer Pautier        | Programming      | 555-555-5553       |              97113 |
|         4 | Louis Ramsey           | Programming      | 555-555-5554       |              97114 |
|         5 | Alvin Greene           | Programming      | 555-555-5555       |              97115 |
|         6 | Sophie Freeman         | Programming      | 555-555-5556       |              97116 |
|         7 | Edgar Frank "Ted" Codd | Computer Science | 555-555-5557       |              97117 |
|         8 | Donald D. Chamberlin   | Computer Science | 555-555-5558       |              97118 |
|         9 | Raymond F. Boyce       | Computer Science | NULL               |               NULL |
+-----------+------------------------+------------------+--------------------+--------------------+
9 rows in set (0.00 sec)

Lista completă a tabelelor pentru referință

Lista de tabele pentru elevi

SELECT a.studentID, a.FullName, sat_score, a.programOfStudy, schoolEmailAdr 
FROM student AS a;

student sau masă STÂNGA

+-----------+------------------------+-----------+------------------+------------------------+
| studentID | FullName               | sat_score | programOfStudy   | schoolEmailAdr         |
+-----------+------------------------+-----------+------------------+------------------------+
|         1 | Monique Davis          |       400 | Literature       | Monique@someSchool.edu |
|         2 | Teri Gutierrez         |       800 | Programming      | Teri@someSchool.edu    |
|         3 | Spencer Pautier        |      1000 | Programming      | Spencer@someSchool.edu |
|         4 | Louis Ramsey           |      1200 | Programming      | Louis@someSchool.edu   |
|         5 | Alvin Greene           |      1200 | Programming      | Alvin@someSchool.edu   |
|         6 | Sophie Freeman         |      1200 | Programming      | Sophie@someSchool.edu  |
|         7 | Edgar Frank "Ted" Codd |      2400 | Computer Science | Edgar@someSchool.edu   |
|         8 | Donald D. Chamberlin   |      2400 | Computer Science | Donald@someSchool.edu  |
|         9 | Raymond F. Boyce       |      2400 | Computer Science | Raymond@someSchool.edu |
+-----------+------------------------+-----------+------------------+------------------------+
9 rows in set (0.00 sec)
```sql
SELECT * from `student-contact-info` AS b;

contactul studentului sau masa DREAPTA

+-----------+----------------------------------+--------------------+--------------------+
| studentID | studentEmailAddr                 | student-phone-cell | student-US-zipcode |
+-----------+----------------------------------+--------------------+--------------------+
|         1 | Monique.Davis@Routech.org   | 555-555-5551       |              97111 |
|         2 | Teri.Gutierrez@Routech.org  | 555-555-5552       |              97112 |
|         3 | Spencer.Pautier@Routech.org | 555-555-5553       |              97113 |
|         4 | Louis.Ramsey@Routech.org    | 555-555-5554       |              97114 |
|         5 | Alvin.Green@Routech.org     | 555-555-5555       |              97115 |
|         6 | Sophie.Freeman@Routech.org  | 555-555-5556       |              97116 |
|         7 | Maximo.Smith@Routech.org    | 555-555-5557       |              97117 |
|         8 | Michael.Roach@Routech.ort   | 555-555-5558       |              97118 |
+-----------+----------------------------------+--------------------+--------------------+
8 rows in set (0.00 sec)

La fel ca în toate aceste lucruri SQL, există MULTE MULT pentru ele decât ceea ce este în acest ghid introductiv.

Sper că acest lucru vă oferă cel puțin suficient pentru a începe.

Vă rugăm să consultați manualul pentru managerul de baze de date și distrați-vă încercând singur diferite opțiuni.

Exemplu de utilizare

Pentru acest ghid vom discuta despre SQL RIGHT JOIN.

Alăturați-vă corect

Cuvântul cheie RIGHT JOIN returnează toate înregistrările din tabelul din dreapta (tabelul2) și înregistrările potrivite din tabelul din stânga (tabelul1). Rezultatul este NUL din partea stângă, când nu există nicio potrivire.

SELECT *
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;

Lista completă a tabelelor pentru referință

hrana sau datele din tabela STÂNGA

+---------+--------------+-----------+------------+
| ITEM_ID | ITEM_NAME    | ITEM_UNIT | COMPANY_ID |
+---------+--------------+-----------+------------+
| 1       | Chex Mix     | Pcs       | 16         |
| 6       | Cheez-It     | Pcs       | 15         |
| 2       | BN Biscuit   | Pcs       | 15         |
| 3       | Mighty Munch | Pcs       | 17         |
| 4       | Pot Rice     | Pcs       | 15         |
| 5       | Jaffa Cakes  | Pcs       | 18         |
| 7       | Salt n Shake | Pcs       |            |
+---------+--------------+-----------+------------+



company or RIGHT table data
``` text
+------------+---------------+--------------+
| COMPANY_ID | COMPANY_NAME  | COMPANY_CITY |
+------------+---------------+--------------+
| 18         | Order All     | Boston       |
| 15         | Jack Hill Ltd | London       |
| 16         | Akas Foods    | Delhi        |
| 17         | Foodies.      | London       |
| 19         | sip-n-Bite.   | New York     |
+------------+---------------+--------------+

Pentru a obține numele companiei din tabelul companiei și ID-ul companiei, coloanele cu numele articolelor din tabelul cu alimente, se poate utiliza următoarea declarație SQL:

SELECT company.company_id,company.company_name,
company.company_city,foods.company_id,foods.item_name
FROM   company
RIGHT JOIN foods
ON company.company_id = foods.company_id;

IEȘIRE

COMPANY_ID COMPANY_NAME              COMPANY_CITY              COMPANY_ID ITEM_NAME
---------- ------------------------- ------------------------- ---------- --------------
18         Order All                 Boston                    18         Jaffa Cakes
15         Jack Hill Ltd             London                    15         Pot Rice
15         Jack Hill Ltd             London                    15         BN Biscuit
15         Jack Hill Ltd             London                    15         Cheez-It
16         Akas Foods                Delhi                     16         Chex Mix
17         Foodies.                  London                    17         Mighty Munch
NULL       NULL                      NULL                      NULL       Salt n Shake