【Mysql】基础篇:DQL(data query language):查询数据库中表的记录——select

news2025/1/8 6:03:46

在这里插入图片描述

  • 博主简介:努力学习的大一在校计算机专业学生,热爱学习和创作。目前在学习和分享:数据结构、Go,Java等相关知识。
  • 博主主页: @是瑶瑶子啦
  • 所属专栏: Mysql从入门到精通
  • 近期目标:写好专栏的每一篇文章

在这里插入图片描述

目录

  • 一、DQL(data query language)
  • 二、DQL语句:语法结构
  • 三、查询操作
    • 3.1:基础查询
    • 3.2:条件查询(where)
    • 3.3:聚合函数(count max,min)
      • 3.3.1:什么是聚合函数
      • 3.3.2:常见聚合函数
      • 3.3.3:聚合函数怎么用
    • 3.4:分组查询(group by)
    • 3.5:排序查询(order by)
    • 3.6:分页查询(limit)
  • 四、案例练习
  • 五、select语句执行顺序比较:

一、DQL(data query language)

数据查询语言,用于查询数据库表中的记录——select

在实际业务逻辑中,查询操作是远大于增、删、改操作的。

想象以下,当我打开购物软件,输入关键字,进行搜索,其实就是在数据库中进行查询数据的操作,再把数据返回到页面;当我们选中价格范围,那就是一个条件查询;同时可以对查询的结果根据销量、评价等进行排序…这些都是属于数据库查询操作

二、DQL语句:语法结构

  • select 字段列表:选中要查询哪些字段
  • from 表名列表:选中在哪个表中查询(目前基于单表查询)
  • where 条件列表:添加查询条件(根据什么条件来查询,价格范围…)
  • group by 分组字段列表:
  • having 分组后条件列表
  • order by 排序字段列表
  • limit 分页参数

三、查询操作

3.1:基础查询

  • 1、查询并返回指定表中多个字段数据
select 字段1,字段2,字段3... form 表名;

上面是指定查询指定表中的指定字段,可以使用通配符*查询指定表中的所有字段

slect * from 表名;

注意:但是在实际项目中查询所有字段不使用通配符的这种方法;有两个原因:1,不直观(可读性不强);2,执行效率低

  • 2、给查询字段设置别名,增强可读性
select 字段1 [as 别名1],字段2 [as 别名2]... from 表名;
  • 3、去除重复记录
select distinct 字段列表 from table;

3.2:条件查询(where)

  • 语法(在指定表中根据where 后面条件的限制查询指定字段)
select 字段列表 from 表名 where 条件列表;
  • 关于where后的条件
    在这里插入图片描述

注意:

  • 范围查询between ... and ...between后面跟最小值,and后面跟最大值
  • 逻辑运算符and&&更常用

举例:

select * from emp where age = 88;
select * from emp where age <= 20;
select * from emp where idcard is null;
select * from emp where idcard is not null;
select * from emp where age != 88;
select * from emp where age <> 88;
select * from emp where age >=15 and age <=20;
select * from emp where age between 15 and 20;
select * from emp where gender = '女' and age < 25;
select * from emp where age = 18 or age = 20 or 40;
select * from emp where age in(18,20,40);
select * from emp where name like '__'; #查询名字为两个字的员工信息(使用两个占位符)
select * from emp where idcard like '%x'; #查询身份证号最后一位是`x`的员工信息

3.3:聚合函数(count max,min)

3.3.1:什么是聚合函数

使用聚合函数,可以将一列数据作为一个整体进行纵向计算。都是作用于表中某一列

3.3.2:常见聚合函数

聚合函数功能
count统计某一列或者整张表的记录数
max求某一列最大值
min求某一列最小值
avg求某一列平均值
sum求和(某一列)

3.3.3:聚合函数怎么用

  • 对指定表中指定字段数据使用聚合函数
select 聚合函数(字段列表) from 表名;

注意:null值数据不参与聚合函数运算

举例:

#统计员工数量
select count(*) from emp;
 #统计企业员工的平均年龄
 select avg(age) from emp;
 #求所有员工中最大年龄
 select max(age) from emp;
 #求最大年龄
 select min(age) from emp;
 #查询所有在西安工作的员工的年龄之和
 select sun(age) from emp where workaddressed = '西安';

3.4:分组查询(group by)

  • 语法:在指定表中根据条件where查询指定字段,并根据分组字段进行分组(可加上分组后的过滤条件)
select 字段列表 from 表名 where 条件 group by 分组字段名 [having 分组后进行过滤的条件];
  • 注意
    • 执行顺序:where > 聚合函数 >having
    • 查询的字段一般为:聚合函数和分组依据字段,查询其他字段无意义
  • where 和 having 区别
    • 执行顺序:where条件是在分组前进行数据过滤,having是在分组之后,对每个组别进行数据过滤
    • where 不能对聚合函数进行判断,having可以
      举例:
#根据性别进分组,统计男性员工和女性员工的数量
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;

3.5:排序查询(order by)

  • 语法:在指定表中查询指定字段,并根据排序字段及其排序方式进行排序
select 字段列表 from 表名 ordered by 字段1 排序方式1,字段2 排序方式2;
  • 排序方式:分为两个
    • asc: Ascending的简写
    • desc: Descending的简写
  • 注意
    • 之前的那个desc(describe)是查看表结构,这个desc是降序
    • 默认就是asc升序排序,所以当排序方式为升序时,可以省略asc
    • 多字段排序,以第一个字段为第一关键字,第二个字段为第二关键字

举例:

#根据年龄对公司员工进行升序排序,如果年龄相同,再安装入职时间进行降序排序
select * from emp order by age asc, entrydate desc;

3.6:分页查询(limit)

  • 语法:查询从指定索引index开始,包括指定索引的n条记录
select 字段列表 from 表名 limit 起使索引index,查询记录数n;
  • 注意
    • 如何记忆呢?把表中的每条数据,想成数组中的一个个元素,起使索引和数组下标一样,从0开始,那么分页查询就代表从索引为index开始,包括index的从前往后n条记录/字段

    • 起使索引 = (查询页码-1)* 每页显示的记录数;页码一般都是从1开始,所以需要-1

    • 分页查询语法,不同数据库有其各自不同的实现,对于mysql数据库来说就是limit

    • 如果查询的就是第一页的数据,那么起使索引可以省略,查询语句简写为:select 字段列表 from 表名 limit 查询记录数n;

举例:

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

# 查询第二页数据,每页展示10条记录
select * from emp limit 10,10;

四、案例练习

  • 创建表格
-- 数据准备
create table emp
(
    id      int comment '编号',
    worknum varchar(10) comment '工号',
    name    varchar(10) comment '姓名',
    gender  char comment '性别',
    age     tinyint unsigned comment '年龄',
    idcard  char(18) comment '身份证号码',
    workaddress varchar(50) comment '工作地址',
    entrydate date comment '入职时间'
)comment '员工表';
  • 增加数据
-- 添加数据
insert into emp(id,worknum,name,gender,age,idcard,workaddress,entrydate)
values (1,'1','瑶瑶子','女',19,'123456789012345671','北京','2004-10-03'),
       (2,'2','李明','男',20,'123456789012345672','上海','2003-2-1'),
       (3,'3','李华','男',14,'123456789012345673','武汉','2005-4-2'),
       (4,'4','张小红','女',20,'123456789012345674','武汉','2005-4-2'),
       (5,'4','黄小丫','女',22,'123456789012345675','天津','2006-4-2'),
       (6,'6','张小红','女',23,'123456789012345676','武汉','2007-3-9'),
       (7,'7','李晓东','男',64,'123456789012345677','哈尔滨','1999-11-4'),
       (8,'8','张浩','男',35,'123456789012345678','大连','2001-5-4');

  • 操作练习
#1、查询年龄为20、22、23岁女性员工信息
select * from emp where gender = '女' and age in(20,21,22,23);

在这里插入图片描述

#2、查询性别为男,并且年龄再20-40以内(含),且姓名为3个字以内的员工
select * from emp where gender = '男' and age between 20 and 40 and name like '___';

在这里插入图片描述

#3、统计员工表中,年龄小于60的男性和女性数量
select gender, count(*) from emp where age < 60 group by gender;

在这里插入图片描述

#4、查询所有年龄小于35岁的员工的姓名、年龄,并对查询结果安装年龄升序排序,入职时间为第二关键字降序排序
select name,age from emp where age <= 35 order by age asc , entrydate desc ;

在这里插入图片描述

#5、查询性别为难,且年龄为20-40岁(含)以内的5个员工信息,并对查询结果安装年龄升序,入职时间降序
 select * from emp where gender = '男' and age between 20 and 40 order by age asc ,entrydate desc limit 5;

在这里插入图片描述

五、select语句执行顺序比较:

在这里插入图片描述

注意:对于selct语句执行顺序 FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY -> LIMIT


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/478552.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++11】多线程+IO流

目录 一、C11线程库 1、每个线程都有独立的栈空间 2、加锁的位置 3、CSA操作 4、C的类模板atomic&#xff08;原子操作&#xff09; 5、lock_guard&#xff08;RAII风格的锁&#xff09;/unique_lock&#xff08;可随时释放锁&#xff09; 6、条件变量&#xff08;用于互…

微信小程序学习实录1(wxml文档、引入weui、双向数据绑定)

微信小程序学习实录 一、wxml文档二、新建页面快捷方式三、微信小程序引入weui四、双向数据绑定1.wxml渲染层2.js逻辑层 五、微信小程序跳转到H5 一、wxml文档 <!-- index.wxml --> <view><!-- 数据绑定 --><view><text>{{name}}</text>&…

机器学习笔记 基于OpenCV的文本检测和识别模块

一、EAST文本检测器简述 east是一种高效准确的场景文本检测器,网络模型如下。该模型是一个适用于文本检测的全卷积神经网络,输出单词或文本行的密集每像素预测。这就省去了诸如候选建议、文本区域形成和单词分割等中间步骤。后处理步骤仅包括对预测的几何形状进行阈值处理和N…

【分布式】一致性哈希和哈希槽

当我们拥有了多台存储服务器之后&#xff0c;现在有多个key&#xff0c;希望可以将这些个key均匀的缓存到这些服务器上&#xff0c;可以使用哪些方案呢&#xff1f; 1. 普通哈希取模法 1.1 直接哈希取模 这是一种最容易想到的方法&#xff0c;使用取模算法hash&#xff08;k…

前端三剑客React框架第一课入门的学习

前端三大框架React框架第一课入门的学习 前端三大框架的介绍 React:由facebook贡献&#xff0c;是一个基于javascript的前端库。它主要关注ui组件的构建&#xff0c;通过virtual dom等技术手段实现高效的渲染优化&#xff0c;可以与各种其他库和框架搭配使用&#xff0c;也有…

作为一个C++新手,我感兴趣的C++开源项目

2023年4月30日&#xff0c;周日晚上。 昨天完成了一个C项目后&#xff0c;想再开始一个C项目&#xff0c;但不知道做什么&#xff0c;于是决定看看有什么好的C开源项目。 今晚在网上逛了一圈后&#xff0c;发现了好多有趣的C开源项目。 参考文章&#xff1a; GitHub Top 10 …

【MySQL】十二,索引的概念

为什么使用索引 提高数据查询的效率。 定义 MySQL官方对索引的定义为&#xff1a;索引&#xff08;Index&#xff09;是帮助MySQL高效获取的数据的数据结构。 使用索引的优点 提高数据检索的效率&#xff0c;降低数据库的IO成本。通过创建唯一索引&#xff0c;可以保证数据…

科研闭环指南|学术论文撰写经验总结

前言&#xff1a;最近完成了自己人生中第一篇学术论文长文的撰写&#xff0c;从2023年4月12日完成初稿到2023年4月30日完成终稿这半个多月的时间里&#xff0c;在多位老师与师兄的帮助下&#xff0c;前前后后改了六七个版本&#xff0c;才改到大致满意的最终版&#xff08;在此…

设计模式——模板模式

导航&#xff1a; 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线设计模式牛客面试题 目录 模板模式 1、基本介绍 2、模板模式解决豆浆制作问题 3、钩子方法 4、Spring 框架AbstractApplicationContext抽象类 模板模式 …

C语言从入门到精通第16天(指针的定义与基本使用)

指针的定义与基本使用 什么是指针&#xff1f;指针变量的定义指针变量的基本使用 什么是指针&#xff1f; 在使用指针之前我们需要对指针进行初步的了解&#xff0c;首先我们要知道什么是指针&#xff1f; 通过前面的学习我们已经知道了内存的存储方式&#xff0c;他是通过一…

【LeetCode股票买卖系列:121. 买卖股票的最佳时机 | 一次遍历 | 暴力递归=>记忆化搜索=>动态规划】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

在群晖NAS上快速搭建属于自己的Git Server

群晖NAS套件中心是有Git Server套件的&#xff0c;只要在套件中心安装即可。但是需要注意的是&#xff1a; git 相关的命令需要使用 SSH 客户端连接到NAS上进操作。配置git时需要使用 管理员权限账户&#xff0c;而 push / fetch 使用的账户一般都为普通用户&#xff0c;一定要…

ChatGPT提示词工程(一):Guidelines

目录 一、说明二、安装环境三、Guidelines准则一&#xff1a;写出明确而具体的说明方法1&#xff1a;使用分隔符清楚地表示输入的不同部分方法2&#xff1a;用结构化输出&#xff1a;如直接要求它以HTML或者JSON格式输出方法3&#xff1a;请模型检查是否满足条件方法4&#xff…

01-环境搭建 尚筹网

环境搭建 一、项目结构搭建 ​ 模块关系 ​ parent模块仅仅用来确定各个Maven依赖的版本 ​ webui、component、entity模块继承自parent模块 ​ util、reverse模块属于独立工程&#xff0c;不参与继承与聚合 ​ 且webui依赖于component&#xff0c;component依赖于entity…

Cont. TF-IDF (BigData Data Mining)

Cont. 举例 例1 词频 (TF) 是一词语出现的次数除以该文件的总词语数。 假如一篇文件的总词语数是100个&#xff0c;而词语“母牛”出现了3次&#xff0c;那么“母牛”一词在该文件中的词频就是3/1000.03。 一个计算文件频率 (IDF) 的方法是文件集里包含的文件总数除以测定有多…

一些关于单链表的操作

思维导图&#xff1a; 一&#xff0c; 链表 1.1节点的结构 链表是啥样的啊&#xff1f;顾名思义链表就是一种用链子链接起来的表。那这种表是怎么样的啊&#xff1f; 这样的呗&#xff1a; 现在&#xff0c;我们知道了链表的形状了。那我们该如何用编程语言来形成这一种形状…

mysql 安装全过程(linux上二进制包安装)

介绍 mysql 是一种RDBMS 关系型数据库管理系统 Relational Database Management System 关系型数据库将数据保存在不同的表中&#xff0c;而不是放在一个大仓库内&#xff0c;增加了速度&#xff0c;提高了灵活性。 . mysql版本 5.7.x 和 8.0.x 是目前主流。2个…

RT-Thread 在线软件包改为本地软件包的方法

问题描述 RT-Thread 的软件包&#xff0c;使用时&#xff0c;需要手动通过 ENV 工具 更新到 本地的 packages 目录&#xff0c;并且 packages 目录默认不参与 Git 工程管理&#xff0c;软件包多了&#xff0c;并且偶尔需要更改软件包本身的一些代码&#xff0c;这就造成了软件项…

Spring 依赖注入源码

文章目录 依赖注入原始依赖注入方式注解方式寻找注入点注入点进行注入 从BeanFactory中找注入对象总结 依赖注入 具体代码是在AbstractAutowireCapableBeanFactory类的populateBean()方法&#xff0c;此方法中主要做的事情如下&#xff1a; 实例化之后&#xff0c;调用Instan…

【Java校招面试】基础知识(二)——Spring Framework AOP

目录 前言一、Spring Framewwork基础知识二、Spring AOP基础概念1. 切面&#xff08;Aspect&#xff09;2. 织入&#xff08;Weaving&#xff09;3. 增强&#xff08;Advice&#xff09;4. 动态代理 三、JDK动态代理1. 基本用法2. 原理分析 四、CGLib动态代理1. 基本用法2. 原理…