DQL(数据查询)

目录

[1. DQL概念](#1. DQL概念)

[2. DQL - 编写顺序](#2. DQL - 编写顺序)

[3. 基础查询](#3. 基础查询)

[3.1 查询多个字段](#3.1 查询多个字段)

[3.2 字段设置别名](#3.2 字段设置别名)

[3.3 去除重复记录](#3.3 去除重复记录)

[3.4 案例](#3.4 案例)

[4. 条件查询](#4. 条件查询)

[4.1 语法](#4.1 语法)

[4.2 条件](#4.2 条件)

[4.3 案例:](#4.3 案例:)

[5. 聚合函数](#5. 聚合函数)

[5.1 常见的聚合函数:](#5.1 常见的聚合函数:)

[5.2 语法](#5.2 语法)

[5.3 案例:](#5.3 案例:)

[6. 分组查询](#6. 分组查询)

[6.1 语法](#6.1 语法)

[6.2 案例](#6.2 案例)

[7. 排序查询](#7. 排序查询)

[7.1 语法](#7.1 语法)

[7.2 排序方式](#7.2 排序方式)

[7.3 案例](#7.3 案例)

[8. 分页查询](#8. 分页查询)

[8.1 语法](#8.1 语法)

[8.2 案例](#8.2 案例)

[9. 执行顺序](#9. 执行顺序)

1. DQL概念

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

查询关键字: select

在一个正常的业务系统中,查询操作的频次是要远高于增删改的,当我们去访问企业官网、电商网站,在这些网站中我们所看到的数据,实际都是需要从数据库中查询并展示的。而且在查询的过程中,可能还会涉及到条件、排序、分页等操作。

2. DQL - 编写顺序

  1. select 字段列表

  2. from 表名列表

  3. where 条件列表

  4. group BY 分组字段列表

  5. having 分组后条件列表

  6. order BY 排序字段列表

  7. limit 分页参数

3. 基础查询

在基本查询的DQL语句中,不带任何的查询条件,查询的语法如下:

3.1 查询多个字段
  • select 字段1, 字段2, 字段3 ... from 表名 ;
  • select * from 表名 ;

注意 : * 号代表查询所有字段,在实际开发中尽量少用(不直观、影响效率)。

3.2 字段设置别名
  • select 字段1 [ as 别名1 ] , 字段2 [ as 别名2 ] ... from 表名;
  • select 字段1 [ 别名1 ] , 字段2 [ 别名2 ] ... from 表名;
3.3 去除重复记录

select distinct 字段列表 from 表名;

3.4 案例
sql 复制代码
-- ------------------------------------------------------------------基础查询
# 查询name, workno, age
select name, workno, age from emp;

# 查询所有数据
select * from emp;

# 将ID=3的名字修改为张飞
update emp set name = '张飞' where id = 3;

# 查询workaddress
select workaddress from emp;

# 修改别名
select workaddress as '工作地址' from emp;
select workaddress '工作地址' from emp;

# 去重
select distinct workaddress '工作地址' from emp;

# 修改表中wordaddress为workaddress
alter table emp change wordaddress workaddress varchar(50) comment '工作地址';

4. 条件查询

4.1 语法

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

4.2 条件

常用的比较运算符如下:

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

常用的逻辑运算符如下:

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

4.3 案例:
sql 复制代码
-- ------------------------------------------------------------------条件查询
# 查询年龄不等于18
select * from emp where age != 18;
select * from emp where age <> 18;

# 查询年龄小于40
select * from emp where age <= 40;

# 查询idcard不空值的数据
select * from emp where idcard is not null;

# 查询idcard是空值的数据
select * from emp where idcard is null;

# 设置16行idcard为空值
update emp set idcard = null where id = 16;
update emp set idcard = '12345678998765432x' where id = 13;

# 查询年龄在30到50之间
select * from emp where age >= 30 && age <= 50;
select * from emp where age >= 30 and age <= 50;
select * from emp where age between 30 and 50;

# between接最小值,and接最大值
select * from emp where age between 50 and 30;

# 查询性别女,且在蜀国的数据
select * from emp where gender = '女' and workaddress = '蜀国';

# 查询年龄等于18或等于30或等于40
select * from emp where age = 18 or age = 30 or age = 40;
select * from emp where age in(18, 30, 40);

# 查询名字为三个字的名字
select * from emp where name  like '___';

# 查找idcard的最后一位为x
select * from emp where idcard  like '%X';

5. 聚合函数

介绍:将一列数据作为一个整体,进行纵向计算 。

5.1 常见的聚合函数:

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

5.2 语法

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

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

5.3 案例:
sql 复制代码
-- ------------------------------------------------------------------聚合函数
# 统计所有数量
select count(*) from emp;
select count(id)  from emp;

# 统计所有人平均年龄
select avg(age) from emp;

# 统计最大年龄
select max(age) from emp;

# 统计最小年龄
select min(age) from emp;

# 统计蜀国将领人员的年龄之和
select sum(age) from emp where workaddress = '蜀国';

6. 分组查询

6.1 语法

select 字段列表 from 表名 [ where 条件 ] group by 分组字段名 [ having 分组后过滤条件 ];

where与having区别:

执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。

判断条件不同:where不能对聚合函数进行判断,而having可以。

6.2 案例
sql 复制代码
-- ------------------------------------------------------------------分组查询
# 根据性别分组,统计男性和女性的分组
select gender, count(*) from emp group by gender;

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

# 查询年龄小于45的人员数量,并且根据工作地址分组,获取人员数量大于等于3的工作地址
select workaddress, count(*) from emp where age < 45 group by workaddress having count(*) >= 3;
# 起别名
select workaddress, count(*) address_count from emp where age < 45 group by workaddress having address_count >= 3;

注意事项:

  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
  • 执行顺序: where > 聚合函数 > having 。
  • 支持多字段分组, 具体语法为 : group by columnA,columnB

7. 排序查询

7.1 语法

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

7.2 排序方式
  1. ASC : 升序(默认值)
  2. DESC: 降序
7.3 案例
sql 复制代码
-- ------------------------------------------------------------------排序查询
# 根据年龄升序排序
select * from emp order by age asc;
# asc可省略
select * from emp order by age;

# 根据年龄升序降序
select * from emp order by age desc;

# 修改入职时间
update emp set entrydate = '1990-02-03' where id = 4;
update emp set entrydate = '1993-12-03' where id = 6;
update emp set entrydate = '1993-05-03' where id = 8;
update emp set entrydate = '1909-02-03' where id = 11;

# 根据入职时间做降序排序
select * from emp order by entrydate desc;

# 根据年龄升序,年龄相同再按照入职时间降序排序
select * from emp order by age, entrydate desc;

注意事项:

  • 如果是升序, 可以不指定排序方式ASC ;
  • 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序 ;

8. 分页查询

8.1 语法

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

8.2 案例
sql 复制代码
-- ------------------------------------------------------------------分页查询
# 查询第1页人员数据,根据展示5条记录
select * from emp limit 0, 5;
# 查询首页0可以省略
select * from emp limit 5;

# 查询第3页人员数据,根据展示5条记录(页码-1*页码展示记录数)
select * from emp limit 10,5;

注意事项:

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

9. 执行顺序

相关推荐
MonkeyKing_sunyuhua5 分钟前
ubuntu22.04 docker-compose安装postgresql数据库
数据库·docker·postgresql
天郁青5 分钟前
数据库交互的本地项目:后台管理系统
数据库·交互
马剑威(威哥爱编程)10 分钟前
MongoDB面试专题33道解析
数据库·mongodb·面试
准橙考典11 分钟前
怎么能更好的通过驾考呢?
人工智能·笔记·自动驾驶·汽车·学习方法
小光学长35 分钟前
基于vue框架的的流浪宠物救助系统25128(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
数据库·vue.js·宠物
掘金-我是哪吒36 分钟前
微服务mysql,redis,elasticsearch, kibana,cassandra,mongodb, kafka
redis·mysql·mongodb·elasticsearch·微服务
零炻大礼包1 小时前
【SQL server】数据库远程连接配置
数据库
zmgst2 小时前
canal1.1.7使用canal-adapter进行mysql同步数据
java·数据库·mysql
令狐少侠20112 小时前
explain执行计划分析 ref_
mysql
随心............2 小时前
python操作MySQL以及SQL综合案例
数据库·mysql