Как запросить несколько таблиц в SQL

Как запросить несколько таблиц в SQL

18 мая 2023 г.
Прочтите этот учебник по SQL, чтобы узнать, когда использовать SELECT, JOIN, подвыборки и UNION для доступа к нескольким таблицам с помощью одного оператора.

Иногда бывает трудно понять, какой синтаксис SQL использовать при объединении данных, охватывающих несколько таблиц. SQL предоставляет несколько различных операторов для выполнения этого типа задач; знание того, что применить, даст эффективные и правильные результаты. В этой статье я расскажу о некоторых наиболее часто используемых методах объединения данных из нескольких таблиц в единый результирующий набор: SELECT, JOIN, UNION и подзапросы.

ПОСМОТРЕТЬ: Воспользуйтесь преимуществом этих кратких уроков SQL с этим комплектом сертификации от TechRepublic Academy.

Самым последним обозначением синтаксиса SQL является SQL:2016 ISO, но мало что изменилось для этих основных операторов запросов за десятилетия. Однако важно отметить, что некоторые базы данных имеют уникальные усовершенствования, которые могут привести к неожиданным результатам, если их применить неправильно. Пожалуйста, обратитесь к документации вашего производителя, чтобы убедиться, что вы используете правильный диалект для вашей системы.

Перейти к:

    Использование ВЫБОР Использование ПРИСОЕДИНЯЙТЕСЬ Использование подзапросов Использование ОБЪЕДИНЕНИЯ Когда использовать SELECT, JOIN, UNION или подзапросы

Использование ВЫБОР

Простой оператор SELECT — это самый простой способ запроса нескольких таблиц. Вы можете вызвать более одной таблицы в предложении FROM оператора, чтобы объединить результаты из нескольких таблиц. Вот пример того, как это работает:

ВЫБЕРИТЕ table1.column1, table2.column2 FROM table1, table2 WHERE table1.column1 = table2.column1;

В точечной нотации используется символ точки для разделения таблицы и столбца. Если столбец появляется только в одной из таблиц, на которые ссылаются, вам не нужно включать полное имя, но это может быть полезно для удобочитаемости.

Запятая разделяет таблицы в предложении FROM. Вы можете включить столько таблиц, сколько необходимо, хотя некоторые базы данных имеют ограничение на то, что они могут эффективно обрабатывать, прежде чем вводить формальный оператор JOIN (описанный ниже).

Этот базовый синтаксис представляет собой простое ВНУТРЕННЕЕ СОЕДИНЕНИЕ. Некоторые базы данных обрабатывают его точно так же, как явное JOIN.

Предложение WHERE выражает критерии — возвращаются только те записи, в которых значение в table1.column1 равно значению в table2.column1. Результатом является временная таблица, содержащая значения из двух таблиц, где запись удовлетворяет выражению WHERE.

Стоит отметить, что ваши условия для сравнения не обязательно должны быть набором результатов. В приведенном выше примере table1.column1 и table2.column1 используются для объединения или соединения таблиц, но возвращаются только значения из table2.column2.

Включить более двух таблиц с И

Вы можете расширить эту функциональность более чем на две таблицы, используя ключевые слова AND в предложении WHERE. Вы также можете использовать такую ​​комбинацию таблиц, чтобы ограничить свои результаты, фактически не возвращая столбцы из каждой таблицы. Например:

ВЫБЕРИТЕ таблицу1.столбец1, таблицу2.столбец2 ИЗ таблицы1, таблицы2, таблицы3, ГДЕ таблица1.столбец1 = таблица2.столбец1 И таблица1.столбец1 = таблица3.столбец1;

Это использует AND для включения двух условий в предложение WHERE.

Данные поступают из table1.column1 и table2.column2, но только при соблюдении обоих условий в предложении WHERE. Table3.column1 ограничивает возвращаемые данные, даже если данные из этой таблицы не попадают в результирующий набор. Обратите внимание, что table3 должна быть указана в предложении FROM.

Однако имейте в виду, что этот метод запроса нескольких таблиц фактически является подразумеваемым JOIN. Ваша база данных может обрабатывать вещи по-разному, в зависимости от используемого механизма оптимизации. Кроме того, пренебрежение определением характера корреляции с предложением WHERE может привести к нежелательным результатам, например к возвращению мошеннического поля в столбце, связанном со всеми возможными результатами остальной части запроса, как в CROSS JOIN.

Если вас устраивает, как ваша база данных обрабатывает операторы такого типа, и вы объединяете две или всего несколько таблиц, вам подойдет простой оператор SELECT.

Использование ПРИСОЕДИНЯЙТЕСЬ

JOIN работает так же, как оператор SELECT выше: он возвращает набор результатов со столбцами из разных таблиц. Преимущество использования явного JOIN по сравнению с подразумеваемым заключается в том, что он обеспечивает больший контроль над набором результатов и, возможно, более высокую производительность, когда задействовано много таблиц.

Существует несколько типов JOIN — LEFT, RIGHT и FULL OUTER; ВНУТРЕННИЙ; и КРЕСТ. Тип, который вы используете, определяется результатами, которые вы хотите увидеть. Например, использование LEFT OUTER JOIN вернет все соответствующие строки из первой таблицы в списке, при этом строки из второй таблицы могут быть удалены, если в них нет информации, коррелирующей с первой таблицей.

Это отличается от ВНУТРЕННЕГО СОЕДИНЕНИЯ или подразумеваемого СОЕДИНЕНИЯ. INNER JOIN будет возвращать только те строки, для которых есть данные в обеих таблицах. Сравните следующий запрос после использования JOIN вместо WHERE:

ВЫБЕРИТЕ таблицу1.столбец1, таблицу2.столбец2 ИЗ таблицы1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ таблица2 ON таблица1.столбец1 = таблица2.столбец1;

Коррелирующий столбец все тот же, table2.column1, хотя запрос не извлекает данные из этого столбца.

Использование подзапросов

Подзапросы или операторы подзапроса — это способ использования результирующего набора в качестве ресурса в другом запросе для ограничения или уточнения результатов. Альтернативой часто являются множественные запросы или нежелательные манипуляции с необработанными данными.

С помощью подзапроса вы можете ссылаться на таблицы, чтобы определить включение данных или, в некоторых случаях, вернуть столбец, который является результатом подвыборки. В следующем примере используются две таблицы:

ВЫБЕРИТЕ столбец 1 ИЗ таблицы 1, ГДЕ СУЩЕСТВУЕТ ( ВЫБЕРИТЕ столбец 1 ИЗ таблицы 2, ГДЕ таблица 1. столбец 1 = таблица 2. столбец 1 );

Одна таблица, table1, содержит возвращаемые данные, а другая, table2, предоставляет значение сравнения для определения данных, фактически возвращенных из table1.

Одним из важных соображений при использовании подзапросов является производительность. За удобство приходится платить, и в зависимости от размера, количества и сложности таблиц и операторов, которые вы используете, вы можете позволить своему приложению выполнять обработку.

Каждый запрос полностью обрабатывается отдельно, прежде чем он будет использован в качестве ресурса для вашего основного запроса. Если возможно, творческое использование JOIN может предоставить ту же информацию с меньшим временем задержки.

Использование ОБЪЕДИНЕНИЯ

Оператор UNION — это еще один способ вернуть информацию из нескольких таблиц с помощью одного запроса. Оператор UNION позволяет вам выполнять запросы к нескольким таблицам и возвращать результаты в консолидированном наборе, как в следующем примере:

ВЫБЕРИТЕ столбец1, столбец2, столбец3 ИЗ таблицы1 ОБЪЕДИНЕНИЕ ВЫБЕРИТЕ столбец1, столбец2, столбец3 ИЗ таблицы2;

Этот оператор объединяет данные из таблиц table1 и table2 и возвращает набор результатов с тремя столбцами, содержащими данные из обоих запросов. Нет JOIN или условия, которое нужно выполнить.

По умолчанию оператор UNION пропускает дубликаты между таблицами, если не используется ключевое слово UNION ALL.

Если ваши имена столбцов не совпадают, когда вы используете оператор UNION, используйте псевдонимы, чтобы дать вашим результатам значимые заголовки:

ВЫБЕРИТЕ столбец1, столбец2 как два, столбец3 как три из таблицы1 ОБЪЕДИНЕНИЕ ВЫБЕРИТЕ столбец1, столбец4 как два, столбец5 как три из таблицы2;

Набор результатов будет иметь три столбца: column1, Two и Three, где Two содержит значения из table1.column2 и table2.column4, а Three содержит значения из table1.column3 и table2.column5.

Как и в случае с подзапросами, операторы UNION могут создать большую нагрузку на сервер базы данных, но при нерегулярном использовании они могут сэкономить много времени.

Когда использовать SELECT, JOIN, UNION или подзапросы

Когда дело доходит до запросов к базе данных, обычно есть много способов решить одну и ту же проблему, но один из них обычно более эффективен, чем другие. Мы рассмотрели некоторые из наиболее часто используемых методов консолидации данных в нескольких таблицах. Хотя некоторые из этих параметров могут повлиять на производительность, практика поможет вам узнать, когда уместно использовать каждый тип запроса.

ПОСМОТРЕТЬ: Дополнительные учебные пособия см. в разделе «Разработчик» на сайте TechRepublic.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE