środa, 19 września 2018

MySQL Korzystanie z połączeń

Korzystanie z połączeń w MySQL

W poprzednich rozdziałach otrzymywaliśmy dane z jednej tabeli na raz. Jest to wystarczająco dobre dla prostych zapytań, ale w większości zastosowań MySQL w świecie rzeczywistym często trzeba uzyskać dane z wielu tabel w jednym zapytaniu.
Możesz użyć wielu tabel w pojedynczym zapytaniu SQL. Akt łączenia w MySQL odnosi się do rozbicia dwóch lub więcej tabel w jedną tabelę.
Możesz użyć JOINS w instrukcjach SELECT, UPDATE i DELETE, aby dołączyć do tabel MySQL. Zobaczymy również LEFT JOIN, który różni się od prostego JOIN MySQL.

Korzystanie z połączeń w wierszu polecenia

Załóżmy, że mamy dwie tabele kurs_ils_tbl i kurs_tbl, w bazie danych KURS. Teraz spójrz na przykłady podane poniżej -
Przykład
Poniższe przykłady
root@host# mysql -u root -p password;
Enter password:*******
mysql> use KURS;
Database changed
mysql>  select * from kurs_ils_tbl;
+-------------+-------------+------------+
| id_kurs_ils | kurs_author | kurs_ilosc |
+-------------+-------------+------------+
|           1 | Berg        | 10         |
|           2 | K. Nelberg  | 6          |
|           3 | H.Kern      | 15         |
+-------------+-------------+------------+
3 rows in set (0.00 sec)

mysql> select * from kurs_tbl;
+---------+------------+-------------+-----------------+
| kurs_id | kurs_title | kurs_author | submission_date |
+---------+------------+-------------+-----------------+
|       1 | JavaScript | Berg        | 2018-02-02      |
|       2 | Nauka CSS  | K. Nelberg  | 2018-02-02      |
|       4 | HTML       | H.Kern      | 2016-02-14      |
+---------+------------+-------------+-----------------+
3 rows in set (0.00 sec)mysql>

Teraz możemy napisać zapytanie SQL, aby połączyć te dwie tabele. To zapytanie wybierze wszystkich autorów z tabeli kurs_tbl i pobierze odpowiednią liczbę tutoriali z kurs_ils_tbl.
mysql> SELECT a.kurs_id, a.kurs_author, b.kurs_ilosc
    -> FROM kurs_tbl a, kurs_ils_tbl b
    -> WHERE a.kurs_author = b.kurs_author;
+-------------+-----------------+----------------+
| kurs_id | kurs_author | kurs_ilosc |
+-------------+-----------------+----------------+
  1              | Berg        | 10         |
|           2 | K. Nelberg     | 6        |
+-------------+-----------------+----------------+
2 rows in set (0.01 sec)
mysql>

Korzystanie z połączeń w skrypcie PHP

Możesz użyć dowolnego z wyżej wymienionych zapytań SQL w skrypcie PHP. Wystarczy przekazać zapytanie SQL do funkcji PHP mysql_query(), a następnie pobrać wyniki w zwykły sposób.
Przykład
Poniższy przykład 
<?php
   $dbhost = 'localhost:3306';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
  
   if(! $conn ) {
      die('Nie można się połączyć: ' . mysql_error());
   }

   $sql = 'SELECT a.kurs_id, a.kurs_author, b.kurs_ilosc
      FROM kurs_tbl a, kurs_ils_tbl b
      WHERE a.kurs_author = b.kurs_author';

   mysql_select_db('KURS');
   $retval = mysql_query( $sql, $conn );

   if(! $retval ) {
      die('Nie można pobrać danych: ' . mysql_error());
   }

   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
      echo "Autor:{$row['kurs_author']}  <br> ".
      "ilość: {$row['kurs_ilosc']} <br> ".
      "Kurs ID: {$row['kurs_id']} <br> ".
      "--------------------------------<br>";
   }
   echo "Dane pobrano pomyślnie\n";
   mysql_close($conn);
?>


MySQL LEFT JOIN

Łączenie po lewej stronie MySQL różni się od zwykłego łączenia. Zwraca wszystkie rekordy z lewej tabeli i dopasowane rekordy z prawej tabeli.
Jeśli wykonam LEFT JOIN, otrzymam wszystkie rekordy, które pasują w taki sam sposób, oraz  zyskuję dodatkowy rekord dla każdego niedopasowanego rekordu w lewej tabeli sprzężenia: w ten sposób zapewniając (w moim przykładzie), że każdy AUTOR dostaje dane.
Spróbuj poniższego przykładu, aby zrozumieć LEFT JOIN
root@host# mysql -u root -p password;
Enter password:*******
mysql> use KURS;
Database changed
mysql> SELECT a.kurs_id, a.kurs_author, b.kurs_ilosc
    -> FROM kurs_tbl a LEFT JOIN kurs_ils_tbl b
    -> ON a.kurs_author = b.kurs_author;
+-------------+-----------------+----------------+
| kurs_id | kurs_author | kurs_ilosc |
+-------------+-----------------+----------------+
|      1      |    Berg         |       10        |
|      2      |    K. Nelberg   |       6         |
|      3      |    H. Kern      |       15        |
+-------------+-----------------+----------------+
3 rows in set (0.02 sec)

Będziesz potrzebował więcej praktyki, aby zapoznać się z JOINS. Jest to nieco skomplikowana koncepcja w MySQL / SQL i stanie się bardziej przejrzysta podczas wykonywania prawdziwych przykładów.




Brak komentarzy:

Prześlij komentarz