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

Найдите страны, в которых клиенты приобрели более одного товара.