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,或者扫描下方二维码,关注公众号,即可获取最新文章。

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

SQL 数据操作技巧:SELECT INTO、INSERT INTO SELECT 和 CASE 语句详解的更多相关文章

  1. 第八章 Hibernate数据操作技巧

    第八章   Hibernate数据操作技巧8.1 分组统计数据    语法:[select]... from ...[where] [group by...[having...]] [order by ...

  2. SQL 数据操作(实验六)

    SQL 数据操作 emp.dept 目标表结构及数据 INSERT 命令的使用与结果验证 2.1把一名新来雇员信息插入到EMP表中:雇员号:1011 姓名: 王晓明 入职日期:今天 ```insert ...

  3. 问题:oracle select into;结果:oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解

    oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解 (2011-07-08 08:59:47) 转载▼ 标签: it 分类: oracle 我们经常会遇 ...

  4. Oracle中复制表的方法(create as select、insert into select、select into)

    转: Oracle中复制表的方法(create as select.insert into select.select into) 2018-07-30 22:10:37 小白白白又白cdllp 阅读 ...

  5. 【转】MySQL用户管理及SQL语句详解

    [转]MySQL用户管理及SQL语句详解 1.1 MySQL用户管理 1.1.1 用户的定义 用户名+主机域 mysql> select user,host,password from mysq ...

  6. mysql基础篇 - SELECT 语句详解

    基础篇 - SELECT 语句详解         SELECT语句详解 一.实验简介 SQL 中最常用的 SELECT 语句,用来在表中选取数据,本节实验中将通过一系列的动手操作详细学习 SELEC ...

  7. MySQL之SELECT 语句详解

    本文参考实验楼的SELECT 语句详解结合自己操作部分而写成. 注意:大多数系统中,SQL语句都是不区分大小写的,但是出于严谨和便于区分保留字和变量名,在书写的时,保留字应大写,而变量名应小写.所谓的 ...

  8. SQL Update 语句详解

    SQL Update 语句详解   Update 语句 Update 语句用于修改表中的数据. 语法: UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 Person: L ...

  9. 【VB技巧】VB静态调用与动态调用dll详解

    本文“[VB技巧]VB静态调用与动态调用dll详解”,来自:Nuclear'Atk 网络安全研究中心,本文地址:http://lcx.cc/?i=489,转载请注明作者及出处! [[请注意]]:在以下 ...

  10. SQL DELETE 语句详解

    SQL DELETE 语句详解   DELETE 语句 DELETE 语句用于删除表中的行. 语法 DELETE FROM 表名称 WHERE 列名称 = 值 Person: LastName Fir ...

随机推荐

  1. 【LeetCode字符串#01】反转字符串I+II

    反转字符串 力扣题目链接(opens new window) 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组分配额外的空间,你必须原地 ...

  2. 【LeetCode哈希表#4】梦开始的地方:两数之和(map),以及关于容器map的一些代码技巧

    两数之和 力扣题目链接(opens new window) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种 ...

  3. 适配http分发Directory.Build.props文件,需要替换默认的微软sdk:8.0映像

    背景 我们是把Directory.Build.props及其Import的文件,都放在http://dev.amihome.cn 那么docker build的时候,也是需要下载Directory.B ...

  4. 【Azure Spring Cloud】Azure Spring Cloud connect to SQL using MSI

    问题描述 在Azure Spring Cloud中,通过ActiveDirectoryMSI方式来连接到SQL Service,需要如何配置呢? 问题分析 在SQL Service中启用Active ...

  5. 【Azure API 管理】APIM的容量指标(Capacity)数据异常高的情况记录

    问题描述 APIM从标准版降级到基础版,在没有用户使用的情况,Capacity的指标平均显示在80%以上. 这是什么异常情况呢? 问题分析 APIM的容量指标(Capacity)是 API 管理实例中 ...

  6. 聊聊图数据库和图数据库的小知识 Vol.02

    2010 年前后,对于社交媒体网络研究的兴起带动了图计算的大规模应用. 2000 年前后热门的是 信息检索 和 分析 ,主要是 Google 的带动,以及 Amazon 的 e-commerce 所用 ...

  7. [QT] 记录一些使用技巧

    目录 概述 打开窗口 弹出消息框 判断文件存在 获取时间 获取子控件 TableWidget设置不可编辑 QT QString判断纯数字 Qt 保存文件选择器 读写ini 概述 最近花了好几天的时间编 ...

  8. 【规范】Apifox就应该这么玩

    前言 缘由 好的工具就要配好的玩法 起因是最近在回顾项目时,看到了年事已高并且长时间不用的Postman,发现之前自己整理的接口文档十分混乱且没有规律.遂打开现在使用的Apifox,将本狗目前项目中使 ...

  9. PetriCrode ---Code Genreation for Colored Petri Nets Annotated with Pragmatics

    1. PetriCode lets users generate code from CPN  models annotated with pragmatics ,PetriCode allows t ...

  10. 【规范】看看人家Git提交描述,那叫一个规矩

    前言 缘由 没想到玩了多年git,竟然还有提交描述规范 事情起因: 在工作迭代过程中,偶然发现同组小帅哥Git提交描述总是和自己的不大一样,秉承好奇至上的我特意去研究了下.竟然发现提交了这么多年的Gi ...