sql子查询在insert、update、delete中的应用
子查询可以应用在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中的应用的更多相关文章
- SQL基础语法select|insert|update|delete(增删改查) 简单使用
以下案列以此表举例 1.select(查询) select简单的查询分为两种 注:字段也就是表结构中的列的名称 第一种: select 字段名 from 表名 此种查询只列出你所需要查询的字段, ...
- sql中同一个Trigger里同时包含Insert,Update,Delete
sql中同一个Trigger里同时包含Insert,Update,Delete SQLServer是靠Inserted表和Deleted表来处理的,判断一下就可以了,只不过比ORACLE麻烦一点 cr ...
- PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)
原文: PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD) PHP 5 及以上版本建议使用以下方式连接 MySQL ...
- LINQ体验(9)——LINQ to SQL语句之Insert/Update/Delete操作
我们继续讲解LINQ to SQL语句,这篇我们来讨论Insert/Update/Delete操作.这个在我们的程序中最为常用了.我们直接看例子. Insert/Update/Delete操作 插入( ...
- [sql Server]除非另外还指定了TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效
今天遇到一个奇怪的问题,项目突然要从mysql切换到sql server数据库,包含order by 子句的嵌套子查询报错. 示例:select top 10 name,age,sex from ( ...
- sql子查询 嵌套SELECT语句
嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值.子查询不但能够出现在Where子句中,也能够出现在from子句中,作为一个临时表使用,也能够出现在sele ...
- Sql Server的艺术(六) SQL 子查询,创建使用返回多行的子查询,子查询创建视图
子查询或内部查询或嵌套查询在另一个SQL查询的查询和嵌入式WHERE子句中. 子查询用于返回将被用于在主查询作为条件的数据,以进一步限制要检索的数据. 子查询可以在SELECT,INSERT,UPDA ...
- SQL子查询/嵌套查询
sql子查询 嵌套SELECT语句 嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值.子查询不但能够出现在Where子句中,也能够出现在from子句中,作为 ...
- SQL Server温故系列(3):SQL 子查询 & 公用表表达式 CTE
1.子查询 Subqueries 1.1.单行子查询 1.2.多行子查询 1.3.相关子查询 1.4.嵌套子查询 1.5.子查询小结及性能问题 2.公用表表达式 CTE 2.1.普通公用表表达式 2. ...
随机推荐
- POJ 3320 Jessica's Reading Problem (滑动窗口)
题意:给定一个序列,求一个最短区间,使得这个区间包含所有的种类数. 析:最近刚做了几个滑动窗口的题,这个很明显也是,肯定不能暴力啊,时间承受不了啊,所以 我们使用滑动窗口来解决,要算出所有的种数,我用 ...
- MySQL性能调优与架构设计——第 17 章 高可用设计之思路及方案
第 17 章 高可用设计之思路及方案 前言: 数据库系统是一个应用系统的核心部分,要想系统整体可用性得到保证,数据库系统就不能出现任何问题.对于一个企业级的系统来说,数据库系统的可用性尤为重要.数据库 ...
- Linux 系统中进程5中常见状态
运行.中断.不可终端.僵死.停止 R(运行):正在运行 or 在运行队列中等待: S(中断):处于休眠中,等待接收信号,并脱离改状态: D(不可中断):不响应信号输入,即使kill也不起作用: Z(僵 ...
- ViewGroup onInterceptTouchEvent,ViewGroup onTouchEvent,View onTouchEvent执行顺序说明
今天抽出了一些时间实践了viewgroup和view的触摸事件顺序,之前也试过,总是忘记,今天记下笔记说明一下 首先 onInterceptTouchEvent只会出现在viewgroup中,view ...
- calltree+graphviz 绘出项目函数调用图
install calltree: download from http://linux.softpedia.com/progDownload/calltree-Download-971.html f ...
- Python学习-21.Python的代码注释
在Python中有两种注释,一种是普通注释,另一种是文档注释. 普通注释是使用#开头 print('output something') # here is comment 而Python中多行注释也 ...
- python 实现过滤出tomcat日志中含有ERROR 或Exception 的行并保存在另一个文件
遍历多个tomcat日志文件,找出含有ERROR 和Exception 的日志,并把该行日志输出到另一个文件中:(这里为了体现python模块导入的知识,所有建立了多个文件夹和模块) 项目结构: co ...
- asp.net MVC 统计在线人数功能实现
今天开发一个设计一个统计在线人数的统计.实现方式是在MVC 中,用户次执行一个Action请求完成后,向数据表中插入一条用户心跳记录,统计在线人数则是根据该记录,30分钟内有记录的用户则为在线状态. ...
- JS 中的数据类型转换
转成字符串 String 1. 使用 toString方法 这种方法可以将 number, boolean, object,array,function 转化为字符串,但是无法转换 null, und ...
- 如何将Spring Boot项目打包部署到外部Tomcat
1.项目打包 项目开发结束后,需要打包部署到外部服务器的Tomcat上,主要有几种方式. (1)生成jar包 cd 项目跟目录(和pom.xml同级)mvn clean package## 或 ...