![...](/f/14c7ca74d0accf01184229f710faeb14.jpg)
Запросы к базе данных извлекают конкретную информацию из базы данных.
Подзапрос - это запрос внутри другого запроса. Подзапрос также может содержать другой подзапрос. Эти подзапросы называются «вложенными». Соединение - это когда две или более таблицы упоминаются в предложении «From» запроса. Различные механизмы базы данных могут по-разному оптимизировать подзапросы и соединения. Например, оптимизатор DB2 преобразует подзапрос в соединение, если соблюдены определенные критерии. В некоторых случаях соединение дает лучшую производительность, чем подзапрос.
Что делает подзапрос
Подзапрос - это оператор «SELECT» в предложении «WHERE» или «HAVING» внешнего оператора «INSERT», «UPDATE», «MERGE» или «DELETE». Подзапрос также называется «внутренним запросом» или «внутренним выбором». Подзапрос может иметь предложение FROM с одной или несколькими таблицами, а также может дополнительно содержать предложение WHERE, GROUP BY или HAVING. Он всегда заключен в круглые скобки.
Видео дня
Преимущества и недостатки подзапросов
Подзапросы полезны, потому что они структурируют запрос, чтобы изолировать каждую часть оператора, выполнять ту же операцию, которая обычно требует сложных соединений и объединений и которую легче читать. Подзапросы даже послужили основой для названия «язык структурированных запросов» (SQL) из-за их легко читаемой структуры. Недостатком является то, что вы не можете изменять таблицу и выбирать из той же таблицы в подзапросе в одном и том же операторе SQL. Подзапросы также могут выполняться дольше, чем соединение, из-за того, как оптимизатор базы данных обрабатывает их.
Что делает соединение
Большинство подзапросов можно переписать как соединения, а большинство соединений можно переписать как подзапросы. Объединение определяет две или более таблиц по связанному столбцу. Таблицы обычно объединяются по первичному и внешнему ключам. Например, таблица сотрудников может иметь первичный ключ столбца идентификатора сотрудника, в то время как таблица расписания также имеет столбец идентификатора сотрудника, который является внешним ключом для таблицы сотрудников. Соединение SQL может быть записано как «WHERE employee.empid = timesheet.empid» или «FROM employee JOIN timesheet ON (employee.empid = timesheet.empid)».
Преимущества и недостатки объединений
Основное преимущество соединения в том, что оно выполняется быстрее. Увеличение производительности может быть незаметно для конечного пользователя. Однако, поскольку столбцы имеют особые имена, индексируются и оптимизируются механизмом базы данных, время извлечения почти всегда будет быстрее, чем у подзапроса. Также существуют внутренние и внешние соединения, левые и правые соединения, полные соединения и перекрестные соединения. Недостатком использования объединений является то, что их не так легко читать, как подзапросы. Другой недостаток состоит в том, что может возникнуть путаница при выборе того, какое соединение является подходящим типом соединения для использования для получения правильного желаемого набора результатов.