Объединение нескольких таблиц в SQL
Может кто-нибудь Объясняет мне о присоединениях?
Внутреннее соединение выбирает общие данные на основе условия.
Левое внешнее соединение выбирает все данные слева, независимо от общего, но принимает общие данные из правой таблицы и наоборот для правого внешнего.
Я знаю основы, но вопрос остается, когда речь идет о присоединении к 5, 8, 10 таблицам.
Предположим, что у меня есть 10 таблиц. Если у меня есть внутреннее соединение с первыми 5 таблицами, и теперь попробуйте применить левое соединение с шестой таблицей, как теперь будет работать запрос?
Я хочу сказать, что теперь набор результатов из первых 5 таблиц будет считаться левой таблицей, а 6-й будет рассмотрен как правая таблица? Или только пятая таблица будет считаться левой и шестой как правая? Пожалуйста, помогите мне в этом.
Ответы
Ответ 1
При объединении нескольких таблиц вывод каждого соединения логически формирует виртуальную таблицу, которая переходит в следующее соединение.
Итак, в примере вашего вопроса составной результат объединения первых 5 таблиц будет рассматриваться как таблица с левой стороной.
Подробнее об этом см. Плакат обработки логических запросов Itzik Ben-Gan.
Виртуальные таблицы, участвующие в объединениях, могут управляться позиционированием предложения ON
. Например
SELECT *
FROM T1
INNER JOIN T2
ON T2.C = T1.C
INNER JOIN T3
LEFT JOIN T4
ON T4.C = T3.C
ON T3.C = T2.C
эквивалентно (T1 Inner Join T2) Inner Join (T3 Left Join T4)
Ответ 2
Полезно думать о JOIN
в последовательности, поэтому первая правильная.
SELECT *
FROM a
INNER JOIN b ON b.a = a.id
INNER JOIN c ON c.b = b.id
LEFT JOIN d ON d.c = c.id
LEFT JOIN e ON e.d = d.id
Были бы все поля из a
и b
и c
, где все критерии ON
совпадают, плюс значения из d
, где его критерии совпадают, плюс все содержимое e
, где все его критерии соответствуют.
Я знаю, что RIGHT JOIN
вполне приемлемо, но я нашел в своем опыте, что это не нужно - я почти всегда просто присоединяюсь к вещам слева направо.
Ответ 3
Простой код INNER JOIN VIEW...
CREATE VIEW room_view
AS SELECT a.*,b.*
FROM j4_booking a INNER JOIN j4_scheduling b
on a.room_id = b.room_id;
Ответ 4
Вы можете применить join, как это.
select a.*,b.*,c.*,d.*,e.*
from [DatabaseName].[Table_a] a
INNER JOIN [DatabaseName].[Table_b] b ON a.id = b.id
INNER JOIN [DatabaseName].[Table_c] c ON b.id=c.id
INNER JOIN [DatabaseName].[Table_d] d on c.id=d.id
INNER JOIN [DatabaseName].[Table_e] e on d.id=e.id where a.con=5 and
b.con=6
Здесь, в месте a. * и в каком состоянии вы можете показать столбец (filed), который вам нравится, и в соответствии с условием, в котором это условие. Вы можете вставить больше таблицы и базы данных по вашему выбору. Но помните, что вам нужно указать имя базы данных и псевдоним, если вы работаете в другой базе данных.