sql — Oracle INSERT INTO с использованием SELECT
Задавать вопрос
спросил
Изменено 8 лет, 5 месяцев назад
Просмотрено 16 тысяч раз
Мне нужно продублировать некоторые строки столбцов в Oracle.
У меня есть таблица customer_address
и столбец address_type
, где 1 — адрес доставки, 2 — адрес доставки и т. д.
У меня есть эти столбцы, которые мне нужно продублировать:
customer_no Имя Клиента customer_email
Например, на данный момент
CUSTOMER_NO ADDRESS_TYPE CUSTOMER_NAME CUSTOMER_EMAIL ----------- ------------ ------------- -------------- 40 1 Электронная почта некоторых клиентов@somecustomer. com
CUSTOMER_NO ADDRESS_TYPE CUSTOMER_NAME CUSTOMER_EMAIL ----------- ------------ ------------- -------------- 40 1 Электронная почта некоторых клиентов@somecustomer.com 40 2 Электронная почта некоторых клиентов@somecustomer.com
Возможно ли это сделать?
Обновление
Спасибо за ответ @a_horse_with_no_name, но когда я запрашиваю таблицу, результаты кажутся странными, я дважды получаю имена столбцов, это правильно или я пропустил что-то, что вызвало это?
Например,
выберите customer_no, address_type, customer_name, customer_email от клиента_адрес где клиент_номер = 40;
показывает
CUSTOMER_NO ADDRESS_TYPE CUSTOMER_NAME CUSTOMER_EMAIL ----------- ------------ ------------- -------------- 40 1 Электронная почта некоторых клиентов@somecustomer.com CUSTOMER_NO ADDRESS_TYPE CUSTOMER_NAME CUSTOMER_EMAIL ----------- ------------ ------------- -------------- 40 2 Электронная почта некоторых клиентов@somecustomer.com
Спасибо
- sql
- oracle
вставить в customer_address (customer_no, address_type, customer_name, customer_email) выберите клиент_номер, 2, Имя Клиента, customer_email от клиента_адрес где клиент_id = 40 и тип_адреса = 1; совершить;
Полное описание синтаксиса INSERT
см. в руководстве:
2
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Требуется, но никогда не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Оператор SELECT INTO TEMP TABLE в SQL Server
В этой статье мы рассмотрим оператор SELECT INTO TEMP TABLE, его синтаксис и детали использования, а также приведите несколько простых базовых примеров, чтобы закрепить полученные знания.
Введение
- Создает таблицу-клон исходной таблицы с точно такими же именами столбцов и типами данных.
- Читает данные из исходной таблицы
- Вставляет данные во вновь созданную таблицу
Мы можем использовать оператор SELECT INTO TEMP TABLE для выполнения вышеуказанных задач в одном операторе для временного столы. Таким образом, мы можем быстро скопировать данные исходной таблицы во временные таблицы.
Синтаксис оператора SELECT INTO TEMP TABLE
ВЫБРАТЬ * | Column1, Column2… ColumnN INTO #TempDestinationTable FROM Source_Table ГДЕ Условие |
Аргументы SELECT INTO TEMP TABLE
- Список столбцов: Мы можем использовать звездочку (*) для создания полной временной копии исходной таблицы или можем выбрать определенные столбцы исходной таблицы
- Таблица назначения: Эта таблица ссылается на имя временной таблицы, в которую мы будем создавать и вставлять данные. Мы можем указать целевую таблицу как локальную или глобальную временную таблицу. Для локальной временной таблицы мы используем один знак решетки (#), а для глобальной временной таблицы мы используем знак решетки (##).
- Исходная таблица: Источник — это таблица, из которой мы хотим считать данные
- Пункт Where: Мы можем использовать предложение where, чтобы применить фильтр к данным исходной таблицы.
В следующем примере мы вставим данные таблицы Location в таблицу #TempLocation. Другими словами, мы создаст временный клон таблицы Location.
ВЫБЕРИТЕ * INTO #TempLocation FROM Production.Location GO SELECT * FROM #TempLocation |
Как мы видим, оператор SELECT INTO создает таблицу #TempLocation, а затем вставляет в нее данные таблицы Location.
Когда мы хотим вставить определенные столбцы таблицы Location во временную таблицу, мы можем использовать следующее запрос :
SELECT LocationID, Name, ModifiedDate INTO #TempLocationCol FROM Production. Location GO SELECT * FROM #TempLocationCol |
Здесь следует обратить внимание на то, что имена столбцов временной таблицы и исходной таблицы совпадают. Чтобы изменить имена столбцов временной таблицы, мы можем дать псевдонимы столбцам исходной таблицы в запросе на выборку.
SELECT LocationID AS [TempLocationID], Имя AS [TempLocationName] ,ModifiedDate AS [TempModifiedDate] INTO #TempLocationCol FROM Production.Location GO 90C 90C SELECT * FROM 08 |
В то же время мы можем отфильтровать некоторые строки Location, а затем вставить набор результатов во временную таблицу. следующий запрос фильтрует строки, в которых столбец имени начинается с символа «F», а затем вставляет наборы результатов во временную таблицу.
SELECT LocationID, Name, ModifiedDate INTO #TempLocationCon FROM Production. Location WHERE Name LIKE ‘F%’ GO SELECT * FROM #TempLocationCon |
INSERT INTO SELECT vs SELECT INTO TEMP TABLE
Оператор INSERT INTO SELECT считывает данные из одной таблицы и вставляет их в существующую таблицу. Например, если мы хотим скопируйте данные таблицы Location во временную таблицу с помощью инструкции INSERT INTO SELECT, мы должны указать временную таблицу явно, а затем вставить данные.
1 2 3 4 5 6 7 8 0 1 0 30 93 002 1112 13 | — Объявить временную таблицу — CREATE TABLE #CopyLocation( LocationID smallint NOT NULL, Name nvarchar(50) NOT NULL, 2 Доступность десятичная (8, 2) НЕ НУЛЕВОЕ, ModifiedDate datetime NOT NULL)
— Копировать данные во временную таблицу — INSERT INTO #CopyLocation SELECT * FROM Production. — Выберите данные из временной таблицы — 9000 — ВЫБЕРИТЕ * ИЗ #CopyLocation |
На самом деле, эти два утверждения выполняют одну и ту же задачу разными способами. Однако они имеют некоторые отличия в сценарии их использования.
ВСТАВИТЬ В ВЫБОР | ВЫБЕРИТЕ |
Требуется явно объявить целевую временную таблицу. Таким образом, это позволяет гибко изменять типы данных столбца и возможность создавать индексы. | Автоматически создает целевую временную таблицу. |
Благодаря гибкости определения типов данных столбцов позволяет передавать данные из разных таблиц. | Он может создать резервную копию таблицы с простым синтаксисом. |
SELECT INTO TEMP TABLE производительность
Оператор SELECT INTO TEMP TABLE выполняет две основные задачи в контексте производительности, а именно:
- Чтение данных из исходных данных
- Вставка данных во временную таблицу
Производительность операции чтения данных зависит от производительности запроса select, поэтому нам необходимо оценить производительность процесс чтения данных в этой области. Однако конфигурация базы данных tempdb повлияет на производительность оператора вставки. В SQL 2014 операторы SELECT … INTO выполняются параллельно, поэтому они показывают лучшую производительность. Теперь давайте проанализируем следующий план выполнения запроса.
ВЫБЕРИТЕ SalesOrderID, CarrierTrackingNumber, ModifiedDate INTO #TempsSalesDetail FROM Sales. SalesOrderDetail ЗАКАЗ ПО SalesOrderID |
1- Оператор Clustered Index Scan считывает все данные из первичного ключа таблицы SalesOrderDetail и передает все данные в таблицу оператора вставки.
2- Оператор Table Insert добавляет новые данные во временную таблицу и выполняет эту операцию параллельно. способ. Эту ситуацию можно отобразить в атрибуте Фактическое количество строк. Поток 0 не показывает никаких значений потому что это поток координатора.
Оператор Gather Stream объединяет несколько параллельных операций в одну операцию. В этом плане выполнения запроса мы использовали предложение ORDER BY, но мы не видим никакого оператора в плане выполнения. В то же время Оператор Clustered Index Scan не возвращает результат в отсортированном виде. Причина этого пункта в том, что нет гарантия порядка вставки строк в таблицу.
Заключение
В этой статье мы изучили синтаксис и детали использования оператора SELECT INTO TEMP TABLE.