- SQL 教程
- SQL - 首页
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 数据库
- SQL - 语法
- SQL - 数据类型
- SQL - 运算符
- SQL - 表达式
- SQL 数据库
- SQL - 创建数据库
- SQL - 删除数据库
- SQL - 选择数据库
- SQL - 重命名数据库
- SQL - 显示数据库
- SQL - 备份数据库
- SQL 表
- SQL - 创建表
- SQL - 显示表
- SQL - 重命名表
- SQL - 截断表
- SQL - 克隆表
- SQL - 临时表
- SQL - 修改表
- SQL - 删除表
- SQL - 删除表数据
- SQL - 约束
- SQL 查询
- SQL - INSERT 查询
- SQL - SELECT 查询
- SQL - SELECT INTO
- SQL - INSERT INTO SELECT
- SQL - UPDATE 查询
- SQL - DELETE 查询
- SQL - 排序结果
- SQL 视图
- SQL - 创建视图
- SQL - 更新视图
- SQL - 删除视图
- SQL - 重命名视图
- SQL 运算符和子句
- SQL - WHERE 子句
- SQL - TOP 子句
- SQL - DISTINCT 子句
- SQL - ORDER BY 子句
- SQL - GROUP BY 子句
- SQL - HAVING 子句
- SQL - AND & OR
- SQL - 布尔 (BIT) 运算符
- SQL - LIKE 运算符
- SQL - IN 运算符
- SQL - ANY, ALL 运算符
- SQL - EXISTS 运算符
- SQL - CASE
- SQL - NOT 运算符
- SQL - 不等于
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 运算符
- SQL - UNION 运算符
- SQL - UNION vs UNION ALL
- SQL - INTERSECT 运算符
- SQL - EXCEPT 运算符
- SQL - 别名
- SQL 连接
- SQL - 使用连接
- SQL - 内连接
- SQL - 左连接
- SQL - 右连接
- SQL - 交叉连接
- SQL - 全连接
- SQL - 自连接
- SQL - 删除连接
- SQL - 更新连接
- SQL - 左连接 vs 右连接
- SQL - UNION vs JOIN
- SQL 密钥
- SQL - 唯一键
- SQL - 主键
- SQL - 外键
- SQL - 组合键
- SQL - 备选键
- SQL 索引
- SQL - 索引
- SQL - 创建索引
- SQL - 删除索引
- SQL - 显示索引
- SQL - 唯一索引
- SQL - 聚簇索引
- SQL - 非聚簇索引
- 高级 SQL
- SQL - 通配符
- SQL - 注释
- SQL - 注入
- SQL - 托管
- SQL - MIN & MAX
- SQL - NULL 函数
- SQL - CHECK 约束
- SQL - DEFAULT 约束
- SQL - 存储过程
- SQL - NULL 值
- SQL - 事务
- SQL - 子查询
- SQL - 处理重复项
- SQL - 使用序列
- SQL - 自动递增
- SQL - 日期和时间
- SQL - 游标
- SQL - 公共表表达式
- SQL - GROUP BY vs ORDER BY
- SQL - IN vs EXISTS
- SQL - 数据库调优
- SQL 函数参考
- SQL - 日期函数
- SQL - 字符串函数
- SQL - 聚合函数
- SQL - 数值函数
- SQL - 文本和图像函数
- SQL - 统计函数
- SQL - 逻辑函数
- SQL - 游标函数
- SQL - JSON 函数
- SQL - 转换函数
- SQL - 数据类型函数
- SQL 有用资源
- SQL - 问答
- SQL - 快速指南
- SQL - 有用函数
- SQL - 有用资源
- SQL - 讨论
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 语句的基本语法:
SELECT * INTO new_table_name FROM existing_table_name
示例
让我们创建 CUSTOMERS 表,其中包含客户的个人详细信息,包括他们的姓名、年龄、地址和薪水等,如下所示:
CREATE TABLE CUSTOMERS ( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
现在,使用 INSERT 语句将值插入此表,如下所示:
INSERT INTO CUSTOMERS VALUES (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 );
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 表中的数据复制到其中:
SELECT * INTO CUSTOMER_BACKUP FROM CUSTOMERS;
输出
我们得到以下结果。我们可以看到已修改了 7 行。
(7 rows affected)
验证
我们可以使用 SELECT 语句检索表的内容来验证更改是否反映在表中。以下是显示 CUSTOMER_BACKUP 表中记录的查询:
SELECT * from 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 关键字后包含所需的列名即可。
语法
以下是语法:
SELECT column1, column2, ..., columnN INTO new_table_name FROM existing_table_name;
示例
在下面的查询中,我们正在创建一个名为 CUSTOMER_DETAILS 的新表,该表仅包含 CUSTOMERS 表中的 NAME、AGE 和 ADDRESS 列,并使用相应的数据填充它。
SELECT name, age, address INTO CUSTOMER_DETAILS FROM CUSTOMERS;
输出
我们得到以下结果。我们可以看到已修改了 7 行。
(7 rows affected)
验证
我们可以使用 SELECT 语句检索表的内容来验证更改是否反映在表中。以下是显示 CUSTOMER_DETAILS 表中记录的查询:
SELECT * from 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 语句从多个表复制数据的语法:
SELECT column1, column2, ..., columnN INTO new_table_name FROM table1 JOIN table2 ON table1.column = table2.column
示例
首先,让我们创建一个名为 ORDERS 的另一个表:
CREATE TABLE ORDERS ( OID INT NOT NULL, DATE VARCHAR (20) NOT NULL, CUSTOMER_ID INT NOT NULL, AMOUNT DECIMAL (18, 2));
使用 INSERT 语句,将值插入此表,如下所示:
INSERT INTO ORDERS VALUES (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);
创建的表如下:
OID | 日期 (DATE) | 客户ID (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 匹配:
SELECT CUSTOMERS.Name, ORDERS.customer_id INTO CUSTOMER_ORDERS FROM CUSTOMERS LEFT JOIN ORDERS ON CUSTOMERS.ID = ORDERS.customer_id;
输出
我们得到以下结果。我们可以看到已修改了 8 行。
(8 rows affected)
验证
我们可以使用 SELECT 语句检索表的内容来验证更改是否反映在表中。以下是显示 CUSTOMER_ORDERS 表中记录的查询:
SELECT * FROM CUSTOMER_ORDERS;
显示的表如下:
姓名 (NAME) | customer_id |
---|---|
Ramesh | NULL |
Khilan | 2 |
Kaushik | 3 |
Kaushik | 3 |
Chailtali | 4 |
Hardik | NULL |
Komal | NULL |
Muffy | NULL |
复制特定记录
我们还可以将 SQL SELECT INTO 语句与 WHERE 子句一起使用,以创建一个新表并将现有表中的特定行复制到其中。
语法
以下是使用带 WHERE 子句的 SELECT INTO 语句的语法:
SELECT * INTO new_table_name FROM existing_table_name WHERE condition;
示例
使用以下查询,我们正在创建一个名为 NameStartsWith_K 的新表,其中包含 CUSTOMERS 表中的所有列,但它只存储姓名以 “k” 开头的客户的记录。
SELECT * INTO NameStartsWith_K FROM CUSTOMERS WHERE NAME LIKE 'k%';
输出
我们得到以下结果。我们可以看到已修改了 3 行。
(3 rows affected)
验证
我们可以使用 SELECT 语句检索表的内容来验证更改是否反映在表中。
SELECT * from NameStartsWith_K;
显示的表如下:
ID | 姓名 (NAME) | 年龄 (AGE) | 地址 (ADDRESS) | 薪水 (SALARY) |
---|---|---|---|---|
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |