数据库:SQL分类之DQL详解

1.DQL语法

select

字段列表

from

表名列表

where

条件列表

group by

分组字段列表

having

分组后条件列表

order by

排序字段列表

limit

分页参数
基本查询

条件查询(where)

聚合函数(count、max、min、avg、sum )

分组查询(group by)

排序查询(order by)

分页查询 (limit)

2.基础查询

1.查询指定字段

select 字段1,字段2,字段3 from 表名;

例:

select name,workno,age from employee;
2.查询所有字段返回

select 字段1,字段2,字段3 from 表名;

select * from 表名;

例:

select id,workno,name,gender,age,idcard,workaddress,entrydate from employee;

select * from employee;
3.设置别名

select 字段 as 别名 from 表名;

例:

select workaddress as '工作地址' from employee;

select workaddress as  from employee;
4.去除重复记录

select distinct 字段列表 from 表名;

例:

select distinct workaddress '工作地址' from employee;


select distinct workaddress from employee;

3.条件查询

1.语法

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

2.条件

|--------------------|-----------------------|
| 比较运算符 | 功能 |
| > | 大于 |
| >= | 大于等于 |
| < | 小于 |
| <= | 小于等于 |
| = | 等于 |
| <> 或 != | 不等于 |
| between ... and .. | 在某个范围之内(含最小、最大值) |
| in(...) | 在 in 之后的列表中的值,多选一 |
| like 占位符 | 模糊匹配(_匹配单个字符,%匹配任意字符) |
| is NULL | 是 NULL |

|------------|----------------|
| 逻辑运算符 | 功能 |
| and 或 && | 并且(多个条件同时成立) |
| OR 或 || | 或者(多个条件任意一个成立) |
| NOT 或 ! | 非、不是 |

例:

select *  from employee where age = 88;

select * from employee where age <30;

select * from employee where idcard is NULL;

select * from employee where idcard is not null;

select * from employee where age != 88;

select *from employee  where age in(19,20,21);

//查找名字是两个字的员工
select *from employee where name like '__';//注意这里面是两个下划线

//查找身份证最后一位是X的员工
select *from employee where idcard like '%X';
select *from employee where idcard like '_________________X';// 17个下划线

4.聚合函数

1.聚合函数:将一列数据作为一个整体,进行纵向计算。

|-------|------|
| 函数 | 功能 |
| count | 统计数量 |
| max | 最大值 |
| min | 最小值 |
| sum | 求和 |
| avg | 平均值 |
[常见的聚合函数]

2.语法:

select 聚合函数 (字段列表) from 表名;

例:

select count(*) from employee;

select count(id) from employee;

select * from employee where workaddress = '西安';

select sum(age) from employee where workaddress = '西安';

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

5.分组查询

1.语法

select 字段列表 from 表名 (where 条件)group by 分组字段名 (having 分组后过滤条件)

注意:

  • 执行顺序:where > 聚合函数 > having
  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
2.where 和 having 的区别
  1. 执行时间不同:where 是分组之前进行过滤,不满足 where 条件,不参与分组;而 having 是分组之后对结果进行过滤。
  2. 判断条件不同:where 不能对聚合函数进行判断,而 having 可以。

例:

//查询性别分组,统计男性员工 和 女性员工 的数量
select gender,count(*) from employee group by gender;

//根据性别分组,统计男性员工 和 女性员工 的平均年龄
select gender,avg(age) from employee group by gender;

//查询员工年龄小于30,并根据工作地址分组
select workaddress,count(*) from employee where age < 30 group by workaddress ;

//查询员工年龄小于30,并根据工作地址分组,获取员工数量大于等于2的工作地址

select workaddress,count(*) from employee where age < 30 group by workaddress having count(*) >= 2;

6.排序查询

1.语法

select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;

例:

//年龄升序排序
select * from employee order by age asc;

//年龄进行倒序
select * from employee order by age desc;

//先按照年龄升序排序,再根据入职时间降序
select * from employee order by age asc, entrydate desc;

7.分页查询

1.语法

select 字段列表 from 表名 limit 起始索引,查询记录数;

注意 :

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

例:

//查询第一页员工数据,每页展示10条记录
select * from employee limit 0,10;

//查询第二页员工数据,每页展示10条数据
select *from employee limit 10,10;

8.执行顺序

9.课后训练

为了对大家的知识进行巩固,我准备了下面一些例题,大家可以试试看。稍后我会把答案放置评论区。

1.查询年龄为20,21,24的女性员工信息

2.查询性别为男,并且年龄在25-29(含)岁以内的姓名为三个字的员工

3.年龄小于60岁,男性员工和女性员工的人数

4.查询年龄小于等于35岁的员工姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同,按入职时间降序排序

5.性别为男,且年龄在23-25之间的前5个员工的信息,并对查询结果按年龄升序排序,如果年龄相同,按入职时间降序排序

本节知识讲解就到此结束啦,下期再见!

相关推荐
LightOfNight1 小时前
Redis设计与实现第14章 -- 服务器 总结(命令执行器 serverCron函数 初始化)
服务器·数据库·redis·分布式·后端·缓存·中间件
代码中の快捷键1 小时前
MySQL数据库存储引擎的数据结构
数据结构·数据库·mysql
Adolf_19931 小时前
Django 路由层
数据库
好记忆不如烂笔头abc1 小时前
logminer挖掘日志归档查找问题
数据库·sql·mysql
Yz98769 小时前
Hive的基础函数-日期函数
大数据·数据仓库·hive·hadoop·sql·数据库架构·big data
java_heartLake9 小时前
PostgreSQL数据库参数调优实践
数据库·postgresql·调优
xnuscd10 小时前
Milvus概念
数据库·学习·mysql
代码欢乐豆11 小时前
软件工程第13章小测
服务器·前端·数据库·软件工程
小gpt&12 小时前
实现qt拖拽显示或者播放
数据库·qt·音视频
望获linux12 小时前
在 ARM 平台上如何实现Linux系统的1秒启动
linux·服务器·开发语言·数据库·操作系统·嵌入式操作系统·arm平台