SqlServer系列笔记――子查询
子查询意思: 将一个查询语句做为一个结果集供其他SQL语句使用,就像使用普通的表一样, 被当作结果集的查询语句被称为子查询 所有可以使用表的地方几乎都可以使用子查询来代替。 关键子 IN? exists Not Exists 子查询返回true 或 false? SELECT * FROM(SELECT * FROM T2 where FAge<30)? 子查询和连接查询的比较 ? ? ? ?有些问题使用子查询解决会更简单,有些问题使用连接查询可以变得简单, 因此要根据实际情况进行选择。 当需要频繁地计算统计函数的值并将其作为外部查询的条件时, 应该使用子查询。 单值做为子查询:SELECT 1 AS f1,2,(SELECT MIN(FYearPublished) FROM T_Book),(SELECT MAX(FYearPublished) ?FROM T_Book) AS f4 只有返回且仅返回一行、一列数据的子查询才能当成单值子查询。 下面的是错误的: SELECT * FROM T_ReaderFavorite WHERE FCategoryId=(SELECT FId FROM T_Category WHERE FName='Story') 如果子查询是多行单列的子查询,这样的子查询的结果集其实是一个集合。 SELECT * FROM T_Reader? WHERE FYearOfJoin IN ( select FYearPublished FROM T_Book ) 用 in实现select * from Person p where p.PersonID in(select PersonID from Person where LastName like 'A%') 用exists 实现 select * from Person p where ?exists (select PersonID from Person ?where LastName like 'A%' and Person.PersonID=p.PersonID ) EXISTS与IN的使用效率的问题,通常情况下采用exists要比in效率高,因为IN不走索引,但要看实际情况具体使用: IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |