第八篇:SQL语法-DQL-数据查询语言

DQL英文全称是Data QueryLanguage(数据查询语言),用来查询数据库中表的记录

查询关键字:select

DQL主要包含以下操作,

  • 基本查询
  • 条件查询
  • 分组查询
  • 排序查询
  • 分页查询


一,基本查询

(一)查询指定字段

在select之后指定字段名,如果有多个则用逗号分隔,用于查询表中指定字段的数据

select 字段列表 from 表名;

在select之后使用【通配符*】,用于查询同一组数据中所有字段的数据

(说明:在实际项目开发中不建议使用【通配符*】的方式来查询所有字段

原因,一是不直观,二是效率不高

因此实际开发若需要查询所有字段时,最好手动罗列出所有字段)

select * from 表名;

(二)设置别名(as关键字)

在查询指定字段命令的基础上,在字段名后面添加【as 字段别名】,该选项用于让查询结果按照别名来显示对应的字段名

select 字段名1 as 字段1别名, 字段名2 as 字段2别名... from 表名;

且as关键字可以省略不写(即直接在字段名后面写上别名),不影响命令使用

select 字段名1 字段1别名, 字段名2 字段2别名... from 表名;

(三)去除重复记录(distinct关键字)

在查询指定字段命令的基础上,在select后面添加【distinct】关键字,该选项用于筛选查询结果,去除重复的数据

select distinct 字段列表 from 表名;


二,条件查询(where关键字)

在查询指定字段命令的基础上,在表名之后添加【where】关键字,该选项用于筛选满足条件的查询结果

select 字段列表 from 表名 where 条件;

条件归纳

其中,where条件是很多命令通用的,因此博主专门归纳了一篇,详见本篇->SQL语法-where关键字的条件解析-CSDN博客


 三,分组查询(group by关键字)

聚合函数

分组查询常常配合聚合函数使用,聚合函数是什么呢?

聚合函数用于对数据进行汇总和计算,可以在SELECT语句中用于对数据进行统计和分析,帮助用户快速获取关键信息,例如总计、平均值、最小值和最大值等,常用的聚合函数包含以下几种:

(注:值为NULL的数据不参与聚合函数的运算

  1. count():计算满足特定条件的行数
  2. sum():对指定列的总和进行计算
  3. avg():计算指定列的平均值
  4. max():返回指定列的最大值
  5. min():返回指定列的最小值

例如需要统计一张students表中地址为"四川"的数据的数量,可以使用命令【select count(address="四川") from students;

分组查询语法

在查询指定字段命令的基础上,使用【group by】关键字将查询结果分组,值相同的会被分到同一组,例如按性别分组,最终结果就是男性一组、女性一组

(注:<尖括号>内的内容是可选项,<having 分组后过滤条件>用来对分组后的结果进行二次筛选

执行顺序:where > 聚合函数 > having,分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义)

select 字段列表 from 表名 <where 条件> group by 指定分组字段名 <having 分组后过滤条件>;

where与having区别

  • 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤
  • 判断条件不同:where不能对聚合函数进行判断,而having可以


四,排序查询(order by关键字)

在查询指定字段命令的基础上,使用【order by】关键字对查询结果按照指定的字段来排序,其中排序方式的关键字分为两种:

  • 升序:【asc
    select 字段列表 from 表名 limit 起始索引, 一页显示记录数;

  • 降序:【desc
select 字段列表 from 表名 order by 字段名1 排序方式1, 字段名2 排序方式2;

例如需要对年龄进行升序排序,如果年龄相同再进一步按照身高排序,可以使用命令【select * from users order by age asc, height desc;】,其中age asc会先按照年龄升序排,height desc会在年龄相同的基础上按照身高降序排


五,分页查询(limit关键字)

在查询指定字段命令的基础上,使用【limit】关键字对查询结果分页显示,可以指定一页的数据的显示数量

  • 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数
  • 如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10
  • 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT
  • 个人理解:所谓的起始索引(记作n)和查询记录数(记作m),可以看成是:从第n+1条数据开始,查询m条数据,最终显示的记录数等于或小于m(最后一页记录数可能不足m)
select 字段列表 from 表名 limit 起始索引, 查询记录数;

例如需要查询第一页的数据,每页显示10条记录,可以用命令【select * from users limit 0, 10】,因为是第一页,其中的起始索引0也可以省略不写

例如需要查询第二页的数据,每页显示10条记录,可以用命令【select * from users limit 10, 10】<-对于这个例子,可以按照公式【起始索引 = (查询页码 - 1)* 每页显示记录数】计算理解,也可以理解成从【第n+1条(第11条)数据开始,查询m条(10条)数据】,那么最终显示出来的记录的索引范围就是[10, 19](闭区间),即第11条到20条数据(如果存在的话)


六,DQL-编写顺序与执行顺序

因为DQL语句存在众多关键字,因此对编写顺序的规范以及执行顺序的逻辑要求严格

(图片来源->22. 基础-SQL-DQL-执行顺序_哔哩哔哩_bilibili视频2分10秒处)


七,测试

学会一门语言语法的最快途径就是实践练习,为节省篇幅,DQL相关练习另起一篇->SQL语法-DQL-测试练习-CSDN博客

  • 101
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值