0


SQL 数据操作技巧:SELECT INTO、INSERT INTO SELECT 和 CASE 语句详解

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
LEFTJOIN Orders ON Customers.CustomerID = Orders.CustomerID;

提示:

SELECT INTO

还可以用于使用另一个表的架构创建新的空表。只需添加一个导致查询不返回数据的

WHERE

子句:

SELECT*INTO newtable
FROM oldtable
WHERE1=0;

SQL INSERT INTO SELECT 语句

INSERT INTO SELECT

语句将数据从一个表复制并插入到另一个表中。目标表中的现有记录不受影响。

INSERT INTO SELECT 语法

将一个表中的所有列复制到另一个表中:

INSERTINTO table2
SELECT*FROM table1
WHERE condition;

仅将一个表中的某些列复制到另一个表中:

INSERTINTO table2 (column1, column2, column3,...)SELECT column1, column2, column3,...FROM table1
WHERE condition;

SQL INSERT INTO SELECT 示例

在本示例中,我们将使用著名的 Northwind 示例数据库。

以下是 “Customers” 表的一部分选择:
CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
以及 “Suppliers” 表的一部分选择:
SupplierIDSupplierNameContactNameAddressCityPostalCodeCountry1Exotic LiquidCharlotte Cooper49 Gilbert St.LondonEC1 4SDUK2New Orleans Cajun DelightsShelley BurkeP.O. Box 78934New Orleans70117USA3Grandma Kelly’s HomesteadRegina Murphy707 Oxford Rd.Ann Arbor48104USA

SQL INSERT INTO SELECT 示例

将 “Suppliers” 复制到 “Customers”(未填充数据的列将包含 NULL):

INSERTINTO Customers (CustomerName, City, Country)SELECT SupplierName, City, Country FROM Suppliers;

将 “Suppliers” 复制到 “Customers”(填充所有列):

INSERTINTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)SELECT SupplierName, ContactName, Address, City, PostalCode, Country FROM Suppliers;

仅将德国供应商复制到 “Customers”:

INSERTINTO Customers (CustomerName, City, Country)SELECT SupplierName, City, Country FROM Suppliers
WHERE Country='Germany';

SQL CASE 表达式

SQL

CASE

表达式遍历条件并在满足第一个条件时返回一个值(类似于 if-then-else 语句)。因此,一旦条件为真,它将停止阅读并返回结果。如果没有条件为真,它将返回

ELSE

子句中的值。

如果没有

ELSE

部分并且没有条件为真,它将返回

NULL

CASE 语法

CASEWHEN condition1 THEN result1
    WHEN condition2 THEN result2
    WHEN conditionN THEN resultN
    ELSE result
END;

SQL CASE 示例

在下面的示例中,我们使用了 Northwind 示例数据库中的 “OrderDetails” 表的一部分选择:
OrderDetailIDOrderIDProductIDQuantity110248111221024842103102487254102491495102495140

SQL CASE 示例

以下 SQL 遍历条件并在满足第一个条件时返回一个值:

SELECT OrderID, Quantity,CASEWHEN Quantity >30THEN'The quantity is greater than 30'WHEN Quantity =30THEN'The quantity is 30'ELSE'The quantity is under 30'ENDAS QuantityText
FROM OrderDetails;

以下 SQL 将按 City 对客户进行排序。但是,如果 City 为 NULL,则按 Country 进行排序:

SELECT CustomerName, City, Country
FROM Customers
ORDERBY(CASEWHEN City ISNULLTHEN 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

,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎 点赞、收藏、关注

标签: sql 数据库 oracle

本文转载自: https://blog.csdn.net/2302_76489021/article/details/134721667
版权归原作者 小万哥丶 所有, 如有侵权,请联系我们删除。

“SQL 数据操作技巧:SELECT INTO、INSERT INTO SELECT 和 CASE 语句详解”的评论:

还没有评论