SQL基础 -DQL 数据查询语言(下)

一、子查询

1.含义:出现在其他语句内部的select语句,称为子查询或内查询。内部嵌套其他select语句的查询,称为外查询或主查询。

select 字段1 
from 表 
where 字段2 in (
select 字段2 from 表
where 字段3);

2.分类

按子查询出现的位置:

select后面:仅支持标量子查询
from后面:支持表子查询
where或having后面:标量子查询、列子查询、行子查询
exists后面(相关子查询):表子查询

按结果集的行列数不同:

标量子查询(结果集只有一行一列)
列子查询(结果集只有一列多行)
行子查询(结果集只有一行多列)
表子查询(结果集一般为多行多列)

3.where或having后面

特点:

①子查询放在小括号内
②子查询一般放在条件的右侧
③标量子查询,一般搭配着单行操作符使用。> < >= <= = <>
④列子查询,一般搭配着多行操作符的使用 in、any/some、all
⑤子查询的执行优先于主查询的执行。

3.1 标量子查询

select 字段
form 表
where 字段条件(
    select 字段
    from 表
    where 条件
);

例如:

3.2 列子查询(多行子查询)

select 【distinct】字段
from 表
where 字段 多行操作符(
    select 【distinct】 字段
    from 表
    where 字段条件
);

4.select后面

标量子查询

select 表1.字段,(
    select 字段
    from 表2
    where 表1.字段 = 表2.字段
)
from 表1

4.from 后面

将子查询结果充当一张表,要求必须起别名

select 别名1.字段1,别名2.字段2
from(
    select 字段【函数】 别名3,字段
    from 表1
    【group by 字段】
) 别名1
inner join 字段3
on 别名1.别名3 【between 字段4 and 字段5】;

5.exists 后面

语法:

select exists(完整的查询语句);

结果:0或者1

二、分页查询

应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求

语法:

select 查询列表
from 表
【join type join 表2 
on 连接条件
where 筛选条件
group by 分组字段
having 分组后的筛选
order by 排序的字段】
limit offset,size;

offset 要显示条目的起始索引(起始索引从0开始)

size 要显示的条目个数

特点:limit语句放在查询语句的最后,执行也在最后

公式:limit (page-1)*size,size;

三、联合查询

union 联合 合并:将多条查询语句的结果合并成一个结果

语法:
查询语句1
union
查询语句2
union
...

特点:

1.要求多条查询语句的查询列数是一致的!
2.要求多条查询语句的查询的每一列的类型和顺序最好一致
3.union关键字默认去重,如果使用 union all 可以包含重复项。

应用场景:要查询的结果来自与多个表,且多个表没有直接的连接关系,但查询的信息一致时

案例:

posted @ 2020-03-23 20:56  旭东东  阅读(189)  评论(0编辑  收藏  举报