кодесурса
«MYSQL

MySQL INNER JOIN

script1adsense2code
script1adsense3code

Что такое ВНУТРЕННЕЕ СОЕДИНЕНИЕ в MySQL?

В MySQL INNER JOIN выбирает все строки из обеих участвующих таблиц, чтобы они появлялись в результате, если и только если обе таблицы удовлетворяют условиям, указанным в предложении ON. JOIN, CROSS JOIN и INNER JOIN являются синтаксическими эквивалентами. В стандартном SQL они не эквивалентны. INNER JOIN используется с предложением ON, CROSS JOIN используется в противном случае.

Иллюстрированная презентация MySQL INNER JOIN:

«Иллюстрированные

MySQL INNER JOIN Синтаксис:

MySQL поддерживает следующие синтаксисы JOIN для table_references (ссылка на таблицу также известна как выражение соединения.) Часть операторов SELECT и операторов UPDATE и DELETE для нескольких таблиц:

 table_references:
    escaped_table_reference [, escaped_table_reference] ...
escaped_table_reference:
    табличная_ссылка
  | {OJ table_reference}
табличная_ссылка:
    table_factor
  | join_table
table_factor:
    tbl_name [PARTITION (имя_раздела)] 
        [[AS] псевдоним] [index_hint_list]
  | table_subquery [AS] псевдоним
  | (table_references)
join_table:
    табличная_ссылка [ВНУТРЕННИЙ | CROSS] JOIN table_factor [join_condition]
  | table_reference STRAIGHT_JOIN table_factor
  | table_reference STRAIGHT_JOIN table_factor ON conditional_expr
  | table_reference {LEFT | RIGHT} [OUTER] JOIN table_reference join_condition
  | table_reference NATURAL [{LEFT | RIGHT} [OUTER]] JOIN table_factor
join_condition:
    ON conditional_expr
  | ИСПОЛЬЗОВАНИЕ (column_list)
index_hint_list:
    index_hint [, index_hint] ...
index_hint:
    USE {INDEX | KEY}
      [FOR {JOIN | ORDER BY | GROUP BY}] ([index_list])
  | IGNORE {INDEX | KEY}
      [FOR {JOIN | ORDER BY | GROUP BY}] (index_list)
  | СИЛА {ИНДЕКС | КЛЮЧ}
      [FOR {JOIN | ORDER BY | GROUP BY}] (index_list)
index_list:
    index_name [, index_name] ... 

Пример: MySQL INNER JOIN

При объединении записей из более чем одной таблицы пользователь должен указать, как записи в таблице можно сопоставить с записями в другой. Поскольку обе таблицы имеют столбец cate_id, мы можем сопоставить его с помощью этого столбца. Предложение ON используется для сопоставления записей в двух таблицах на основе значения столбца cate_id. Использование INNER JOIN объединяет таблицы. INNER JOIN позволяет строкам из любой таблицы появляться в результате тогда и только тогда, когда обе таблицы удовлетворяют условиям, указанным в предложении ON.

В этом примере предложение ON указывает, что столбец cate_id и book_mast, и таблицы категорий должен совпадать. Если cate_id не появляется в обеих таблицах, строка не будет отображаться в результате, потому что условие в условии ON не выполняется. Только те категории будут участвовать в JOIN, чьи книги написаны на английском языке.

Код:

SELECT book_mast.book_id,book_mast.book_name,cate_descrip           
FROM book_mast 
INNER JOIN category          
ON book_mast.cate_id=category.cate_id        
WHERE book_mast.pub_lang="English";

Пример таблицы: book_mast


Пример таблицы: категория :


Пример вывода:

 mysql> ВЫБРАТЬ book_mast.book_id, book_mast.book_name, cate_descrip           
    -> ОТ book_mast 
    -> ВНУТРЕННЯЯ РЕЙТИНГ категория          
    -> ВКЛ book_mast.cate_id = category.cate_id        
    -> ГДЕ book_mast.pub_lang = "английский";
+ --------- + ------------------------------------- + - ------------- +
| book_id | book_name | cate_descrip |
+ --------- + ------------------------------------- + - ------------- +
| BK001 | Введение в электродинамику | Наука | 
| BK002 | Понимание стальных конструкций | Технологии | 
| BK004 | Передача тепла и массы | Технологии | 
| BK010 | Основы термодинамики | Технологии | 
| BK012 | Природа Мира | Природа | 
| BK009 | Уход за психическим здоровьем | Медицинский | 
+ --------- + ------------------------------------- + - ------------- +
6 рядов в наборе (0,04 сек)

PHP скрипт

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>example-inner-join-with-multiple-tables php mysql examples | w3resource</title>
<meta name="description" content="example-inner-join-with-multiple-tables php mysql examples | w3resource">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-12">
<h2>List of the book ids, name of the book and category description:</h2>
<table class='table table-bordered'>
<tr>
<th>Book ID</th><th>Name of the book</th><th>Category description</th>
</tr>
<?php
$hostname="your_hostname";
$username="your_username";
$password="your_password";
$db = "your_dbname";
$dbh = new PDO("mysql:host=$hostname;dbname=$db", $username, $password);
foreach($dbh->query('SELECT book_mast.book_id,book_mast.book_name,cate_descrip
FROM book_mast
INNER JOIN category
ON book_mast.cate_id=category.cate_id
WHERE book_mast.pub_lang="English"') as $row) {
echo "<tr>";
echo "<td>" . $row['book_id'] . "</td>";
echo "<td>" . $row['book_name'] . "</td>";
echo "<td>" . $row['cate_descrip'] . "</td>"; 
echo "</tr>";
}
?>
</tbody></table>
</div>
</div>
</div>
</body>
</html>

Посмотреть пример в браузере

Пример: MySQL INNER JOIN с псевдонимом

Следующая инструкция MySQL возвращает идентификаторы книги, название книги, идентификатор издателя, описание категории и язык издателя, где язык издателя - английский, а идентификатор издателя не равен P004. Обратите внимание, что псевдонимы использовались для ссылки на имена столбцов. ВНУТРЕННЕЕ СОЕДИНЕНИЕ выполняется на основе условия, что идентификатор категории в таблице book_mast также должен существовать в таблице категорий.

Код:

SELECT bk.book_id,bk.book_name,bk.pub_id,ca.cate_descrip,bk.pub_lang 
FROM book_mast AS bk
INNER JOIN category AS ca  ON bk.cate_id=ca.cate_id  AND
bk.pub_lang="English" AND bk.pub_id<>'P004';

Пример таблицы: book_mast :


Пример вывода:

 mysql> SELECT bk.book_id, bk.book_name, bk.pub_id, ca.cate_descrip, bk.pub_lang 
    -> ОТ book_mast AS bk
    -> ВНУТРЕННЯЯ РЕШЕНИЕ категория КАК ВКЛ bk.cate_id = ca.cate_id И
    -> bk.pub_lang = 'английский' И bk.pub_id <> 'P004';
+ --------- + ------------------------------------- + - ------- + -------------- + ---------- +
| book_id | book_name | pub_id | cate_descrip | pub_lang |
+ --------- + ------------------------------------- + - ------- + -------------- + ---------- +
| BK001 | Введение в электродинамику | P003 | Наука | Английский | 
| BK002 | Понимание стальных конструкций | P001 | Технологии | Английский | 
| BK010 | Основы термодинамики | P007 | Технологии | Английский | 
| BK012 | Природа Мира | P008 | Природа | Английский | 
| BK009 | Уход за психическим здоровьем | P007 | Медицинский | Английский | 
+ --------- + ------------------------------------- + - ------- + -------------- + ---------- +
5 рядов в наборе (0,00 сек)

MySQL INNER JOIN с использованием трех таблиц

Образцы таблиц:

 стол - врачи
+ ------- + --------- +
| докид | имя |
+ ------- + --------- +
| 1 | А.ВАРМА | 
| 2 | Д.ГОМЕС | 
+ ------- + --------- +
стол - специализируйся
+ ------ + ---------- + ------- +
| спид | desc | докид |
+ ------ + ---------- + ------- +
| 1 | special1 | 1 | 
| 2 | special2 | 2 | 
+ ------ + ---------- + ------- +
таблица - расписание
+ ----- + ------ + ---------- + ------- +
| Tid | день | sit_time | докид |
+ ----- + ------ + ---------- + ------- +
| 1 | Пн | 17:00:00 | 1 | 
| 2 | СР | 08:00:00 | 1 | 
| 3 | Вт | 16:00:00 | 2 | 
| 4 | FRI | 09:00:00 | 2 | 
+ ----- + ------ + ---------- + ------- +

Приведенные выше таблицы связаны друг с другом. В врачах , специализированных и временных таблицах первичным ключом последовательно являются docid , spid и tid . Документ docid в таблицах специализации и расписаниях является внешним ключом, который является ссылкой на первичный ключ docid таблицы врачей .

Если мы хотим, чтобы все записи для врача, который специализировался на special1 и сидел в своей палате в среду (WED) в свое время по расписанию, можно использовать следующий SQL-запрос:

Код:

SELECT a.docid,a.dname,
       b.desc,c.tday,c.sit_time
  FROM doctors a 
    INNER JOIN specialize b
     ON a.docid=b.docid
    INNER JOIN timeschedule c
     ON a.docid=c.docid
        WHERE a.docid=1 AND c.tday='WED';

Пример вывода:

 + ------- + --------- + ---------- + ------ + ---------- +
| докид | имя | desc | день | sit_time |
+ ------- + --------- + ---------- + ------ + ---------- +
| 1 | А.ВАРМА | special1 | СР | 08:00:00 | 
+ ------- + --------- + ---------- + ------ + ---------- +

Пояснение:

Шаг 1

 ВЫБЕРИТЕ a.docid, a.dname, b.desc
ОТ врачей 
ВНУТРЕННЕЕ СОЕДИНЕНИЕ специализируется на
ON a.docid = b.docid;
«MySQL

Шаг 2

 ВЫБЕРИТЕ a.docid, a.dname,
b.desc, c.tday, c.sit_time
ОТ врачей 
ВНУТРЕННЕЕ СОЕДИНЕНИЕ специализируется на
ON a.docid = b.docid
ВНУТРЕННЕЕ СОЕДИНЕНИЕ расписание
ON a.docid = c.docid;
«MySQL

Шаг 3

 ВЫБЕРИТЕ a.docid, a.dname,
b.desc, c.tday, c.sit_time
ОТ врачей 
ВНУТРЕННЕЕ СОЕДИНЕНИЕ специализируется на
ON a.docid = b.docid
ВНУТРЕННЕЕ СОЕДИНЕНИЕ расписание
ON a.docid = c.docid
ГДЕ a.docid = 1 И c.tday = 'WED';
«MySQL

Ключевые моменты для запоминания

Нажмите на следующее, чтобы получить презентацию слайдов -

«MySQL

ВНУТРЕННИЕ СОЕДИНЕНИЯ: SQL и другие реляционные базы данных

Предыдущий: выберите с помощью date_add ()
Далее: левое соединение

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code