Подтвердить что ты не робот

Объединение нескольких таблиц в SQL

Может кто-нибудь Объясняет мне о присоединениях?

Внутреннее соединение выбирает общие данные на основе условия.

Левое внешнее соединение выбирает все данные слева, независимо от общего, но принимает общие данные из правой таблицы и наоборот для правого внешнего.

Я знаю основы, но вопрос остается, когда речь идет о присоединении к 5, 8, 10 таблицам.

Предположим, что у меня есть 10 таблиц. Если у меня есть внутреннее соединение с первыми 5 таблицами, и теперь попробуйте применить левое соединение с шестой таблицей, как теперь будет работать запрос?

Я хочу сказать, что теперь набор результатов из первых 5 таблиц будет считаться левой таблицей, а 6-й будет рассмотрен как правая таблица? Или только пятая таблица будет считаться левой и шестой как правая? Пожалуйста, помогите мне в этом.

4b9b3361

Ответ 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), который вам нравится, и в соответствии с условием, в котором это условие. Вы можете вставить больше таблицы и базы данных по вашему выбору. Но помните, что вам нужно указать имя базы данных и псевдоним, если вы работаете в другой базе данных.