SQL Select Into 语句
SQL Select Into 语句
SQL SELECT INTO 语句会创建一个新表,并将现有表中的数据插入到新创建的表中。新表会根据 SELECT 语句中的列结构自动创建,并可以在同一数据库或不同数据库中创建。
然而,需要注意的是,SELECT INTO 语句不会保留原表的索引、约束或其他属性,并且新表默认不会有任何主键或外键定义。因此,如果需要的话,您可能需要手动向新表添加这些属性。
MySQL 不支持 SELECT … INTO TABLE Sybase SQL 扩展,即在 MySQL 中不能使用 SELECT … INTO 语句将数据从一张表插入到另一张表。取而代之,我们可以使用 INSERT INTO … SELECT 语句或 CREATE TABLE … SELECT 语句。
语法
以下是 SQL Server 中 SQL SELECT INTO 语句的基本语法:
示例
让我们创建一个包含客户个人详细信息的CUSTOMERS表,包括他们的姓名、年龄、地址和工资等,如下所示:
现在,使用INSERT语句将值插入到此表中,如下所示−
创建CUSTOMERS表如下 –
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
下面的SELECT INTO语句创建了一个名为 CUSTOMER_BACKUP 的新表,并将CUSTOMERS表中的数据复制到其中 –
输出
我们得到了以下结果。我们可以观察到有7行被修改。
验证
我们可以通过使用SELECT语句检索表的内容来验证改变是否反映在表中。以下是显示CUSTOMER_BACKUP表中记录的查询代码:
显示的表格如下所示:
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
从特定列复制数据
我们还可以使用SQL SELECT INTO语句将已有表中特定列的数据复制到新表中。为此,我们只需要在select关键字后面包含所需的列名。
语法
以下为语法 –
示例
在下面的查询中,我们正在创建一个名为 CUSTOMER_DETAILS 的新表,该表只包含CUSTOMERS表中的NAME,AGE和ADDRESS列,并用相应的数据填充它。
输出
我们得到了以下结果。我们可以观察到有7行被修改了。
验证
我们可以通过使用SELECT语句检索其内容来验证更改是否在表中反映出来。以下是在CUSTOMER_DETAILS表中显示记录的查询语句。
显示的表格如下所示-
NAME | AGE | ADDRESS |
---|---|---|
Ramesh | 32 | Ahmedabad |
Khilan | 25 | Delhi |
Kaushik | 23 | Kota |
Chaitali | 25 | Mumbai |
Hardik | 27 | Bhopal |
Komal | 22 | Hyderabad |
Muffy | 24 | Indore |
注意: 新表不会包含原表的其他列。原表保持不变。
从多个表复制数据
使用SQL的SELECT INTO语句,我们还可以将多个表的数据复制到新表中。这是通过使用JOIN子句来合并多个表的数据(基于共同列)来实现的。
语法
以下是使用SELECT INTO语句从多个表复制数据的语法:
示例
首先,让我们创建另一个名为 ORDERS 的表格。
使用INSERT语句,将值插入到这个表中,如下所示:
表格的创建方式如下:
OID | DATE | CUSTOMER_ID | AMOUNT |
---|---|---|---|
102 | 2009-10-08 00:00:00 | 3 | 3000.00 |
100 | 2009-10-08 00:00:00 | 3 | 1500.00 | 101 | 2009-11-20 00:00:00 | 2 | 1560.00 | 103 | 2008-05-20 00:00:00 | 4 | 2060.00 |
现在,我们正在创建一个名为CUSTOMER_ORDERS的新表,该表包括CUSTOMERS表中的客户姓名和ORDERS表中的客户ID,其中CUSTOMERS表中的客户ID与ORDERS表中的客户ID相匹配−
输出
我们得到了以下结果。我们可以观察到有8行已经被修改。
验证
我们可以通过使用SELECT语句检索其内容来验证表中的更改是否反映出来。以下是显示CUSTOMER_ORDERS表中记录的查询语句:
下面显示的表格如下:
NAME | customer_id | |
---|---|---|
Ramesh | NULL | |
Khilan | 2 | |
Kaushik | 3 | |
Kaushik | 3 | |
Chailtali | 4 | |
Hardik | NULL | |
Komal | NULL | |
Muffy | NULL |
复制特定记录
我们还可以使用带有WHERE子句的SQL SELECT INTO语句创建一个新表,并将现有表中的特定行复制到其中。
语法
以下是使用带有WHERE子句的SELECT INTO语句的语法-
示例
使用以下查询,我们正在创建一个名为 NameStartsWith_K 的新表,该表包含CUSTOMERS表的所有列,但它只存储以 ‘k’ 开头的客户记录。
输出
我们得到了以下结果。我们可以观察到已经修改了3行。
验证
我们可以通过使用SELECT语句检索表的内容来验证更改是否反映在表中。
显示的表格如下所示−
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |