发现了一种表连接新的写法,以前还没有这样写过或者见别人写过。跟同学聊天他们公司却很多人这样写,看来真的要学学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. IntelliJ IDEA 2017版 spring-boot使用Spring Data JPA搭建基础版的三层架构

    1.配置环境pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...

  2. pathinfo()在php不同版本中对于对多字节字符处理的不同结果

    phpinfo()函数在处理路径时,在php的低版本中无法处理多字节字符,这里测试的是php5.3和php5.6 的区别 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  3. linux上安装tomcat

    这里采用离线解压tar.gz的方式安装 下载: wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.0.33/bin/apache-tomc ...

  4. VC++ 定制应用程序的外观

    一.在窗口创建之前改变窗口的大小和标题 要改变应用程序窗口的大小可以通过在PreCreatWindowl函数中修改CREATSTRUCT结构体变量成员的值 BOOL CMainFrame::PreCr ...

  5. hdu 4981

    中位数是否大于平均数 水题 #include <cstdio> #include <cstdlib> #include <cmath> #include <c ...

  6. Oracle/PLSQL: BitAnd Function

    BITAND 函数 本文介绍 Microsoft Excel 中 BITAND 函数的公式语法和用法. 说明 返回两个数的按位“与”. 语法 BITAND( number1, number2) BIT ...

  7. System.Windows.Freezable 在未被引用的程序集中定义

    System.Windows.Freezable 在未被引用的程序集中定义 解决方法 添加windowsbase.dll 引用

  8. [翻译]NUnit---RequiresSTA and RequiresThread Attributes(十七)

    RequiresSTAAttribute (NUnit 2.5) RequiresSTA特性用于测试方法.类.程序集中指定测试应该在单线程中运行.如果父测试不在单线程中运行则会创建一个新的线程. No ...

  9. powerviot install in sharepoint 2013

    1.在app server安装powerviot for sharepoint,然后进行配置powerviot 2.powerviot配置之前需要设置security token service以及e ...

  10. 微信游戏《全民炫舞》开发公司h3d2 engine和QQ炫舞2 布料系统技术介绍

    H3D公司开发的<全民炫舞>上线了. 蝉联IOS榜首很多天. 整理了一下过去公司游戏引擎开发的历史.有兴趣可以去看看 公司游戏引擎开发历史介绍: http://www.h3d.com.cn ...