English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Verwendung von MySQL-Verbindungen

In den vorangegangenen Kapiteln haben wir bereits gelernt, wie man Daten in einer Tabelle liest, was relativ einfach ist, aber in der Praxis oft ist es notwendig, Daten aus mehreren Datenbanktabellen zu lesen.

In diesem Kapitel werden wir Ihnen zeigen, wie Sie JOIN von MySQL verwenden, um Daten in zwei oder mehreren Tabellen abzufragen.

Sie können JOIN von MySQL in SELECT-, UPDATE- und DELETE-Anweisungen verwenden, um mehrfache Tabellenabfragen zu kombinieren.

JOIN wird grob in folgende drei Kategorien eingeteilt:

  • INNER JOIN (Innerer Join, oder Gleichheitsjoin):Gibt die Einträge zurück, die eine Übereinstimmung in den Spaltenbeziehungen der beiden Tabellen aufweisen.

  • LEFT JOIN (Linker Join):Erhält alle Einträge der linken Tabelle, selbst wenn es in der rechten Tabelle keine entsprechenden Übereinstimmungen gibt.

  • RIGHT JOIN (Rechter Join): Ganz anders als LEFT JOIN, wird es verwendet, um alle Einträge der rechten Tabelle zu erhalten, selbst wenn es in der linken Tabelle keine entsprechenden Übereinstimmungen gibt.

Die verwendete Datenbankstruktur in diesem Kapitel und der Datenherunterladung:w3codebox-mysql-join-test.sql.

Innerhalb des Befehlszeilen-Dialogs verwenden wir INNER JOIN

Wir verwenden w3In der Datenbank codebox gibt es zwei Tabellen: tcount_tbl und w3codebox_tbl. Die Daten der beiden Datenbanktabellen sind wie folgt:

Online-Beispiel

Versuchen Sie den folgenden Beispiel:

mysql> use w3codebox;
Datenbank geändert
mysql> SELECT * FROM tcount_tbl;
+---------------+--------------+
| w3codebox_author | w3codebox_count |
+---------------+--------------+
| Grundtutorials-Web  | 10           |
| oldtoolbag.com    | 20           |
| Google        | 22           |
+---------------+--------------+
3 rows in set (0.01 sec)
 
mysql> SELECT * von w3codebox_tbl;
+-----------+---------------+---------------+-----------------+
| w3codebox_id | w3codebox_title  | w3codebox_author | submission_date |
+-----------+---------------+---------------+-----------------+
| 1         | Lernen PHP    | Grundtutorials-Web  | 2017-04-12      |
| 2         | Lernen MySQL  | Grundtutorials-Web  | 2017-04-12      |
| 3         | Lernen Java   | oldtoolbag.com    | 2015-05-01      |
| 4         | Lernen Python | oldtoolbag.com    | 2016-03-06      |
| 5         | Lernen C      | FK            | 2017-04-05      |
+-----------+---------------+---------------+-----------------+
5 rows in set (0.01 sec)

Nächste verwenden wir MySQLINNER JOIN (kann auch INNER weggelassen werden, die Wirkung ist die gleiche)Um die beiden Tabellen zu verbinden und w zu lesen3Alle w in der Tabelle codebox_tbl3Das Feld codebox_author in der Tabelle tcount_tbl entspricht dem w3Wert des Feldes codebox_count:

mysql> SELECT a.w3codebox_id, a.w3codebox_author, b.w3codebox_count FROM w3codebox_tbl a INNER JOIN tcount_tbl b ON a.w3codebox_author = b.w3codebox_author;
+-------------+-----------------+----------------+
| a.w3codebox_id | a.w3codebox_author | b.w3codebox_count |
+-------------+-----------------+----------------+
| 1           | Basic Tutorial Website | 10             |
| 2           | Basic Tutorial Website | 10             |
| 3           | oldtoolbag.com | 20 |
| 4           | oldtoolbag.com | 20 |
+-------------+-----------------+----------------+
4 rows in set (0.00 sec)

Der obige SQL-Befehl ist äquivalent zu:

mysql> SELECT a.w3codebox_id, a.w3codebox_author, b.w3codebox_count FROM w3codebox_tbl a, tcount_tbl b WHERE a.w3codebox_author = b.w3codebox_author;
+-------------+-----------------+----------------+
| a.w3codebox_id | a.w3codebox_author | b.w3codebox_count |
+-------------+-----------------+----------------+
| 1           | Basic Tutorial Website | 10             |
| 2           | Basic Tutorial Website | 10             |
| 3           | oldtoolbag.com | 20 |
| 4           | oldtoolbag.com | 20 |
+-------------+-----------------+----------------+
4 rows in set (0.01 sec)

MySQL LEFT JOIN

MySQL left join unterscheidet sich von join.  MySQL LEFT JOIN liest alle Daten der linken Datenbanktabelle, selbst wenn in der rechten Tabelle keine entsprechenden Daten vorhanden sind.

Online-Beispiel

Versuchen Sie den folgenden Beispiel, um w3codebox_tbl Is the left table,tcount_tbl Für die rechte Tabelle, verstehen Sie die Anwendung von MySQL LEFT JOIN:

mysql> SELECT a.w3codebox_id, a.w3codebox_author, b.w3codebox_count FROM w3codebox_tbl a LEFT JOIN tcount_tbl b ON a.w3codebox_author = b.w3codebox_author;
+-------------+-----------------+----------------+
| a.w3codebox_id | a.w3codebox_author | b.w3codebox_count |
+-------------+-----------------+----------------+
| 1           | Basic Tutorial Website | 10             |
| 2           | Basic Tutorial Website | 10             |
| 3           | oldtoolbag.com | 20 |
| 4           | oldtoolbag.com | 20 |
| 5           | FK              | NULL            |
+-------------+-----------------+----------------+
5 rows in set (0.01 sec)

In dem obigen Beispiel wurde LEFT JOIN verwendet, diese Anweisung liest die linken Daten der Tabelle w3alle ausgewählten Felddaten von codebox_tbl, selbst wenn es im rechten Table tcount_tbl keine entsprechenden w3codebox_author field value.

MySQL RIGHT JOIN

MySQL RIGHT JOIN liest alle Daten der rechten Datenbanktabelle, selbst wenn in der linken Tabelle keine entsprechenden Daten vorhanden sind.

Online-Beispiel

Versuchen Sie den folgenden Beispiel, um w3codebox_tbl Is the left table,tcount_tbl Is the right table, understand the application of MySQL RIGHT JOIN:

mysql> SELECT a.w3codebox_id, a.w3codebox_author, b.w3codebox_count FROM w3codebox_tbl a RIGHT JOIN tcount_tbl b ON a.w3codebox_author = b.w3codebox_author;
+-------------+-----------------+----------------+
| a.w3codebox_id | a.w3codebox_author | b.w3codebox_count |
+-------------+-----------------+----------------+
| 1           | Basic Tutorial Website | 10             |
| 2           | Basic Tutorial Website | 10             |
| 3           | oldtoolbag.com | 20 |
| 4           | oldtoolbag.com | 20 |
| NULL | NULL | NULL | 22             |
+-------------+-----------------+----------------+
5 rows in set (0.01 sec)

In the above example, RIGHT JOIN is used, which will read all selected field data from the right table tcount_tbl, even if there is no corresponding data in the left table w3codebox_tbl does not have a corresponding w3codebox_author field value.

Using JOIN in PHP scripts

In PHP scripts, use the mysqli_query() function to execute SQL statements, you can use the same SQL statement as the parameter of mysqli_query() function.

Try the following example:

<?php
$dbhost = 'localhost';  // MySQL server host address
$dbuser = 'root';            // MySQL username
$dbpass = '123456';          // MySQL username and password
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn)
{
    die('Connection failed: ' . mysqli_error($conn));
}
// Set encoding to prevent Chinese garbled characters
mysqli_query($conn, "set names utf8');
 
$sql = 'SELECT a.w3codebox_id, a.w3codebox_author, b.w3codebox_count FROM w3codebox_tbl a INNER JOIN tcount_tbl b ON a.w3codebox_author = b.w3codebox_author';
 
mysqli_select_db( $conn, 'w }}3codebox');
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
    die('Daten können nicht gelesen werden: ' . mysqli_error($conn));
}
echo '<h2">MySQL-JOIN-Test<h2">;</
echo '<table border="1><tr><td>Tutorial-ID</td><td>Autor</td><td>Einloggingsitzungen</td></tr>';
while($row = mysqli_fetch_array($retval, MYSQLI_ASSOC))
{
    echo "<tr><td> "{$row['w3codebox_id}<//td> ".
         "<td>{$row['w3codebox_author']}</td> ".
         "<td>{$row['w3codebox_count</</td> ".
         "</tr>";
}
echo '</table>';
mysqli_close($conn);
?>

Die Ausgabe ist wie folgt dargestellt: