【SQL】sql从0到1——第【4】章:子查询、分页查询、联合查询

第四章子查询、分页查询、联合查询

一、子查询

  子查询(内查询):出现在其他语句中的select语句
  主查询(外查询):外部的查询语句

1.子查询可出现的位置:
  ① Select 后面:仅支持标量子查询(结果集只有一行一列)
  ② From后面:支持表子查询(结果集一般为多行多列)
  ③ Where后面:支持标量子查询、列子查询(结果集只有一列多行)、行子查询(结果集有一行多列)
  ④ Having后面:同where
  ⑤ Exists后面 :支持表子查询

2.子查询应用在Where或having后面

  特点:
     子查询放在小括号内
     子查询一般放在条件的右侧
     标量子查询,一般搭配着单行操作符(><=<>)使用;列子查询一般搭配着多行操作符(in、any、some、all)使用

① 标量子查询

  例:
    Select min(salary)
    From employee
    Group by department
    Having salary>(
           Select min(salary)
           From employee
           Where department_id=50);
② 列子查询

  多行操作符:in/not in:等于列表中的任意一个
         Any/some :和子查询返回的某一个值比较
         All :和子查询返回的所有值比较
  例:
     Select last_name
     From employee
     Where department_id in (
     Select department_id
     From employee
     Where location_id in (1400,1700));

③ 行子查询

  要求所有筛选条件使用相同的符号,如都用=、>
  例:
      Select *
      From employee
     Where (employ_id,salary)=(
                        Select min(employ_id),max(salary)
                        From employee) ;

3.子查询应用在select后面

  例:
      Select department.,(
      Select count(
)
      From employee
     Where employee.department_id=department.department_id)
     From department ;

4.子查询应用在from后面

  将子查询结果充当一张表时,必须起别名
  例:
     Select agdep.*,g.grade_level
     From (
     Select avg(salary) ag,department_id
     From employee
     Group by department_id) ag_dep
      Inner join job_grades as j
     On ag_dep.ag between lowest_sal and highest_sal;

5.子查询应用在exits后面:相关子查询

 Exits(完整的查询语句)结果为1或0
 先查询外查询,再根据子查询结果过滤

   例:
      Select department_id
     From departments as d
     Where exits(
              Select *
              From employees e
              Where d. department_id=e. department_id);

二、分页查询

  当要显示的数据一页显示不全,需要分页提交SQL请求
   基本语法:
         Select 查询列表
         From 表
        Where 筛选条件
         Order by排序
         Limit offset,size
   Offset 表示要显示条目的起始索引(注意:这里索引从0开始)
   Size 表示要显示的条目个数

    Limit语句放在查询语句最后,其执行和语法都是最后
   分页查询的公式:
           要显示的页数page,每页的条目数size
           Select 查询列表
           From表
           Limit(page-1)*size,size

  例:
    Select *
    From employee
    Limit 10,15;

三 、联合查询

  将多条查询语句的结果合并为一个结果,适用于要查询的结果来自于多个表,且多个表没有直接的连接关系,但查询的信息一致的情景。
  特点:
     要求多条查询语句的查询列数一致
     要求多条查询语句的每一列的类型和顺序最好一致
     Union关键字默认去重,使用union all 可以保留重复项
  基本语法:
      查询语句1
       Union
      查询语句2
       Union
       ……
  例:
     Select *
     From employee
     Where email like ‘%a%’
    Union
     Select *
     From employee
    Where department_id>90;

猜你喜欢

转载自blog.csdn.net/m0_46568930/article/details/113200343