SELECT列表中的标量子查询
发现了一种表连接新的写法,以前还没有这样写过或者见别人写过。跟同学聊天他们公司却很多人这样写,看来真的要学学sql了
表
CREATE TABLE `t_book` (
`FId` int(11) NOT NULL,
`FName` varchar(50) DEFAULT NULL,
`FYearPublished` int(11) DEFAULT NULL,
`FCategoryId` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of t_book
-- ----------------------------
INSERT INTO `t_book` VALUES ('', 'About J2EE', '', '');
INSERT INTO `t_book` VALUES ('', 'Learning Hibernate', '', '');
INSERT INTO `t_book` VALUES ('', 'Two Cites', '', '');
INSERT INTO `t_book` VALUES ('', 'Jane Eyre', '', '');
INSERT INTO `t_book` VALUES ('', 'Oliver Twist', '', '');
INSERT INTO `t_book` VALUES ('', 'History of China', '', '');
INSERT INTO `t_book` VALUES ('', 'History of England', '', '');
INSERT INTO `t_book` VALUES ('', 'History of America', '', '');
INSERT INTO `t_book` VALUES ('', 'History of The World', '', '');
INSERT INTO `t_book` VALUES ('', 'Atom', '', '');
INSERT INTO `t_book` VALUES ('', 'RELATIVITY', '', '');
INSERT INTO `t_book` VALUES ('', 'Computer', '', '');
INSERT INTO `t_book` VALUES ('', 'Astronomy', '', '');
INSERT INTO `t_book` VALUES ('', 'How To Singing', '', '');
INSERT INTO `t_book` VALUES ('', 'DaoDeJing', '', '');
INSERT INTO `t_book` VALUES ('', 'Obedience to Authority', '', ''); CREATE TABLE `t_category` (
`FId` int(11) NOT NULL,
`FName` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of t_category
-- ----------------------------
INSERT INTO `t_category` VALUES ('', 'Story');
INSERT INTO `t_category` VALUES ('', 'History');
INSERT INTO `t_category` VALUES ('', 'Theory');
INSERT INTO `t_category` VALUES ('', 'Technology');
INSERT INTO `t_category` VALUES ('', 'Art');
INSERT INTO `t_category` VALUES ('', 'Philosophy');
书表
目录表
任务:查询出每种类目的 类目名称、类目id,最晚的出版年份
一般的想法是,将book表通过类目id进行分组,求出max(出版年份),再和类目表进行join即可:
select c.*,A.maxPub
from t_category c
left join (
select b.FCategoryId cid ,max(b.fyearpublished) maxPub from t_book b group by b.FCategoryId)A
on c.fid=A.cid
但是看见新的写法是这样的:
select c.fid,c.FName,(select max(b.FYearPublished) from t_book b where b.FCategoryId=c.FId) maxPub from t_category c
查询出来结果是一样的
这个SELECT语句首先检索FId、FName两个字段,而第三个字段不是一个列二是一个子查询。这个子查询位于主查询的内部,它返回一类图书的最新出版年份。因为聚合函数仅返回一行记录,所以这满足标量子查询的条件。通过WHERE语句,这个子查询也被连接到外部的SELECT查询语句中,因为这个连接,MAX(FYearPublished)将返回每类图书的最新出版年份。
记录一下
SELECT列表中的标量子查询的更多相关文章
- WHERE 子句中的标量子查询
标量子查询不仅可以用在SELECT 语句的列表中,它还可以用在WHERE 子句中,而且实际应用中子查询很多的时候都是用在WHERE子句中的. 先来看一个简单的例子,我们要检索喜欢“Story”的读者主 ...
- SELECT中常用的子查询操作
MySQL中的子查询 是在MySQL中经常使用到的一个操作,不仅仅是用在DQL语句中,在DDL语句.DML语句中也都会常用到子查询. 子查询的定义: 子查询是将一个查询语句嵌套在另一个查询语句中: 在 ...
- 在MySQL中使用子查询和标量子查询的基本用法
一.MySQL 子查询 子查询是将一个 SELECT 语句的查询结果作为中间结果,供另一个 SQL 语句调用.MySQL 支持 SQL 标准要求的所有子查询格式和操作,也扩展了特有的几种特性.子查询没 ...
- 标量子查询调优SQL
fxnjbmhkk4pp4 select /*+ leading (wb,sb,qw) */ 'blocker('||wb.holding_session||':'||sb.username||')- ...
- 优化有标量子查询的SQL
数据库环境:SQL SERVER 2008R2 今天在数据库中抓出一条比较耗费资源的SQL,只返回904条数据,居然跑了40多分钟.SQL及对应的数据量如下图: SELECT saft04.cur_y ...
- Oracle sql优化之分析函数优化标量子查询
待优化语句如下 select a.code as code, a.m_code as m_code,a.stktype as f_stype,a.e_year as e_year, b.sname a ...
- SQL Server的优化器会缓存标量子查询结果集吗
在这篇博客"ORACLE当中自定义函数性优化浅析"中,我们介绍了通过标量子查询缓存来优化函数性能: 标量子查询缓存(scalar subquery caching)会通过缓存结果减 ...
- [20180626]函数与标量子查询14.txt
[20180626]函数与标量子查询14.txt --//前面看http://www.cnblogs.com/kerrycode/p/9099507.html链接,里面提到: 通俗来将,当使用标量子查 ...
- 警惕 MySql 更新 sql 的 WHERE 从句中的 IN() 子查询时出现的性能陷阱
警惕 MySql 更新 sql 的 WHERE 从句中的 IN() 子查询时出现的性能陷阱 以下文章来源:https://blog.csdn.net/defonds/article/details/4 ...
随机推荐
- mysql 经典错误解决方案 :Incorrect string value 'xE6x95x85xE4xBAx8B...' for column
1.关闭当前服务器2.删除正在使用的数据库drop database 数据库名字;3.查看字符集, SHOW VARIABLES LIKE 'character_set_%'; 把所有latin1的都 ...
- html自适应布局,@media screen,媒体查询
html自适应布局,@media screen,媒体查询 自适应代码示例: <!doctype html> <html> <head> <meta chars ...
- 如何用命令行将我的Phonegap环境更新到最新版本?
从npm安装的Phonegap(version > 3.0),更新命令如下 npm update -g phonegap 检查当前本机环境的最新版本 phonegap -v 检查npm的最新ph ...
- (匹配)Oil Skimming -- hdu --4185
链接: http://acm.hdu.edu.cn/showproblem.php?pid=4185 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- 软件工程网络15个人作业4(201521123010徐璐琳)——alpha阶段个人总结
一.个人总结 1. 总结自己的alpha 过程: 经过了两周的ALPHA阶段,在这之中学习到了很多,因为最开始其实是有抱着一种应付的.将就着的心理去做这个小程序,但是在完成项目的过程中,有老师和助教一 ...
- 结对编程--四则运算(Java)梅进鹏 欧思良
结对编程--四则运算(Java)梅进鹏 欧思良 Github项目地址:https://github.com/MeiJinpen/Arithmetic 功能要求 题目:实现一个自动生成小学四则运算题目的 ...
- Moving XML/BI Publisher Components Between Instances
As it is well known fact that XMLPublisher stores the metadata and physical files for templates and ...
- Oracle EBS 常用网站列表
http://www.lifandong.com/erp/356 Oracle EBS 常用网站列表 英文站: Oracle EBS R12 官方参考手册(User Guide, Implementa ...
- 转 UNIGUI安装教程、使用例子
转 UNIGUI安装教程.使用例子 http://my.oschina.net/u/582827/blog/203429?p={{currentPage-1}} 转 uniGui安装教程.使用例子 发 ...
- 【算法34】蓄水池抽样算法 (Reservoir Sampling Algorithm)
蓄水池抽样算法简介 蓄水池抽样算法随机算法的一种,用来从 N 个样本中随机选择 K 个样本,其中 N 非常大(以至于 N 个样本不能同时放入内存)或者 N 是一个未知数.其时间复杂度为 O(N),包含 ...