Используя Mysql соединение
В предыдущих главах мы узнали, что если считывать данные в таблицу, которая является относительно простым, но часто нужно считывать данные из нескольких таблиц в реальном приложении.
В этой главе мы покажем вам, как использовать MySQL JOIN данные запроса в двух или более таблиц.
Вы можете использовать Mysql в SELECT, UPDATE и DELETE заявления РЕГИСТРИРУЙТЕСЬ совместных запросов на нескольких столах.
РЕГИСТРИРУЙТЕСЬ согласно функции разделены на следующие три категории:
- (Внутреннее соединение, или эквивалентное соединение) INNER JOIN: Получить записи два поля в таблице соответствует отношениям.
- LEFT JOIN (левое соединение): Получить все записи из левой таблицы правой таблицы, даже если нет соответствующих записей соответствия.
- RIGHT JOIN (правое соединение): В отличие от LEFT JOIN, получить нужную таблицу для всех записей, даже если левая таблица не имеет соответствующих совпадающие записи.
Структура базы данных и данные , используемые в этом разделе Скачать: w3big.sql .
Использование INNER JOIN командной строки
У нас есть две таблицы tcount_tbl и w3big_tbl в w3big базе данных. Два данных таблицы данных следующим образом:
примеров
Попробуйте следующие примеры:
root@host# mysql -u root -p password; Enter password:******* mysql> use w3big; Database changed mysql> SELECT * FROM tcount_tbl; +-----------------+----------------+ | w3big_author | w3big_count | +-----------------+----------------+ | mahran | 20 | | mahnaz | NULL | | Jen | NULL | | Gill | 20 | | John Poul | 1 | | Sanjay | 1 | +-----------------+----------------+ 6 rows in set (0.01 sec) mysql> SELECT * from w3big_tbl; +-------------+----------------+-----------------+-----------------+ | w3big_id | w3big_title | w3big_author | submission_date | +-------------+----------------+-----------------+-----------------+ | 1 | Learn PHP | John Poul | 2007-05-24 | | 2 | Learn MySQL | Abdul S | 2007-05-24 | | 3 | JAVA Tutorial | Sanjay | 2007-05-06 | +-------------+----------------+-----------------+-----------------+ 3 rows in set (0.00 sec) mysql>
Далее мы приходим для подключения более двух таблиц в таблице , чтобы прочитать w3big_tbl все значения w3big_count поля w3big_author поля , соответствующие таблице в tcount_tbl с использованием MySQL INNER JOIN (использование может быть опущена INNER JOIN, тот же эффект):
mysql> SELECT a.w3big_id, a.w3big_author, b.w3big_count FROM w3big_tbl a INNER JOIN tcount_tbl b ON a.w3big_author = b.w3big_author; +-----------+---------------+--------------+ | w3big_id | w3big_author | w3big_count | +-----------+---------------+--------------+ | 1 | John Poul | 1 | | 3 | Sanjay | 1 | +-----------+---------------+--------------+ 2 rows in set (0.00 sec)
Выше SQL заявление эквивалентно:
mysql> SELECT a.w3big_id, a.w3big_author, b.w3big_count FROM w3big_tbl a, tcount_tbl b WHERE a.w3big_author = b.w3big_author; +-------------+-----------------+----------------+ | w3big_id | w3big_author | w3big_count | +-------------+-----------------+----------------+ | 1 | John Poul | 1 | | 3 | Sanjay | 1 | +-------------+-----------------+----------------+ 2 rows in set (0.01 sec) mysql>
MySQL LEFT JOIN
MySQL покинул присоединиться и присоединиться к другому. MySQL LEFT JOIN будет считывать все данные таблицы данных на левой стороне, с правой стороны таблицы даже при отсутствии соответствующих данных.
примеров
Попробуйте следующие примеры, w3big_tbl таблицу слева, tcount_tbl правой таблицы, чтобы понять MySQL LEFT JOIN приложений:
root@host# mysql -u root -p password; Enter password:******* mysql> use w3big; Database changed mysql> SELECT a.w3big_id, a.w3big_author, b.w3big_count FROM w3big_tbl a LEFT JOIN tcount_tbl b ON a.w3big_author = b.w3big_author; +-------------+-----------------+----------------+ | w3big_id | w3big_author | w3big_count | +-------------+-----------------+----------------+ | 1 | John Poul | 1 | | 2 | Abdul S | NULL | | 3 | Sanjay | 1 | +-------------+-----------------+----------------+ 3 rows in set (0.02 sec)
Приведенные выше примеры использования LEFT JOIN, оператор считывает все выбранное поле данных в левой части таблицы данных w3big_tbl, даже если нет соответствующих правая таблица tcount_tbl в w3big_author значения поля.
MySQL RIGHT JOIN
MySQL RIGHT JOIN считывает все данные справа от таблицы данных на левой стороне стола даже при отсутствии соответствующих данных.
примеров
Попробуйте следующие примеры, tcount_tbl левой таблицы, w3big_tbl правой таблицы, чтобы понять MySQL RIGHT JOIN приложения:
root@host# mysql -u root -p password; Enter password:******* mysql> use w3big; Database changed mysql> SELECT b.w3big_id, b.w3big_author, a.w3big_count FROM tcount_tbl a RIGHT JOIN w3big_tbl b ON a.w3big_author = b.w3big_author; +-------------+-----------------+----------------+ | w3big_id | w3big_author | w3big_count | +-------------+-----------------+----------------+ | 1 | John Poul | 1 | | 2 | Abdul S | NULL | | 3 | Sanjay | 1 | +-------------+-----------------+----------------+ 3 rows in set (0.02 sec)
Приведенные выше примеры используют RIGHT JOIN, оператор считывает все выбранное поле данных в правой части таблицы данных w3big_tbl, даже если нет соответствующей таблицы в левом tcount_tbl в w3big_author значения поля.
РЕГИСТРИРУЙТЕСЬ использование в PHP скриптов
Использование PHP mysql_query () функция для выполнения операторов SQL, вы можете использовать больше, чем того же оператора SQL как mysql_query) параметров функции (.
Попробуйте следующие примеры:
<?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT a.w3big_id, a.w3big_author, b.w3big_count FROM w3big_tbl a INNER JOIN tcount_tbl b ON a.w3big_author = b.w3big_author'; mysql_select_db('w3big'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "Author:{$row['w3big_author']} <br> ". "Count: {$row['w3big_count']} <br> ". "Tutorial ID: {$row['w3big_id']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn); ?>