数据库之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

相关文章

MySQL快速复制一张表的四种核心方法(包括表结构和数据)

《MySQL快速复制一张表的四种核心方法(包括表结构和数据)》本文详细介绍了四种复制MySQL表(结构+数据)的方法,并对每种方法进行了对比分析,适用于不同场景和数据量的复制需求,特别是针对超大表(1... 目录一、mysql 复制表(结构+数据)的 4 种核心方法(面试结构化回答)方法 1:CREATE

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

MySQL MHA集群详解(数据库高可用)

《MySQLMHA集群详解(数据库高可用)》MHA(MasterHighAvailability)是开源MySQL高可用管理工具,用于自动故障检测与转移,支持异步或半同步复制的MySQL主从架构,本... 目录mysql 高可用方案:MHA 详解与实战1. MHA 简介2. MHA 的组件组成(1)MHA

MySQL基本表查询操作汇总之单表查询+多表操作大全

《MySQL基本表查询操作汇总之单表查询+多表操作大全》本文全面介绍了MySQL单表查询与多表操作的关键技术,包括基本语法、高级查询、表别名使用、多表连接及子查询等,并提供了丰富的实例,感兴趣的朋友跟... 目录一、单表查询整合(一)通用模版展示(二)举例说明(三)注意事项(四)Mapper简单举例简单查询

Nginx概念、架构、配置与虚拟主机实战操作指南

《Nginx概念、架构、配置与虚拟主机实战操作指南》Nginx是一个高性能的HTTP服务器、反向代理服务器、负载均衡器和IMAP/POP3/SMTP代理服务器,它支持高并发连接,资源占用低,功能全面且... 目录Nginx 深度解析:概念、架构、配置与虚拟主机实战一、Nginx 的概念二、Nginx 的特点

MySQL中的DELETE删除数据及注意事项

《MySQL中的DELETE删除数据及注意事项》MySQL的DELETE语句是数据库操作中不可或缺的一部分,通过合理使用索引、批量删除、避免全表删除、使用TRUNCATE、使用ORDERBY和LIMI... 目录1. 基本语法单表删除2. 高级用法使用子查询删除删除多表3. 性能优化策略使用索引批量删除避免

MySQL 数据库进阶之SQL 数据操作与子查询操作大全

《MySQL数据库进阶之SQL数据操作与子查询操作大全》本文详细介绍了SQL中的子查询、数据添加(INSERT)、数据修改(UPDATE)和数据删除(DELETE、TRUNCATE、DROP)操作... 目录一、子查询:嵌套在查询中的查询1.1 子查询的基本语法1.2 子查询的实战示例二、数据添加:INSE

Linux服务器数据盘移除并重新挂载的全过程

《Linux服务器数据盘移除并重新挂载的全过程》:本文主要介绍在Linux服务器上移除并重新挂载数据盘的整个过程,分为三大步:卸载文件系统、分离磁盘和重新挂载,每一步都有详细的步骤和注意事项,确保... 目录引言第一步:卸载文件系统第二步:分离磁盘第三步:重新挂载引言在 linux 服务器上移除并重新挂p