歡迎閱讀本篇博客文章,我們將為您詳細(xì)介紹 MySQL 中的數(shù)據(jù)操作技巧:SELECT INTO、INSERT INTO SELECT 和 CASE 語句。掌握這些技巧將有助于您在數(shù)據(jù)庫操作中更加靈活和高效地處理數(shù)據(jù)。
SQL SELECT INTO 語句
SELECT INTO 語句將數(shù)據(jù)從一個(gè)表復(fù)制到一個(gè)新表中。
SELECT INTO 語法
將所有列復(fù)制到新表中:
SELECT * INTO newtable [IN externaldb] FROM oldtable WHERE condition;
只復(fù)制一些列到新表中:
SELECT column1, column2, column3, ... INTO newtable [IN externaldb] FROM oldtable WHERE condition;
新表將按照在舊表中定義的列名和類型創(chuàng)建。您可以使用 AS 子句創(chuàng)建新的列名。
SQL SELECT INTO 示例
以下 SQL 語句創(chuàng)建 Customers 的備份副本:
SELECT * INTO CustomersBackup2017 FROM Customers;
以下 SQL 語句使用 IN 子句將表復(fù)制到另一個(gè)數(shù)據(jù)庫中的新表中:
SELECT * INTO CustomersBackup2017 IN 'Backup.mdb' FROM Customers;
以下 SQL 語句僅復(fù)制一些列到新表中:
SELECT CustomerName, ContactName INTO CustomersBackup2017 FROM Customers;
以下 SQL 語句僅將德國客戶復(fù)制到新表中:
SELECT * INTO CustomersGermany FROM Customers WHERE Country = 'Germany';
以下 SQL 語句將來自多個(gè)表的數(shù)據(jù)復(fù)制到新表中:
SELECT Customers.CustomerName, Orders.OrderID INTO CustomersOrderBackup2017 FROM Customers LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
提示: SELECT INTO 還可以用于使用另一個(gè)表的架構(gòu)創(chuàng)建新的空表。只需添加一個(gè)導(dǎo)致查詢不返回?cái)?shù)據(jù)的 WHERE 子句:
SELECT * INTO newtable FROM oldtable WHERE 1 = 0;
SQL INSERT INTO SELECT 語句
INSERT INTO SELECT 語句將數(shù)據(jù)從一個(gè)表復(fù)制并插入到另一個(gè)表中。目標(biāo)表中的現(xiàn)有記錄不受影響。
INSERT INTO SELECT 語法
將一個(gè)表中的所有列復(fù)制到另一個(gè)表中:
INSERT INTO table2 SELECT * FROM table1 WHERE condition;
僅將一個(gè)表中的某些列復(fù)制到另一個(gè)表中:
INSERT INTO table2 (column1, column2, column3, ...) SELECT column1, column2, column3, ... FROM table1 WHERE condition;
SQL INSERT INTO SELECT 示例
在本示例中,我們將使用著名的 Northwind 示例數(shù)據(jù)庫。
以下是 "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" 復(fù)制到 "Customers"(未填充數(shù)據(jù)的列將包含 NULL):
INSERT INTO Customers (CustomerName, City, Country) SELECT SupplierName, City, Country FROM Suppliers;
將 "Suppliers" 復(fù)制到 "Customers"(填充所有列):
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country) SELECT SupplierName, ContactName, Address, City, PostalCode, Country FROM Suppliers;
僅將德國供應(yīng)商復(fù)制到 "Customers":
INSERT INTO Customers (CustomerName, City, Country) SELECT SupplierName, City, Country FROM Suppliers WHERE Country='Germany';
SQL CASE 表達(dá)式
SQL CASE 表達(dá)式遍歷條件并在滿足第一個(gè)條件時(shí)返回一個(gè)值(類似于 if-then-else 語句)。因此,一旦條件為真,它將停止閱讀并返回結(jié)果。如果沒有條件為真,它將返回 ELSE 子句中的值。
如果沒有 ELSE 部分并且沒有條件為真,它將返回 NULL。
CASE 語法
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 WHEN conditionN THEN resultN ELSE result END;
SQL CASE 示例
在下面的示例中,我們使用了 Northwind 示例數(shù)據(jù)庫中的 "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 遍歷條件并在滿足第一個(gè)條件時(shí)返回一個(gè)值:
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 對客戶進(jìn)行排序。但是,如果 City 為 NULL,則按 Country 進(jìn)行排序:
SELECT CustomerName, City, Country FROM Customers ORDER BY (CASE WHEN City IS NULL THEN Country ELSE City END);
SQL NULL 函數(shù)
在 SQL 中,處理可能包含 NULL 值的情況是很常見的。在這里,我們將探討一些處理 NULL 值的 SQL 函數(shù),包括 IFNULL()、ISNULL()、COALESCE() 和 NVL()。
MySQL
MySQL 的 IFNULL() 函數(shù)允許您在表達(dá)式為 NULL 時(shí)返回替代值:
SELECT ProductName, UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder, 0)) FROM Products;
或者我們可以使用 COALESCE() 函數(shù),如下所示:
SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0)) FROM Products;
SQL Server
SQL Server 的 ISNULL() 函數(shù)允許您在表達(dá)式為 NULL 時(shí)返回替代值:
SELECT ProductName, UnitPrice * (UnitsInStock + ISNULL(UnitsOnOrder, 0)) FROM Products;
或者我們可以使用 COALESCE() 函數(shù),如下所示:
SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0)) FROM Products;
MS Access
MS Access 的 IsNull() 函數(shù)在表達(dá)式為 NULL 值時(shí)返回 TRUE(-1),否則返回 FALSE(0):
SELECT ProductName, UnitPrice * (UnitsInStock + IIF(IsNull(UnitsOnOrder), 0, UnitsOnOrder)) FROM Products;
Oracle
Oracle 的 NVL() 函數(shù)實(shí)現(xiàn)相同的結(jié)果:
SELECT ProductName, UnitPrice * (UnitsInStock + NVL(UnitsOnOrder, 0)) FROM Products;
或者我們可以使用 COALESCE() 函數(shù),如下所示:文章來源:http://www.zghlxwxcb.cn/article/573.html
SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0)) FROM Products;
這些函數(shù)允許您以一種靈活的方式處理 NULL 值,確保在進(jìn)行計(jì)算時(shí)不會出現(xiàn)意外的結(jié)果。文章來源地址http://www.zghlxwxcb.cn/article/573.html
到此這篇關(guān)于數(shù)據(jù)庫操作技巧:SELECT INTO、INSERT INTO SELECT 和 CASE 語句詳解的文章就介紹到這了,更多相關(guān)內(nèi)容可以在右上角搜索或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!