Ms sql select into from select: Предложение INTO (Transact-SQL) — SQL Server

Манипуляции с целевой таблицей в операторе SQL SELECT…INTO

Автор: Andy Kim

 

Введение

Оператор SELECT…INTO — отличный инструмент, который должен быть в вашем арсенале, если вы разработчик SQL. . Оператор SELECT…INTO:

  1. Автоматически создает целевую таблицу, избавляя от необходимости создавать таблицу вручную.
  2. Молниеносно загружает целевую таблицу с использованием минимального ведения журнала (при правильных условиях).

В качестве альтернативы вы можете использовать синтаксис CREATE TABLE, чтобы сначала создать целевую таблицу, а затем использовать оператор вставки, чтобы загрузить ее отдельно. Этот метод может быть намного, намного медленнее, особенно по мере увеличения размера набора данных (от миллионов до миллиардов записей). Однако в некоторых случаях это может быть единственным вариантом.

Хотя и замечательно, что оператор SELECT…INTO автоматически создает для нас целевую таблицу, мы теряем определенный уровень контроля над тем, как создается и определяется целевая таблица. Некоторые задачи требуют, чтобы целевая таблица была в определенном формате для выполнения последующих операций с ней. Некоторые примеры этого могут быть, но не ограничиваются:

  1. Столбец не должен принимать значения NULL, чтобы к нему можно было добавить ограничение первичного ключа.
  2. Оператор 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. OrderDetail_Temp

ОТ 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. OrderDetail_Temp

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. OrderDetail_Temp

ИЗ 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. OrderDetail_Temp

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. OrderDetail_Temp

ИЗ 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 3

9004 4 2

907 54

id категории имя_категории
1 Мобильный
2 Наушники
Планшет
4 Ноутбук
5 Ноутбук
6 Фаблет. 0044 имя_продукта Дата выпуска
1027 2 Наушники Bose с шумоподавлением 700 5/13 /2019
1028 2 Sennheiser HD 450BT 04. 02.2020
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; 

Мы можем проверить результат запроса, выполнив выбор на новой электронной таблице.