• 多测师课堂009_mysql之子查询(005)高级讲师肖sir


    子查询:
    什么是子查询?一个查询嵌套另一个查询 子查询分
    1. 标量子查询 (返回一个值)
    标量子查询 把一个sql执行返回的一个值,作为另一个sql的一个条件
    得到的结果是一行一列,一般出现在where之后

    注意点:标量子查询允许使用的符号
    =,!=,> ,>=,=<,<

    举例1:查询财务部门所有员工信息
    select * from emp where dept2=(select dept1 from dept where dept_name="财务" ) ;

    举例2:查询张三所在的部门

    select dept_name  from dept  where dept1=(select dept2 from  emp where  ame="张三"  )

    2. 列子查询 (返回一个列)
    定义:返回的是一列值

    注意点:通常在where 条件的后使用,使用的是in 或not in ,不允许使用=,>,<
    例题:
    求出工资>2000部门

    举例1:

    select DISTINCT(dept2) from emp where incoming >5000 ;

    select dept_name from dept where dept1 in (select DISTINCT(dept2) from emp where incoming >5000 )

    3. 行子查询 (返回一行多列)
    指子查询返回的结果集是一行多列
    一般出现在where后

    举例1:查询和刘十,年龄和工资一样的数据

    select age ,dept2,incoming from emp1 where name="牛十
    select * from emp1 where (age,dept2) =any (select age ,dept2 from emp1 where name="牛十");

    举例二:查询和刘十,年龄和工资一样的数据

    select  age, incoming from emp where name="刘十"
    select  *  from  emp  where (age ,incoming)=( select  age, incoming from emp where name="刘十")

    4. 表子查询 (返回一个表) from的后面指子查询返回的结果是一个表(多行多列)

    举例1: 查询每个部门最高工资的部门名称

    select dept2,max(incoming) from emp group by dept2

    select dept_name ,s.c from dept ,( select dept2,max(incoming) c from emp group by dept2) s where dept.dept1=s.dept2 ;

    select DISTINCT(dept_name) from dept inner join (select dept2,age from emp where dept2=101 )as s on dept.dept1=s.dept2 ;

    举例2:查询出匹配的部门名称,年龄和工资和刘十一样,

    select  dept_name  from  dept ,( select  *  from  emp  where (age ,incoming) =any( select  age, incoming from emp where name="刘十")) s where  dept1=s.dept2 ;

    注意:临时表 取别名 ,聚合函数取别名 ,

    1、带in关键字的子查询

    一个查询预计的条件可能落在另一select语句的查询结果中

    2、比较运算符的子查询

    = ,> ,>,>= ,=<
    3、带any关键字的子查询(拓展知识)
    =any 与 in 等效
    与比较运算符联合使用,表示子查询返回的任何值比较为真,则返回真


    4、some(拓展知识)(拓展知识)

    5、带all的关键字的字查询 
    !=all 或者 <>all 与 not in 等效
    表示满足所有的条件

    6、带exists 关键字的子查询  (拓展知识)
    理解为:将主查询的数据,放到子查询中做条件验证,根据验证结果,来决定主查询的是数据结构
    在子查询到记录,则进行外层查询,否则,不执行外层查询
    7、合并查询 union 去除重复的记录

    union all 不会去除重复的记录


    注意:
    1、子查询必须放在一对小括号内;
    2、“=”是比较运算符,还可以与其他比较运算符一起使用,要求子查询的列只有一个一行一列
    3、子查询通常作为where的条件,表子查询一般在from的后面
    4、子查询不能包含order by的语句

    select a.dept1 from (select * from dept where dept_name="财务" or dept_name="销售")a where dept1>101;

    select DISTINCT(dept_name) from dept inner join (select dept2,age from emp where dept2=101 )as s on dept.dept1=s.dept2 ;

  • 相关阅读:
    Android开发需要注意的地方
    Android开发 --微信支付开发(转载!)(开发工具:Eclipse)
    Android开发---支付宝功能接口(支付功能)(转载!)
    Android开发--推送
    ASP.NET如何发布更新
    如何用visual studio控件(repeater)绑定数据库(SQL server)信息并显示
    SQL Server 的远程连接(转载)
    设置如何自动备份数据库并删除2周前的自动备份数据
    如何禁止网页内容被复制以及如何解除禁止(转载并更新!)
    条码生成
  • 原文地址:https://www.cnblogs.com/xiaolehua/p/13998972.html
Copyright © 2020-2023  润新知