кодесурса
«SQLite

SQLite INNER JOIN

script1adsense2code
script1adsense3code

Как внутренние объединения работают в SQLite?

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

У нас есть три типа INNER JOIN: INNER JOIN, NATURAL INNER JOIN и CROSS INNER JOIN. Ключевое слово INNER может быть опущено.

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

Предположим, что у нас есть две таблицы таблица-A и таблица-B. Уникальными столбцами для двух таблиц являются ID. Значения в столбце ID для таблицы-A составляют 210 211 212 и 213, а значения для таблицы B - 210 214 212 212 и 212. Вот графическое представление.

«внутренний

Пример: SQLite INNER JOIN

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

Вот примеры таблиц.

 стол - врачи
доктор_ид степень доктора_имя
---------- -------------- ----------
210 Доктор Джон Линга, доктор медицины
211 Доктор Питер Холл MBBS
212 Доктор Ке Джи Доктор медицины
213 д-р Пат Фэй, доктор медицины
стол - посещения
doctor_id имя_пользователя vdate
---------- ------------ ----------
210 Джулия Найер 2013-10-15
214 ТиДжей Олсон 2013-10-14
215 Джон Сео 2013-10-15
212 Джеймс Марлоу 2013-10-16
212 Джейсон Маллин 2013-10-12

В этом примере предложение ON указывает, что столбец doctor_id таблицы врачей и посещений должен совпадать. Если идентификатор (doctor_id) не отображается в обеих таблицах, строка не будет отображаться в результате, поскольку условие в предложении ON не выполняется. Только те врачи будут участвовать в JOIN, чья степень ID MD.

SELECT doctors.doctor_id,doctors.doctor_name,visits.patient_name           
FROM doctors
INNER JOIN visits        
ON doctors.doctor_id=visits.doctor_id
WHERE doctors.degree='MD';

Выход:

 doctor_id doctor_name имя пациента
---------- -------------- ------------
210 Доктор Джон Линга Джулия Найер
212 Доктор Ке Джи Джеймс Марлоу
212 Доктор Ке Джи Джейсон Маллин

Пример: внутреннее соединение SQLite с псевдонимом

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

SELECT doc.doctor_id,doc.doctor_name,doc.degree,vis.patient_name 
FROM doctors AS doc
INNER JOIN visits AS vis  ON doc.doctor_id=vis.doctor_id  AND
doc.degree="MD" AND doc.doctor_id<>210;

Вот результат.

 doctor_id доктор_имя степень имя_файла
---------- ----------- ---------- ------------
212 Доктор Ке Джи Доктор медицины Джеймс Марлоу
212 Доктор Ке Джи Доктор медицины Джейсон Маллин

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

Вот примеры таблиц:

 стол - врачи
доктор_ид степень доктора_имя
---------- -------------- ----------
210 Доктор Джон Линга, доктор медицины
211 Доктор Питер Холл MBBS
212 Доктор Ке Джи Доктор медицины
213 д-р Пат Фэй, доктор медицины
стол - специальность
spl_id spl_descrip doctor_id
---------- ----------- ----------
1 КАРДИО 211
2 NEURO 213
3 ARTHO 212
4 GYNO 210
s
стол - посещения
doctor_id имя_пользователя vdate
---------- ------------ ----------
210 Джулия Найер 2013-10-15
214 ТиДжей Олсон 2013-10-14
215 Джон Сео 2013-10-15
212 Джеймс Марлоу 2013-10-16
212 Джейсон Маллин 2013-10-12

Приведенные выше таблицы связаны друг с другом. В врачах таблицы специальностей и визитов doctor_id и spl_id являются первичными ключами для врачей и таблицы специальностей последовательно. Doctor_id в таблице специализаций и таблицах посещений - это внешний ключ, который является ссылкой на первичный ключ doctor_id таблицы докторов .

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

SELECT a.doctor_id,a.doctor_name,
b.spl_descrip,c.patient_name,c.vdate
FROM doctors a 
INNER JOIN speciality b
ON a.doctor_id=b.doctor_id
INNER JOIN visits c
ON a.doctor_id=c.doctor_id
WHERE a.doctor_id=212 AND c.vdate='2013-10-16';

Выход:

 doctor_id doctor_name spl_descrip имя_пользователя vdate
---------- ----------- ----------- ------------ ------ ----
212 Доктор Ке Джи АРТХО Джеймс Марлоу 2013-10-16

Объяснение:

шаг 1

SELECT a.doctor_id,a.doctor_name,b.spl_descrip
FROM doctors a 
INNER JOIN speciality b
ON a.doctor_id=b.doctor_id;

шаг 2

 ВЫБЕРИТЕ a.doctor_id, a.doctor_name,
b.spl_descrip, c.patient_name, c.vdate
ОТ врачей 
INNER JOIN специальность
ON a.doctor_id = b.doctor_id
INNER JOIN посещает c
ON a.doctor_id = c.doctor_id;

шаг 3

SELECT a.doctor_id,a.doctor_name,
b.spl_descrip,c.patient_name,c.vdate
FROM doctors a 
INNER JOIN speciality b
ON a.doctor_id=b.doctor_id
INNER JOIN visits c
ON a.doctor_id=c.doctor_id
WHERE a.doctor_id=212 AND c.vdate='2013-10-16';

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

Предыдущий: Создать, Отбросить представления
Следующая: ЛЕВАЯ НАРУЖНАЯ СОЕДИНЕНИЕ

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


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code