DQL数据库查询语言

目录

1.单表查询

去重查询

别名查询

查询条件

模糊查询

范围查询

in查询

排序查询

分页查询

聚合查询

分组查询

过滤分组

2.多表查询

连接查询

内连接:两张表通过主外键关系一一对应进行连接

外连接

使用连接查询的方法

子查询

涉及到的关键字

组合查询

union|union all操作符


1.单表查询

select [distinct] <字段列表> from <数据源> [where 查询条件] [group by 分组字段] 
[having 过滤条件] [order by 排序字段 desc|asc] [limit 分页条件]

去重查询

distinct:去重

别名查询

语法:字段名 as 别名;字段名 别名;

结果以别名作为了字段名。

查询条件

模糊查询

关键字:like;

表达式:'%key_';(%:一种通配符,表示任意个字符;_:表示任一字符);

语法:字段名 like 表达式

范围查询

字段名 between 条件 and 条件

in查询

条件 in (值1,值2,值3,...)

排序查询

order by 字段名1 [asc|desc], 字段名2 [asc|desc],... (asc:升序;desc:降序)

分页查询

语法:limit 分页条件;

可以被用于强制SELECT语句返回指定的记录数,limit接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是0(而不是1)。

聚合查询

字段列表不再是数据源中有的字段,而是通过聚合函数后的字段。

常用的聚合函数包括:COUNT:返回结果集中行的数目;SUM:返回结果集中所有值的总和;AVG:返回结果集中所有值的平均值;MAX:返回结果集中所有值的最大值;MIN:返回结果集中所有值的最小值。

count函数的参数可以是*,常量,或某一列:使用列名作为参数时,该列数据为null的数据不会被统计。

分组查询

语法:group by <字段1>,<字段2>,...;

将所有数据按照字段进行分组。

过滤分组

语法:having 过滤条件;

分组后再做条件筛选。

2.多表查询

连接查询

连接:多个表通过主外键关联,形成一个表来进行查询。

分类:

内连接:两张表通过主外键关系一一对应进行连接

select * from table1 inner join table2 on table1.pk=table2.fk
select * from table1 , table2 where table1.pk=table2.fk
select * from table1 join table2 on table1.pk=table2.fk

连接条件一定要写正确,如果不正确,会形成笛卡尔积(造成数据无效)。

外连接

左右表和join的位置有关,join左边的是左表,join右边的是右表。

 左外连接

select * from table1 left join table2 on table1.pk=table2.fk

以左表的数据为主,右表匹配上的数据就显示数据,没有匹配上的数据就显示null。

右外连接

select * from table1 right join table2 on table1.pk=table2.fk

以右表的数据为主,左表匹配上的数据就显示数据,没有匹配上的数据就显示null。

使用连接查询的方法

  1. 先看需要显示的字段有哪些
  2. 再看这些字段在哪些表中,确定哪些表要进行关联
  3. 如果这些表没有主外键关联,就要考虑使用一个关系表来连接这两张表
  4. 先连表,再筛选

子查询

select 列名…… from 表的表名 [where 查询条件] [group by 分组字段] having [聚合条件] [order by 排序字段 desc/asc] [limit 分页条件]

子查询是嵌入到其他的SQL语句中的select语句。当在SQL语句需要用到可变数据来进行条件表达式的运算的时候,需要采用子查询来获取这个值;需要某些临时数据作为数据源来使用的时候,也需要采用子查询(所以select语句的返回结果都是一个虚拟表,返回一个数据单元格都算)。

涉及到的关键字

all:all(子查询);获取子查询返回结果中的最大值

any:any(子查询);和子查询返回结果中的任何一个值进行比较

in:in(子查询);和子查询返回结果中的任何一个值进行匹配

in的执行顺序:首先查询子查询的表;将内表和外表做一个笛卡尔积;使用where条件进行筛选。所以相对而言,内表(子查询查的表,例子中的table2)比较小的时候,in的速度较快! 

exists:exists(子查询);判断子查询是否存在结果,如果存在,则返回true,否则返回false

exists的执行顺序:查询外表,遍历循环外表(table1);将外表的数据代入到子查询中,判断子查询返回True还是False;如果返回True,则将外表循环的数据加入到返回结果集中,否则,不加入;最后,将结果集中数据返回给用户。所以相对而言,内表(table2)比较多的时候,e×ists的速度较快!

几乎可以出现在SQL查询语句的任何地方,但一般最多出现在 select后、from后、where后。

组合查询

union|union all操作符

用于连接两个以上的select语句并将结果组合到一个结果集合中

注意事项:

  1. union是自动去重,union all不会自动去重
  2. 使用union连接的select语句的返回字段类型、数量要一致
  3. union连接的查询数不能超过6个
select语句 union [all|distinct]select语句

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值