零基础学习数据库SQL语句之查询表中数据的DQL语句

server/2024/9/25 23:22:19/

是用来查询数据库表的记录的语句

在SQL语句中占有90%以上

也是最为复杂的操作 最为繁琐的操作

DQL语句很重要很重要

初始化数据库和表

sql">USE dduo;create table tb_emp(id int unsigned primary key auto_increment comment 'ID',username varchar(20) not null unique comment '用户名',password varchar(36) default '123456' comment '密码',name varchar(10) not null comment '姓名',gender tinyint unsigned not null comment '性别 说明:1 男 2 女',image varchar(300) comment '图像',job tinyint unsigned comment '职位 说明:1 班主任 2 讲师 3 学工主管 ',entrydata date comment '入职位时间',create_time datetime not null comment '创建时间',update_time datetime not null comment '修改时间'
)comment '员工表';INSERT INTO tb_emp VALUES
(1,'gaochang','123456','高畅',2,'1.jpg',1,'2000-01-01','2022-10-27 17:12:32','2022-10-27 17:12:32'),
(2,'luanzengxv','123456','栾增旭',1,'2.jpg',2,'2000-01-01','2022-10-27 17:12:32','2022-10-27 17:12:32'),
(3,'liuyan','123456','刘岩',1,'3.jpg',3,'2000-01-01','2022-10-27 17:12:32','2022-10-27 17:12:32');

基本语法

sql">USE dduo;
-- 查询指定字段name entrydate并返回
select  name ,entrydata from tb_emp;-- 查询所有字段
#不推荐的方式 不直观 性能低 建议一个个的输入
select * from tb_emp;-- 查询name 并起别名(姓名)
-- 字段展示时会自动变化
select name as 姓名 from tb_emp;
select name 姓名 from tb_emp;
select name '姓名' from tb_emp;
select name '姓 名' from tb_emp;-- 查询员工一共有多少种密码 不能重复
select distinct tb_emp.password from tb_emp;

注意事项

*号表示查询所有字段 在实际开发中尽量少用 不直观而且影响效率

条件查询

在基本查询的基础上加上条件

我们主要学习的是条件的构建方式

 

sql">USE dduo;-- 查询姓名为高畅的员工
SELECT * from user where name='高畅';-- 查询age小于等于20的员工
SELECT * from user where age<20;-- 查询age是null的员工信息
SELECT * from user where age is null;
SELECT * from user where age is not null;-- 查询age不等于19的信息
SELECT * from user where age!=19;-- 查询指定创建日期的员工信息
SELECT * from user where creat_time >='2024-01-01 ' and creat_time<='2024-12-12' ;
SELECT * from user where creat_time between '2024-01-01 ' and'2024-12-12'  ;-- 查询指定创建日期并且年龄为20的员工信息
SELECT *from user where  creat_time between '2024-01-01' and '2024-12-12' && age =20 ;
SELECT *from user where  creat_time between '2024-01-01' and '2024-12-12' and age =20  and name='高畅';-- 查询年龄是19或者20的员工信息
SELECT *from user where age=19 || age=20;
SELECT *from user where age=19 or age=20;
SELECT *from user where age in (19,20);-- 查询姓名为两个字符的员工信息 (模糊查询)
SELECT *FROM user WHERE name LIKE '__';
SELECT *FROM user WHERE name LIKE '___';-- 查询姓氏为高的员工
SELECT *FROM user WHERE name LIKE '高%' or '高%%';

注意事项

null 和 模糊查询的两个占位符

聚合函数

为分组查询打下基础

将一列数据作为一个整体 进行纵向运算

sql">use dduo;
-- 聚合函数-- 统计该企业的员工数量 (非空字段)
-- 统计数据库中所有的数据量 建议使用count(*)
select count(name) from user;
select count('1') from user;
select count(*) from user;-- 统计最早更新日期的员工
select min(user.update_time) from user;
select max(user.update_time) from user;-- 统计更新日期的平均值
select avg(user.update_time) from user;-- 求年龄之和
select sum(user.age) from user;

注意事项

null值不参与所有的聚合函数的运算

统计数量可以使用:count(*) count(字段) count(常量)

推荐使用 count( * )

分组查询

sql">use dduo;-- 根据年龄分组 统计各年龄的员工数量
select user.age,count(*) from user group by age ;-- 先查询更新时间 再根据年龄筛选 数量大于3的年龄
select age,count(*) from user where update_time< '2025-01-01' group by age having count(*)>2;

面试题  

注意事项

排列查询

sql">use dduo;-- 根据更新时间 对员工进行升序排序
select *from user order by update_time asc;-- 降序排序
select *from user order by update_time desc;-- 根据创建时间对员工进行升序排列 如果相同 按照更新时间进行降序排序
select *from user order by creat_time asc ,update_time desc ;

注意事项

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

分页查询

sql">use dduo;-- 分页查询-- 1.从起始索引0开始 开始查询员工数据 每页展示1条记录
select *from user limit 0,1;-- 查询第1页 员工数据每页展示2条记录
select *from user limit 2,2;-- 查询第2页 员工数据每页展示2条记录
select *from user limit 4,2;-- 查询第3页 员工数据每页展示2条记录
select *from user limit 6,2;-- 查询第4页 员工数据每页展示1条记录
select *from user limit 8,1;

起始索引 = (页码-1) * 每页展示的记录数

将来开发关系型数据库的时候

前端并不会把起始索引传递过来 而是传递页码

我们要换算成索引 在MySQL中书写SQL语句


http://www.ppmy.cn/server/33656.html

相关文章

【计算机网络】循环冗余校验:Cyclic Redundancy Check

1. 任务目标 利用循环冗余校验&#xff08;CRC&#xff09;检测错误。 循环冗余校验&#xff08;英语&#xff1a;Cyclic redundancy check&#xff0c;通称 CRC&#xff09;是一种根据网上数据包或计算机文件等数据产生简短固定位数校验码的一种散列函数&#xff0c;主要用来…

20232803 2023-2024-2 《网络攻防实践》实践八报告

目录 1. 实践内容2. 实践过程2.1 动手实践任务一2.2 动手实践任务二&#xff1a;分析Crackme程序2.2.1 crackme1.exe2.2.2 crackme2.exe 2.3 分析实践任务一2.4 分析实践任务二 3. 学习中遇到的问题及解决4. 学习感悟、思考等 1. 实践内容 动手实践任务一&#xff1a;对提供的r…

嘉楠堪智 CanMV K230 进行 Linux、RT-smart 系统开发

本文记录学习、使用 K230 SDK 进行 Linux、RT-smart 系统的开发的一些关键步骤&#xff0c;如何获取系统源代码&#xff0c;如何配置环境&#xff0c;如何使用 Docker 进行编译&#xff0c;获得系统文件。 具体详细的教程&#xff0c;可以学习 CanMV K230 教程。 目录 一、S…

深度学习之基于Matlab NN的伦敦房价预测

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 房价预测是房地产领域的一个重要问题&#xff0c;对于投资者、开发商以及政策制定者等都具有重要的指…

Python异步Redis客户端与通用缓存装饰器

前言 这里我将通过 redis-py 简易封装一个异步的Redis客户端&#xff0c;然后主要讲解设计一个支持各种缓存代理&#xff08;本地内存、Redis等&#xff09;的缓存装饰器&#xff0c;用于在减少一些不必要的计算、存储层的查询、网络IO等。 具体代码都封装在 HuiDBK/py-tools: …

C# 中 IOC (Inversion of Control,控制反转)

在 C# 中&#xff0c;IOC (Inversion of Control&#xff0c;控制反转) 是一种设计模式和软件开发原则&#xff0c;用于解耦组件之间的依赖关系&#xff0c;提高代码的可维护性和可测试性。IOC 容器是实现 IOC 的关键组件&#xff0c;它负责管理对象的创建、生命周期和依赖注入…

将要上市的自动驾驶新书《自动驾驶系统开发》中摘录各章片段 1

以下摘录一些章节片段&#xff1a; 1. 概论 自动驾驶系统的认知中有一些模糊的地方&#xff0c;比如自动驾驶系统如何定义的问题&#xff0c;自动驾驶的研发为什么会有那么多的子模块&#xff0c;怎么才算自动驾驶落地等等。本章想先给读者一个概括介绍&#xff0c;了解自动驾…

基于Springboot的校运会管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的校运会管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&a…