发现了一种表连接新的写法,以前还没有这样写过或者见别人写过。跟同学聊天他们公司却很多人这样写,看来真的要学学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列表中的标量子查询的更多相关文章

  1. WHERE 子句中的标量子查询

    标量子查询不仅可以用在SELECT 语句的列表中,它还可以用在WHERE 子句中,而且实际应用中子查询很多的时候都是用在WHERE子句中的. 先来看一个简单的例子,我们要检索喜欢“Story”的读者主 ...

  2. SELECT中常用的子查询操作

    MySQL中的子查询 是在MySQL中经常使用到的一个操作,不仅仅是用在DQL语句中,在DDL语句.DML语句中也都会常用到子查询. 子查询的定义: 子查询是将一个查询语句嵌套在另一个查询语句中: 在 ...

  3. 在MySQL中使用子查询和标量子查询的基本用法

    一.MySQL 子查询 子查询是将一个 SELECT 语句的查询结果作为中间结果,供另一个 SQL 语句调用.MySQL 支持 SQL 标准要求的所有子查询格式和操作,也扩展了特有的几种特性.子查询没 ...

  4. 标量子查询调优SQL

    fxnjbmhkk4pp4 select /*+ leading (wb,sb,qw) */ 'blocker('||wb.holding_session||':'||sb.username||')- ...

  5. 优化有标量子查询的SQL

    数据库环境:SQL SERVER 2008R2 今天在数据库中抓出一条比较耗费资源的SQL,只返回904条数据,居然跑了40多分钟.SQL及对应的数据量如下图: SELECT saft04.cur_y ...

  6. 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 ...

  7. SQL Server的优化器会缓存标量子查询结果集吗

    在这篇博客"ORACLE当中自定义函数性优化浅析"中,我们介绍了通过标量子查询缓存来优化函数性能: 标量子查询缓存(scalar subquery caching)会通过缓存结果减 ...

  8. [20180626]函数与标量子查询14.txt

    [20180626]函数与标量子查询14.txt --//前面看http://www.cnblogs.com/kerrycode/p/9099507.html链接,里面提到: 通俗来将,当使用标量子查 ...

  9. 警惕 MySql 更新 sql 的 WHERE 从句中的 IN() 子查询时出现的性能陷阱

    警惕 MySql 更新 sql 的 WHERE 从句中的 IN() 子查询时出现的性能陷阱 以下文章来源:https://blog.csdn.net/defonds/article/details/4 ...

随机推荐

  1. DIV+CSS 中的 overflow:hidden

    overflow:hidden这个CSS样式是大家常用到的CSS样式,但是大多数人对这个样式的理解仅仅局限于隐藏溢出,而对于清除浮动这个含义不是很了解. 一提到清除浮动,我们就会想到另外一个CSS样式 ...

  2. 13.A={1,2,3,5}和为10的问题

    题目:集合A={1,2,3,5},从中任取几个数相加等于10,并打印各得哪几个数?补充参照:http://www.cnblogs.com/tinaluo/p/5294341.html上午弄明白了幂集的 ...

  3. Linux常见配置文件

    一./etc 配置文件 /etc/passwd 用户数据库,其中的域给出了用户名.真实姓名.家目录.加密口令和用户的其他信息 /etc/group 类似/etc/passwd ,但说明的不是用户而是组 ...

  4. Codeforces758A Holiday Of Equality 2017-01-20 10:08 48人阅读 评论(0) 收藏

    A. Holiday Of Equality time limit per test 1 second memory limit per test 256 megabytes input standa ...

  5. COM是如何实现STA的

    Rather than using thread synchronization objects (mutexes, semaphores, and so forth) to control acce ...

  6. delphi 手机振动 IOS Android

    delphi 手机振动 IOS Android delphi  手机振动 IOS Android 振动 https://community.embarcadero.com/blogs/entry/ho ...

  7. java 集合stream操作

    分组 Map<Integer, List<T>> group = List.stream().collect(Collectors.groupingBy(T::getField ...

  8. .Net core 应用程序发布Web时,有些文件夹没有发布成功解决办法

    如果文件是你在项目中手动添加的, 那么在解决方案中右击文件,然后点击属性,文件属性----高级----复制到输出目录----改为始终复制/如果较新则复制 即可.

  9. Linq to SQL 参考Demo

    LINQ to SQL语句()之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句 ...

  10. SSM文件上传

    **自己对于SSM文件上传的一些心得** 刚开始的时候也是在网上寻找一些简单的案例,可能我的这篇文章不是最好的,但是这些都是我自己慢慢的摸索以及自己的尝试的一些心得,希望对各位有所帮助. 其实文件的上 ...