MySQL SE ALĂTREZĂ Tutorialului: INTERIOR, EXTERIOR, STÂNGA, DREAPTA, CRUZĂ

Anonim

Ce sunt JOINS?

Alăturările ajută la recuperarea datelor din două sau mai multe tabele de baze de date. Tabelele sunt legate reciproc folosind chei primare și străine.

Notă: ÎNSCRIEREA este subiectul cel mai neînțeles dintre cei mai slabi SQL. Din motive de simplitate și ușurință în înțelegere, vom folosi o nouă bază de date pentru a practica eșantionul. Așa cum se arată mai jos

id Nume numele de familie film_id
1 Adam Smith 1
2 Ravi Kumar 2
3 Susan Davidson 5
4 Jenny Adrianna 8
6 Lee Pong 10
id titlu categorie
1 CREATUL ASASINATULUI: EMBERS Animații
2 Real Steel (2012) Animații
3 Alvin și veverițele Animații
4 Aventurile Tin Tin Animații
5 Safe (2012) Acțiune
6 Safe House (2012) Acțiune
7 GIA Peste 18 ani
8 Termen limită 2009 Peste 18 ani
9 Imaginea murdară Peste 18 ani
10 Marley și cu mine Romantism

Tipuri de îmbinări

Crucea ÎNSCRIEȚI-VĂ

Cross JOIN este o formă simplă de JOIN-uri care se potrivește cu fiecare rând dintr-un tabel de bază de date cu toate rândurile altui.

Cu alte cuvinte, ne oferă combinații ale fiecărui rând al primului tabel cu toate înregistrările din al doilea tabel.

Să presupunem că dorim să obținem toate înregistrările membrilor împotriva tuturor înregistrărilor filmelor, putem folosi scriptul prezentat mai jos pentru a obține rezultatele dorite.

SELECT * FROM `movies` CROSS JOIN `members`

Executarea scriptului de mai sus în MySQL workbench ne oferă următoarele rezultate.

 
id title id first_name last_name movie_id
1 ASSASSIN'S CREED: EMBERS Animations 1 Adam Smith 1
1 ASSASSIN'S CREED: EMBERS Animations 2 Ravi Kumar 2
1 ASSASSIN'S CREED: EMBERS Animations 3 Susan Davidson 5
1 ASSASSIN'S CREED: EMBERS Animations 4 Jenny Adrianna 8
1 ASSASSIN'S CREED: EMBERS Animations 6 Lee Pong 10
2 Real Steel(2012) Animations 1 Adam Smith 1
2 Real Steel(2012) Animations 2 Ravi Kumar 2
2 Real Steel(2012) Animations 3 Susan Davidson 5
2 Real Steel(2012) Animations 4 Jenny Adrianna 8
2 Real Steel(2012) Animations 6 Lee Pong 10
3 Alvin and the Chipmunks Animations 1 Adam Smith 1
3 Alvin and the Chipmunks Animations 2 Ravi Kumar 2
3 Alvin and the Chipmunks Animations 3 Susan Davidson 5
3 Alvin and the Chipmunks Animations 4 Jenny Adrianna 8
3 Alvin and the Chipmunks Animations 6 Lee Pong 10
4 The Adventures of Tin Tin Animations 1 Adam Smith 1
4 The Adventures of Tin Tin Animations 2 Ravi Kumar 2
4 The Adventures of Tin Tin Animations 3 Susan Davidson 5
4 The Adventures of Tin Tin Animations 4 Jenny Adrianna 8
4 The Adventures of Tin Tin Animations 6 Lee Pong 10
5 Safe (2012) Action 1 Adam Smith 1
5 Safe (2012) Action 2 Ravi Kumar 2
5 Safe (2012) Action 3 Susan Davidson 5
5 Safe (2012) Action 4 Jenny Adrianna 8
5 Safe (2012) Action 6 Lee Pong 10
6 Safe House(2012) Action 1 Adam Smith 1
6 Safe House(2012) Action 2 Ravi Kumar 2
6 Safe House(2012) Action 3 Susan Davidson 5
6 Safe House(2012) Action 4 Jenny Adrianna 8
6 Safe House(2012) Action 6 Lee Pong 10
7 GIA 18+ 1 Adam Smith 1
7 GIA 18+ 2 Ravi Kumar 2
7 GIA 18+ 3 Susan Davidson 5
7 GIA 18+ 4 Jenny Adrianna 8
7 GIA 18+ 6 Lee Pong 10
8 Deadline(2009) 18+ 1 Adam Smith 1
8 Deadline(2009) 18+ 2 Ravi Kumar 2
8 Deadline(2009) 18+ 3 Susan Davidson 5
8 Deadline(2009) 18+ 4 Jenny Adrianna 8
8 Deadline(2009) 18+ 6 Lee Pong 10
9 The Dirty Picture 18+ 1 Adam Smith 1
9 The Dirty Picture 18+ 2 Ravi Kumar 2
9 The Dirty Picture 18+ 3 Susan Davidson 5
9 The Dirty Picture 18+ 4 Jenny Adrianna 8
9 The Dirty Picture 18+ 6 Lee Pong 10
10 Marley and me Romance 1 Adam Smith 1
10 Marley and me Romance 2 Ravi Kumar 2
10 Marley and me Romance 3 Susan Davidson 5
10 Marley and me Romance 4 Jenny Adrianna 8
10 Marley and me Romance 6 Lee Pong 10

INTERIOR ÎNSCRIEȚI-VĂ

JOIN-ul interior este utilizat pentru a returna rânduri din ambele tabele care îndeplinesc condiția dată.

Să presupunem că doriți să obțineți lista membrilor care au închiriat filme împreună cu titluri de filme închiriate de aceștia. Puteți utiliza pur și simplu un INNER JOIN pentru asta, care returnează rânduri de pe ambele tabele care îndeplinesc condițiile date.

SELECT members.`first_name` , members.`last_name` , movies.`title`FROM members ,moviesWHERE movies.`id` = members.`movie_id`

Executarea scriptului de mai sus dă

 
first_name last_name title
Adam Smith ASSASSIN'S CREED: EMBERS
Ravi Kumar Real Steel(2012)
Susan Davidson Safe (2012)
Jenny Adrianna Deadline(2009)
Lee Pong Marley and me

Rețineți că scriptul de rezultate de mai sus poate fi scris și după cum urmează pentru a obține aceleași rezultate.

SELECT A.`first_name` , A.`last_name` , B.`title`FROM `members`AS AINNER JOIN `movies` AS BON B.`id` = A.`movie_id`

JOIN-uri exterioare

MySQL Outer JOIN returnează toate înregistrările care se potrivesc din ambele tabele.

Poate detecta înregistrări care nu au nicio potrivire în tabelul alăturat. Întoarce valori NULL pentru înregistrările tabelului unit dacă nu se găsește nicio potrivire.

Sună confuz? Să analizăm un exemplu -

ÎNREGISTRARE STÂNGA

Să presupunem că acum doriți să obțineți titluri ale tuturor filmelor împreună cu numele membrilor care le-au închiriat. Este clar că unele filme nu au fost închiriate de nimeni. Putem pur și simplu să folosim LEFT JOIN în acest scop.

ÎNREGISTRAREA STÂNGA returnează toate rândurile din tabelul din stânga, chiar dacă nu au fost găsite rânduri potrivite în tabelul din dreapta. În cazul în care nu au fost găsite potriviri în tabelul din dreapta, NULL este returnat.

SELECT A.`title` , B.`first_name` , B.`last_name`FROM `movies` AS ALEFT JOIN `members` AS BON B.`movie_id` = A.`id`

Executarea scriptului de mai sus în MySQL workbench oferă. Puteți vedea că în rezultatul returnat, care este listat mai jos, pentru filmele care nu sunt închiriate, câmpurile de nume de membru au valori NULL. Asta înseamnă că niciun membru potrivit nu a găsit tabelul membrilor pentru filmul respectiv.

 
title first_name last_name
ASSASSIN'S CREED: EMBERS Adam Smith
Real Steel(2012) Ravi Kumar
Safe (2012) Susan Davidson
Deadline(2009) Jenny Adrianna
Marley and me Lee Pong
Alvin and the Chipmunks NULL NULL
The Adventures of Tin Tin NULL NULL
Safe House(2012) NULL NULL
GIA NULL NULL
The Dirty Picture NULL NULL
Note: Null is returned for non-matching rows on right

ÎNREGISTRARE DREPTĂ

ÎNREGISTRAREA DREAPTĂ este în mod evident opusul ÎNREGISTRARII ÎN STÂNGA RIGHT JOIN returnează toate coloanele din tabelul din dreapta, chiar dacă nu au fost găsite rânduri potrivite în tabelul din stânga. În cazul în care nu au fost găsite potriviri în tabelul din stânga, NULL este returnat.

În exemplul nostru, să presupunem că trebuie să obțineți numele membrilor și filmele închiriate de aceștia. Acum avem un nou membru care nu a închiriat încă niciun film

SELECT A.`first_name` , A.`last_name`, B.`title`FROM `members` AS ARIGHT JOIN `movies` AS BON B.`id` = A.`movie_id`

Executarea scriptului de mai sus în MySQL workbench dă următoarele rezultate.

 
first_name last_name title
Adam Smith ASSASSIN'S CREED: EMBERS
Ravi Kumar Real Steel(2012)
Susan Davidson Safe (2012)
Jenny Adrianna Deadline(2009)
Lee Pong Marley and me
NULL NULL Alvin and the Chipmunks
NULL NULL The Adventures of Tin Tin
NULL NULL Safe House(2012)
NULL NULL GIA
NULL NULL The Dirty Picture
Note: Null is returned for non-matching rows on left

Clauzele „ON” și „USING”

În exemplele de interogare JOIN de mai sus, am folosit clauza ON pentru a potrivi înregistrările dintre tabel.

Clauza USING poate fi utilizată și în același scop. Diferența cu USING este că trebuie să aibă nume identice pentru coloanele potrivite în ambele tabele.

Până în prezent, în tabelul „filme” am folosit cheia sa principală cu numele „id”. Ne-am referit la același lucru în tabelul „membri” cu numele „movie_id”.

Să redenumim tabelele „filme” câmpul „id” pentru a avea numele „film_id”. Facem acest lucru pentru a avea nume de câmpuri identice.

ALTER TABLE `movies` CHANGE `id` `movie_id` INT( 11 ) NOT NULL AUTO_INCREMENT;

În continuare, să folosim UTILIZARE cu exemplul de ÎNREGISTRARE STÂNGA de mai sus.

SELECT A.`title` , B.`first_name` , B.`last_name`FROM `movies` AS ALEFT JOIN `members` AS BUSING ( `movie_id` )

În afară de utilizarea ON și UTILIZAREA cu JOIN-uri, puteți utiliza multe alte clauze MySQL precum GROUP BY, WHERE și chiar funcții precum SUM , AVG etc.

De ce ar trebui să folosim îmbinările?

Acum vă puteți gândi, de ce folosim JOIN-uri atunci când putem face aceeași sarcină executând interogări. Mai ales dacă aveți o anumită experiență în programarea bazelor de date, știți că putem rula interogări una câte una, folosiți ieșirea fiecăruia în interogări succesive. Desigur, acest lucru este posibil. Dar folosind JOIN-uri, puteți efectua munca utilizând o singură interogare cu parametrii de căutare. Pe de altă parte, MySQL poate obține performanțe mai bune cu JOIN-uri, deoarece poate utiliza indexarea. Pur și simplu utilizarea unei singure interogări JOIN în loc de a rula mai multe interogări reduce cheltuielile generale ale serverului. Folosind mai multe interogări care conduc mai multe transferuri de date între MySQL și aplicații (software). În plus, necesită mai multe manipulări de date și la sfârșitul aplicației.

Este clar că putem obține performanțe mai bune MySQL și aplicații prin utilizarea JOIN-urilor.

rezumat

  • JOINS ne permite să combinăm date din mai multe tabele într-un singur set de rezultate.
  • JOINS au performanțe mai bune comparativ cu interogările secundare
  • INNER JOINS returnează numai rândurile care îndeplinesc criteriile date.
  • JOINERILE EXTERNE pot, de asemenea, să returneze rânduri în care nu au fost găsite potriviri. Rândurile neegalate sunt returnate cu cuvântul cheie NULL.
  • Principalele tipuri de JOIN includ interiorul, stânga exterioară, dreapta exterioară, încrucișarea etc.
  • Clauza frecvent utilizată în operațiile JOIN este „ACTIVATĂ”. Clauza „UTILIZARE” necesită ca coloanele potrivite să aibă același nume.
  • JOINS poate fi utilizat și în alte clauze, cum ar fi GROUP BY, WHERE, SUB QUERIES, FUNCȚII AGREGATE etc.