Right join inner join: SQL INNER JOIN Keyword
Содержание
Разница между внутренним и правым соединением в SQL Server
Введение
В этой статье я собираюсь объяснить разницу между внутренним и правым соединением на примерах. Это один из самых распространенных вопросов на собеседовании по SQL Server.
Здесь мы будем использовать SQL Server 2017, или вы можете использовать SQL Server 2008 или более позднюю версию.
Прочтите мои предыдущие статьи о присоединениях к SQL Server 2017 , используя приведенные ниже ссылки, прежде чем читать эту статью,
- Соединения в SQL Server 2017
- Самостоятельное присоединение в SQL Server 2017
- Расширенные соединения в SQL Server 2017
- Присоединение к трем или более таблицам в SQL Server 2017
- Разница между Union и Union All в SQL Server 2017
- Найдите N-ю самую высокую зарплату в SQL Server 2017
- Разница между внутренним соединением и левым соединением в SQL Server
Определение объединений
Используется для выборки/получения данных из двух или более связанных таблиц из базы данных. Как правило, таблицы связаны друг с другом с помощью ограничений внешнего ключа.
Предварительные условия
SQL Server 2017 или вы можете использовать SQL Server 2008 или более позднюю версию.
Теперь сначала мы создадим базу данных и две таблицы, чтобы применить соединения для понимания. Шаг 1. Создание базы данных
- Создать базу данных chittadb
Теперь выберите запрос сценария, затем нажмите F5 или нажмите кнопку «Выполнить», чтобы выполнить указанный выше сценарий.
Вы должны увидеть сообщение «Команды успешно выполнены». Это означает, что ваша новая база данных создана.
Шаг 2. Создайте первую таблицу
Откройте SQL Server и используйте следующий скрипт для создания таблицы «tbl_Department».
- создать таблицу tbl_Department
- (
- DeptId int первичный ключ не нулевой идентификатор (1,1),
- Имя отдела nvarchar(50),
- Глава отдела nvarchar(50),
- Местоположение nvarchar(100)
- )
Выполните приведенный выше запрос, чтобы создать «tbl_Department».
Вы должны увидеть сообщение «Команды успешно выполнены».
Теперь данные вставлены в таблицу.
- Вставить в tbl_Department значения ( ‘IT’, ‘Читта’, ‘Ченнаи’)
- Вставить в значения tbl_Department («Зарплата», «Ахил», «Одиша»)
- Вставить в значения tbl_Department (‘HR’, ‘Ram’, ‘Pune’)
- Вставить в tbl_Department значения ( ‘Табель учета рабочего времени’, ‘Каннан’, ‘Ченнай’)
Выполните приведенный выше запрос, вы должны увидеть сообщение «Команды успешно выполнены».
Теперь извлеките все данные из таблицы «tbl_Department».
- выберите * из tbl_Department
вывод
Шаг 3. Создайте вторую таблицу
, следуя инструкции «Server blE
9004».
- Создать таблицу tbl_Employee
- (
- EmpID int первичный ключ не нулевой идентификатор (1,1),
- Имя nvarchar(50),
- Пол nvarchar(50),
- страна nvarchar(20),
- Зарплата,
- DepartmentId int ссылки на внешние ключи tbl_Department(DeptId)
- )
Выполните приведенный выше запрос, чтобы создать «tbl_Employee».
Вы должны увидеть сообщение «Команды успешно выполнены».
Теперь данные вставлены в таблицу.
- Вставить в tbl_Employee значения ( ‘Джиту’, ‘Мужчина’,’Индия’,4000, 1)
- Вставить в значения tbl_Employee (‘Рани’, ‘Женщина’, ‘Индия’, 5000, 3)
- Вставить в значения tbl_Employee (‘Rohit’, ‘Мужчина’, ‘Индия’, 5500, 1)
- Вставить в значения tbl_Employee (‘Дибас’, ‘Мужчина’, ‘Индия’, 6500, 2)
- Вставить в значения tbl_Employee (‘Gajendra’, ‘Мужчина’, ‘Индия’, 3800, 2)
- Вставить в значения tbl_Employee (‘Раджа’, ‘Мужчина’, ‘Индия’, 9000, 1)
- Вставить в значения tbl_Employee (‘Джени’, ‘Женщина’, ‘Индия’, 5800, 3)
- Вставить в значения tbl_Employee (‘Чандин’, ‘Женщина’, ‘Индия’, 8500, 1)
- Вставить в значения tbl_Employee (‘pintu’, ‘Мужчина’, ‘Индия’, 9500, NULL)
- Вставить в значения tbl_Employee (‘Subrat’, ‘Мужчина’, ‘Индия’, 9800, NULL)
Выполните приведенный выше запрос, вы должны увидеть сообщение «Команды успешно выполнены».
Теперь извлеките все данные из таблицы «tbl_Employee».
- выберите * из tbl_Employee
Выход
Общая формула для соединений
- Выбрать список столбцов (какая -то столбец вы хотите отобразить)
- ОТ LeftTableName
- JOIN_TYPE RightTableName
- ВКЛ JoinCondition
INNER JOIN
Внутреннее соединение возвращает только совпадающие строки между обеими таблицами, несовпадающие строки удаляются.
Пример
Напишите запрос для получения имени, пола, страны, зарплаты и названия отдела из таблиц tbl_Employee и tbl_Department.
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Запрос
- ВЫБЕРИТЕ Имя, Пол,страна, Оклад, Название отдела
- ОТ tbl_Employee
- ВНУТРЕННЕЕ СОЕДИНЕНИЕ tbl_Department
- ON tbl_Employee. DepartmentId = tbl_Department.DeptId
ИЛИ
- ВЫБЕРИТЕ Имя, Пол, страну, Зарплату, Название отдела
- ОТ tbl_Employee
- ПРИСОЕДИНИТЬСЯ tbl_Department
- ON tbl_Employee.DepartmentId = tbl_Department.DeptId
Примечание
СОЕДИНЕНИЕ или ВНУТРЕННЕЕ СОЕДИНЕНИЕ означает, что оба они одинаковы. Всегда лучше использовать INNER JOIN.
ИЛИ
- выберите emp.Name,emp.Gender,emp.country,emp.Salary,dept.DeptName
- из tbl_Employee emp
- внутреннее объединение tbl_Department dept
- на emp.DepartmentId=dept.DeptId
Выход
Правое соединение или правое внешнее соединение
Правое соединение или правое внешнее соединение Возвращает только соответствующие ряды между обоими таблицами, а также не соответствующими рядами из правильных таблиц.
Пример
Напишите запрос для получения имени, пола, страны, зарплаты и названия отдела из таблиц tbl_Employee и tbl_Department.
ПРАВОЕ СОЕДИНЕНИЕ или ПРАВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ Запрос
- ВЫБЕРИТЕ Имя, Пол, страну, Заработную плату, Название отдела
- ОТ tbl_Employee
- ПРАВОЕ СОЕДИНЕНИЕ tbl_Department
- ON tbl_Employee.DepartmentId = tbl_Department.DeptId
ИЛИ
- ВЫБЕРИТЕ Имя, Пол, страну, Зарплату, Название отдела
- ОТ tbl_Employee
- ПРАВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ tbl_Department
- ON tbl_Employee.DepartmentId = tbl_Department.DeptId
Примечание
Вы можете использовать RIGHT JOIN или RIGHT OUTER JOIN. Ключевое слово OUTER не является обязательным.
ИЛИ
- выберите emp.Name,emp.Gender,emp.country,emp.Salary,dept.DeptName
- из tbl_Employee emp
- RIGHT JOIN tbl_Department dept
- на emp.DepartmentId=dept.DeptId
Выход
В чем разница между INNER JOIN и RIGHT JOIN?
INNER JOIN
Внутреннее соединение возвращает только совпадающие строки между обеими таблицами, несовпадающие строки удаляются.
ПРАВОЕ СОЕДИНЕНИЕ
Правое соединение или правое внешнее соединение возвращает только совпадающие строки между обеими таблицами, а также несовпадающие строки из правой таблицы.
В чем разница между INNER JOIN и JOIN
Нет никакой разницы между внутренним соединением и соединением, они абсолютно одинаковы. Точно так же нет разницы между
- ЛЕВОЕ СОЕДИНЕНИЕ и ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ
- ПРАВОЕ СОЕДИНЕНИЕ и ПРАВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ
- ПОЛНОЕ СОЕДИНЕНИЕ и ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ
Заключение
В этой статье я объяснил разницу между внутренним и правым соединением в SQL Server на примерах. Я надеюсь, что эта статья помогла вам разобраться в этой теме. Оставьте свой ценный отзыв в разделе комментариев.
SQL: СОЕДИНИТЬСЯ против ЛЕВОГО ВНЕШНЕГО СОЕДИНЕНИЯ?
спросил
Изменено
1 год, 5 месяцев назад
Просмотрено
5к раз
У меня есть несколько похожих SQL-запросов, в одном из которых используется JOIN
, а в другом LEFT OUTER JOIN
. Я поиграл с SQL и обнаружил, что возвращаются те же результаты. Кодовая база использует JOIN и LEFT OUTER JOIN взаимозаменяемо. Пока LEFT JOIN
кажется взаимозаменяемым с LEFT OUTER JOIN
, я не могу найти информацию только о JOIN
. Это хорошая практика?
Ex Query1 с использованием JOIN
SQL ВЫБРАТЬ я бы, имя ОТ u_users клиенты ПРИСОЕДИНИТЬСЯ t_orders заказы ONorders.status=='ОЖИДАНИЕ ОПЛАТЫ'
Пример. Query2 с использованием LEFT OUTER JOIN
SQL ВЫБРАТЬ я бы, имя ОТ u_users клиенты ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ t_orders заказы ONorders.status=='ОЖИДАНИЕ ОПЛАТЫ'
- sql
- присоединиться
- левое соединение
4
Как указано выше:
СОЕДИНЕНИЕ является синонимом ВНУТРЕННЕГО СОЕДИНЕНИЯ. Это определенно отличается от всех
типы ВНЕШНИХ СОЕДИНЕНИЙ
Итак, вопрос: «Когда следует использовать внешнее соединение?»
Вот хорошая статья с несколькими отличными диаграммами:
https://www. sqlshack.com/sql-outer-join-overview-and-examples/
Краткий ответ на ваш вопрос:
- Предпочитайте СОЕДИНЕНИЕ (также известное как «ВНУТРЕННЕЕ СОЕДИНЕНИЕ»), чтобы связать две связанные таблицы. На практике вы будете использовать INNER JOIN большую часть времени.
- INNER JOIN — это пересечение двух таблиц. Он представлен «зеленым» участком в середине диаграммы Венна выше.
- Используйте «Внешнее соединение», если вам нужны левая, правая или обе внешние области.
- В вашем примере результирующий набор один и тот же: два выражения эквивалентны.
- ТАКЖЕ: обязательно ознакомьтесь с «Show Plan» (или эквивалентом) для вашей СУБД: https://www.sqlshack.com/execution-plans-in-sql-server/
‘Надеюсь, это поможет…
1
Сначала теория:
Соединение является подмножеством левого соединения (при прочих равных условиях). При некоторых обстоятельствах они идентичны
Разница в том, что левое соединение будет включать все кортежи в левом отношении (даже если они не соответствуют предикату соединения), в то время как соединение будет включать только кортежи левого отношения. стороны, которые соответствуют сказуемому.
Например, предположим, что мы должны установить отношения R и S.
Допустим, мы должны выполнить R JOIN S (и R LEFT JOIN S) для некоторого предиката p
J = R JOIN S для (p)
Теперь идентифицируем кортежи R, которых нет в J.
Наконец, добавьте эти кортежи в J (заполнив любой атрибут в J, не входящий в R, нулем)
Результатом является левое соединение:
R LEFT JOIN S (p)
Таким образом, когда все кортежи левой части отношения находятся в СОЕДИНЕНИИ, этот результат будет идентичен левому соединению.
вернуться к вам проблема:
Ваш JOIN, скорее всего, будет включать все кортежи от Users. Таким образом, запрос будет таким же, если вы используете JOIN или LEFT JOIN.
Эти два значения полностью эквивалентны, поскольку предложение WHERE
превращает LEFT JOIN
в INNER JOIN
.
При фильтрации всех, кроме первой таблицы в LEFT JOIN
условие обычно должно быть в предложении ON
. Предположительно, у вас также есть допустимое условие соединения, соединяющее две таблицы:
SELEC идентификатор, имя ОТ u_users u ЛЕВОЕ ПРИСОЕДИНЕНИЕ t_orders о ON o.user_id = u.user_id AND o.status = 'ОЖИДАНИЕ ОПЛАТЫ';
Эта версия отличается от версии INNER JOIN
, поскольку эта версия возвращает всех пользователей, даже тех, у кого нет ожидающих платежей.
2
Оба одинаковые, здесь нет никакой разницы.
При использовании соединения необходимо использовать условие ON . Он может сопоставлять любые данные между двумя таблицами, если вы не используете ПО пункт.