Left join sql пример: Оператор SQL LEFT JOIN: синтаксис, примеры
Содержание
php — SQL избыточные данные при left join
Задать вопрос
Вопрос задан
Изменён
2 года 10 месяцев назад
Просмотрен
271 раз
У меня есть основная таблица и несколько второстепенных. Одной записи из основной таблицы может соответствовать несколько записей из второстепенной. Мне нужно вывести их как единую таблицу, если я просто делаю через left join, то у меня выводится куча избыточной, дублирующей информации, которая мне не нужна.
Например:
SELECT * FROM in_fileindex_main main LEFT JOIN in_fileindex_additionaly add ON (main.DocumentNumber = add.DocumentNumber) LEFT JOIN in_fileindex_applicability app ON (main. DocumentNumber = app.DocumentNumber) WHERE 1;
То выведется что-то типа:
Как видно, add и app таблицы не связаны между собой, они связаны только с основной таблицей main. Можно ли как-то построить запрос, чтобы не было дублирующей информации и вывод был соответственно следующим:
- php
- sql
select c.name, m.pay, cp.cnt from Client c left join (select clientID, sum(money) as pay from Pays group by clientID) m on c.clientID = m.clientID left join (select clientID, count(productID) as cnt from ClientProducts group by clientID) cp on c.clientID = cp.clientID
3
Используйте DISTINCT
или просто можно сделать GROUP BY
по ID (как пример GROUP BY main.id ). Но оптимальнее сделать DISTINCT
т.к это сэкономит серверные ресурсы.
SELECT DISTINCT * FROM in_fileindex_main main LEFT JOIN in_fileindex_additionaly add ON (main.DocumentNumber = add. DocumentNumber) LEFT JOIN in_fileindex_applicability app ON (main.DocumentNumber = app.DocumentNumber) WHERE 1
UPDATE v.2
SELECT DISTINCT main.* FROM in_fileindex_main as main LEFT JOIN in_fileindex_additionaly as add ON (main.DocumentNumber = add.DocumentNumber) LEFT JOIN in_fileindex_applicability as app ON (main.DocumentNumber = app.DocumentNumber) WHERE 1
7
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
By clicking “Отправить ответ”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.
SQL LEFT JOIN Ключевое слово
w3big.com
Latest web development tutorials
Предыдущая: SQL INNER JOIN ключевых слов
Далее: SQL RIGHT JOIN Ключевое слово
SQL LEFT JOIN Ключевое слово
LEFT JOIN ключевое слово из левой таблицы (table1) возвращает все строки, даже если нет совпадения для правой таблицы (table2) в. Если совпадений не найдено в таблице справа, результат равен NULL.
SQL LEFT JOIN Синтаксис
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name ;
Или:
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name = table2.column_name ;
Примечание: В некоторых базах данных, LEFT JOIN называется LEFT OUTER JOIN.
Демонстрационная база данных
В этом уроке мы будем использовать w3big образец базы данных.
Ниже приводится выбранные «сайты» таблица данных:
+----+--------------+---------------------------+-------+---------+ | id | name | url | alexa | country | +----+--------------+---------------------------+-------+---------+ | 1 | Google | https://www.google.cm/ | 1 | USA | | 2 | 淘宝 | https://www.taobao.com/ | 13 | CN | | 3 | 本教程 | http://www.w3big.com/ | 4689 | CN | | 4 | 微博 | http://weibo.com/ | 20 | CN | | 5 | Facebook | https://www.facebook.com/ | 3 | USA | | 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND | +----+---------------+---------------------------+-------+---------+
Вот данные «access_log» веб-сайт записи доступа к таблице:
mysql> SELECT * FROM access_log; +-----+---------+-------+------------+ | aid | site_id | count | date | +-----+---------+-------+------------+ | 1 | 1 | 45 | 2016-05-10 | | 2 | 3 | 100 | 2016-05-13 | | 3 | 1 | 230 | 2016-05-14 | | 4 | 2 | 10 | 2016-05-14 | | 5 | 5 | 205 | 2016-05-14 | | 6 | 4 | 13 | 2016-05-15 | | 7 | 3 | 220 | 2016-05-15 | | 8 | 5 | 545 | 2016-05-16 | | 9 | 3 | 201 | 2016-05-17 | +-----+---------+-------+------------+ 9 rows in set (0. 00 sec)
SQL LEFT JOIN примеры
Следующий SQL-оператор будет возвращать все сайты, и их взгляды (если таковые имеются).
Следующие примеры веб-сайтов, как мы покинули стол, access_log в правой таблице:
примеров
ВЫБОР Websites.name, access_log.count, access_log.date
с веб-сайтов
LEFT JOIN access_log
ON Websites.id = access_log.site_id
ORDER BY access_log.count DESC;
Выполнить выше SQL вывода результатов заключаются в следующем:
ПРИМЕЧАНИЕ: LEFT JOIN ключевое слово из левой таблицы (веб — сайты) возвращает все строки, даже если нет совпадения для правой таблицы (access_log) в.
Предыдущая: SQL INNER JOIN ключевых слов
Далее: SQL RIGHT JOIN Ключевое слово
w3big.com |
HTML курс |
Web курс |
Web Tutorial
SQL ЛЕВОЕ СОЕДИНЕНИЕ | Промежуточный SQL
Начиная здесь? Этот урок является частью полного учебника по использованию SQL для анализа данных. Проверьте начало.
В этом уроке мы рассмотрим:
- Команда LEFT JOIN
- Практические задачи
Команда LEFT JOIN
Давайте начнем с запуска INNER JOIN
в наборе данных Crunchbase и посмотрим на результаты. Мы просто посмотрим на company-permalink
в каждой таблице, а также пару других полей, чтобы получить представление о том, что на самом деле объединяется.
ВЫБЕРИТЕ компании.постоянная ссылка КАК компании_постоянная ссылка, компании.название КАК компании_название, Acquisitions.company_permalink AS Acquisitions_permalink, Acquires.acquired_at КАК приобрел_дата ОТ компании tutorial.crunchbase_companies ПРИСОЕДИНЯЙТЕСЬ к приобретениям tutorial.crunchbase_acquisitions ВКЛ.company.permalink = Acquisitions.company_permalink
Вы могли заметить, что «280 North» встречается в этом списке дважды. Это связано с тем, что у него есть две записи в таблице tutorial. crunchbase_acquisitions
, обе из которых присоединяются к таблице tutorial.crunchbase_companies
.
Теперь попробуйте запустить этот запрос как LEFT JOIN
:
SELECT company.permalink AS company_permalink, компании.название КАК компании_название, Acquisitions.company_permalink AS Acquisitions_permalink, Acquires.acquired_at КАК приобрел_дата ОТ компании tutorial.crunchbase_companies LEFT JOIN tutorial.crunchbase_acquisitions приобретения ВКЛ.company.permalink = Acquisitions.company_permalink
Вы можете видеть, что первые две компании из предыдущего набора результатов, #waywire и 1000memories, перемещаются вниз по странице из-за ряда результатов, содержащих нулевые значения в полях Acquisitions_Permalink
и Acquired_date
.
Это связано с тем, что команда LEFT JOIN
указывает базе данных вернуть все строки в таблице в предложении FROM
, независимо от того, есть ли у них совпадения в таблице в LEFT JOIN 9пункт 0020.
Отточите свои навыки SQL
Вы можете изучить различия между LEFT JOIN
и JOIN
, решив следующие практические задачи:
Практическая задача
Напишите запрос, выполняющий внутреннее соединение между таблицей tutorial.crunchbase_acquisitions
и таблицей tutorial.crunchbase_companies
, но вместо вывода отдельных строк подсчитайте количество ненулевых строк в каждой таблице.
ПопробуйтеСмотреть ответ
Практическая задача
Измените приведенный выше запрос на LEFT JOIN
. Обратите внимание на разницу в результатах.
Попробуйте См. ответ
Теперь, когда вы поняли, как работают левые соединения, попробуйте более сложную задачу агрегирования:
Практическая задача
Подсчитайте количество уникальных компаний (не считайте компании дважды) и уникальных компаний, приобретенных штатами. Не включать результаты, по которым нет государственных данных, и расположить по количеству приобретенных компаний от большего к меньшему.
ПопробуйтеСмотреть ответ
SQL Left Join | Изучите примеры, иллюстрирующие левые соединения в SQL
Обновлено 28 марта 2023 г.
SQL LEFT join — это оператор структурированного языка запросов (SQL), в котором при объединении двух таблиц оператор возвращает все строки из левой таблицы, даже если все строки не соответствуют указанному условию ON, однако несоответствующие строки в правой таблице будут отображаться как NULL. Это форма внешнего соединения.
Синтаксис и параметры
SELECT t1.имя_столбца, t2.имя_столбца ИЗ table_name1 как t1 LEFT JOIN table_name2 как t2 ON t1.имя_столбца = t2.имя_столбца ГДЕ условие;
Различные параметры, используемые в синтаксисе:
SELECT t1.column_name, t2.column_name : Используется для выбора требуемых данных из базы данных.
Здесь t1.column_name — это столбец из экземпляра таблицы t1.
t2.column_name — это столбец из экземпляра таблицы t2.
FROM table_name1 LEFT JOIN table_name2: Используется для указания источника, из которого должны быть получены данные.
Здесь имя_таблицы1 — имя левой таблицы, а имя_таблицы2 — имя правой таблицы. t1 и t2 — сокращения для таблиц. LEFT JOIN извлечет все записи из левой таблицы (t1) и соответствующие записи из правой таблицы (t2).
ON t1.column_name = t2.column_name: Используется для указания общих условий, при которых две таблицы будут объединены. Это может быть пара первичных и внешних ключей.
ГДЕ условие: Используется для указания условий фильтрации записей.
Из вышеупомянутых параметров все параметры, кроме предложения WHERE, являются обязательными. Вы можете использовать предложения GROUP BY, ORDER BY и HAVING в зависимости от ваших требований.
Как работает SQL LEFT Join?
SQL LEFT следует использовать в тех случаях, когда нам нужны все данные из одной таблицы и только соответствующие данные из другой таблицы.
Следующая диаграмма Венна объясняет, как работает левое соединение SQL.
Далее мы подробно обсудим упомянутое выше самосоединение.
Чтобы эффективно продемонстрировать и объяснить левое соединение в SQL, мы будем использовать следующие таблицы. Эти таблицы сделаны для веб-сайта электронной коммерции. Первая таблица «клиенты» содержит идентификатор клиента, имя, город, к которому он принадлежит. Вторая таблица «cities» содержит идентификатор, город и страну, которой они принадлежат.
Схема для вышеупомянутой таблицы «клиенты»:
Количество записей: 15
Клиенты |
ID(первичный ключ) |
Клиент |
Город |
Давайте посмотрим на записи в таблице клиентов. Чтобы позже мы могли понять, чем полезно самосоединение
:
ID | Клиент | Город | Items_purchased | Выплаченная сумма |
1 | Питер Кинг | Манчестер | Книги | 120 |
2 | Прия Кришна | Нью-Дели | ручка | 50 |
3 | Джим Халперт | Манчестер | карандаш | 43 |
4 | Майкл Скотт | Нью-Йорк | Книги | 250 |
5 | Харви Спектор | Бирмингем | карандаш | 100 |
6 | Дипа Камат | Мумбаи | Книги | 370 |
7 | Анита Десаи | Лондон | карандаш | 50 |
8 | Рэйчел Зейн | Мичиган | ручка | 70 |
9 | Петория Джон | Канберра | ручка | 190 |
10 | Джон Л | Будапешт | Книги | 540 |
11 | Джастин Грин | Оттава Сити | ручка | 65 |
12 | Бабита Гош | Калькутта | карандаш | 75 |
13 | Криш Пратт | Лондон | ластик | 30 |
14 | Элизабет Блант | Лондон | карандаш | 340 |
15 | Нина Дебров | Амстердам | Книги | 452 |
Схема таблицы «Города»:
Количество записей: 10
Клиенты |
ID(первичный ключ) |
имя_города |
страна |
Давайте посмотрим на записи в таблице городов.
ID | имя_города | страна |
1 | Нью-Дели | Индия |
2 | Мумбаи | Индия |
3 | Калькутта | Индия |
4 | Лондон | Англия |
5 | Манчестер | Англия |
6 | Оттава Сити | Канада |
7 | Онтарио | Канада |
8 | Пуна | Индия |
9 | Нью-Йорк | США |
10 | Вашингтон, округ Колумбия | США |
Примеры левого соединения SQL
Вот несколько примеров, иллюстрирующих левое соединение в SQL.
Пример №1 – ПРОСТОЕ ЛЕВОЕ СОЕДИНЕНИЕ
Найдите имена клиентов, а также город и страну, к которой они относятся.
Код:
ВЫБЕРИТЕ t1.Клиент, t1.Город, t2.Страна ОТ клиентов как t1 ОСТАВИТЬСЯ ПРИСОЕДИНЯТЬ города как t2 ON t1.City = t2.city_name;
Вывод:
В приведенном выше примере мы можем заметить, что такие города, как Бирмингем, Мичиган, Канберра, Будапешт и Амстердам, отсутствуют в таблице городов. Но поскольку они присутствуют в левой таблице (клиенты), в окончательных результатах они отображаются со значением NULL (поскольку левое соединение извлекает все записи из левой таблицы, даже если в правой таблице нет совпадений).
Пример #2 – LEFT JOIN с пунктом WHERE
Найдите имена клиентов и их соответствующие страны, которые купили карандаши и потратили более 50.
Код:
ВЫБЕРИТЕ t1.Клиент, t1.Город, t2.Страна ОТ клиентов как t1 ОСТАВИТЬСЯ ПРИСОЕДИНЯТЬ города как t2 ON t1.City = t2.city_name ГДЕ t1.Items_purchased='карандаш' и t1.Amount_paid > 50;
Выходные данные:
Пример 3.
СОЕДИНИТЬ С ГРУППОЙ ПО ПУНКТУ
Найдите количество стран, в которых была приобретена определенная категория канцелярских товаров.
Код:
ВЫБЕРИТЕ t1.Items_purchased, count(t2.country) ОТ клиентов как t1 ОСТАВИТЬСЯ ПРИСОЕДИНЯТЬ города как t2 ON t1.City = t2.city_name СГРУППИРОВАТЬ ПО t1.Items_purchased;
Выходные данные:
Пример 4. LEFT JOIN с предложением ORDER BY
Найдите общий доход, полученный компанией электронной коммерции в разных странах, в порядке убывания.
Код:
ВЫБЕРИТЕ t1.country, sum(t2.Amount_paid) как "Общий доход" ИЗ городов как t1 ВЛЕВО ПРИСОЕДИНЯЙТЕСЬ к клиентам как t2 ON t1.city_name = t2.City СГРУППИРОВАТЬ ПО t1.country ЗАКАЗАТЬ ПО 2 DESC;
Выход:
Пример №5 — LEFT JOIN с предложением HAVING
Найдите страны, в которых клиенты приобрели более одного товара.