Light-electric.com

IT Журнал
252 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Access вложенные запросы

Access вложенные запросы

В прошлый раз имел дело с MS SQL Sever, теперь Access.
Ужесть. Но вопрос не в этом.

Скажите, пожалуйста, можно ли в Access реализовать что-то подобное

SELECT * FROM (
SELECT..
FROM .
WHERE .
) a

и так далее, т.е. реализовать вложенный(е) запрос(ы) ?

Есть ли вообще литература по SQL в Access
и что-нибудь по контролю и восстановлению ссылочной целостности БД в Access ?


EvS © ( 2007-05-04 09:33 ) [1]


> можно ли в Access реализовать что-то подобное


Kostafey © ( 2007-05-04 09:59 ) [2]

Ну на том спасибо, порадовали, а синтаксис как выглядеть будет ?
Так как в [0] не работает.

P.S. Шутка по поводу что такое «. » будет очень удачной, но я уже пошутил первым !


ЮЮ © ( 2007-05-04 10:06 ) [3]

в MS Access 2003 такое работет:

SELECT * FROM (
SELECT DISTINCT Договор.[На Должность]
FROM Договор
) a
ORDER BY 1;

так что всё дело в . Да и ошибку озвучит не мешало бы


sniknik © ( 2007-05-04 10:54 ) [4]

> Так как в [0] не работает.
естественно, «. » синтаксисом не предусмотрено.

> но я уже пошутил первым !
смысл не в том кто первый, смысл в том кому это надо.

вообще у вас что конкурс под лозунгом «кто меньше всего скажет, но тем не менее получит ответ»?

> Да и ошибку озвучит не мешало бы
зачем? просто переносим ветку в прочее и продолжаем отвлеченно трепаться. порадуется гораздо больше народу чем успешному решению «проблемы».


Kostafey © ( 2007-05-04 12:24 ) [5]

Уважаемые мастера ЮЮ, sniknik !

Прошу прощения ! Поторопился вчера сюда постить.
Все дело вот в чем.

Тестировал запрос я в «запросе на выборку» Access.
Если вставить в него вот такой запрос (на этот раз цитирую):

SELECT
Dogovor.NomerDogovora as [Номер договора],
Dogovor.NomerActa as [Номер акта],
TipDogovora.Tip as [Тип договора],
Dogovor.DataDogovora as [Дата договора],
Subject.Tip as [Тип субъекта],
Subject.Familiya as [Фамилия],
Subject.Naimenovanie as [Наименование],
Location.Tip as [Тип страны]

FROM Dogovor, Subject, TipDogovora, Location
WHERE Dogovor.D_S_id = Subject.S_id
and Dogovor.D_TD_id = TipDogovora.TD_id
and Subject.S_L_id = Location.L_id

Он успешно выполняется. Запрос сохраняю, закрываю.
Заново открываю. Вид запроса уже изменлся:

SELECT Dogovor.NomerDogovora AS [Номер договора], Dogovor.NomerActa AS [Номер акта], TipDogovora.Tip AS [Тип договора], Dogovor.DataDogovora AS [Дата договора], Subject.Tip AS [Тип субъекта], Subject.Familiya AS Фамилия, Subject.Naimenovanie AS Наименование, Location.Tip AS [Тип страны]
FROM Dogovor, Subject, TipDogovora, Location
WHERE Dogovor.D_S_id=Subject.S_id And Dogovor.D_TD_id=TipDogovora.TD_id And Subject.S_L_id=Location.L_id;

Но он выполняется.
Дописываю:

select *
from (
SELECT Dogovor.NomerDogovora AS [Номер договора], Dogovor.NomerActa AS [Номер акта], TipDogovora.Tip AS [Тип договора], Dogovor.DataDogovora AS [Дата договора], Subject.Tip AS [Тип субъекта], Subject.Familiya AS Фамилия, Subject.Naimenovanie AS Наименование, Location.Tip AS [Тип страны]
FROM Dogovor, Subject, TipDogovora, Location
WHERE Dogovor.D_S_id=Subject.S_id And Dogovor.D_TD_id=TipDogovora.TD_id And Subject.S_L_id=Location.L_id;
) a

Выдает: «Ошибка синтаксиса в предложении FROM»
Вот тут я и сбился с толку.

Однако если обратится к исходному варианту, т.е.

select *
from (
SELECT
Dogovor.NomerDogovora as [Номер договора],
Dogovor.NomerActa as [Номер акта],
TipDogovora.Tip as [Тип договора],
Dogovor.DataDogovora as [Дата договора],
Subject.Tip as [Тип субъекта],
Subject.Familiya as [Фамилия],
Subject.Naimenovanie as [Наименование],
Location.Tip as [Тип страны]

FROM Dogovor, Subject, TipDogovora, Location
WHERE Dogovor.D_S_id = Subject.S_id
and Dogovor.D_TD_id = TipDogovora.TD_id
and Subject.S_L_id = Location.L_id
) a

То он прекрасно работает.

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

SELECT *
FROM [SELECT
Dogovor.NomerDogovora as [Номер договора],
Dogovor.NomerActa as [Номер акта],
TipDogovora.Tip as [Тип договора],
Dogovor.DataDogovora as [Дата договора],
Subject.Tip as [Тип субъекта],
Subject.Familiya as [Фамилия],
Subject.Naimenovanie as [Наименование],
Location.Tip as [Тип страны]

FROM Dogovor, Subject, TipDogovora, Location
WHERE Dogovor.D_S_id = Subject.S_id
and Dogovor.D_TD_id = TipDogovora.TD_id
and Subject.S_L_id = Location.L_id
]. AS a;

На самом деле все эти сохранения/перезапуски, открытия/закрытия мне все равно
не понадобятся, т.к. тексты запросов будут хранится во внешних файлах.

Спасибо и еще раз прошу прощения за невнимательность.


Kostafey © ( 2007-05-04 12:30 ) [6]

Вся ошибка заключается в ; которой заканчивается запрос.
Access ее зачем — то сам добавляет.

Подзапросы в MS Access

Стандартом SQL предусматривается возможность, вкладывать запросы друг в друга, что имеет большое практическое применение. Еще раз — одни запросы могут управлять другими. Чтобы разобрать все тонкости данного понятия, предлагаю, вначале, рассмотреть практический пример использования подзапроса, а затем перейти к его теоретическому обсуждению.

К примеру, нас интересуют книги издательства BHV. Для это, как вариант одного из решений, мы можем использовать подзапрос.

Чтобы выполнить основной (он же внешний) запрос, SQL прежде всего должен выполнить подзапрос (он же внутренний запрос) в предложении WHERE. Таким образом, вначале выполняется подзапрос, как если бы он был единтсвенным запросом. Другими словами, просматриваются все записи таблицы Press и выбираются все записи, для которых значение поля Name=’BHV’. Полученный результат подставляется в основной запрос и выполняется основной запрос. В конечном результате, оказывается выбранными записи, содержащие информацию только об издательстве BHV.

Теперь поговорим об ограничениях, которое накладывает использование подзапросов. Подзапрос должен выбирать одно и только одно поле. Более того, тип данных этого поля должен соответсвовать типу значения, используемому в основном запросе. К примеру, запрос представленный ниже, должен привести к ошибке, так как в нем на выходе подзапрос дает несколько значений:

Почему ошибка? Выходные данные содержат более одной строки (возвращается ID для издательства BHV и Бином ). Таким образом, используя подзапросы, основанные на операторах отношения, необходимо быть уверенным, что конечными выходными данными подзапроса является только одна строка.

Отлично, с перебором (то есть когда на выходе из подзапроса оказывается несколько значений) разабрались. А что если подзапрос вообще не вернет никаких данных, так называемый NULL-выход? Это приведет к тому, что подзапрос будет оценен не как TRUE или FALSE, а как имеющий значение UNKNOWN. Результат UNKNOWN аналогичен результату FALSE — основной запрос не выберет ни одной строки, т.е. тоже приведет к NULL-выходу. Например, среди издательств представленных в нашей БД издательство Agatone отсутсвует, таким образом рассмотренный выше вариант с NULL-выходом сработает и в данном случае.

Читать еще:  Access следующая запись

Естественно, возникает вопрос: » а сработает ли следующий подзапрос?»

Да сработает, так как подзапрос на выходе вернет одну строку.

В некоторых случаях, возможно использовать DISTINCT для гарантии получения единственного значения на выходе подзапроса. То есть, если Вы не уверены в том, что подзапрос вернет только одну строку, Вы можете подстраховаться, используя DISTINCT с подзапросами.

Следующее ограничение использования подзапросов, это некоммутативность или, более доступными словами, неперемещаемость. В соответсвии с соглашениями ANSI это обозначает, что рассмотренный ранее запрос

нельзя перписать в виде

Однако наш «визуальнейший их все СУБД» играет по своим правилам. На приведенный последний запрос, Access сгенерирует точно таки же выходные данные как и на предпоследний (правильный) запрос.

Немного о взаимосваязи агрегатных функциий с подзапросами. Учитывая тот факт, что агрегатные функции на выходе ывдают единственно значение для любого колличесвта строк, то, логчно сделать вывод, что любой подзапрос, использующий единственную агрегатную функцию без предложения GROUP BY, дает в результате единственное значение для использования его в основном запросе.

Вспомним прошлое занятие. А именно, оператор IN. Почему вспомним именно о нем? Дело в том, что благодаря оператору IN возможно сформулировать подзапросы, в результате выполнения которых получается любое колличесво строк. Сразу оговорюсь, что операторы BETWEEN, LIKE, IS NULL к подзапросам применять нельзя. Пример, выбрать имена и фамилии всех студентов, которые брали книги в промежутке между 1 Января 2001 года и текущей датой:

Рассмотрим реализацию следующего запроса: «найти всех студентов, кто на данный момент работает с книгой «Реестр Windows 2000″ автора Ольга Кокорева».

Еще один пример, узнаем информации об авторах, средний объем книг которых (в страницах) более 600 страниц.

Анализ данного запроса, естественно, начинается из внутреннего подзапроса. Вначале, выбираются все записи удовлетворяющие самому внутреннему подзапросу, выбираются записи сгруппированные по идентификатору автора. Из полученного множества строк, выбрасываются все строки не удовлетворяющиее условию AVG(Pages)>600. Полученный результат, подставляется в предложение FROM, первого подзапроса, откуда выбираются значения поля ID_Author (в нашем случае используется синоним IDA для столбца ID_Author). В результате выполнения данного подзапроса на выходе получаем опять-таки несколько значений. Но благодаря оператору IN, наш подзапрос выполняется корректно, так как, еще раз напомню, оператор IN позволяет работать со множеством значений.

Таким образом, как мы убедились на практике, подзапросы могут быть использованы нетолько в предложении WHERE, но и в предложении FROM. По аналогии с предложением WHERE подзапрос может быть использован в предложении HAVING.

Отдельная разновидность подзапросов выделяется в группу связанных подзапросов. Выясним, что это такое. Когда в SQL используются подзапросы, во внутреннем (вложенном) запросе можно ссылаться на таблицу, имя которой указано в предложениее FROM внешнего запроса. Именно таким образом формируется связанный подзапрос. В этом варианте использования подзапросов, подзапрос выполняется повторно, точнее по одному разу для каждой строки таблицы из основного запроса. Например, узнаем всю информацию об издательствах, у которых общее колличество страниц выпущенных ними книг больше 700:

К всеобщему счастью тема поздапросов объемная. По этой причине мы еще не раз затроним тему подзапрсов в последующих занятиях.

Подчиненные запросы SQL

Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).

Вложенный запрос — инструкции SELECT вложены инструкцию SELECT, SELECT. В ВСТАВЬТЕ. Инструкция INTO, удалить или обновить или в другой вложенный запрос.

Синтаксис

Три вида синтаксиса можно использовать для создания вложенного запроса:

Сравнение [ЛЮБОЙ | ВСЕ | НЕКОТОРЫЕ] (sqlstatement)

выражение [NOT] В (sqlstatement)

[NOT] EXISTS (sqlstatement)

Вложенный запрос состоит из следующих элементов:

выражение и оператор сравнения, сравнивающее выражение с результатами подчиненного запроса.

Выражение, для которого выполняется поиск результирующем наборе подзапросом.

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

Замечания

Вложенный запрос можно использовать вместо выражения в списке полей инструкции SELECT или в предложении WHERE или HAVING. В подзапросе используйте инструкцию SELECT для предоставления набора одного или нескольких заданных значений на основе которого WHERE или выражение предложение HAVING.

Используйте все или НЕКОТОРЫЕ предикат, которые являются синонимами, извлекаются записи в главном запросе, которые удовлетворяют сравнению со всех записей, полученные во вложенном. В следующем примере возвращается все товаров, цена за единицу которых больше любого продукта, проданных со скидкой от 25% и многое другое:

SELECT * FROM Products WHERE UnitPrice > ANY (SELECT UnitPrice FROM OrderDetails WHERE Discount >= .25);

С помощью предиката ALL для извлечения только те записи в главном запросе, которые удовлетворяют сравнению со всех записей, полученных в подзапросом. Если вы изменили ОДНО ко всем в предыдущем примере, запрос вернет только те продукты, в которых цена за единицу больше всех товаров, проданных со скидкой от 25% и многое другое. Это более жесткие ограничения.

Читать еще:  Строка подключения к access

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

SELECT * FROM Products WHERE ProductID IN (SELECT ProductID FROM OrderDetails WHERE Discount >= .25);

NOT IN и наоборот, можно использовать для извлечения только те записи в главном запросе, для которых в подзапросом ни одна из записей не содержит одинаковых значений.

Предикат EXISTS (с НЕОБЯЗАТЕЛЬНЫМ зарезервированное слово) при сравнении true или false, чтобы определить, является ли вложенный запрос возвращает все записи.

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

SELECT LastName, FirstName, Title, Salary FROM Employees AS T1 WHERE Salary >= (SELECT Avg(Salary) FROM Employees WHERE T1.Title = Employees.Title) Order by Title;

В предыдущем примере AS зарезервированное слово не является обязательным.

Некоторые подчиненные запросы разрешены в перекрестные запросы, в частности, как предикаты (для которых в предложении WHERE). Подчиненные запросы в качестве выходных данных (в списке SELECT), не разрешены в перекрестных запросов.

SQL-Урок 9. Подзапросы

До сих пор мы получали данные из базы данных с помощью простых запросов и одного оператора SELECT. Однако, все же, чаще нам нужно будет выбирать данные, соответствующие многим условиям, и здесь не обойтись без расширенных запросов. Для этого в SQL существуют подзапросы или вложенные подзапросы, когда один оператор SELECT укладывается в другой.

1. Фильтрация с помощью подзапросов

Таблицы баз данных, которые используются в СУБД Access являются реляционными таблицами, т.е. все таблицы можно связать между собой по общим полям. Допустим у нас хранятся данные в двух разных таблицах и нам нужно выбрать данные в одной из них, в зависимости от того, какие данные в другой. Для этого создадим еще одну таблицу в нашей базе данных. Это будет, например, таблица Sellers с информацией о поставщиках:

Теперь мы имеем две таблицы — Sumproduct и Sellers, которые имеют одинаковое поле City . Предположим, нам нужно посчитать сколько товаров было продано только в Канаде. Сделать это нам помогут подзапросы. Итак, сначала напишем запрос для выборки городов, которые находятся в Канаде:

SELECT City FROM Sellers WHERE Country = ‘Canada’

Теперь передадим эти данные в следующий запрос, который будет выбирать данные из таблицы Sumproduct:

SELECT SUM(Quantity) AS Qty_Canada FROM Sumproduct WHERE City IN ( ‘Montreal’,’Toronto’ )

Также мы можем объединить эти два запроса в один. Таким образом, один запрос, который выводит данные будет главным, а второй запрос, которий передает входные данные, будет вспомогательным (подзапросом). Для вложения подзапроса используем конструкцию WHERE . IN (. ), о которой говорилось в разделе Расширенное фильтрование:

SELECT SUM(Quantity) AS Qty_Canada FROM Sumproduct WHERE City IN ( SELECT City FROM Sellers WHERE Country = ‘Canada’ )

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

2. Использование подзапросов в качестве расчетных полей

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

SELECT Seller_name, ( SELECT SUM(Quantity) FROM Sumproduct WHERE Sellers.City = Sumproduct.City ) AS Qty FROM Sellers

Первый оператор SELECT отражает два столбца — Seller_name и Qty. Поле Qty является расчетным, оно формируется в результате выполнения подзапроса, который взят в круглые скобки. Этот подзапрос выполняется по одному разу для каждой записи в поле Seller_name и в общем будет выполнен четыре раза, поскольку выбрано имена четырех продавцов.

Также в подзапросе, предложение WHERE выполняет функцию объединения, поскольку с помощью WHERE мы соединили две таблицы по полю City, использовав полные названия столбцов (Таблиця.Поле).

Вложенные запросы в T-SQL – описание и примеры

Приветствую Вас на сайте Info-Comp.ru! В этой заметке мы рассмотрим вложенные запросы языка SQL, я расскажу, что такое вложенные запросы, где и в каких конструкциях их можно использовать, покажу примеры их использования, а также расскажу про особенности и некоторые ограничения вложенных SQL запросов или, как еще их иногда называют, подзапросов SQL.

Что такое вложенные запросы SQL?

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

Вложенные SQL запросы могут быть использованы везде, где разрешено использовать SQL выражения, это может быть и секция SELECT, и FROM, и WHERE, и даже JOIN, чуть ниже я покажу примеры использования вложенных запросов в каждой из перечисленных выше секций.

Использовать вложенные запросы иногда бывает очень удобно, но обязательно стоит отметить и то, что в некоторых случаях использование вложенного SQL запроса может снизить производительность, т.е. замедлить работу всей SQL инструкции. Тем более что не редко вложенный SQL запрос можно заменить простым объединением.

Кроме того, вложенные запросы могут быть вложены друг в друга (в некоторых случаях вплоть до 32-го уровня), но тем самым значительно снижается читабельность SQL инструкций и ее понятность, а также повышается ее сложность.

Читать еще:  Режим ime access

Кстати, о том, как писать хорошие понятные SQL инструкции на языке T-SQL, которые будут понятны и Вам спустя время, и другим программистам, я подробно рассказал в своей книге – «Стиль программирования на T-SQL – основы правильного написания кода».

Для комплексного изучения языка T-SQL Вы можете пройти наши онлайн-курсы по T-SQL, на которых используется последовательная методика обучения и рассматриваются все конструкции языка SQL и T-SQL.

Особенности вложенных запросов

Вложенные SQL запросы имеют несколько важных особенностей, про которые не стоит забывать при конструировании SQL инструкций:

  • Вложенный запрос всегда заключен в скобки;
  • Вложенный запрос не может содержать предложения COMPUTE, INTO и FOR BROWSE;
  • Вложенный запрос может содержать конструкцию сортировки ORDER BY, только если он содержит оператор TOP, т.е. без TOP, ORDER BY в подзапросе использовать не получится;
  • Если вложенный запрос используется в операции сравнения (за исключением операторов EXISTS и IN), он должен возвращать одно значение и один столбец;
  • Типы данных ntext, text и image не могут участвовать в списке выбора вложенных запросов.

Примеры вложенных SQL запросов в Microsoft SQL Server

Ну а теперь пора переходить к практике, сейчас мы рассмотрим несколько примеров использования вложенных SQL запросов, при этом я, как и обещал, покажу применение вложенных запросов в разных конструкциях языка T-SQL.

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

Исходные данные для примеров

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

Также сразу скажу, что в качестве SQL сервера у меня выступает версия Microsoft SQL Server 2017 Express.

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

Подробно останавливаться на том, что делает представленная выше инструкция, в этой статье я не буду, так как это совершенно другая тема, но если эта SQL инструкция Вам не понятна, и Вам интересно узнать, что конкретно она делает, можете почитать следующие статьи, а для комплексного изучения языка T-SQL — книгу, которую я уже упоминал:

Пример 1 – Вложенный запрос в секции SELECT

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

Допустим, что нам нужно получить список товаров с названием категорий, а так как названия категории в таблице Goods у нас нет, это название мы будем получать из таблицы Categories.

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

А также это можно реализовать и с помощью объединения JOIN, что на самом деле предпочтительней, и в подобных случаях я рекомендую использовать именно JOIN, тем самым SQL запрос становится более читабельным и простым для понимания. Ниже я представлю оба SQL запроса.

Пример 2 – Вложенный запрос в секции FROM

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

В данном примере в качестве источника данных в секции FROM мы указали вложенный запрос, который возвращает идентификатор и наименование товаров из первой категории.

Пример 3 – Вложенный запрос в секции JOIN

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

Здесь во вложенном запросе мы получаем идентификатор и наименование первой категории, а затем полученные табличные данные объединяем с таблицей Goods.

Пример 4 – Вложенный запрос в секции WHERE

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

Например, если использовать вложенный запрос с оператором равно (=), то он не может возвращать больше одного значения, т.е. если он вернет больше одного значения, выйдет ошибка, и SQL запрос не выполнится. Однако если использовать вложенный запрос с оператором IN (включая NOT IN) или EXISTS (включая NOT EXISTS), то вложенный запрос уже может возвращать список значений.

Вложенный запрос с оператором = (равно)

В этом запросе мы выводим все товары из таблицы Goods, у которых идентификатор категории равен значению, которое возвращает вложенный запрос, а он возвращает идентификатор категории с наименованием «Комплектующие ПК», таким образом, в нашем случае вложенный запрос возвращает только одно значение.

Вложенный запрос с оператором IN

Здесь мы используем для сравнения оператор IN, поэтому вложенный запрос в таком случае может уже возвращать несколько значений, для примера мы просто уберем условие WHERE во вложенном запросе.

Пример 5 – Множественная вложенность SQL запросов

Как я уже отмечал, вложенный запрос может быть вложен в другой вложенный SQL запрос, тем самым получается множественная вложенность.

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

Дополнительные примеры использования вложенных запросов, например, с использованием оператора EXISTS, можете посмотреть в статье – Логический оператор EXISTS в T-SQL – Описание и примеры.

На сегодня у меня все, надеюсь, материал был Вам полезен, пока!

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector