Sql 简明教程
SQL - Select Into Statement
The SQL Select Into Statement
SQL SELECT INTO 语句创建一个新表,并将现有表中的数据插入新创建的表中。新表是根据 SELECT 语句中列的结构自动创建的,可以在相同的数据库或不同的数据库中创建。
但是,值得注意的是,SELECT INTO 语句不保留原始表的任何索引、约束或其他属性,新表在默认情况下没有任何主键或外键。因此,如果需要,你可能需要手动将这些属性添加到新表中。
Syntax
以下是 SQL Server 中 SQL SELECT INTO 语句的基本语法 −
SELECT * INTO new_table_name FROM existing_table_name
Example
让我们创建 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;
Verification
我们可以通过使用 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 |
Copying Data From Specific Columns
我们还可以使用 SQL SELECT INTO 语句将现有表中特定列的数据复制到新表中。为此,我们只需要在 select 关键字后包含所需的列名即可。
Copying Data From Multiple Tables
使用 SQL SELECT INTO 语句,我们还可以将数据从多个表复制到一个新表中。这是通过使用 JOIN 子句完成的,它基于公共列组合来自多个表的数据。
Syntax
以下是使用 SELECT INTO 语句从多个表复制数据的语法 −
SELECT column1, column2, ..., columnN
INTO new_table_name
FROM table1
JOIN table2 ON table1.column = table2.column
Example
首先,让我们创建一个名为 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 |
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;
Copying Specific Records
我们还可以将 SQL SELECT INTO 语句与 WHERE 子句一起使用,以创建一个新表并从中复制特定行到现有表。
Syntax
以下是将 SELECT INTO 语句与 WHERE 子句一起使用的语法 −
SELECT *
INTO new_table_name
FROM existing_table_name
WHERE condition;