【MySQL基础|第三篇】--- 详谈SQL中的DQL语句

个人主页:兜里有颗棉花糖

欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创

收录于专栏【MySQL学习专栏】🎈

本专栏旨在分享学习MySQL的一点学习心得,欢迎大家在评论区讨论💌

前言

DQL(Data Query Language)数据库查询语言 ,用来查询数据库表中的记录。查询关键字是Select

DQL语法如下:

sql 复制代码
基本查询
条件查询(WHERE)
聚合函数(count、max、min、avg、sum)
分组查询(GROUP BY)
排序查询(ORDER BY)
分页查询(LIMIT)

目录

一、基本查询

DQL基本查询语法格式如下:

1.查询多个字段

语法一:SELECT 字段1,字段2,字段3...... FROM 表名;

语法二:SELETE * FROM 表名;
2.设置别名(设置别名时AS可以省略)

语法:SELECT 字段1[AS别名1],AS[别名2]...FROM 表名;

比如:select worknum as '工作号' from 表名;(这里as是可以省略的)
3.去除重复记录:

语法:SELECT DISTINCT 字段列表 FROM 表名;

比如:select distinct workaddress '工作地点' from 表名;

二、条件查询(WHERE)

DQL条件查询的用法如下:

语法:SELECT 字段列表 FROM 表名 WHERE 条件列表;

举例1:从表中查询年龄不等于18的人。

写法1:select * from 表名 where age!=18;

写法2:select * from 表名 where age <> 18
举例2:从表中查询年龄在18到21之间的人。

写法1:select * from 表名 where age >= 18 && age <= 21;

写法2:select * from 表名 where age >= 18 and age <= 21;

写法3:select * from 表名 where age between 18 and 21;
举例3:从表中查询性别为男且年龄小于21的人。

写法1:select * from 表名 where gender = '男' and age < 21;
示例4:从表中查询年龄为18或者21或者23的人。

写法1:select * from 表名 where age in(18,21,23);

写法2:select * from 表名 where age = 18 or age = 21 or age = 23;
示例5:从表中查询姓名为5个字的人。

写法1:select * from 表名 where name like '__';
示例6:从表中查询身份证号最后一位是X的人。

写法1:select * from 表名 where idcard like '%X';

写法2:select * from 表名 where idcard like '15个下划线X';

三、聚合函数

聚合函数是将一列数据作为一个整体来进行纵向计算。

常见的聚合函数如下:

函数 功能
count 统计数量
max 最大值
min 最小值
avg 平均值
sum 求和

注意:所有的null值是不参与聚合函数的运算的。

聚合函数用法如下:

命令:SELECT 聚合函数(字段列表) from 表名;

举例1:统计表中的总人数。

写法1:select count(name) from 表名;

写法2:select count(*) from 表名;
举例2:统计表中的平均年龄。

写法1:select avg(age) from 表名;
举例3:统计表中年龄最大的人。

写法1:select max(age) from 表名;
举例4:统计表中北京地区人物年龄之和。

写法1:select sum(age) from 表名 where workaddress = '北京';

四、分组查询(GROUP BY)

DQL分组查询语法:SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];

下表是where和having的区别:

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

举例1:根据性别进行分组,统计男生和女生的数量。

写法1:select gender,count(*) from 表名 group by gender;
举例2:根据性别进行分组,统计男生和女生的平均年龄。

写法1:select gender,avg(age) from 表名 group by gender;
举例3:查询年龄小于45的员工,并根据工作地址进行分组,获取员工数量大于等于2的工作地址。

写法1:select workaddress,count(*) from 表名 where age < 45 group by workaddress having count(*) >= 2;
这里如果想要给count(*)取一个别名address_count的话,可以这样写select workaddress,count(*) address_count from 表名 where age < 45 group by workaddress having address_count >= 2;

分组查询注意事项如下:

  • 执行顺序:where(在分组之前进行过滤) > 聚合函数(在分组时执行) > having(分组聚合之后进行过滤)
  • 分组之后查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。(比如例1中的select gender,count(*) from 表名 group by gender;其中count(*)就是聚合函数,gender为分组字段,如果此时在查询其它字段将没有任何意义

五、排序查询(ORDER BY)

DQL-排序查询的语法SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2,...;

排序方式如下:

  • ASC:升序(默认方式)
  • DESC:降序

注意,如果是多字段排序,当第一个字段相同时,才会根据第二个字段进行排序。

举例1:根据年龄对表中的人员进行升序排序。

写法1:select * from 表名 order by age asc;
举例2:根据年龄对表中的人员进行升序排序,如果年龄相同,再对其按照入职时间进行降序排序。

写法1:select * from 表名 order by age asc,entrydate desc;

六、分页查询(LIMIT BY)

分页查询语法:SELECT 字段列表 FROM 表名 LIMIT 起始索引,每页查询记录数;

这里我们需要注意以下三点:

  • 起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数
  • 分页查询是数据库的方言,不同的数据库会有不同的体现。
  • 如果查询的是第一页数据,起始索引是可以省略的,直接简写为limit 10

举例1:查询第一页人员数据,每页展示10条记录。

写法1:select * from 表名 limit 0,10;

写法2:select * from 表名 limit 10;
举例2:查询第2页人员数据,每页展示10条记录。

写法1:select * from 表名 limit 10,10;

好了,以上就是SQL中DQL语句的全部内容,这到这里吧,再见啦友友们!!!

相关推荐
NCIN EXPE1 小时前
redis 使用
数据库·redis·缓存
MongoDB 数据平台1 小时前
为编码代理引入 MongoDB 代理技能和插件
数据库·mongodb
极客on之路1 小时前
mysql explain type 各个字段解释
数据库·mysql
代码雕刻家2 小时前
MySQL与SQL Server的基本指令
数据库·mysql·sqlserver
lThE ANDE2 小时前
开启mysql的binlog日志
数据库·mysql
yejqvow122 小时前
CSS如何控制placeholder文字的颜色_使用--placeholder伪元素
jvm·数据库·python
oLLI PILO2 小时前
nacos2.3.0 接入pgsql或其他数据库
数据库
m0_743623922 小时前
HTML怎么创建多语言切换器_HTML语言选择下拉结构【指南】
jvm·数据库·python
pele2 小时前
Angular 表单中基于下拉选择动态启用字段必填校验的完整实现
jvm·数据库·python