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. ...
随机推荐
- 用Java操作数据库Datetime数据
Date.Calendar.Timestamp的区别.相互转换与使用 1 Java.util.Date 包含年.月.日.时.分.秒信息. // String转换为Date String dateStr ...
- struts 拦截器
my-default.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts ...
- iOS平台设置系统状态栏(通知栏、顶部状态栏)样式背景颜色或透明
5+App开发 状态栏 配置系统状态栏样式 iOS平台可支持对系统状态栏样式的配置,在应用manifest.json文件的plus->distribute->apple下添加UIStatu ...
- hdu1081 To The Max 2016-09-11 10:06 29人阅读 评论(0) 收藏
To The Max Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- 【最大流之ek算法】HDU1532 求最大流
本来是继续加强最短路的训练,但是遇到了一个最短路 + 最大流的问题,最大流什么鬼,昨天+今天学习了一下,应该对ek算法有所了解,凭借学习后的印象,自己完成并ac了这个最大流的模板题 题目大意:都是图论 ...
- knowledge_map 修改笔记
20150110 knowledge_map修改的地方: 1.dialog的调整.把结构图中的dialog(另存,新建知识点)调整到全局中(我的列表,knowledge_map_js_showKnow ...
- ASP.NET WEB API 返回JSON 出现2个双引号问题
前言 在使用ASP.NET WEB API时,我想在某个方法返回JSON格式的数据,于是首先想到的就是手动构建JSON字符串,如:"{\"result\" ...
- MySql数据库远程连接失败问题解决
例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话. GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY ...
- C#——调用C++的DLL 数据类型转换
/C++中的DLL函数原型为 //extern "C" __declspec(dllexport) bool 方法名一(const char* 变量名1, unsig ...
- VS2012安装ClaudiaIDE失败
上班看见同事的VS界面.如下图: 出于好奇就问他是怎么弄的,同事告诉我说是VS的一个插件ClaudiaIDE:于是我就去官网上下载ClaudiaIDE, 官网下载ClaudiaIDE链接:http:/ ...