10. 子查询

        子查询就是在查询语句中嵌套另一个查询,子查询支持多层嵌套。

子查询出现位置:

  • form语句后当成数据表(实质是一个临时视图,so这种方法也被称为内视图);
  • where条件后作为过滤条件的值。

Note:

  • 子查询要用括号括起来;
  • 把子查询作为数据表时(出现在from后),可为其起别名,作为前缀来限定数据列时,必须起别名【临时视图】。
  • 作为过滤条件where时,将子查询放在比较运算符的右边,可增强查询的可读性;
  • 作为过滤条件where时,单行子查询使用单行运算符,多行子查询使用多行运算符;
  • 作为过滤条件where,如果子查询返回单行或单列值,则被当成一个标量值使用,即可使用单行记录比较符。
  • ①若子查询返回多个值,则需要使用in、any、all等关键字。
  • ②in可单独使用,效果同比较运算符的in,子查询返回的多个值将被当成一个值列表。
  • ③any、all可与>、>=、<、<=、<>、=等运算符结合使用。与any(all)结合表示大于其中任意一个值(所有值)。
  • ④=any 与 in 的作用相同。
  • 作为where条件时,若子查询返回多行多列,则where应该有对应的数据列,并用圆括号将其组合起来。

# 子查询

#

# 作为数据表(临时视图)

SELECT *

FROM (SELECT * FROM student) s

WHERE  s.id =6;

 

# 作为where条件,若子查询返回单行或单列值,则被当成一个标量值使用

SELECT *

FROM student

WHERE

     grade >(

         # 此子查询返回单行数据

         SELECT math

         FROM  grades

         WHERE id =1

     );

 

# 若子查询返回多个值,则需要使用in、any、all等关键字

SELECT *

FROM student

WHERE

     id IN(

         # in可单独使用,效果同比较运算符的in,子查询返回的多个值将被当成一个值列表。

         SELECT id

         FROM  grades

         WHERE id =5  OR id =6

     );

 

# =any

SELECT *

FROM student

WHERE

     # =any等价于in

     id =ANY(SELECT id FROM grades);

 

# >=all

SELECT *

FROM  student

WHERE

     id >=ALL(SELECT id FROM grades);

 

# 子查询返回多行多列,则where应该有对应的数据列,并用圆括号将其组合起来。

SELECT  s.*

FROM student
s

WHERE # 组合内的字段均须对应相等

     (id, grade)=ANY(SELECT id, math FROM grades
g);

时间: 2024-09-20 00:59:39

10. 子查询的相关文章

Oracle常用sql语句(三)之子查询

子查询 子查询要解决的问题,不能一步求解 分为: - 单行子查询 - 多行子查询 语法: SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table); 子查询(内查询)在住查询之前一次执行完成 子查询的记过被主查询使用(外查询) 注意: 1.括号 2.合理的书写风格 3.可以在住查询的 WHERE SELECT HAVING FROM 后面使用子查询 4.不可以在GROUP BY 后面使用 5

PostgreSQL 10.0 preview 多核并行增强 - 索引扫描、子查询、VACUUM、fdw/csp钩子

标签 PostgreSQL , 10.0 , 并行计算 , 索引扫描 , 子查询 , VACUUM , 外部表并行 背景 PostgreSQL 9.6推出的多核并行计算特性,支持全表扫描,hash join,聚合操作. 10.0 在此基础上,增加了更多的支持. 1. Parallel bitmap heap scan 2. Parallel Index Scans 3. Parallel Merge Join 4. parallelize queries containing subplans

SQL点滴10—使用with语句来写一个稍微复杂sql语句,附加和子查询的性能对比

原文:SQL点滴10-使用with语句来写一个稍微复杂sql语句,附加和子查询的性能对比  今天偶尔看到sql中也有with关键字,好歹也写了几年的sql语句,居然第一次接触,无知啊.看了一位博主的文章,自己添加了一些内容,做了简单的总结,这个语句还是第一次见到,学习了.我从简单到复杂地写,希望高手们不要见笑.下面的sql语句设计到三个表,表的内容我用txt文件复制进去,这里不妨使用上一个随笔介绍的建立端到端的package的方法将这些表导入到数据库中,具体的就不说了. 从这里下载文件emplo

sql子查询中列别名在主查询中无效

问题描述 sql子查询中列别名在主查询中无效 CREATE PROCEDURE dbo.query_test( @i_begin_time varchar(128) IN, /* 开始时间 / @i_end_time varchar(128) IN, / 结束时间 / @i_bussiness_tpe varchar(512) IN, / 类型 ) as declare @v_sql varchar(16384)/* 定义 需要执行的sql / declare @Rtime varchar(12

妙用SQL Server聚合函数和子查询迭代求和

先看看下面的表和其中的数据: t_product 图1 该表有两个字段:xh和price, 其中xh是主索引字段,现在要得到如下的查询结果: 图2 从上面的查询结果可以看出,totalprice字段值的规则是从第1条记录到当前记录的price之和.如第3条记录的totalprice字段的值是10 + 25 + 36 = 71. 现在要通过t_product表中的数据生成图2所示的查询结果.可能会有很多读者想到使用循环和游标,不过这种方式效率并不高,尤其在记录非常多的情况. 从图2的查询结果分析可

Oracle数据库入门之多表连接与子查询

Oracle表连接 概述:SQL/Oracle使用表连接从多个表中查询数据 格式:select 字段列表 from table1,table2 where table1.column1=table2.column2; 说明:当被连接的多个表中存在同名字段时,必须在该字段前加上"table."作为前缀 如果没有限定where连接条件,否则就会出现笛卡尔集的不现实或没有实用意义的结果 举例:select empno, ename, sal, emp.deptno, dname, loc f

SQL子查询实例

  SQL子查询实例介绍: 子查询是在一个查询内的查询.子查询的结果被DBMS使用来决定包含这个子查询的高级查询的结果.在子查询的最简单的形式中,子查询呈现在另一条SQL语句的WHERE或HAVING子局内. 列出其销售目标超过各个销售人员定额综合的销售点. SELECT CITY FROM OFFICES WHERE TARGET > (SELECT SUM(QUOTA) FROM SALESREPS WHERE REP_OFFICES = OFFICE) SQL子查询一般作为WHERE子句或

mysql子查询慢的问题

  当你在用explain工具查看sql语句的执行计划时,若select_type 字段中出现"DEPENDENT SUBQUERY"时,你要注意了,你已经掉入了mysql子查询慢的"坑"...下面我们来看一个具体的例子 有这样一条查询语句: SELECT gid,COUNT(id) as count FROM shop_goods g1 WHERE status =0 and gid IN (SELECT gid FROM shop_goods g2 WHERE

mysql的查询、子查询及连接查询

一.mysql查询的五种子句         where(条件查询).having(筛选).group by(分组).order by(排序).limit(限制结果数)           1.where常用运算符:             比较运算符                 > ,  < ,=  , != (< >),>=   ,   <=                   in(v1,v2..vn)                   between v1