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