Ms sql select into from select: Предложение INTO (Transact-SQL) — SQL Server
Содержание
Манипуляции с целевой таблицей в операторе SQL SELECT…INTO
Автор: Andy Kim
Введение
Оператор SELECT…INTO — отличный инструмент, который должен быть в вашем арсенале, если вы разработчик SQL. . Оператор SELECT…INTO:
- Автоматически создает целевую таблицу, избавляя от необходимости создавать таблицу вручную.
- Молниеносно загружает целевую таблицу с использованием минимального ведения журнала (при правильных условиях).
В качестве альтернативы вы можете использовать синтаксис CREATE TABLE, чтобы сначала создать целевую таблицу, а затем использовать оператор вставки, чтобы загрузить ее отдельно. Этот метод может быть намного, намного медленнее, особенно по мере увеличения размера набора данных (от миллионов до миллиардов записей). Однако в некоторых случаях это может быть единственным вариантом.
Хотя и замечательно, что оператор SELECT…INTO автоматически создает для нас целевую таблицу, мы теряем определенный уровень контроля над тем, как создается и определяется целевая таблица. Некоторые задачи требуют, чтобы целевая таблица была в определенном формате для выполнения последующих операций с ней. Некоторые примеры этого могут быть, но не ограничиваются:
- Столбец не должен принимать значения NULL, чтобы к нему можно было добавить ограничение первичного ключа.
- Оператор ALTER SWITCH требует, чтобы исходная и целевая таблицы/столбцы были почти одинаковыми.
Имеем ли мы какой-либо контроль над тем, как создается целевая таблица при использовании инструкции SELECT…INTO? Оказывается, есть несколько способов манипулировать целевой таблицей. Я хотел бы продемонстрировать некоторые из этих манипуляций в этом сообщении в блоге.
Давайте внимательно посмотрим на исходную таблицу, из которой мы будем извлекать данные. Это будет контрольный стол для наших будущих экспериментов. В частности, обратите внимание на имена столбцов, типы данных и допустимость значений NULL.
Что произойдет, если мы выполним следующую инструкцию? Как создается таблица OrderDetail_Temp?
Transact-SQL
ВЫБИРАТЬ *
В dbo. OrderDetail_Temp
ОТ dbo.OrderDetail_Source
ВЫБЕРИТЕ * В dbo.OrderDetail_Temp ИЗ dbo.OrderDetail_Source |
Если мы посмотрим в проводнике объектов, то увидим, что он был создан на основе исходной таблицы и фактически соответствует исходному на этом уровне детализации.
Изменение имен столбцов в целевой таблице
Первый простой способ управления целевой таблицей — задать имя столбца. Этого можно добиться, назначив столбцу в запросе псевдоним, как показано ниже.
После выполнения этого оператора:
Transact-SQL
ВЫБЕРИТЕ [ID записи]
,[CustomerID] as CustomerKey — псевдоним для другого имени
,[OrderID] as OrderKey — псевдоним для другого имени
,[OrderDetailID] as OrderDetailKey — псевдоним для другого имени
,[ДатаВремя Создания]
,[Дата и время изменения]
В dbo.OrderDetail_Temp
ИЗ dbo.OrderDetail_Source s
1 2 3 4 5 6 7 8 | SELECT [RecordID] ,[CustomerID] as CustomerKey — псевдоним другого имени ,[OrderID] as OrderKey — псевдоним другого имени ,[ OrderDetailID] как OrderDetailKey — псевдоним для другого имени ,[CreatedDateTime] ,[ModifiedDateTime] INTO dbo. ОТ dbo.OrderDetail_Source s |
Мы видим, что целевая таблица создана с именами столбцов с псевдонимами:
Создание новых типов данных в целевой таблице
Еще один простой способ манипулирования целевой таблицей — преобразование или преобразование в другие данные. тип. Вы можете добиться этого, приведя/преобразовав столбец в запросе, как показано ниже.
После выполнения этого оператора:
Transact-SQL
ВЫБЕРИТЕ [ID записи]
,cast([CustomerID] как varchar(255)) как CustomerKey
,cast([OrderID] как bigint) как OrderKey
,[OrderDetailID] как OrderDetailKey
,cast([CreatedDateTime] как datetime2(0)) как CreatedDateTime
,[Дата и время изменения]
В dbo.OrderDetail_Temp
ОТ dbo.OrderDetail_Source s
1 2 3 4 5 6 7 8 | SELECT [RecordID] ,cast([CustomerID] as varchar(255)) as CustomerKey ,cast([OrderID] as bigint) as OrderKey ,[OrderDetailID] as OrderDetailKey 9000 5 ,cast([CreatedDateTime ] as datetime2(0)) as CreatedDateTime ,[ModifiedDateTime] INTO dbo. FROM dbo.OrderDetail_Source s |
Мы видим, что целевая таблица создана с указанными типами данных:
При литье или преобразовании нам нужно помнить, что наши данные могут ограничивать наши возможности. Кроме того, нам нужно будет понять последствия, такие как потеря точности в некоторых случаях.
Управление свойством столбцов, допускающих значение NULL
Оператор NULLIF можно использовать для создания столбца, допускающего значение NULL, а оператор ISNULL — для создания столбца, не допускающего значения NULL, как показано ниже.
После выполнения этого оператора:
Transact-SQL
ВЫБЕРИТЕ [ID записи]
,NULLIF(приведение([CustomerID] как varchar(255)),-1) как CustomerKey
,cast([OrderID] как bigint) как OrderKey
,[OrderDetailID] как OrderDetailKey
,cast([CreatedDateTime] как datetime2(0)) как CreatedDateTime
,ISNULL([ModifiedDateTime],’1/1/1900′) as ModifiedDateTime
В dbo. OrderDetail_Temp
ОТ dbo.OrderDetail_Source s
1 2 3 4 5 6 7 8 | SELECT [RecordID] ,NULLIF(cast([CustomerID] as varchar(255)),-1) as CustomerKey ,cast([OrderID] as bigint) as OrderKey ,[OrderDetailID] as OrderDetailKey ,cast([CreatedDateTime] as datetime2(0)) as CreatedDateTime ,ISNULL([ModifiedDateTime],’1/1/1900′) as ModifiedDateTime INTO dbo.OrderDetail_Temp FROM dbo.OrderDetail _Источник |
Мы видим, что целевая таблица создана с указанной нулевой способностью:
Избегать внесения свойства идентичности в результирующую таблицу таблица в столбце RecordID. Идентификатор переносится в новую таблицу.
Распространенным приемом, позволяющим избежать переноса свойства удостоверения в целевую таблицу, является выполнение фиктивного соединения или объединения. : При фиктивном объединении или объединении свойство идентичности не переносится.
Этот оператор создаст идентификатор в столбце RecordID в целевой таблице:
Transact-SQL
ВЫБЕРИТЕ [ID записи]
,NULLIF(приведение([CustomerID] как varchar(255)),-1) как CustomerKey
,cast([OrderID] как bigint) как OrderKey
,[OrderDetailID] как OrderDetailKey
,cast([CreatedDateTime] как datetime2(0)) как CreatedDateTime
,ISNULL([ModifiedDateTime],’1/1/1900′) как ModifiedDateTime
В dbo.OrderDetail_Temp
ОТ dbo.OrderDetail_Source s
1 2 3 4 5 6 7 8 | SELECT [RecordID] ,NULLIF(cast([CustomerID] as varchar(255)),-1) as CustomerKey ,cast([OrderID] as bigint) as OrderKey ,[OrderDetailID] as OrderDetailKey , преобразование ([CreatedDateTime] как datetime2 (0)) как CreatedDateTime ,ISNULL([ModifiedDateTime],’1/1/1900′) as ModifiedDateTime В dbo. ИЗ dbo.OrderDetail_Source s |
Хотя этот оператор НЕ будет создавать удостоверение , потому что есть соединение:
Transact-SQL
ВЫБЕРИТЕ [ID записи]
,NULLIF(приведение([CustomerID] как varchar(255)),-1) как CustomerKey
,cast([OrderID] как bigint) как OrderKey
,[OrderDetailID] как OrderDetailKey
,cast([CreatedDateTime] как datetime2(0)) как CreatedDateTime
,ISNULL([ModifiedDateTime],’1/1/1900′) как ModifiedDateTime
В dbo.OrderDetail_Temp
ИЗ dbo.OrderDetail_Source s
ВНУТРЕННЕЕ СОЕДИНЕНИЕ dbo.DummyTable dt
on 1 = 0 — условие никогда не выполняется
1 2 3 4 5 6 7 8 9 9 0005 10 | SELECT [RecordID] ,NULLIF(cast([CustomerID] as varchar(255)),-1) as CustomerKey ,cast([OrderID] as bigint) as OrderKey ,[OrderDetailID] as OrderDetailKey ,cast([CreatedDateTime] as datetime2(0)) as CreatedDateTime ,ISNULL([ModifiedDateTime],’1/1/1900′) as ModifiedDateTime INTO d bo. FROM dbo.OrderDetail_Source s ВНУТРЕННЕЕ СОЕДИНЕНИЕ dbo.DummyTable dt on 1 = 0 — условие никогда не выполняется |
Добавление столбца идентификаторов в результирующую таблицу
Предположим, мы хотим добавить новый столбец идентификаторов в целевую таблицу. Мы можем сделать это так:
Transact-SQL
ВЫБЕРИТЕ ИДЕНТИФИКАЦИЮ (INT, 1, 1) AS NewIdentityColumn
,[ID записи]
,NULLIF(приведение([CustomerID] как varchar(255)),-1) как CustomerKey
,cast([OrderID] как bigint) как OrderKey
,[OrderDetailID] как OrderDetailKey
,cast([CreatedDateTime] как datetime2(0)) как CreatedDateTime
,ISNULL([ModifiedDateTime],’1/1/1900′) as ModifiedDateTime
В dbo.OrderDetail_Temp
ИЗ dbo.OrderDetail_Source s
ВНУТРЕННЕЕ СОЕДИНЕНИЕ dbo.DummyTable dt
on 1 = 0 — условие никогда не выполняется
1 2 3 4 5 6 7 8 9 9 0005 10 11 | SELECT IDENTITY (INT, 1, 1) AS NewIdentityColumn ,[RecordID] ,NULLIF(cast([CustomerID] as varchar(255)),-1) as CustomerKey ,cast([OrderID] as bigint) как OrderKey , [OrderDetailID] как OrderDetailKey , приведение ([CreatedDateTime] как datetime2(0)) как CreatedDateTime ,ISNULL([ModifiedDateTime],’1/1/1900′) as ModifiedDateTime В dbo. ИЗ dbo.OrderDetail_Source s ВНУТРЕННЕЕ СОЕДИНЕНИЕ dbo.DummyTable dt on 1 = 0 — условие никогда правда |
Мы видим, что целевая таблица имеет новый столбец идентификации.
Направление вашей таблицы в определенную файловую группу
В SQL Server 2017 вы также можете использовать предложение ON, чтобы указать, что целевая таблица должна быть создана в определенной файловой группе, отличной от используемой по умолчанию.
Transact-SQL
ВЫБЕРИТЕ ИДЕНТИФИКАЦИЮ (INT, 1, 1) AS NewIdentityColumn
,[ID записи]
,NULLIF(приведение([CustomerID] как varchar(255)),-1) как CustomerKey
,cast([OrderID] как bigint) как OrderKey
,[OrderDetailID] как OrderDetailKey
,cast([CreatedDateTime] как datetime2(0)) как CreatedDateTime
,ISNULL([ModifiedDateTime],’1/1/1900′) as ModifiedDateTime
INTO dbo.OrderDetail_Temp ON [Другая группа файлов]
ИЗ dbo. OrderDetail_Source s
ВНУТРЕННЕЕ СОЕДИНЕНИЕ dbo.DummyTable dt
on 1 = 0 — условие никогда не выполняется
1 2 3 4 5 6 7 8 9 9 0005 10 11 | SELECT IDENTITY (INT, 1, 1) AS NewIdentityColumn ,[RecordID] ,NULLIF(cast([CustomerID] as varchar(255)),-1) as CustomerKey ,cast([OrderID] as bigint) как OrderKey , [OrderDetailID] как OrderDetailKey , приведение ([CreatedDateTime] как datetime2(0)) как CreatedDateTime ,ISNULL([ModifiedDateTime],’1/1/1900′) as ModifiedDateTime INTO dbo.OrderDetail_Temp ON [AnotherFileGroup] ИЗ dbo.OrderDetail_Source s ВНУТРЕННИЙ JO В dbo.DummyTable dt на 1 = 0 — условие никогда не истинно |
Заключение
Теперь, когда мы рассмотрели несколько различных способов манипулирования целевой таблицей при использовании оператора SELECT…INTO, я рекомендую вам попробовать их в следующий раз, когда представится возможность. Я также хотел бы услышать о других манипуляциях с оператором SELECT… INTO, которые вы использовали. Пожалуйста, оставьте комментарий!
Ссылки
Выбрать в заявление Общая информация
https://docs.microsoft.com/en-us/sql/t-sql/queries/select-into-clause-transact-sql?view=sql-server- 2017
Выбрать в определенную файловую группу
https://www.mssqltips.com/sqlservertip/5018/selectinto-enhancements-in-sql-server-2017/
Есть вопросы?
Спасибо за внимание! Мы надеемся, что вы нашли этот пост в блоге полезным. Дайте нам знать, если у вас есть какие-либо вопросы или идеи по теме, связанные с BI, аналитикой, облаком, машинным обучением, SQL Server (Звездные войны) или чем-либо еще, о чем вы хотели бы, чтобы мы написали. Просто оставьте нам комментарий ниже, и мы посмотрим, что мы можем сделать!
Держите аналитику данных в тонусе, подписавшись на нашу рассылку
Получайте свежий контент Key2, посвященный бизнес-аналитике, хранению данных, аналитике и т. д., прямо на ваш почтовый ящик!
Key2 Consulting — компания по хранению данных и бизнес-аналитике, расположенная в Атланте, штат Джорджия. Мы создаем и поставляем настраиваемые решения для хранилищ данных, решения для бизнес-аналитики и настраиваемые приложения.
Оператор SQL Server SELECT INTO с практическими примерами
Цель обучения
Цель этого учебного пособия по SQL Server — научить вас использовать оператор SELECT INTO для создания новой таблицы и копирования в нее данных из существующей таблицы.
Что такое SELECT INTO в SQL Server?
Оператор SELECT INTO позволяет создать таблицу и заполнить ее данными из уже существующей таблицы в одном операторе. При копировании данных в новую таблицу из существующей старой таблицы мы можем скопировать все данные или выбранные столбцы из существующей таблицы. Также можно создать пустую таблицу из существующей таблицы, не копируя из нее какие-либо данные. Когда то же самое сделано, SELECT INTO просто копирует структуру таблицы из старой таблицы в новую. Однако важно отметить и иметь в виду, что SELECT INTO не реплицирует какие-либо ограничения старой таблицы в новую таблицу, такие как PRIMARY KEY, FOREIGN KEY, UNIQUE CONSTRAINT и т. д. Он просто реплицирует имена столбцов, тип данных, и длина данных. Также возможно создать новую таблицу из более чем одной таблицы, используя SELECT INTO.
Операция
Оператор SELECT INTO — это отдельный оператор SQL, который не может быть добавлен к другому оператору SQL, такому как INSERT, UPDATE, DELETE, SELECT и т. д. Однако его можно комбинировать с JOIN или UNION при создании новой таблицы с использованием нескольких столы. Мы можем выбрать соответствующие столбцы из таблиц, чтобы создать новую таблицу.
Синтаксис
Базовый синтаксис оператора SELECT INTO SQL Server следующий.
ВЫБЕРИТЕ список_столбцов INTO новая_таблица ОТ old_table ГДЕ условие;
В этом синтаксисе
- column_list — список столбцов, которые необходимо создать и скопировать из старой таблицы.
Мы можем указать *, если мы хотим создать и скопировать данные из всех столбцов старой таблицы в новую таблицу.
- new_table – новая таблица, которая не существует, но будет создана с использованием информации из старой таблицы.
- old_table – источник структуры таблицы и данных для новой таблицы.
- ГДЕ условие – Необязательно. Это используется для указания некоторых условий при выборе данных. Если вы не используете предложение WHERE, будут выбраны все доступные строки.
SQL Server SELECT INTO Примеры
Рассмотрим несколько практических примеров использования инструкции SELECT INTO.
Предположим, у нас есть таблица с именем сотрудников в базе данных компании, содержащая информацию о сотрудниках всех отделов. Таблица представлена ниже. Мы будем использовать его в качестве исходной таблицы для всех наших примеров, из которых мы будем создавать новые таблицы.
идентификатор | имя | пол | зарплата | отдел |
1 | Дэвид Джексон 9 0043 | Мужской | 5000 | IT |
2 | Джим Джеймсон | Женский | 6000 | HR |
3 | Кейт Джонсон | Женщина | 7500 | IT |
4 900 43 | Уилл Рэй | Мужчина | 6500 | Маркетинг |
5 | Шейн Мэтьюз | Женщина | 5500 | Финансы |
6 | Цена сарая | Самец | 8000 | Маркетинг |
7 | Виктор Смит | Мужчина | 7200 | HR |
8 | Винсент Смитсон | Женщина | 6600 9004 3 | ИТ |
9 | Дженис Стрип | Женщина | 5400 | Маркетинг |
10 | Лора Уэллс | Женщина | 6300 | Финансы |
11 | Mac Bull | Мужчина | 5700 | Маркетинг |
12 | Патрик Паттерсон | Мужчина | 7000 | HR |
13 | Джули Орбисон | Женщина | 7100 | IT |
14 | Элис Хемингуэй | Женщина | 6800 | Маркетинг |
15 | Уэйн Джонсон | Мужчина | 5000 | Финансы |
Таблица: Сотрудник
1) SQL Server SELECT-INTO — создание точной реплики
Начнем с простейшего примера создания точной реплики существующей таблицы. Часто в режиме реального времени делается быстрое резервное копирование данных существующей таблицы перед внесением данных или структурных изменений в таблицу. следующий запрос делает то же самое, используя подстановочный знак *.
ВЫБОР * INTO employee_backup С работника;
Мы можем проверить, создана ли новая таблица и скопированы ли в нее данные, используя приведенный ниже запрос SEELCT.
ВЫБЕРИТЕ * ОТ резервная копия_сотрудника;
Будет сгенерирован следующий вывод, из которого видно, что новая таблица является копией старой таблицы.
900 44 оклад
90 052
9 0044 Маркетинг
90 044 Дженис Стрип
id | имя | пол | Отдел | |
1 | Дэвид Джексон | Мужчина | 5000 | IT |
2 | Джим Джеймсон | Женщина | 6000 | HR |
3 | Кейт Джонсон | Женщина | 7500 | IT |
4 | Уилл Рэй | Мужчина | 6500 | |
5 | Шейн Мэтьюз | Женщина | 5500 | Финансы |
6 | Цена сарая | Мужчина | 8000 | Маркетинг |
7 | Виктор Смит | Мужчина | 7200 | HR |
8 | Винсент Смитсон | Женщина | 6600 | IT |
9 | Женщина | 5400 | Маркетинг | |
10 | Лаура Уэллс | Женщина | 6300 | Финансы |
11 | Mac Bull | Мужчина | 5700 | Маркетинг |
12 | Патрик Паттерсон | Мужчина | 7000 | HR |
13 | Джули Орбисон | Женщина | 7100 | ИТ |
14 | Элис Хемингуэй | Женщина | 6800 | Маркетинг |
15 | Уэйн Джонсон | Мужской | 5000 | Финансы |
2) SQL Server SELECT INTO — воссоздание выбранных столбцов
Теперь мы немного изменим приведенный выше запрос, чтобы создать новую таблицу, используя только выбранные столбцы из существующей таблицы вместо репликации всех столбцов. Следующий запрос делает то же самое. Он создает новую таблицу с именем employee_backup_2 только со столбцами, указанными в запросе.
ВЫБЕРИТЕ
идентификатор, имя, пол, отдел
INTO employee_backup_2
ОТ сотрудника;
Мы можем проверить, создана ли новая таблица и скопированы ли в нее данные, используя приведенный ниже запрос SEELCT.
ВЫБЕРИТЕ *
ИЗ employee_backup_2;
Будет сгенерирован следующий вывод. Из вывода мы видим, что новая таблица имеет только указанные 4 столбца.
900 44 Виктор Смит
900 44 Женский
9005 2
идентификатор | имя | пол | отделение |
1 | Дэвид Джексон | мужской | IT |
2 | Джим Джеймсон | Женщина | HR |
3 | Кейт Джонсон | Женщина | IT |
4 | Уилл Рэй | Мужчина | Маркетинг |
5 900 43 | Шейн Мэтьюз | Женщина | Финансы |
6 | Цена сарая | Мужчина | Маркетинг |
7 | Мужчина | HR | |
8 | Винсент Смитсон | Женщина | IT |
9 | Дженис Стрип | Женщина | Маркетинг |
10 | Лора Уэллс | Финансы | |
11 | Mac Bull | Мужской | Маркетинг |
12 | Патрик Паттерсон | Мужской | HR |
13 | Джули Орбисон | Женщина | IT |
14 | Элис Хемингуэй | Женщина | Маркетинг |
15 | Уэйн Джонсон | Мужчина | Финансы |
3) SQL Server SELECT INTO — с условием WHERE
До сих пор мы видели примеры, когда мы копировали все записи из старой таблицы в новую без указания каких-либо условий для выбора записей. Теперь мы будем использовать условие WHERE, чтобы ограничить записи, копируемые в новую таблицу. Следующий запрос делает то же самое и выбирает и копирует записи на основе условия.
ВЫБЕРИТЕ *
INTO female_employees
FROM сотрудника
WHERE gender='FEMALE';
Мы можем проверить, была ли создана новая таблица и в нее скопированы соответствующие данные, используя приведенный ниже запрос SELECT.
ВЫБЕРИТЕ *
ИЗ employee_backup_2;
Будет сгенерирован следующий вывод. Из вывода видно, что новая таблица состоит из записей о женщинах-сотрудниках только в том виде, в каком они указаны в условии WHERE.
id | имя | пол | зарплата |
2 | Джим Джеймсон | Женщина | 6000 |
3 | Кейт Джонсон | Женщина | 7500 |
5 | Шейн Мэтьюз | Женщина | 5500 |
8 | Винсент Смитсон | Женщина | 6600 |
9 | Дженис Стрип | Женский | 5400 |
10 | Лаура Уэллс | Женщина | 6300 |
13 | Джули Орбисон | Женщина | 7100 |
14 | Элис Хемингуэй | Женщина | 6800 |
4) SQL Server SELECT INTO — репликация существующей таблицы в другую базу данных
Как мы все знаем, таблицы существуют в базе данных. Мы можем использовать SELECT INTO для дублирования существующей таблицы в той же базе данных или в другой базе данных. База данных должна уже существовать или должна быть создана, чтобы в ней можно было создать дублирующую таблицу. В этом примере мы сначала создаем базу данных, а затем используем SELECT INTO для репликации существующей таблицы employee в этой базе данных. Первый запрос в текстовом поле ниже создает базу данных company_db, а второй запрос SELECT INTO создает таблицу company_employee в базе данных company_db.
создать базу данных company_db; идти; ВЫБИРАТЬ * INTO компания_db.dbo.company_employee С работника;
Мы можем проверить результат с помощью следующего запроса SELECT, который показывает новую таблицу company_employee. Первый запрос — если вы не подключены к базе данных company_db и поэтому ссылаетесь на таблицу по ее полному абсолютному имени. второй запрос сначала подключается к базе данных, а затем выполняет выборку в таблице, и, следовательно, достаточно только имени таблицы.
ВЫБЕРИТЕ * ОТ company_db.dbo.company_employee; ИЛИ Используйте компанию_дб; Идти; SELECT * from company_employee;
Запросы будут содержать полную таблицу, как показано ниже.
900 44 зарплата
9004 4 Мужчина
id | имя | пол | отдел | |
1 | Дэвид Джексон | мужчина | 5000 | IT |
2 | Джим Джеймсон | Женщина | 6000 | HR |
3 | Кейт Джонсон | Женщина | 7500 | IT |
4 | Уилл Рэй | 6500 | Маркетинг | |
5 | Шейн Мэтьюз | Женщина | 5500 | Финансы |
6 | Цена сарая | Самец | 8000 | Маркетинг |
7 9004 3 | Виктор Смит | Мужской | 7200 | HR |
8 | Винсент Смитсон | Женщина | 6600 | IT |
9 | Дженис Стрип | Женщина | 5400 | Маркетинг |
10 | Лаура Wells | Женщина | 6300 | Финансы |
11 | Mac Bull | Мужчина | 5700 | Маркетинг |
12 | Патрик Паттерсон | Мужчина | 7000 | HR |
13 | Джули Орбисон 900 43 | Женщина | 7100 | IT |
14 | Элис Хемингуэй | Женщина | 6800 | Маркетинг |
15 | Уэйн Джонсон | Мужчина | 5000 | Финансы |
5)
SQL Server SELECT INTO – создание пустой таблицы
Во всех приведенных выше примерах мы создали реплику существующего сотрудника таблицы, либо реплицируя все столбцы, либо выбранные столбцы. Но также можно просто реплицировать структуру таблицы без копирования каких-либо данных в новую таблицу. Имейте в виду, что будет реплицирована только структура столбца, но не какие-либо ограничения, как уже упоминалось выше во введении. Следующий запрос делает то же самое. 1 = 0 в условии WHERE в основном означает, что true равно false, что является невыполнимым условием, и, следовательно, никакие записи не возвращаются из старой таблицы и ничего не копируется в новую таблицу.
ВЫБОР * INTO just_the_table ОТ сотрудника ГДЕ 1 = 0;
Мы можем проверить, была ли создана новая таблица, с помощью приведенного ниже запроса SELECT.
ВЫБЕРИТЕ * ОТ just_the_table;
Будет сгенерирован следующий вывод, показывающий только заголовки столбцов таблицы.
id | имя | пол | зарплата 90 043 | отделение |
Наконец, если мы проверим дизайн новой таблицы just_the_table и старого сотрудника таблицы в SQL Server Management Studio (щелкните правой кнопкой мыши таблицу и выберите «Дизайн») или с помощью приведенной ниже команды мы увидим, что новая таблица не иметь любой PRIMARY KEY, в то время как в старой таблице первый столбец таблицы «id» является столбцом PRIMARY KEY, как указано значком ключа рядом с ним.
ВЫБЕРИТЕ * ИЗ INFORMATION_SCHEMA.COLUMNS ГДЕ TABLE_NAME='just_the_table'; И ВЫБИРАТЬ * ИЗ INFORMATION_SCHEMA.COLUMNS ГДЕ ТАБЛИЦА_ИМЯ='сотрудник';
Вывод ниже.
Рисунок: just_the _table Рисунок: Дизайн сотрудника
6) SQL Server SELECT INTO – создание новой таблицы из нескольких таблиц
В этом последнем примере мы создадим новую таблицу из 2 существующих таблиц. 2 таблицы показаны ниже. Одна таблица категорий (содержащая список категорий электронных продуктов) и другая таблица продуктов (содержащая список конкретных продуктов).
9004 4 39004 4 2
907 54
id категории | имя_категории | ||
1 | Мобильный | ||
2 | Наушники | ||
Планшет | |||
4 | Ноутбук | ||
5 | Ноутбук | ||
6 | Фаблет. 0044 имя_продукта | Дата выпуска | |
1027 | 2 | Наушники Bose с шумоподавлением 700 | 5/13 /2019 |
1028 | 2 | Sennheiser HD 450BT | 04.![]() |
1029 | 2 | Sony WH-1000XM3 | 15.08.2018 |
1030 | SoundMagic ES18 | 01.01.2017 | |
1021 | 1 | Apple iPhone 11 Pro | 20.09.2019 |
1022 | 1 | Samsung Galaxy Note 10 Plus | 23.08.2019 |
1035 | 3 | Samsung Galaxy Tab S6 | 11.10.2019 |
1036 | 3 | Microsoft Surface Pro | 15.06.2017 |
Следующий запрос создает новую таблицу с именем electronics, используя ЛЕВОЕ СОЕДИНЕНИЕ между указанными выше 2 стол. LEFT JOIN копирует все записи из левой таблицы и только соответствующие записи из правой таблицы.
ВЫБОР название_продукта, название_категории В электронику ИЗ продуктов ЛЕВО СОЕДИНИТЬ категории ПО products.category_id=categories.category_id;
Мы можем проверить результат запроса, выполнив выбор на новой электронной таблице.