数据库之DQL操作(数据查询语言)

2024-04-06 05:28

本文主要是介绍数据库之DQL操作(数据查询语言),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

本节介绍以下表为例:

create table emp(id int comment '编号',workno varchar(10) comment '工号',name varchar(10) comment '姓名',gender char(1) comment '性别',age tinyint unsigned comment '年龄',idcard char(18) comment '身份证号',workaddress varchar(50) comment '工作地址'entrydate date comment '入职时间'
)

1.基本语法

SELECT字段列表FROM表名列表WHERE条件列表GROUP BY分组字段列表HAVING分组后条件列表ORDER BY排序字段列表LIMIT分页参数
  •  基本查询(不带任何条件)
  • 条件查询(WHERE)
  • 聚合函数(count、max、min、avg、sum)
  • 分组查询(group by)
  • 排序查询(order by)
  • 分页查询(1imit)

2.基础查询 

2.1查询多个字段

SELECT 字段1,字段2,字段3... FROM 表名;SELECT * FROM 表名;

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

 2.2字段设置别名

SELECT 字段1 [AS别名1],字段2 [AS 别名2]... FROM 表名;
//省略AS
SELECT 字段1 [别名1] ,字段2 [别名2]... FROM 表名;

2.3去除重复记录

SELECT DISTINCT 字段列表 FROM 表名;

 例如:

a.查询指定字段 id,gender,age并返回

select id, gender, age from emp;

b. 查询返回所有字段

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

 c.查询所有员工的入职时间,起别名

select entrydate as '入职时间' from emp;//as可以省略
select entrydate '入职时间' from emp;

d. 查询公司员工的上班地址有哪些(不要重复)

select distinct workaddress '工作地址' from emp

 3.条件查询

3.1语法

SELECT 字段列表 FROM 表名 WHERE 条件列表;

3.2条件

比较运算符功能
>大于
>=大于等于
<小于
<=小于等于
=等于

<> 或 !=

不等于
BETWEEN ... AND ...在某个范围之内(最小、最大值)
IN( ... )在in之后的列表中的值,多选一
LIKE 占位符模糊匹配('_'匹配单个字符,'%'匹配任意个字符)
IS NULL是NULL
逻辑运算符功能
AND 或 &&并且(多个条件同时成立)
OR 或 || 或者(多个条件任意一个成立)
NOT 或 !非 ,不是

例如:

a.查询年龄为18的员工

select * from emp where age = 18;

b.查询年龄大于等于19的员工 

select * from emp where age >= 19;

c. 查询有身份证号的员工信息

select * from emp where idcard is not null;

d. 查询年龄在15岁(包含)到20岁(包含)之间的员工信息

select * from emp where age >=15 && age <= 20;select * from emp where age >= 15 and age <= 20;select * from emp where age between 15 and 20;

 e.查询性别为 男 并且 年龄大于68岁的员工

select * from emp where gender = '男'and age > 68;

f. 查询姓名为两个字并且姓刘的员工

select * from emp where name like '刘_';

 4.聚合函数

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

4.1常用函数

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

4.2语法

SELECT 聚合函数 (字段列表) FROM 表名;

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

例如:

a.统计该企业员工数量

//统计的是总记录数
select count(*) from emp;//统计的是idcard字段不为nu11的记录数
select count(idcard) from emp;

b. 统计该企业员工的平均年龄

select avg(age) from emp;

c. 统计咸宁地区员工的年龄之和

select sum(age) from emp where workaddress = '咸宁';

5.分组查询 

5.1语法

SELECT 字段列表 FROM 表名 [ WHERE条件 ] GROUP BY 分组字段名 [ HAVING 分组后过滤条件 ];

5.2 where与having区别

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

 注意事项:

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

 例如:

a.根据性别分组,统计男性员工 和 女性员工的平均年龄

select gender, avg(age) from emp group by gender ;

 b.查询年龄小于45的员工 ,并根据工作地址分组,获取员工数量大于等于3的工作地址

select workaddress, count(*) address count from emp where age < 45 
group by workaddress having address count >= 3;

 c.统计各个工作地址上班的男性及女性员工的数量

select workaddress, gender, count(*) '数量' from emp group by gender ,workaddress;

6.排序查询 

6.1语法

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2;

6.2排序方式

  • ASC:升序(默认值)
  • DESC:降序

注意事项:

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

例如:

a. 根据年龄对公司的员工进行升序排序

select * from emp order by age asc;select * from emp order by age;

 b.根据年龄对公司根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序

select * from emp order by age asc, entrydate desc;

7.分页查询 

7.1语法

SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;

 注意事项:

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

例如:

 a.查询第1页员工数据,每页展示10条记录。

select * from emp limit 0, 10;select * from emp limit 10;

b. 查询第2页员工数据,每页展示10条记录 --------> ( 页码 - 1 ) * 页展示记录数。

select * from emp limit 10, 10;

 8.执行顺序

 验证:

查询年龄大于15的员工姓名、年龄,并根据年龄进行升序排序。

select name , age from emp where age >15 order by age asc;

在查询时,我们给emp表起一个别名 e,然后在select及 where中使用该别名。

select e.name , e.age from emp e where e.age > 15 order by age asc;

执行上述SQL语句后,我们看到依然可以正常的查询到结果,此时就说明:from 先执行,然后where和 select 执行。那 where 和 select 到底哪个先执行呢?

此时,此时我们可以给select后面的字段起别名,然后在where中使用这个别名,然后看看是否可以执行成功。

select e.name ename, e.age eage from emp e where eage > 15 order by age asc;

执行上述SQL报错了!!!!!

由此我们可以得出结论:from 先执行,然后执行where,再执行select。

接下来,我们再执行如下sQL语句,查看执行效果:

select e.name ename, e.age eage from emp e where e.age > 15 order by eage asc;

结果执行成功。 那么也就验证了:order by 是在select 语句之后执行的。

执行顺序得以验证。

这篇关于数据库之DQL操作(数据查询语言)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/879102

相关文章

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

数据库面试必备之MySQL中的乐观锁与悲观锁

《数据库面试必备之MySQL中的乐观锁与悲观锁》:本文主要介绍数据库面试必备之MySQL中乐观锁与悲观锁的相关资料,乐观锁适用于读多写少的场景,通过版本号检查避免冲突,而悲观锁适用于写多读少且对数... 目录一、引言二、乐观锁(一)原理(二)应用场景(三)示例代码三、悲观锁(一)原理(二)应用场景(三)示例

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1

Python 中的 with open文件操作的最佳实践

《Python中的withopen文件操作的最佳实践》在Python中,withopen()提供了一个简洁而安全的方式来处理文件操作,它不仅能确保文件在操作完成后自动关闭,还能处理文件操作中的异... 目录什么是 with open()?为什么使用 with open()?使用 with open() 进行

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

SpringBatch数据写入实现

《SpringBatch数据写入实现》SpringBatch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,... 目录python引言一、ItemWriter核心概念二、数据库写入实现三、文件写入实现四、多目标写入

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用