SQL SELECT INTO 語句 SELECT INTO 語句將數據從一個表複製到一個新表中。 SELECT INTO 語法 將所有列複製到新表中: SELECT * INTO newtable [IN externaldb] FROM oldtable WHERE condition; 只複製 ...
SQL SELECT INTO 語句
SELECT INTO
語句將數據從一個表複製到一個新表中。
SELECT INTO 語法
將所有列複製到新表中:
SELECT *
INTO newtable [IN externaldb]
FROM oldtable
WHERE condition;
只複製一些列到新表中:
SELECT column1, column2, column3, ...
INTO newtable [IN externaldb]
FROM oldtable
WHERE condition;
新表將按照在舊表中定義的列名和類型創建。您可以使用 AS
子句創建新的列名。
SQL SELECT INTO 示例
以下 SQL 語句創建 Customers
的備份副本:
SELECT * INTO CustomersBackup2017
FROM Customers;
以下 SQL 語句使用 IN
子句將表複製到另一個資料庫中的新表中:
SELECT * INTO CustomersBackup2017 IN 'Backup.mdb'
FROM Customers;
以下 SQL 語句僅複製一些列到新表中:
SELECT CustomerName, ContactName INTO CustomersBackup2017
FROM Customers;
以下 SQL 語句僅將德國客戶複製到新表中:
SELECT * INTO CustomersGermany
FROM Customers
WHERE Country = 'Germany';
以下 SQL 語句將來自多個表的數據複製到新表中:
SELECT Customers.CustomerName, Orders.OrderID
INTO CustomersOrderBackup2017
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
提示: SELECT INTO
還可以用於使用另一個表的架構創建新的空表。只需添加一個導致查詢不返回數據的 WHERE
子句:
SELECT * INTO newtable
FROM oldtable
WHERE 1 = 0;
SQL INSERT INTO SELECT 語句
INSERT INTO SELECT
語句將數據從一個表複製並插入到另一個表中。目標表中的現有記錄不受影響。
INSERT INTO SELECT 語法
將一個表中的所有列複製到另一個表中:
INSERT INTO table2
SELECT * FROM table1
WHERE condition;
僅將一個表中的某些列複製到另一個表中:
INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition;
SQL INSERT INTO SELECT 示例
在本示例中,我們將使用著名的 Northwind 示例資料庫。
以下是 "Customers" 表的一部分選擇:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
以及 "Suppliers" 表的一部分選擇:
SupplierID | SupplierName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Exotic Liquid | Charlotte Cooper | 49 Gilbert St. | London | EC1 4SD | UK |
2 | New Orleans Cajun Delights | Shelley Burke | P.O. Box 78934 | New Orleans | 70117 | USA |
3 | Grandma Kelly's Homestead | Regina Murphy | 707 Oxford Rd. | Ann Arbor | 48104 | USA |
SQL INSERT INTO SELECT 示例
將 "Suppliers" 複製到 "Customers"(未填充數據的列將包含 NULL):
INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country FROM Suppliers;
將 "Suppliers" 複製到 "Customers"(填充所有列):
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
SELECT SupplierName, ContactName, Address, City, PostalCode, Country FROM Suppliers;
僅將德國供應商複製到 "Customers":
INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country FROM Suppliers
WHERE Country='Germany';
SQL CASE 表達式
SQL CASE
表達式遍歷條件併在滿足第一個條件時返回一個值(類似於 if-then-else 語句)。因此,一旦條件為真,它將停止閱讀並返回結果。如果沒有條件為真,它將返回 ELSE
子句中的值。
如果沒有 ELSE
部分並且沒有條件為真,它將返回 NULL
。
CASE 語法
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
WHEN conditionN THEN resultN
ELSE result
END;
SQL CASE 示例
在下麵的示例中,我們使用了 Northwind 示例資料庫中的 "OrderDetails" 表的一部分選擇:
OrderDetailID | OrderID | ProductID | Quantity |
---|---|---|---|
1 | 10248 | 11 | 12 |
2 | 10248 | 42 | 10 |
3 | 10248 | 72 | 5 |
4 | 10249 | 14 | 9 |
5 | 10249 | 51 | 40 |
SQL CASE 示例
以下 SQL 遍歷條件併在滿足第一個條件時返回一個值:
SELECT OrderID, Quantity,
CASE
WHEN Quantity > 30 THEN 'The quantity is greater than 30'
WHEN Quantity = 30 THEN 'The quantity is 30'
ELSE 'The quantity is under 30'
END AS QuantityText
FROM OrderDetails;
以下 SQL 將按 City 對客戶進行排序。但是,如果 City 為 NULL,則按 Country 進行排序:
SELECT CustomerName, City, Country
FROM Customers
ORDER BY
(CASE
WHEN City IS NULL THEN Country
ELSE City
END);
SQL NULL 函數
在 SQL 中,處理可能包含 NULL 值的情況是很常見的。在這裡,我們將探討一些處理 NULL 值的 SQL 函數,包括 IFNULL()
、ISNULL()
、COALESCE()
和 NVL()
。
MySQL
MySQL 的 IFNULL()
函數允許您在表達式為 NULL 時返回替代值:
SELECT ProductName, UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder, 0))
FROM Products;
或者我們可以使用 COALESCE()
函數,如下所示:
SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products;
SQL Server
SQL Server 的 ISNULL()
函數允許您在表達式為 NULL 時返回替代值:
SELECT ProductName, UnitPrice * (UnitsInStock + ISNULL(UnitsOnOrder, 0))
FROM Products;
或者我們可以使用 COALESCE()
函數,如下所示:
SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products;
MS Access
MS Access 的 IsNull()
函數在表達式為 NULL 值時返回 TRUE(-1),否則返回 FALSE(0):
SELECT ProductName, UnitPrice * (UnitsInStock + IIF(IsNull(UnitsOnOrder), 0, UnitsOnOrder))
FROM Products;
Oracle
Oracle 的 NVL()
函數實現相同的結果:
SELECT ProductName, UnitPrice * (UnitsInStock + NVL(UnitsOnOrder, 0))
FROM Products;
或者我們可以使用 COALESCE()
函數,如下所示:
SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products;
這些函數允許您以一種靈活的方式處理 NULL 值,確保在進行計算時不會出現意外的結果。
最後
為了方便其他設備和平臺的小伙伴觀看往期文章:公眾號搜索Let us Coding
,或者掃描下方二維碼,關註公眾號,即可獲取最新文章。
看完如果覺得有幫助,歡迎點贊、收藏和關註