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

SELECT INTO、INSERT INTO SELECT 和 CASE 语句详解

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 子句创建新的列名

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;

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” 表的一部分选择:
在这里插入图片描述
以及 “Suppliers” 表的一部分选择:
在这里插入图片描述
SQL INSERT INTO SELECT 示例
将 “Suppliers” 复制到 “Customers”(未填充数据的列将包含 NULL):

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

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

NSERT 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';

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

如果没有 ELSE 部分并且没有条件为真,它将返回 NULL。

CASEWHEN condition1 THEN result1WHEN condition2 THEN result2WHEN conditionN THEN resultNELSE result
END;

CASE 示例
在下面的示例中,我们使用了 Northwind 示例数据库中的 “OrderDetails” 表的一部分选择:
在这里插入图片描述
以下 SQL 遍历条件并在满足第一个条件时返回一个值:

SELECT OrderID, Quantity,
CASEWHEN 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
(CASEWHEN City IS NULL THEN CountryELSE City
END);

NULL 函数
在 SQL 中,处理可能包含 NULL 值的情况是很常见的。在这里,我们将探讨一些处理 NULL 值的 SQL 函数,包括 IFNULL()、ISNULL()、COALESCE() 和 NVL()。

MySQL 的 IFNULL() 函数允许您在表达式为 NULL 时返回替代值:

SELECT ProductName, UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder, 0))
FROM Products;

或者我们可以使用 COALESCE() 函数,如下所示:

SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products;

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 的 IsNull() 函数在表达式为 NULL 值时返回 TRUE(-1),否则返回 FALSE(0):

SELECT ProductName, UnitPrice * (UnitsInStock + IIF(IsNull(UnitsOnOrder), 0, UnitsOnOrder))
FROM Products;

Oracle 的 NVL() 函数实现相同的结果:

SELECT ProductName, UnitPrice * (UnitsInStock + NVL(UnitsOnOrder, 0))
FROM Products;

或者我们可以使用 COALESCE() 函数,如下所示:

SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/267639.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RocketMQ Connect详解

一、概览 RocketMQ Connect是RocketMQ数据集成重要组件,可将各种系统中的数据通过高效,可靠,流的方式,流入流出到RocketMQ,它是独立于RocketMQ的,一个单独的分布式、可扩展、可容错系统, 它具备…

ICC2:low power与pg strategy(pg_std_cell_conn)

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 以low power复杂设计为例,power rail是如何产生的: set pd_list{{DEFAULT_VA VDD_DIG VDD_DIG VSS} {PD_DSP VDD_DIG VDD_DSP VSS} } ;#两个电源域,DEFAULT_VA和PD_DSP是对应voltage area名字,…

Nacos配置管理-配置热更新

目录 一、Nacos配置管理回顾 1.1 统一配置管理 1.1.1 在nacos中添加配置文件 1.1.2 在弹出的表单中,填写配置信息 1.1.3 从微服务拉取配置 1.1.4 在项目中新增一个配置文件bootstrap.yaml,内容如下: 1.1.5 读取nacos配置 1.1.6 效果 二…

漏洞复现-华为Auth-HTTP服务器任意文件读取漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

36V H 桥有刷直流驱动芯片GC8870 GC8871 GC8872的数据选型分析

36V H 桥驱动芯片GC8870 GC8871 GC8872都可替代TI的DRV8870/8871/8872,宽电压,内置电荷泵,短地短电源保护,限流等功能,可应用于水泵,扫地机器人,开关等产品中

工地配电箱巡检二维码

施工工地的外部环境条件恶劣,加之工地上机动车辆的运行和机械设备的应用,均易导致电气故障的发生。现场配电箱缺乏专业技术人员的管理,易造成触电伤害、火灾等事故。 1、每个配电箱对应一个二维码 将配电箱的参数、负责人、操作规则等设备信息上传,现场扫码即可查看…

精通 JavaScript 数据处理大全:手写代码从入门到精通

​🌈个人主页:前端青山 🔥系列专栏:JavaScript篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript- 数据处理 目录 1. 实现日期格式化函数 2. 交换a,b的值,不…

使用pdf2docx轻松将PDF转换成docx

目录 一、什么是pdf2docx? 二、为什么选择pdf2docx? 三、如何使用pdf2docx? 四、常见问题和解决方案 总结 随着数字化时代的到来,PDF和docx格式已经成为我们日常工作中最常用的文档格式之一。然而,有时我们需要将…

电脑录制高清视频文件是怎么设置的

在当今数字化的时代,电脑已经成为我们生活中不可或缺的工具。除了处理文档、浏览网页等常见功能外,它还可以轻松录制高清视频文件。那么,具体如何设置电脑才可以录制高清视频呢? 首先,要确保电脑的硬件配置是否能够支…

【面试】Java最新面试题资深开发-Java中的并发集合类

问题五:Java中的并发集合类 Java提供了许多并发集合类来处理多线程环境下的数据共享和同步。你能列举一些Java中常用的并发集合类,并简要说明它们的特点和使用场景吗? 以下六个是经常被使用的,它们在实际开发中发挥着重要作用&a…

探究振弦采集仪在工程监测中的应用

探究振弦采集仪在工程监测中的应用 振弦采集仪是一种专门用于测量结构振动的仪器,在工程监测中有着广泛的应用。它通过采集振动信号,分析结构的振动特性,从而评估结构的安全性能,指导工程设计和施工。本文将从振弦采集仪的基本原…