Insert sql: INSERT statement | Interactive tutorial on SQL
Содержание
SQL — вставить значения с объединенными идентификаторами из другой таблицы | Майк Халс
У вас есть значения, для которых у вас есть идентификаторы в таблице. Вставьте идентификаторы за один раз!
Поиск некоторых идентификаторов (изображение Lucas Pezeta на Pexels)
Что вы делаете, когда наша таблица ожидает идентификаторы, но все, что у нас есть, это строки? Представим, что мы ресторан. Мы храним каждый пункт меню и его ингредиенты в нашей базе данных, чтобы мы могли отслеживать все виды статистики; как часто заказывают блюдо и какие ингредиенты наиболее популярны, например.
Мы хотим сохранить новый рецепт в таблице recipes, но есть проблема: в этой таблице требуется id_ингредиента, а не имя_ингредиента, которое у нас есть на данный момент. Как мы можем вставить эти идентификаторы в таблицу recipes, если у нас есть только имена?
В этой статье основное внимание уделяется хранению этих рецептов и ингредиентов самым рациональным способом с помощью уникальной таблицы ингредиентов. После прочтения этой статьи вы:
- поймете уникальную таблицу
- поймете как использовать СКВОЗНУЮ таблицу
- иметь возможность вставлять только уникальные значения в уникальную таблицу
- иметь возможность вставлять в таблицу при извлечении идентификаторов из уникальной таблицы
Сначала мы настроим несколько таблиц, а затем перейдем к запросу .
В этом разделе мы определим структуру нашей базы данных и создадим все наши таблицы. Затем мы вставим в него некоторые тестовые данные. После этого мы перейдем к тому, как вставлять объединенные идентификаторы. Обратите внимание, что в этой статье используется Postgres, но одни и те же методы применимы ко всем реляционным базам данных 9.0005
Структура базы данных
Мы определим 3 таблицы: одна содержит ингредиенты, другая содержит рецепты, а третья таблица объединяет их вместе:
Структура базы данных нашего ресторана (изображение автора)
Таблица ингредиентов
Первая мы создадим таблицу ингредиентов и вставим некоторые данные. Проверьте эту статью для запроса, который может вставлять только ингредиенты, которых еще нет в таблице, чтобы убедиться, что мы никогда не получим ошибок. Для этого примера мы будем использовать «обычную» вставку ниже:
Таким образом, наша таблица выглядит следующим образом:
Наши недавно вставленные ингредиенты
Таблица рецептов
В этой таблице будут храниться рецепты с уникальным идентификатором и именем:
Таблица наших рецептов
Таблица ингредиентов рецептов
Эта таблица соединяет один или несколько рецептов для одного или нескольких ингредиентов. Этот тип таблицы известен как «сквозная таблица»; он служит посредником между двумя таблицами, имеющими отношения «многие ко многим». В рецепте может быть несколько ингредиентов, а один ингредиент может быть частью нескольких рецептов.
Мы соединим их вместе с recipe_id и ингредиентом_id:
T
Теперь все наши таблицы созданы, давайте начнем вставлять!
Наши столы готовы, начинаем готовить! (изображение Maarten van den Heuvel на Pexels)
Давайте перейдем к нашей проблеме. Мы хотим создать несколько записей, которые соединяют запись в таблице рецептов с некоторыми записями в таблице ингредиентов. Для этого нам нужен recipe_id и ингридиент_id. Проблема в том, что у нас нет ингридиентов id, только названия ингредиентов. Как мы можем вставить в таблицу recipe_ingredients? Сейчас мы предполагаем, что знаем recipe_id; значение 1. Следующий запрос решает эту проблему:
Давайте посмотрим и пройдемся по запросу.
- Строки с 1 по 8; здесь мы определяем набор данных, который хотим вставить. Мы знаем название ингредиента и количество.
- В строке 9 мы говорим, что хотим вставить recipe_id, ингридиент_ид и количество в таблицу recipe_ingredients. Это наша цель
- В данных SELECT из наших входных значений (строки с 1 по 8), которые мы определяем как
d
. Мы присоединяем этот набор данных к таблице ингредиентов, сопоставляя названия ингредиентов. - Здесь происходит волшебство: как видите, мы выбираем значение 1 для recipe_id, идентификатор из объединенной таблицы ингредиентов и количество из набора входных данных.
Принимая во внимание recipe_id
Хитрость заключается в том, чтобы определить наши входные данные как набор данных, соединить их с необходимыми таблицами, а затем вставить только идентификаторы. Довольно легко, верно? Давайте попробуем это на более сложном примере, где мы присоединяем не только ингридиент_ид, но и рецепт_ид.
Дважды выполняем трюк из предыдущего запроса: присоединяем рецепт из входных значений в столбце рецепта в таблице рецептов. Затем мы извлекаем идентификатор рецепта из этой таблицы и вставляем его в recipe_ingredients. Посмотрите результат ниже:
Мы вставили ингридиент_ид, соответствующий правильному рецепту_ид. Идеальный!
В этой статье мы рассмотрели несколько довольно изящных приемов: таблица UNIQUE, таблица THROUGH и вставка объединенных значений. Я надеюсь пролить на них свет. Если у вас есть предложения/пояснения, пожалуйста, прокомментируйте, чтобы я мог улучшить эту статью. А пока ознакомьтесь с другими моими статьями на всевозможные темы, связанные с программированием, например:
- УДАЛИТЬ В другую таблицу
- ОБНОВИТЬ В другую таблицу
- Вставка, удаление и обновление в ОДНОМ выражении
- ОБНОВЛЕНИЕ ВЫБЕРИТЕ пакет записей
- Сохранить обновление
- Вставка в УНИКАЛЬНУЮ таблицу
Удачного кодирования!
— Майк
P. S. Нравится, что я делаю? Подписывайтесь на меня!
Выберите для вставки Sql-сервера с примерами кода
Select Into Insert Sql Server с примерами кода
В этой статье мы рассмотрим несколько различных примеров решения проблемы Select Into Insert Sql Server.
ВСТАВИТЬ В Sales.addresss (улица, город, штат, почтовый индекс) ВЫБРАТЬ улица, Город, государство, почтовый индекс ИЗ продажи.клиенты СОРТИРОВАТЬ ПО Имя, фамилия;
Ниже приведен список различных подходов, которые можно использовать для решения проблемы Select Into Insert Sql Server.
ВСТАВИТЬ В стол2 ВЫБЕРИТЕ * ИЗ таблицы1 ГДЕ условие;
ВСТАВИТЬ В OldCustomers ВЫБРАТЬ * ОТ клиентов;
Мы смогли понять, как исправить проблему Select Into Insert Sql Server, благодаря множеству примеров.
Можем ли мы использовать оператор select во вставке?
Оператор select в операторе INSERT можно использовать для вставки нуля, одной или нескольких строк в таблицу из таблицы результатов оператора select. Оператор select, встроенный в оператор INSERT, ничем не отличается от оператора select, который вы используете для извлечения данных.
В чем разница между вставкой и выбором?
INSERT INTO SELECT vs SELECT INTO: Оба оператора могут использоваться для копирования данных из одной таблицы в другую. Но INSERT INTO SELECT можно использовать только в том случае, если целевая таблица существует, тогда как оператор SELECT INTO можно использовать, даже если целевая таблица не существует, поскольку он создает целевую таблицу, если она не существует. 13 августа 2019 г.
Как мы можем создать оператор вставки из оператора выбора в SQL Server?
Следующий запрос можно разделить на три части.
- Создайте переменную таблицы SQL с соответствующими типами данных столбца. Нам нужно использовать тип данных TABLE для табличной переменной.
- Выполните оператор INSERT INTO SELECT, чтобы вставить данные в табличную переменную.
- Просмотр набора результатов табличных переменных.
Что такое вставка в выборку в SQL?
Оператор INSERT INTO SELECT копирует данные из одной таблицы и вставляет их в другую таблицу. Оператор INSERT INTO SELECT требует, чтобы типы данных в исходной и целевой таблицах совпадали. Примечание. Существующие записи в целевой таблице не затрагиваются.
Можно ли использовать подзапрос в операторе вставки в SQL?
Подзапросы также можно использовать с операторами INSERT. Оператор INSERT использует данные, возвращенные из подзапроса, для вставки в другую таблицу. Выбранные данные в подзапросе могут быть изменены с помощью любой функции символов, даты или числа.
Как вставить результат запроса в таблицу?
Чтобы создать запрос «Вставить результаты» В меню «Конструктор запросов» выберите «Изменить тип» и нажмите «Вставить результаты». В диалоговом окне «Выбрать целевую таблицу для вставки результатов» выберите таблицу, в которую нужно скопировать строки (целевую таблицу).12-Jul-2021
Что быстрее SELECT в или вставить в?
INTO создает целевую таблицу, она владеет исключительно этой таблицей и работает быстрее по сравнению с INSERT … SELECT. Поскольку INSERT … SELECT вставляет данные в существующую таблицу, это происходит медленнее и требует больше ресурсов из-за большего количества логических операций чтения и большего использования журнала транзакций.
Является ли SELECT быстрее, чем вставка?
Я запускал этот тест несколько раз с разными наборами данных и сценариями и заметил, что каждый раз SELECT INTO работает быстрее, чем INSERT INTO SELECT.19-Aug-2018
Почему мы используем SELECT * into в SQL?
Оператор SELECT INTO — это запрос, позволяющий создать новую таблицу и заполнить ее набором результатов оператора SELECT. Чтобы добавить данные в существующую таблицу, используйте оператор INSERT INTO. SELECT INTO можно использовать при объединении данных из нескольких таблиц или представлений в новую таблицу.18 ноября 2019 г.
Как создать вставку сценария SQL?
Шаги для автоматического создания операторов INSERT В контекстном меню выберите Задачи >> Генерировать сценарии. Во всплывающем окне «Создать и опубликовать сценарии» нажмите «Далее», чтобы выбрать экран объектов.