Подзапрос sql: Подзапросы в основных командах SQL
Содержание
Подзапросы, возвращающие несколько значений
Подзапросы, возвращающие несколько
значений
Эта
группа включает подзапросы, начинающиеся с IN, NOT IN или оператора
сравнения с
ключевыми словами ANY или ALL.
Подзапросы, начинающиеся с IN и NOT IN
Результатом
выполнения подзапроса, начинающиеся с ключевых слов IN и NOT IN,
является список,
включающий от нуля до нескольких значений. После того как подзапрос
возвратит
результаты, к их обработке приступит внешний запрос.
Список
выбора внутреннего подзапроса, может включать только одно выражение или
имя
столбца.
Столбец,
имя которого вы указываете в предложении WHERE внешнего оператора,
должен быть совместимым для сравнения со столбцом, имя которого вы
указываете в списке
выбора подзапроса.
Пример
Получить
список клиентов из Сиэтла, заключивших договор на аренду оборудования
(Equipment
rental).
SQL:
SELECT lastname, name, region
FROM tbl_clients
WHERE region = ‘Seattle’
AND client_id IN (
SELECT client_id
FROM tbl_contract
JOIN tbl_service ON tbl_contract.service_id=tbl_service.service_id
WHERE service = ‘Equipment
rental’)
Результат:
lastname | name | region |
Stolz | Barbara | Seattle |
Perez | Linda | Seattle |
Haines | Elsie | Seattle |
Varrik | Kaarel | Seattle |
Donegan | Janet | Seattle |
Card | Richard | Seattle |
Jones | Jeffrey | Seattle |
Green | Jonas | Seattle |
Patterson | William | Seattle |
Обратите
внимание на допустимость использования объединения и нескольких условий
в
предложение WHERE как во внутреннем, так и во внешнем запросе.
Получить
список клиентов из Сиэтла, заключивших договор на аренду оборудования
(пример,
обратный приведенному выше).
SQL:
SELECT lastname, name, region
FROM tbl_clients
WHERE region = ‘Seattle’
AND client_id NOT IN (
SELECT client_id
FROM tbl_contract
JOIN tbl_service ON tbl_contract.service_id=tbl_service`service_id
WHERE service = ‘Equipment
rental’)
Подзапросы,
начинающиеся с
операторов сравнения и включающие
ключевые слова ANY или ALL
В другом виде подзапросов, которые
не возвращают или возвращают несколько строк, используется оператор
сравнения,
модифицированный ключевыми словами ANY или ALL.
Если подзапросу будет
предшествовать ключевое слово ALL,
условие сравнения считается выполненным только в том случае, если оно
выполняется
для всех значений в результирующем столбце подзапроса.
Пример
SQL:
SELECT contract_id, contract_date
FROM tbl_contract
WHERE
contract_date > ALL
(
SELECT contract_date
FROM tbl_contract
JOIN tbl_service ON tbl_contract.service_id=tbl_service.service_id
WHERE service = ‘Equipment rental’)
Выполнение запроса происходит в 2
этапа. Сначала внутренний запрос выбирает список дат, когда были
заключены договора на
аренду оборудования. Внешний запрос находит наибольшее значение в
списке дат и
для каждого договора в таблице tbl_contract определяет не содержится ли
в поле
contract_date большая дата.
Таким образом, мы получаем список
договоров, заключенных после всех договоров на аренду оборудования.
Оператор
ALL, как правило, эффективно используется с неравенствами, а не с
равенствами,
поскольку значение «равно всем»,
которое должно
получиться в этом случае в результате выполнения подзапроса, может
иметь место,
только если все результаты идентичны.
В SQL
выражение < > ALL реально означает не равно ни одному из
результатов подзапроса.
Если
тексту подзапроса
предшествует ключевое слово ANY, то условие сравнения будет считаться
выполненным, если оно удовлетворяется хотя бы для какого-либо (одного
или нескольких) значения в
результирующем столбце подзапроса.
Пример
SQL:
SELECT contract_id, contract_date
FROM tbl_contract WHERE contract_date < ANY (
SELECT contract_date
FROM tbl_contract JOIN tbl_serviceON
tbl_contract.service_id=tbl_service.service_id
WHERE
service = ‘Equipment
rental’)
Приведенный
запрос находит договора, заключенные раньше, чем был заключен первый
договор на
обслуживание.
Если
внутренний подзапрос,
начинающийся с ALL или ANY, возвращает пустое значение, считается, что
запрос в целом
завершился неудачно. В этом случае вы не получите никаких результатов,
поскольку невозможно выполнить сравнение со значением NULL.
« Previous | Next »
Обзор использования подзапросов — SQL для Oracle
Без рубрики
sql oracle
·
24.07.2021
·
Однострочный подзапрос | Многострочный подзапрос |
---|---|
Возвращает только одну строку | Возвращает более одной строки |
Использует однострочные операторы сравнения | Использует многострочные операторы сравнения |
С помощью использования подзапросов можно создавать мощные инструкции из простых выражений. Подзапросы используются, когда запрос основан на критерии поиска с неизвестными промежуточными значениями.
Подзапрос можно поместить в некоторые предложения SQL, включая следующие:
Подзапрос (внутренний запрос) выполняется однократно до основного (внешнего) запроса. Результат подзапроса используется основным запросом.
Однострочным подзапросом используется однострочный оператор, такой как =, >, =,
Post Views: 16
Похожие записи
Без рубрики
sql oracle
·
25.04.2023
·
Используя предложение WITH, можно определить блок запроса до его применения в запросе. Предложение WITH (формально называется subquery_factoring_clause) позволяет многократно использовать один и тот же блок запроса в инструкции SELECT, когда она встречается более одного раза в сложном запросе. Это особенно… Читать далее
Без рубрики
mikl
·
22.04.2023
·
Оператор WITH в SQL — это чрезвычайно полезный инструмент для создания временных таблиц и использования их внутри других запросов. Это позволяет упростить код и улучшить производительность запросов. Оператор WITH (также известный как Common Table Expression) используется для создания временных таблиц,… Читать далее
Без рубрики
sql oracle
·
15.04.2022
·
Внешняя таблица не описывает никаких данных, которые хранятся в базе данных. Внешняя таблица не описывает порядок хранения данных во внешнем источнике. Вместо этого она описывает, как уровень внешней таблицы должен представлять данные для сервера. За преобразования, которые требуется выполнять над… Читать далее
Без рубрики
sql oracle
·
15.04.2022
·
Позволяет восстанавливать таблицы до состояния на заданный момент времени с помощью одной инструкции. Восстанавливает табличные данные вместе со связанными индексами и ограничениями. Позволяет возвращать таблицу и ее содержимое в состояние, существовавшее на определенный момент времени, или к изменению системы, определенному. .. Читать далее
Без рубрики
sql oracle
·
04.04.2022
·
Внешние таблицы создаются с помощью предложения ORGANIZATION EXTERNAL инструкции CREATE TABLE. В действительности таблица не создается. Точнее, создаются метаданные в словаре данных, который можно использовать для доступа к внешним данным. Предложение ORGANIZATION применяется для указания порядка, в котором сохраняются строки… Читать далее
Без рубрики
sql oracle
·
04.04.2022
·
В базе данных Oracle имеется функция для удаления таблиц. При удалении таблицы база данных не сразу освобождает пространство, занимаемое таблицей. Точнее, база данных переименовывает таблицу и помещает ее в корзину, где таблица позже может быть восстановлена с помощью инструкции FLASHBACK… Читать далее
Без рубрики
sql oracle
·
18. 03.2022
·
Рассмотрим, как создаются внешние таблицы посредством драйвера доступа ORACLE_LOADER. Предположим, что существует текстовый файл, в котором имеются записи в следующем формате: 10,jones,11-Dec-1934 20,smith,12-Jun-1972 Записи разделяются символом новой строки, и все поля заканчиваются запятой ( , ). Имя файла: /emp_dir/emp.dat…. Читать далее
Без рубрики
sql oracle
·
18.03.2022
·
Используя драйвер доступа ORACLE_DATAPUMP, можно выполнять с внешними таблицами операции выгрузки и повторной загрузки. Примечание. В контексте внешних таблиц загрузка данных обозначает операцию чтения данных из внешней таблицы и их загрузку в таблицу базы данных. Под выгрузкой данных понимается чтение… Читать далее
Без рубрики
sql oracle
·
12.02.2022
·
Можно настроить много аспектов интерфейса и среды SQL Developer, изменяя предпочтения SQL Developer согласно Вашим потребностям. Чтобы изменить предпочтения SQL Developer, выберите Tools, а затем Preferences. Настройте интерфейс SQL Developer и среду. В меню Tools выберите Preferences. Предпочтения группируется в… Читать далее
Без рубрики
sql oracle
·
12.02.2022
·
В этой рубрике было рассмотрено использование SQL Developer, чтобы выполнять следующие задачи: Просматривать, создавать и редактировать объекты базы данных Выполнять SQL-операторы и сценарии на Рабочем листе SQL Создавать и сохранять пользовательские отчеты SQL Developer является бесплатным графическим инструментом, позволяющим упростить… Читать далее
Как использовать оператор IN с подзапросом
В этом видео мы покажем вам, как использовать оператор IN с подзапросом; мы покажем вам, почему вы хотели бы использовать IN с подзапросом. В своей простейшей форме оператор IN сопоставляет значения столбца со списком. ИСТИНА возвращается, если есть совпадение.
Основным преимуществом использования подзапросов с оператором IN является то, что содержимое списка является результатами подзапроса. Как мы объясним ниже, это обеспечивает большую гибкость.
После того, как вы прочтете эту статью, я бы порекомендовал вам посмотреть нашу следующую Essential SQL Minute, чтобы продолжить узнавать больше о SQL Server!
После просмотра видео ознакомьтесь с приведенным ниже примером кода. Я также включил расшифровку для вашего использования.
Это минута SQL для оператора IN с подзапросом
Стенограмма:
Привет и добро пожаловать в очередной выпуск «Essential SQL Minute». В сегодняшнем эпизоде мы узнаем, как использовать оператор IN с подзапросом. Возможно, вы помните, что для сравнения списка значений вы можете использовать оператор IN.
Теперь мы собираемся сгенерировать этот список значений с помощью запроса. Итак, как вы можете видеть здесь, я составил запрос. Часть, выделенная зеленым цветом, — это подзапрос.
Сравнение операторов IN: подзапрос и жесткое кодирование
Здесь вы можете увидеть, где у меня есть запрос, говорящий:
ВЫБЕРИТЕ IsoAlpha3Code ИЗ Application.Countries, где IsoAlpha3Code похож на "J%
Итак, по сути, верните все коды IsoAlpha3Code, начинающиеся с буквы J.
Итак, это создаст список всех IsoAlpha3Codes, начинающихся с буквы J. Я собираюсь использовать его в основном как список для моего оператора IN.
Затем будет запущен мой внешний запрос, и его IsoAlpha3Code будет сравниваться с содержимым результатов этого подзапроса.
Подробнее: Подзапросы SQL — Полное руководство >>
Это будет очень похоже на выполнение запроса, где я фактически независимо запускал запрос, чтобы получить все эти IsoAlpha3Codes, а затем вручную вводил их в свой запрос как «JAM», «JOR» и «JPN», а затем запускал это как отдельный запрос.
Пример подзапроса с использованием Like
Итак, давайте посмотрим, как это работает в Query Manager. Итак, у меня есть подзапрос с предложением IN. Вот подзапрос.
ВЫБЕРИТЕ ID страны ,Имя страны ,IsoAlpha3Code ИЗ Application.Countries ГДЕ IsoAlpha3Code IN (ВЫБРАТЬ IsoAlpha3Code ИЗ Application.Countries ГДЕ IsoAlpha3Code Like 'J%')
Он собирается вернуть все коды IsoAlpha3Code, начинающиеся с буквы 9.0013 Дж . Мой внешний запрос здесь будет запущен.
Значение этого столбца IsoAlpha3Code будет сравниваться с помощью оператора IN с результатами подзапроса. Итак, когда я запускаю это, вы видите, что в качестве результатов он возвращает «JAM», «JPN» и «JOR».
Обратите внимание, что подзапрос заключен в круглые скобки и что возвращается несколько значений.
Я хочу упомянуть, что если бы я поместил, скажем, CountryName здесь в свой подзапрос и запустил его, он вернул бы ошибку. Потому что в этом случае для подзапроса, поскольку он является частью предложения IN, он действительно ожидает возврата одного значения для каждой строки.
Пример запроса с использованием IN
Итак, давайте посмотрим, как это работает. Это очень похоже на, опять же, запрос, если я запускаю… вроде этого запроса здесь, где я запускаю SELECT, где я ищу IsoAlpha3Code IN «JAM», «JOR», «JPN».
ВЫБЕРИТЕ ID страны ,Имя страны ,IsoAlpha3Code ИЗ Application.Countries ГДЕ IsoAlpha3Code IN ("JAM", "JOR", "JPN")
Так что, на самом деле, чтобы получить эти три значения, вероятно, можно было бы найти эти три значения, просто запустив запрос, подобный этому, верно?
Где я бы сказал
ВЫБЕРИТЕ IsoAlpha3Code ИЗ Application.Countries, ГДЕ IsoAlpha3Code похож на "J%."
И там вы видите JAM, JPN и JOR. Итак, это мои три ценности.
ВЫБЕРИТЕ IsoAlpha3Code ИЗ Application.Countries ГДЕ IsoAlpha3Code Like 'J%'
Если бы я взял этот запрос и использовал его в качестве подзапроса, он фактически мог бы передать результаты, эти результаты здесь, в этот список IN, а затем использовать их для сравнения.
Пример подзапроса с использованием IN
Теперь, если я вернусь к моему первоначальному запросу… дайте мне еще одну копию здесь… вот так…
Теперь я беру результаты этого запроса, где я получаю JAM, JPN и JOR, загружаю результаты в список IN и затем использую их для сравнения моего внешнего запроса.
ВЫБЕРИТЕ ID страны ,Имя страны ,IsoAlpha3Code ИЗ Приложения.Страны ГДЕ IsoAlpha3Code IN (ВЫБРАТЬ IsoAlpha3Code ИЗ Приложения.Страны ГДЕ IsoAlpha3Code Like 'J%')
Преимущество этого по сравнению с простым вводом JAM, JPN и JOR заключается в том, что если мы добавим четвертую страну, например JYP, мне больше не придется менять свой запрос. Это связано с тем, что этот запрос является гибким в том смысле, что он захватывает любые новые страны, названия которых начинаются с буквы J.
.
Где, если бы вы добавляли новые страны, начинающиеся с буквы J, а я жестко их кодировал, мне всегда приходилось бы возвращаться к моему запросу и не забывать всегда вводить их.
И вы всегда должны помнить, чтобы я сказал изменить мой запрос.
Преимущества использования подзапросов
Итак, для меня огромным преимуществом использования подзапросов в этом случае является то, что они становятся более надежными, потому что они адаптируются к изменяющимся данным.
Это делает подзапрос очень мощным .
Теперь, с другой стороны, опасность использования подзапроса заключается в том, что у вас действительно есть запрос внутри другого запроса. Кроме того, вы можете столкнуться с проблемами производительности, используя подзапросы.
Я знаю, что в этом конкретном случае это не вызовет проблем с производительностью, но вы должны быть осторожны при использовании подзапросов в целом, чтобы не вызвать проблем с производительностью.
Итак, в целом остерегайтесь чрезмерного использования подзапросов и знайте, что в этом конкретном случае все будет в порядке, поэтому я твердо уверен, что использование подзапросов в предложениях IN может быть полезным, и это определенно мощный инструмент для обеспечения надежности вашего кода. .
Как использовать подзапросы в SQL
Подзапросы — это запрос внутри запроса. Подзапросы позволяют вам возвращать записи из другой таблицы или базы данных и использовать набор данных подзапроса для последующего управления записями в других частях вашей базы данных. Подзапросы — это операторы SELECT, вложенные в другие ваши операторы SQL, которые возвращают подмножество данных, которые обычно находятся во внешнем источнике, который вы не можете использовать в стандартных предложениях WHERE или IN.
Пересмотр оператора SELECT
Прежде чем мы перейдем к подзапросам, давайте вернемся к концепции операторов SELECT. Оператор SELECT возвращает список значений столбца. В наших примерах мы будем использовать следующие таблицы Customer и Order.
Клиент
идентификатор клиента | Имя | Фамилия | Город | Состояние |
321 | Фрэнк | Лоэ | Даллас | ТХ |
455 | Эд | Томпсон | Атланта | Г. А. |
456 | Эд | Томпсон | Атланта | Г.А. |
457 | Джо | Смит | Майами | FL |
458 | Фрэнк | Доу | Даллас | ТХ |
Заказ
идентификатор заказа | идентификатор клиента | Всего | Дата заказа |
1 | 321 | 10 | 02.01.2014 |
2 | 455 | 40 | 02.03.2014 |
3 | 456 | 20 | 10. 03.2014 |
Следующий код SQL представляет собой стандартный оператор SQL, который получает имя и фамилию клиента. » Техас.»
Переход к подзапросу
Подзапрос — это, по сути, запрос SELECT. Отличие подзапроса в том, что вы должны быть осторожны с количеством возвращаемых столбцов. Например, следующий оператор SQL содержит подзапрос, который вернет ошибку.
SELECT * FROM Customer
WHERE State IN (SELECT * FROM Order)
Ошибка в предложении WHERE. Условие IN запрашивает значение состояния. Подзапрос возвращает все строки из таблицы Order, поэтому внешнее предложение IN не может определить, к какому столбцу он должен обращаться.
Подзапрос должен вернуть один запрос для сравнения. Например, предположим, что вы хотите вернуть список клиентов, которые также были в таблице Order. Вы можете видеть, что CustomerId также находится в таблице Order, поэтому вы можете использовать подзапрос для возврата списка записей идентификаторов клиентов, а затем использовать набор данных для фильтрации записей Customer.
Следующий оператор SQL дает вам пример.
SELECT * FROM Customer
WHERE CustomerId IN (SELECT CustomerId FROM Order)
Обратите внимание, что внутренний подзапрос возвращает только один столбец — столбец CustomerId. Этот столбец затем используется для фильтрации записей в основном внешнем запросе в таблице Customer. В результате получается следующий набор данных.
идентификатор клиента | Имя | Фамилия | Город | Состояние |
321 | Фрэнк | Лоэ | Даллас | ТХ |
455 | Эд | Томпсон | Атланта | Г.А. |
456 | Эд | Томпсон | Атланта | Г. А. |
Возвращенный набор данных соответствует записям клиентов в таблице заказов.
Поскольку подзапрос аналогичен обычному оператору SELECT, вы также можете добавить все условия и предложения, которые мы уже изучили. Во-первых, вы можете добавить предложение WHERE в инструкцию SELECT.
Предположим, вам нужен список клиентов, разместивших заказы в марте. Дата заказа находится в таблице заказов, но у вас есть только идентификатор клиента в вашей таблице заказов. Вам нужна таблица Customer в качестве внешнего запроса и подзапрос к таблице Order в качестве внутреннего запроса. Следующий код выполняет запрос.
SELECT * FROM Customer
WHERE CustomerId IN (SELECT CustomerId FROM Order WHERE OrderDate МЕЖДУ ‘3/1/2014′ И ’31/31/2014’)
При выполнении приведенного выше оператора механизм SQL сначала запускает подзапрос ВЫБЕРИТЕ заявление. Этот подзапрос возвращает набор записей, содержащий только список идентификаторов клиентов, соответствующих отфильтрованному предложению WHERE. В этом примере результатами являются любые заказы, созданные в марте. Внутренний подзапрос возвращает две записи за март или две записи ID клиента.
Далее выполняется внешний запрос SELECT. Звездочка используется для возврата всех столбцов для этого запроса, который допустим во внешнем SELECT. Механизм SQL сопоставляет записи идентификаторов клиентов, возвращаемые подзапросом, и возвращает отфильтрованные результаты. Результатом является следующий набор данных.
идентификатор клиента | Имя | Фамилия | Город | Состояние |
455 | Эд | Томпсон | Атланта | Г.А. |
456 | Эд | Томпсон | Атланта | Г. А. |
Несмотря на то, что информация о клиенте одинакова, идентификаторы клиентов различаются. Результатом является набор данных, содержащий две записи 455 и 456.
Запросы к внешним базам данных
Операторы подзапросов часто используются для запросов к внешним базам данных. Ваши базы данных — это организационные структуры, содержащие таблицы. Эти таблицы содержат ваши данные. Например, у вас есть магазин электронной торговли в одной базе данных и база данных контента для отделения данных электронной торговли от данных контента. Предположим, имя базы данных электронной торговли — «электронная торговля», а имя базы данных контента — «контент».
Давайте настроим среду данных для базы данных контента. У вас есть таблица для комментариев к вашим статьям или продуктам. Эта таблица называется «Комментарий» в базе данных контента и содержит идентификатор клиента для комментария.
Вот пример таблицы комментариев.
идентификатор клиента | Идентификатор статьи | Комментарий |
457 | 4 | Тестовый комментарий. |
458 | 5 | Этот товар не для меня. |
Вам поручено получить список клиентов, которые оставили комментарии к вашим продуктам. У вас есть таблица в базе данных Content, которая содержит комментарии, поэтому вы можете использовать подзапрос, чтобы получить эти записи и использовать их для фильтрации по вашей основной таблице Customer. Следующий оператор SQL выполняет ваш запрос.
SELECT * FROM Ecommerce.Customer
WHERE Ecommerce.Customer.CustomerId IN (SELECT Content.Comment.CustomerId FROM Content.Comment)
В приведенном выше выражении используются некоторые идентификаторы. Вместо предположения, что запрос выполняется для таблиц в текущей базе данных, оператор SQL указывает имя базы данных, имя таблицы и имя столбца. Первый идентификатор — это имя базы данных. Внешний запрос использует базу данных электронной торговли, а внутренний запрос использует базу данных контента.
Следующий идентификатор — это имя таблицы. «Ecommerce.Customer» означает «использовать таблицу Customer в базе данных электронной торговли». Во внутреннем запросе идентифицируются база данных Content.Comment и имя таблицы. Идентификатор CustomerId — это имя столбца, возвращенное из внутреннего запроса. Поскольку у вас есть два комментария в таблице Comment, оператор SQL возвращает две записи. Возвращается следующий набор записей.
идентификатор клиента | Имя | Фамилия | Город | Состояние |
457 | Джо | Смит | Майами | FL |
458 | Фрэнк | Доу | Даллас | ТХ |
Когда оператор SQL возвращает записи, он возвращает столбцы и данные, указанные во внешнем операторе SQL, поэтому вы видите данные из таблицы «Клиент», а не из таблицы «Комментарии», хотя SQL действительно возвращает идентификатор клиента из таблицы «Комментарии». .
Подзапросы также полезны, когда вы хотите ВСТАВИТЬ или ОБНОВИТЬ столбцы. Вы видели, как использовать подзапрос для ВСТАВКИ данных из одной таблицы в другую. Тот же самый тип подзапроса также используется для ОБНОВЛЕНИЯ данных. Предположим, вы добавили столбец даты с именем «OrderDate» в свою таблицу Customer. Теперь ваша таблица Customer выглядит следующим образом.
идентификатор клиента | Имя | Фамилия | Город | Состояние | Дата заказа |
321 | Фрэнк | Лоэ | Даллас | ТХ | |
455 | Эд | Томпсон | Атланта | Г.А. | |
456 | Эд | Томпсон | Атланта | Г. А. | |
457 | Джо | Смит | Майами | FL | |
458 | Фрэнк | Доу | Даллас | ТХ |
Вам нужно добавить OrderDate для каждого клиента, но вы хотите использовать дату, указанную в таблице Order. Посмотрите на следующую инструкцию SQL.
UPDATE Customer
SET OrderDate = (SELECT TOP 1 OrderDate FROM Order WHERE Order.CustomerId=Customer.CustomerId)
Вышеприведенный оператор UPDATE не содержит предложения WHERE, поэтому все записи обновляются с датой. Пункт «ТОП 1» является здесь новым. Фраза TOP 1 получает только одну запись из таблицы Order. Если вы не использовали фразу TOP 1 и имели более одной записи для конкретного клиента, SQL возвращает ошибку, поскольку в вашем подзапросе возвращается более одной записи.
Подзапрос сопоставляет значение идентификатора клиента в таблице Customer с идентификатором клиента в таблице Order. Этот результат гарантирует, что вы получите дату, соответствующую правильному идентификатору клиента. Затем подзапрос используется для изменения значения в столбце Customer OrderDate. Подзапрос получает только одну запись, поэтому при наличии нескольких записей нет гарантии, что правильная дата будет обновлена в таблице Customer. Вы можете добавить предложение WHERE во внутренний подзапрос, чтобы получить первую или последнюю дату из таблицы Order. Вы также можете использовать предложение ORDER BY для своего внутреннего запроса. Помните, что внутренний запрос — это стандартный оператор SELECT, который может иметь любое предложение WHERE, чтобы гарантировать, что вы возвращаете правильные данные.
Следующий набор данных показывает вашу новую таблицу Customer.
идентификатор клиента | Имя | Фамилия | Город | Состояние | Дата заказа |
321 | Фрэнк | Лоэ | Даллас | ТХ | 02. 01.2014 |
455 | Эд | Томпсон | Атланта | Г.А. | 02.03.2014 |
456 | Эд | Томпсон | Атланта | Г.А. | 10.03.2014 |
457 | Джо | Смит | Майами | FL | НУЛЕВОЙ |
458 | Фрэнк | Доу | Даллас | ТХ | НУЛЕВОЙ |
Обратите внимание, что последние две записи имеют NULL для значений даты. Посмотрите на свой стол заказов. Заказа для клиентов 457 и 458 нет. Результат внутреннего подзапроса равен NULL, поэтому NULL обновляется в вашей таблице.