子查询可以应用在INSERT、UPDATE以及DELETE等语句中,合理的使用子查询将能够简化功能的实现并且极大的提高SQL语句执行的效率

用到的表:

CREATE TABLE `t_readerfavorite` (
`FCategoryId` int(11) DEFAULT NULL,
`FReaderId` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of t_readerfavorite
-- ----------------------------
INSERT INTO `t_readerfavorite` VALUES ('', '');
INSERT INTO `t_readerfavorite` VALUES ('', '');
INSERT INTO `t_readerfavorite` VALUES ('', '');
INSERT INTO `t_readerfavorite` VALUES ('', '');
INSERT INTO `t_readerfavorite` VALUES ('', '');
INSERT INTO `t_readerfavorite` VALUES ('', '');
INSERT INTO `t_readerfavorite` VALUES ('', '');
INSERT INTO `t_readerfavorite` VALUES ('', '');
INSERT INTO `t_readerfavorite` VALUES ('', '');
INSERT INTO `t_readerfavorite` VALUES ('', '');
INSERT INTO `t_readerfavorite` VALUES ('', '');
INSERT INTO `t_readerfavorite` VALUES ('', '');
INSERT INTO `t_readerfavorite` VALUES ('', '');
INSERT INTO `t_readerfavorite` VALUES ('', '');
INSERT INTO `t_readerfavorite` VALUES ('', '');
INSERT INTO `t_readerfavorite` VALUES ('', '');

1,子查询在INSERT语句中的应用

一般我们insert是一行数据,有时可能需要将数据批量插入表中,比如创建一个和T_ReaderFavorite表结构完全相同的表T_ReaderFavorite2,然后将T_ReaderFavorite中的输入复制插入到T_ReaderFavorite2表

创建T_ReaderFavorite2表

CREATE TABLE `t_readerfavorite2` (
`FCategoryId` int(11) DEFAULT NULL,
`FReaderId` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

批量插入,数据量大的时候提高效率 格式:INSERT……SELECT…… ,注意上下的列顺序必须是一一对应的

insert into t_readerfavorite2(fcategoryId,freaderid)
select fcategoryid,freaderid from t_readerfavorite

使用INSERT……SELECT……不仅能够实现简单的将一个表中的数据导出到另外一个表中的功能,还能在将输入插入目标表之前对数据进行处理

比如下面的SQL语句用于将T_ReaderFavorite表中的数据复制到T_ReaderFavorite2表中,但是如果T_ReaderFavorite表中的FReaderId列的值大于10,则将FReaderId的值减去FCategoryId的值后再复制到T_ReaderFavorite2表中

INSERT INTO t_readerfavorite2 (fcategoryId, freaderid)
SELECT
fcategoryid,
CASE
WHEN freaderid > 10 THEN freaderid - fcategoryid
ELSE
freaderid
END
FROM
t_readerfavorite

使用这种插入前的数据处理可以完成诸如“将数据从A表导出到B表,并且将B表的主键全部加上bak前缀”、“将A公司的所有员工插入到我们的会员表,自动导入所有的客户信息,并且为其自动生成会员编号”等复杂的任务。

因为可以在插入目标表前可以对数据进行处理,所以INSERT……SELECT……语句不局限于同结构表间的数据插入,也可以实现异构表间输数据的插入。

2,子查询在UPDATE语句中的应用

在UPDATE语句中可以在更新列表中以及WHERE语句使用子查询。

下面演示一个将图书的出版日期全部更新为所有图书中的最新出版日期,SQL语句如下:

UPDATE t_book SET FYearPublished  = (SELECT max(FYearPublished) FROM t_book)

注意,在MYSQL中是不支持使用子查询来更新一个列的

下面的SQL语句用来将所有同类书本书超过3本的图书的出版日期更新为2005:

update t_book set fyearpublished = 2005 where fcategoryid in
(
select fcategoryid from t_book t group by t.fcategoryid having count(*)>3
)

3,子查询在DELETE语句中的应用

子查询在DELETE中唯一可以应用的位置就是WHERE子句,使用子查询可以完成复杂的数据删除控制。其使用方式与SELECT语句中的子查询基本相同,而且也可以使用相关子查询等高级的特性。下面的SQL语句用来将所有同类书本书超过3本的图书删除:

delete from  t_book  where fcategoryid in
(
select fcategoryid from t_book t group by t.fcategoryid having count(*)>3
)

sql子查询在insert、update、delete中的应用的更多相关文章

  1. SQL基础语法select|insert|update|delete(增删改查) 简单使用

    以下案列以此表举例 1.select(查询) select简单的查询分为两种 注:字段也就是表结构中的列的名称 第一种: select  字段名  from  表名 此种查询只列出你所需要查询的字段, ...

  2. sql中同一个Trigger里同时包含Insert,Update,Delete

    sql中同一个Trigger里同时包含Insert,Update,Delete SQLServer是靠Inserted表和Deleted表来处理的,判断一下就可以了,只不过比ORACLE麻烦一点 cr ...

  3. PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)

    原文: PHP5: mysqli 插入, 查询, 更新和删除  Insert Update Delete Using mysqli (CRUD) PHP 5 及以上版本建议使用以下方式连接 MySQL ...

  4. LINQ体验(9)——LINQ to SQL语句之Insert/Update/Delete操作

    我们继续讲解LINQ to SQL语句,这篇我们来讨论Insert/Update/Delete操作.这个在我们的程序中最为常用了.我们直接看例子. Insert/Update/Delete操作 插入( ...

  5. [sql Server]除非另外还指定了TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效

    今天遇到一个奇怪的问题,项目突然要从mysql切换到sql server数据库,包含order by 子句的嵌套子查询报错. 示例:select top 10 name,age,sex from ( ...

  6. sql子查询 嵌套SELECT语句

    嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值.子查询不但能够出现在Where子句中,也能够出现在from子句中,作为一个临时表使用,也能够出现在sele ...

  7. Sql Server的艺术(六) SQL 子查询,创建使用返回多行的子查询,子查询创建视图

    子查询或内部查询或嵌套查询在另一个SQL查询的查询和嵌入式WHERE子句中. 子查询用于返回将被用于在主查询作为条件的数据,以进一步限制要检索的数据. 子查询可以在SELECT,INSERT,UPDA ...

  8. SQL子查询/嵌套查询

    sql子查询 嵌套SELECT语句 嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值.子查询不但能够出现在Where子句中,也能够出现在from子句中,作为 ...

  9. SQL Server温故系列(3):SQL 子查询 & 公用表表达式 CTE

    1.子查询 Subqueries 1.1.单行子查询 1.2.多行子查询 1.3.相关子查询 1.4.嵌套子查询 1.5.子查询小结及性能问题 2.公用表表达式 CTE 2.1.普通公用表表达式 2. ...

随机推荐

  1. Netty学习第六节实例一步学习

    NIO与传统IO对应使用的类: ServerSocketChannel相当于ServerSocket SocketChannel 相当于Socket Selector是NIO的核心类,是负责监听Ser ...

  2. MySQL 分表和分区

    1.为什么需要分表和分区 在开发的过程中,经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,如果涉及联合查询的情况,性能更加 ...

  3. Codeforces777B Game of Credit Cards 2017-05-04 17:19 29人阅读 评论(0) 收藏

    B. Game of Credit Cards time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  4. Why I Want A Wife

    I want a wife who will take care of my physical needs. I want a wife who will keep my house clean. A ...

  5. Android Sms短信发送

    界面布局: 具体代码: private void sendSms() { // 获取电话号码和短信内容 String number = number1.getText().toString(); St ...

  6. 面向对象编程思想(前传)--你必须知道的javascript(转载)

    原文地址:http://www.cnblogs.com/zhaopei/p/6623460.html阅读目录   什么是鸭子类型 javascript的面向对象 封装 继承 多态 原型 this指向 ...

  7. SQL学习笔记1

    2018.10.15:周一   -- 返回前5个数据 SELECT TOP 5 * FROM Student;   -- 返回前50%的数据 SELECT TOP 50 PERCENT * FROM ...

  8. Flask 视图,模板,蓝图.

    https://www.cnblogs.com/wupeiqi/articles/7552008.html 1. 配置文件 from flask import Flask app =Flask(__n ...

  9. ASP.NET Core获取客户端IP地址

    1.在ConfigureServices注入IHttpContextAccessor // ASP.NET Core 2.1的注入方式 //services.AddHttpContextAccesso ...

  10. OpenStack qemu-guest-agent 使用

    What is qemu-ga 我个人认为qemu-ga是在虚拟机中安装的一个agent,宿主机host通过通道(unix socket)与虚拟机vm内部的agent进行通信,这样宿主机就有了一种从外 ...