【MySQL基础】04数据查询语言DQL(上)

目录

一、数据查询语言DQL:用于查询数据库表中的记录。

二、运算符

三、select语句书写顺序与执行顺序

四、单表查询


一、数据查询语言DQL:用于查询数据库表中的记录。

二、运算符

【注意】

  • Between … and …:是包括两端值

三、select语句书写顺序与执行顺序

1、select语句书写顺序:

select -> from -> [left | right | inner] join ->on -> where -> group by -> having -> order by -> limit 

【select和from是一定要写的,其他关键词根据实际需求写】

2、单表查询执行顺序:

From -> where -> group by -> having -> select -> order by ->limit 

【例】

  • Select deptno部门, avg(sal) 平均工资from emp group by deptno having平均工资>3000;

(在mysql软件中,having可以使用select命的新名,而其他软件则不可以。)

  • Select hour(paytime_new) 时间段, sum(otherpay) 时间段销售额, sum(sum(otherpay)) over(order by hour(paytime_new)) 累计销售额 from orderinfo group by hour(paytime_new) order by hour(paytime_new); 
  • Select distinct hour(paytime_new) 时间段, sum(otherpay) over(partition by hour(paytime_new) order by hour(paytime_new)) 累计销售额 from orderinfo order by hour(paytime_new); 

(这两者返回回来的累计销售额值是一样的,他们的区别在于执行顺序不同,第一种写法先执行from-->groupby分组后再执行 select中的函数,所以要实现求分组后的累计和就需要sum()里嵌套一个分组后的求和值,如果在over()里加partitionby分组也是无法实现,因为over是根据原表行进行计算,而不是根据groupby后的行进行计算。

3、多表查询执行顺序:

From -> on ->[left | right | inner] join -> where -> select 

四、单表查询

【from】

1、全表查询:select * from 表名; 

2、查询指定列:select 字段1[,字段2,…] from 表名; 

【备注】别名的设置:select 字段名[ as] 列别名 from 原表名 [as ]表别名; 

3、查询不重复的记录:select distinct 字段名 from 表名; 

【where】

4、条件查询:select 字段1[,字段2,…] from 表名 where 查询条件; 

5、空值查询:select 字段1[,字段2,…] from 表名 where 空值字段 is[ not] null; 

6、模糊查询: select 字段1[,字段2,…] from 表名 where 字符串字段[ not] like 通配符; 

【注意】

  • 百分号(%)通配符:匹配多个字符(0或多个字符)
  • 下划线(_)通配符:匹配一个字符

【order by】

7、查询结果排序:select 字段1[,字段2,…] from 表名 order by 字段1[ 排序方向,字段2 排序方向,…]; 

【注意】多字段排序时,先按第一个字段排序,第一个字段值相同时再按第二个字段排序。指定排序方向:asc升序,desc降序(没有指定排序方向时,默认是asc升序) 

【limit】

8、限制查询结果数量:select 字段1[,字段2,…] from 表名 limit [偏移量,] 行数; 

【注意】

  • limit接受一个或两个数字参数,参数必须是一个整数常量。
  • 第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。如果只给定一个参数,默认偏移量为0,这参数表示返回最大的记录行数目。
  • 偏移量:是相对于第一行来说,目标行位于第几行减1。

【group by】

9、分组查询:select 字段1[,字段2,…] from 表名[ where 查询条件] group by 分组字段1[,分组字段2,…]; 

【注意】

  • 将查询结果按照一个或多个字段进行分组,字段值相同的为一组,对每个组进行聚合计算。
  • Group by 还有一个作用就是去重,效率和distinct差不多,写了group by就不用写distinct避免重复操作降低效率。
  • 注意用group by时,select后跟多少个字段(除聚合函数外)group by后面也要跟相同的字段。
  • 和group by 分组统计作用相同的,还有开窗函数,将会在函数章节详细说明。

【having】

10、分组后筛选:select 字段1[,字段2,…] from 表名[ where 查询条件][ group by 分组字段1[,分组字段2,…]] having 筛选条件; 

【注意】where与having的区别:

  • where子句作用于表,having子句作用于组。 
  • where条件查询的作用域是针对数据表进行筛选,而having条件查询则是对分组结果进行过滤
  • where在分组和聚合计算之前筛选行,而having 在分组和聚合之后筛选分组的行,因此where子句不能包含聚合函数,而having可以。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值