Sql для чайников, 7-е издание

Типы данныхData Types

Значения, указанные в инструкции INSERT для нескольких строк, соблюдают правила преобразования типов данных для синтаксиса UNION ALL.The values specified in a multi-row INSERT statement follow the data type conversion properties of the UNION ALL syntax. В результате выполняется неявное преобразование несовпадающих типов к типу с более высоким приоритетом.This results in the implicit conversion of unmatched types to the type of higher precedence. Если неявное преобразование не поддерживается, возвращается ошибка.If the conversion is not a supported implicit conversion, an error is returned. Например, следующая инструкция вставляет целочисленное значение и символьное значение в столбец типа char.For example, the following statement inserts an integer value and a character value into a column of type char.

При выполнении инструкции INSERT SQL ServerSQL Server пытается преобразовать символ «a» в целое число, так как установленные правила определения приоритетов типов данных указывают, что целое число имеет тип данных с более высоким приоритетом, чем символ.When the INSERT statement is run, SQL ServerSQL Server tries to convert ‘a’ to an integer because the data type precedence indicates that an integer is of a higher type than a character. Попытка преобразования оканчивается неудачей и возвращается ошибка.The conversion fails and an error is returned. Этой ошибки можно избежать путем явного преобразования значений при необходимости.You can avoid the error by explicitly converting values as appropriate. Например, приведенную выше инструкцию можно записать следующим образом:For example, the previous statement can be written as follows.

Команды для создания запросов

13. SELECT

используется для получения данных из определённой таблицы:

Следующей командой можно вывести все данные из таблицы:

14. SELECT DISTINCT

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

15. WHERE

Можно использовать ключевое слово в для указания условий в запросе:

В запросе можно задавать следующие условия:

  • сравнение текста;
  • сравнение численных значений;
  • логические операции AND (и), OR (или) и NOT (отрицание).

Попробуйте выполнить следующие команды

Обратите внимание на условия, заданные в :

16. GROUP BY

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

Выведем количество курсов для каждого факультета:

17. HAVING

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

Выведем список факультетов, у которых более одного курса:

18. ORDER BY

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

Выведем список курсов по возрастанию и убыванию количества кредитов:

19. BETWEEN

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

Выведем список инструкторов, чья зарплата больше 50 000, но меньше 100 000:

20. LIKE

Оператор используется в , чтобы задать шаблон поиска похожего значения.

Есть два свободных оператора, которые используются в :

  • (ни одного, один или несколько символов);
  • (один символ).

Выведем список курсов, в имени которых содержится , и список курсов, название которых начинается с :

21. IN

С помощью можно указать несколько значений для оператора :

Выведем список студентов с направлений Comp. Sci., Physics и Elec. Eng.:

22. JOIN

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

Обратите внимание на разницу между левым внешним объединением и правым внешним объединением:

Выведем список всех курсов и соответствующую информацию о факультетах:

Выведем список всех обязательных курсов и детали о них:

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

23. View

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

Создадим , состоящую из курсов с 3 кредитами:

24. Агрегатные функции

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

  • — возвращает количество строк;
  • — возвращает сумму значений в данном столбце;
  • — возвращает среднее значение данного столбца;
  • — возвращает наименьшее значение данного столбца;
  • — возвращает наибольшее значение данного столбца.

Вопросы ресурса IP-адресаIP Address Resource Considerations

В конфигурации отказоустойчивого кластера с узлами в нескольких подсетях, IP-адреса не принадлежат всем узлам отказоустойчивого кластера, в момент запуска SQL ServerSQL Server не все из них могут находиться в сети.In a multi-subnet failover cluster configuration, the IP addresses are not owned by all the nodes in the failover cluster, and may not be all online during SQL ServerSQL Server startup. Начиная с выпуска SQL Server 2012 (11.x)SQL Server 2012 (11.x), можно устанавливать для зависимости ресурса IP-адреса значение OR.Beginning in SQL Server 2012 (11.x)SQL Server 2012 (11.x), you can set the IP address resource dependency to OR. Это позволяет SQL ServerSQL Server находиться в сети, если имеется хотя бы один действительный IP-адрес, к которому можно выполнить привязку.This enables SQL ServerSQL Server to be online when there is at least one valid IP address that it can bind to.

Примечание

В версиях SQL ServerSQL Server , более ранних, чем SQL Server 2012 (11.x)SQL Server 2012 (11.x), при создании кластерных конфигураций с использованием нескольких подсетей использовалась технология распределенных виртуальных ЛС, которая позволяла использовать один IP-адрес для отработки отказа на нескольких объектах.In the SQL ServerSQL Server versions earlier than SQL Server 2012 (11.x)SQL Server 2012 (11.x), a stretch V-LAN technology was used in multi-site cluster configurations to expose a single IP address for failover across sites. Благодаря новым возможностям SQL ServerSQL Server , позволяющим обеспечивать кластеризацию узлов, размещенных в разных подсетях, вы можете настраивать отказоустойчивые кластеры SQL ServerSQL Server на разных сайтах без внедрения технологии распределенных виртуальных ЛС.With the new capability of SQL ServerSQL Server to cluster nodes across different subnets, you can now configure SQL ServerSQL Server failover clusters across multiple sites without implementing the stretch V-LAN technology.

ПримерыExamples

A.A. Указание параметров сортировки во время SELECTSpecifying collation during a SELECT

В следующем примере создается простая таблица, а затем вставляются четыре строки.The following example creates a simple table and inserts 4 rows. Затем в примере применяются два параметра сортировки при выборе данных из таблицы, при этом демонстрируется, что сортируется по-разному.Then the example applies two collations when selecting data from the table, demonstrating how is sorted differently.

Ниже приведены результаты первого запроса.Here are the results from the first query.

Ниже приведены результаты второго запроса.Here are the results from the second query.

Б.B. Дополнительные примерыAdditional examples

Дополнительные примеры, в которых используется COLLATE, приведены в разделе статьи CREATE DATABASE и в разделе статьи ALTER TABLE.For additional examples that use COLLATE, see example G. Creating a database and specifying a collation name and options, and example V. Changing column collation.

Имя узла в качестве проверки узлаNode Name as Node Test

При указании имени узла в качестве проверки узла в шаге выражения пути необходимо понимать принцип основного узла.When specifying a node name as a node test in a path expression step, you must understand the concept of principal node kind. У каждой оси, потомка, родителя и атрибута есть основной узел.Every axis, child, parent, or attribute, has a principal node kind. Пример:For example:

  • Ось атрибутов может содержать только атрибуты.An attribute axis can contain only attributes. Поэтому узел атрибутов является основным по отношению к оси атрибутов.Therefore, the attribute node is the principal node kind of the attribute axis.

  • Что касается других осей — если выбранные осью узлы могут содержать элементные узлы, то элементный узел является основным для этой оси.For other axes, if the nodes selected by the axis can contain element nodes, element is the principal node kind for that axis.

При указании имени узла в качестве проверки узла шаг возвращает следующие типы узлов:When you specify a node name as a node test, the step returns the following types of nodes:

  • Узлы, являющиеся основными узлами оси.Nodes that areof the principal node kind of the axis.

  • Узлы с именем, которое задано в проверке узла.Nodes that have the same name as specified in the node test.

Например, рассмотрим следующее выражение пути:For example, consider the following path expression:

Это одношаговое выражение задает ось и имя узла в качестве проверки узла.This one-step expression specifies a axis and the node name as the node test. Выражение возвращает только те узлы с именем ProductDescription, которые являются основными для дочерней оси и элементных узлов.The expression returns only those nodes that are of the principal node kind of the child axis, element nodes, and which have ProductDescription as their name.

У выражения пути есть три шага.The path expression, has three steps. Они задают дочерние оси и оси потомков.These steps specify child and descendant axes. На каждом шаге имя узла задается в качестве проверки узла.In each step, the node name is specified as the node test. Символ-шаблон () на третьем шаге задает все узлы главного узла для оси-потомка.The wildcard character () in the third step indicates all nodes of the principle node kind for the descendant axis. Основной узел оси определяет тип выбранных узлов, а имя узла их отфильтровывает.The principal node kind of the axis determines the type of nodes selected, and the node name filters that the nodes selected.

В результате, когда это выражение выполняется для XML-документов каталога продуктов в таблице ProductModel , он извлекает все дочерние узлы элементов дочернего узла элемента> элемента As a result, when this expression is executed against product catalog XML documents in the ProductModel table, it retrieves all the element node children of the element node child of the element.

Выражение пути состоит из двух шагов.The path expression, , is made up of two steps. В обоих имя узла задается в качестве проверки узла.Both of these steps specify a node name as the node test. Кроме того, в каждом шаге используется ось атрибутов.Also, the second step uses the attribute axis. Поэтому в каждом шаге выбираются узлы основного узла оси с именем, заданным в качестве проверки узла.Therefore, each step selects nodes of the principal node kind of its axis that has the name specified as the node test. Таким результатом, выражение возвращает узел атрибута ProductModelID узла элемента .Thus, the expression returns ProductModelID attribute node of the element node.

Как показано в следующем примере, при указании имен узлов для проверки локальное имя узла или префикс его пространства имен можно задавать с помощью символа-шаблона (*):When specifying the names of nodes for node tests, you can also use the wildcard character (*) to specify the local name of a node or for its namespace prefix, as shown in the following example:

ОбъяснениеExplanation

Имя сущности в SQL ServerSQL Server определяется ее идентификатором.The name of an entity in SQL ServerSQL Server is referred to as its identifier. Идентификаторы используются, например, всегда при ссылках на сущности путем указания в запросе имен столбца и таблицы.You use identifiers whenever you reference entities, for example, by specifying column and table names in a query. Составной идентификатор содержит один или несколько квалификаторов, являющихся префиксом для идентификатора.A multi-part identifier contains one or more qualifiers as a prefix for the identifier. Например, перед идентификатором таблицы можно указывать такие квалификаторы, как имя базы данных и имя схемы, в которых содержится таблица, а перед идентификатором столбца могут находиться такие квалификаторы, как имя таблицы или псевдоним таблицы.For example, a table identifier may be prefixed with qualifiers such as the database name and schema name in which the table is contained, or a column identifier may be prefixed with qualifiers such as a table name or table alias.

Ошибка 4104 указывает, что заданный составной идентификатор не может быть сопоставлен существующей сущности.Error 4104 indicates that the specified multi-part identifier could not be mapped to an existing entity. Эта ошибка может быть возвращена при следующих условиях.This error can be returned under the following conditions:

  • Квалификатор, заданный в качестве префикса для имени столбца, не совпадает ни с одним именем таблицы или псевдонима, используемым в запросе.The qualifier supplied as a prefix for a column name does not correspond to any table or alias name used in the query.

    Например, в следующей инструкции псевдоним таблицы () используется как префикс столбца, но в предложении FROM нет ссылки на псевдоним таблицы.For example, the following statement uses a table alias () as a column prefix, but the table alias is not referenced in the FROM clause.

    В следующих инструкциях составной идентификатор столбца задан в предложении WHERE как часть условия JOIN между двумя таблицами, но в запросе нет явной ссылки на таблицу .In the following statements, a multi-part column identifier is specified in the WHERE clause as part of a JOIN condition between two tables, however, is not explicitly referenced in the query.

  • Имя псевдонима для таблицы указывается в предложении FROM, но квалификатор, указанный для столбца, является именем таблицы.An alias name for the table is supplied in the FROM clause, but the qualifier supplied for a column is the table name. Например, в следующей инструкции имя таблицы () используется как префикс столбца; но у таблицы есть псевдоним (), ссылка на который содержится в предложении FROM.For example, the following statement uses the table name as the column prefix; however, the table has an alias () referenced in the FROM clause.

    Когда используется псевдоним, имя таблицы не может использоваться в других частях инструкции.When an alias is used, the table name cannot be used elsewhere in the statement.

  • SQL ServerSQL Server не может определить, указывает ли составной идентификатор на столбец, предваряемый таблицей, или на определяемый пользователем тип данных CLR, предваряемый столбцом.is unable to determine if the multi-part identifier refers to a column prefixed by a table or to a property of a CLR user-defined data type (UDT) prefixed by a column. Это происходит потому, что ссылка на свойства столбцов определяемых пользователем типов задается с использованием точки (.) в качестве разделителя между именем столбца и именем свойства, так же как имя столбца предваряется именем таблицы.This happens because properties of UDT columns are referenced by using the period separator (.) between the column name and the property name in the same way that a column name is prefixed with a table name. В следующем примере создается две таблицы, и .The following example creates two tables, and . Таблица содержит столбец , в котором в качестве типа данных используется определяемый пользователем тип данных CLR .Table contains column , which uses a CLR UDT as its data type. Инструкция SELECT содержит составной идентификатор .The SELECT statement contains a multi-part identifier .

    Если определяемый пользователем тип данных не имеет свойства с именем , SQL ServerSQL Server не сможет определить, указывает ли идентификатор на столбец в таблице или на столбец , свойство в таблице .Assuming that the UDT does not have a property named , SQL ServerSQL Server cannot determine whether identifier refers to column in table or to the column , property in table .

Установка ПО для работы

В данном разделе рассказывается как установить и настроить SQL Server на примере SQL Server 2016 Enterprise – самой новой версии.

Для начала скачайте установочный пакет SQL Server 2016 Enterprise с официальной страницы: https://www.microsoft.com/en-us/sql-server/sql-server-editions-express. Версия, которую вы скачали будет работать .

Вместо нее можно использовать SQL Server 2016 Developer Edition, если у вас есть подписка MSDN. Станица для скачивания: https://www.microsoft.com/en-us/sql-server/sql-server-editions-developers.

Прежде чем запускать скаченный установщик, создайте учетную запись. Она потребуется чтобы авторизовываться вас на сервере с клиентского компьютера. Поскольку у вас это один и тот же компьютер, то авторизовываться будет SQL Server через Management Studio, его мы скачаем позже.

Создание учетной записи

Выполните следующие инструкции чтобы создать учетную запись в Windows. Способ работает во всех ОС этого семейства начиная с 2000 и заканчивая 10.

Инструкции:

  1. Кликните правой кнопкой мышки по значку «Мой компьютер» на рабочем столе и выберите из списка пункт «Управление». Откроется оснастка «Управление компьютером».
  2. В окне оснастке выберите пункт меню «локальные пользователи», затем выделите пункт «пользователи». Окно приобретёт вот такой вид:
  3. Кликните правой кнопкой мыши по пустому пространству папки или по названию папки и выберите пункт «новый пользователь». Откроется такое окно:
  4. Придумайте имя пользователя и пароль заполните их в формы и нажмите кнопку создать. Рекомендуем использовать латинские символы.

Установка SQL Server

  1. Запустите скачанный ранее пакет установки. Установщик проверит подходит ли ваш компьютер по производительности и есть ли на нем все необходимое для установки программное обеспечение. Если последнего не окажется, он его скачает.  После этого откроется SQL Server Installation Server:
  2. Выберите пункт «Установка».
  3. После изменения экраны кликните на пункте «Новая установка изолированного экземпляра SQL Server». Запустится установка и установщик попытается обновиться до последней версии. Щелкните кнопку «Далее», чтобы перейти к следующему шагу:
  4. На этапе «правил установки» проследите чтобы в окне не было красных крестиков. Если они появились, то щелкайте по выделенным строкам предупреждений и следуйте инструкциям по устранениям. Затем, щелкните кнопку «Далее». Окно установки снова изменится:
  5. В появившемся окне выберите «Выполнить новую установку SQL Server 2016» и нажмите «Далее». Откроется окно регистрации продукта:
  6. Введите лицензионный ключ продукта, если он у вас есть. Либо выберите Evaluation для активации 180 дневной копии.
  7. В следующем окне прочтите лицензионное соглашение, и примите его, установив флажок в поле «Я принимаю…». И нажмите «Далее»
  8. Откроется окно компонентов. Выберите пункты, установив галочки напротив:
     • Службы ядра СУБД;
     • Соединение с клиентскими средствами;
     • Компоненты документации.
    Нажмите «Далее»
  9. В следующем окне выберите «экземпляр по умолчанию» если уже есть установленная копия SQL Server или именованный экземпляр, если устанавливаете первый раз. Введите в поле имя Экземпляра и нажмите «Далее».
  10. В следующем окне проверьте, хватает ли места на диске. Если нет, освободите его и нажмите «Далее».
  11. На этапе «Настройка Ядра СУБД» убедитесь, что выбрана строка «Проверка подлинности Windows». Если нет, выберите его. Затем добавьте в поле внизу пользователя, которого создавали перед установкой, либо добавьте текущего с помощью соответствующей кнопки Нажмите «Далее»
  12. На следующем окне перепроверьте все настройки установки и нажмите «далее»
  13. Понаблюдайте за установкой и нажмите «Закрыть», когда появится сообщение о завершении установки.

ОбъяснениеExplanation

У имени входа отсутствуют необходимые разрешения для соединения с именованной базой данных.The login does not have sufficient permissions to connect to the named database. Имена входа, которые могут использоваться для подключения к этому экземпляру SQL ServerSQL Server, но не имеют специальных разрешений в базе данных, получают разрешения пользователя guest.Logins that can connect to this instance of SQL ServerSQL Server but that do not have specific permissions in a database receive the permissions of the guest user. Это одна из мер безопасности, которая не позволяет пользователям одной базы данных подключаться к другим базам данных, в которых они не имеют прав доступа.This is a security measure to prevent users in one database from connecting to other databases where they do not have privileges. Это сообщение об ошибке отображается, если у пользователя guest отсутствует разрешение CONNECT для подключения к именованной базе данных и свойство доверительных отношений не включено.This error message can occur when the guest user does not have CONNECT permission to the named database and the trustworthy property is not set. Это сообщение об ошибке отображается, если у пользователя guest отсутствует разрешение CONNECT для соединения с именованной базой данных.This error message can occur when the guest user does not have CONNECT permission to the named database.

Если разрешение CONNECT для подключения к базе данных msdb не предоставлено или отозвано, такая ошибка может произойти в среде SQL Server Management StudioSQL Server Management Studio при попытке обозревателя объектов отобразить состояние управления на основе политик для всех баз данных.When CONNECT permission to the msdb database is denied or revoked, SQL Server Management StudioSQL Server Management Studio can receive this error when Object Explorer tries to show the Policy Based Management status of each database. Обозреватель объектов использует разрешения текущего имени для входа, чтобы получить эту информацию из базы данных msdb, что и вызывает указанную ошибку.Object Explorer uses the permissions of the current login to query the msdb database for this information, which causes the error. Также отображается следующее сообщение об ошибке:The following error message also occurs:

Ошибка при получении данных по этому запросу.Failed to retrieve data for this request. (Microsoft.SqlServer.Management.Sdk.Sfc)(Microsoft.SqlServer.Management.Sdk.Sfc)

Х.S. Использование UNION трех инструкций SELECT для демонстрации эффекта от использования скобок и ALLUsing UNION of three SELECT statements to show the effects of ALL and parentheses

В следующих примерах предложение используется для комбинирования результатов из трех таблиц, содержащих по 5 одинаковых строк данных.The following examples use to combine the results of three tables that all have the same 5 rows of data. В первом примере используется предложение , в результате чего выдаются все 15 строк.The first example uses to show the duplicated records, and returns all 15 rows. Во втором примере предложение используется без ключевого слова , что позволяет удалить повторяющиеся строки из комбинированного результата выполнения трех инструкций и вывести только 5 строк.The second example uses without to eliminate the duplicate rows from the combined results of the three statements, and returns 5 rows.

В третьем примере с первым предложением используется ключевое слово , а во втором предложении вместо ключевого слова используются скобки.The third example uses with the first and parentheses enclose the second that is not using . Сначала выполняется второе предложение , которое заключено в скобки. В результате возвращаются 5 строк, так как параметр не используется и все повторяющиеся строки удаляются.The second is processed first because it is in parentheses, and returns 5 rows because the option is not used and the duplicates are removed. Полученные 5 строк совмещаются с результатами выполнения первой инструкции с помощью ключевого слова .These 5 rows are combined with the results of the first by using the keywords. В данном случае повторяющиеся строки двух множеств не удаляются.This does not remove the duplicates between the two sets of 5 rows. Окончательный результат состоит из 10 строк.The final result has 10 rows.

Команда UPDATE

Команда UPDATE — производит изменения в уже существующей записи или во множестве записей в таблице SQL. Изменяет существующие значения в таблице или в основной таблице представления.

Команда UPDATE Синтаксис команды

Синтаксис команды UPDATE

Команда UPDATE. Основные ключевые слова и параметры команды UPDATE

  • schema — идентификатор полномочий, обычно совпадающий с именем некоторого пользователя
  • table view — имя таблицы SQL, в которой изменяются данные; если определяется представление, данные изменяются в  основной таблице SQL представления
  • subquery_1 — подзапрос, который сервер обрабатывает тем же самым способом как представление
  • сolumn — столбец таблицы SQL или представления SQL, значение которого изменяется; если столбец таблицы из предложения SET опускается, значение столбца остается неизменяемым
  • expr — новое значение, назначаемое соответствующему столбцу; это выражение может содержать главные переменные и необязательные  индикаторные переменные
  • subquery_2 — новое значение, назначаемое соответствующему столбцу
  • subquery_3 — новое значение, назначаемое соответствующему столбцу

WHERE — определяет диапазон изменяемых строк теми, для которых определенное условие является TRUE; если опускается эта фраза, модифицируются все строки в таблице или представлении.
При выдаче утверждения UPDATE включается любой UPDATE-триггер, определенный на таблице.Подзапросы. Если предложение SET содержит подзапрос, он возвращает точно одну строку для каждой модифицируемой строки. Каждое значение в результате подзапроса назначается соответствующим столбцам списка в круглых скобках. Если подзапрос не возвращает никакие строки, столбцу назначается NULL. Подзапросы могут выбирать данные из модифицируемой таблицы. Предложение SET может совмещать выражения и подзапросы.

Команда UPDATE Пример 1
Изменение для всех покупателей рейтинга на значение, равное 200:

Команда UPDATE Пример 2
Замена значения столбца во всех строках таблицы, как правило, используется редко. Поэтому в команде UPDATE, как и в команде DELETE, можно использовать предикат. Для выполнения указанной замены значений столбца rating, для всех покупателей, которые обслуживаются продавцом Giovanni (snum = 1003), следует ввести:

Команда SQL UPDATE Пример 3
В предложении SET можно указать любое количество значений для столбцов, разделенных запятыми:

Команда UPDATE Пример 4
В предложении SET можно указать значение NULL без использования какого-либо специального синтаксиса (например, такого как IS NULL). Таким образом, если нужно установить все рейтинги покупателей из Лондона (city = ‘London’) равными NULL-значению, необходимо ввести:

Команда UPDATE Пример 5
Поясняет использование следующих синтаксических конструкций команды UPDATE:

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

Вышеупомянутое утверждение UPDATE выполняет следующие операции:

  • Модифицирует только тех служащих, кто работают в Dallas или Detroit
  • Устанавливает значение колонки deptno для служащих из Бостона
  • Устанавливает жалованье каждого служащего в 1.1 раз больше среднего жалованья всего отдела
  • Устанавливает комиссионные каждого служащего в 1.5 раза больше  средних комиссионных всего отдела

Д.E. Использование связанных вложенных запросовUsing correlated subqueries

Коррелированный запрос — это запрос, зависящий от результатов выполнения другого запроса.A correlated subquery is a query that depends on the outer query for its values. Он может повторно выполняться для каждой строки, выбранной с помощью другого запроса.This query can be executed repeatedly, one time for each row that may be selected by the outer query.

В первом примере представлены семантически эквивалентные запросы для демонстрации различий в использовании ключевых слов и .The first example shows queries that are semantically equivalent to illustrate the difference between using the keyword and the keyword. В обоих примерах приведены допустимые вложенные запросы, извлекающие по одному экземпляру продукции каждого наименования, для которых модель продукта — «long sleeve logo jersey» (кофта с длинными рукавами, с эмблемой), а значения столбцов таблиц и совпадают.Both are examples of a valid subquery that retrieves one instance of each product name for which the product model is a long sleeve logo jersey, and the numbers match between the and tables.

Следующий пример использует и получает имена и фамилии сотрудников, для которых значение премии в таблице составляет , а соответствующие им идентификационные номера в таблицах и совпадают.The next example uses and retrieves one instance of the first and last name of each employee for which the bonus in the table is and for which the employee identification numbers match in the and tables.

Предыдущий вложенный запрос данной инструкции не может быть выполнен независимо от внешнего запроса.The previous subquery in this statement cannot be evaluated independently of the outer query. Требуется значение параметра , однако в процессе обработки строк Компонент SQL Server Database EngineSQL Server Database Engine компонентом указанное значение меняется.It requires a value for , but this value changes as the Компонент SQL Server Database EngineSQL Server Database Engine examines different rows in .

Коррелированный вложенный запрос также может использоваться в предложении внешнего запроса.A correlated subquery can also be used in the clause of an outer query. В данном примере осуществляется поиск моделей продуктов, для которых максимальная цена в каталоге в два раза превышает среднюю цену по нему.This example finds the product models for which the maximum list price is more than twice the average for the model.

В данном примере с помощью двух коррелированных запросов осуществляется поиск сотрудников, продавших определенную продукцию.This example uses two correlated subqueries to find the names of employees who have sold a particular product.

Ссылка на основную публикацию