SQL语句之DQL语言

news2024/11/8 18:41:02

说明:DQL(Data Query Language,数据查询语言),用来查询数据库表中的记录。有的书中,会把DQL语言放入到DML(Data Manipulation Language,数据操作语言:数据的增删改)中,不单独拎出来。但既然有拎出来的,也侧面说明了查询语言的丰富。

查询分为:基本查询、条件查询、分组查询、排序查询、分页查询和多表查询;

SQL语句的书写,要按照上述的顺序,不需要的可以跳过,但不能颠倒顺序;
在这里插入图片描述

准备工作:新建一张学生表(tb_stu),数据库中存入一些条目;
在这里插入图片描述

一、基本查询

(1)查询指定字段(姓名、年龄)的记录;

select name,age from tb_stu;

在这里插入图片描述

(2)查询所有字段的记录;

推荐使用方式二,方式二较为高效;

# 方式一
select * from tb_stu;

# 方式二
select id, username, password, name, age, gender, image, classify, join_date, create_date, last_modify_date from tb_stu;

在这里插入图片描述

(3)设置别名查询指定字段的记录;

在字段后面加as,表示该字段的别名是什么。as可以省略不写,直接在字段后面加别名

select name as '姓名', age as '年龄' from tb_stu;

#  as可以省略
select name '姓名', age '年龄' from tb_stu;

在这里插入图片描述

(4)查询学生类比,并去除重复记录;

distinct 表示此次查询去重

select distinct classify from tb_stu;

在这里插入图片描述
(5)将学生的年龄+1显示;

select age + 1 from tb_stu;

在这里插入图片描述

二、条件查询

(1)查询指定姓名(加缪)的记录;

select * from tb_stu where name='加缪';

在这里插入图片描述

(2)查询限定条件(年龄大于18)的记录;

select * from tb_stu where age > 18;

在这里插入图片描述

(3)查询没有分配类型的记录;

需要注意,不要写成:where classify=null

select * from tb_stu where classify is null;

在这里插入图片描述

(4)查询有分配类型的记录;

同样,不要写成:where classify=not null 或者 where classify!=null

select * from tb_stu where classify is not null;

在这里插入图片描述

(5)查询密码不等于“123456”的记录;

select * from tb_stu where password!='123456';

郭靖的密码是’123456’,故没有查询出来

在这里插入图片描述

(6)查询入学日期在某个日期之间(2001-01-01~2023-01-01)的记录;

between 表示在什么之间

select * from tb_stu where join_date between '2001-01-01' and '2023-01-01';

在这里插入图片描述

(7)查询入学日期在某个日期之间(2001-01-01~2023-01-01),且性别为女的记录;

后面还有限定的话,可以在后面再加and

select * from tb_stu where join_date between '2001-01-01' and '2023-01-01' and gender='女';

在这里插入图片描述

(8)查询类型是1,2,3的记录;

in 表示取值是这里面的,推荐使用方式一,语句简洁明了

# 方式一
select * from tb_stu where classify in(1,2,3);

# 方式二
select * from tb_stu where classify=1 or classify=2 or classify=3;

在这里插入图片描述

(9)查询姓名为两个字的记录;

like 表示模糊查找,后面的内容包含通配符。通配符下划线(_)表示任意字符,(%)表示任意多个字符。想表示姓名为两个字,可以使用两个下划线(__)。

select * from tb_stu where name like '__';

在这里插入图片描述

(10)查询’李’姓学生的记录;

所以,如果要表示某记录字段包含某关键字,可以使用 ‘%关键字%’

select * from tb_stu where name like '李%'

在这里插入图片描述

三、分组查询

聚合函数,是MySQL中提供的用于计算的函数,有:count()、avg()、min()、max()、sum(),分别用于计算记录总数、平均值、最小值、最大值和总和。

(1)统计学生记录数量;

需要注意的是,count()不统计null

select count(*) from tb_stu;

在这里插入图片描述

(2)统计所有学生的年龄平均值;

select avg(age) from tb_stu;

在这里插入图片描述

(3)统计最早入学的学生日期;

select min(join_date) from tb_stu;

在这里插入图片描述

(4)统计最晚入学的学生日期;

select max(join_date) from tb_stu;

在这里插入图片描述

(5)统计所有的学生年龄之和;

select sum(age) from tb_stu;

在这里插入图片描述

(6)根据性别分组,统计男同学、女同学的数量;

group by 表示按字段分组

select gender,count(*) from tb_stu group by gender;

在这里插入图片描述
(7)查询入学时间在“2001-01-01~2023-06-03”之间的学生,并对结果根据类别分组,获取类别数量大于等于2的类别;

select classify '类别名',count(*) '数量' from tb_stu 

where join_date between '2001-01-01' and '2023-06-03' 

group by classify 

having count(*) >= 2;

在这里插入图片描述

四、排序查询

(1)根据入学时间,对学生进行升序排序

order by 表示按照某字段排序,asc是升序(默认),desc是降序;

select * from tb_stu order by join_date asc;

# 不加asc,默认也是升序,所以需要升序的话,asc可以省略
select * from tb_stu order by join_date;

在这里插入图片描述

(2)根据入学时间,对学生进行降序排序;

select * from tb_stu order by join_date desc;

在这里插入图片描述
(3)根据入学时间,对学生升序排序,入学时间相同,再按照更新时间进行降序排序;

select * from tb_stu order by join_date asc, create_date desc;

在这里插入图片描述

五、分页查询

(1)从起始索引0开始,查询学生记录,每页展示5条记录;

limit 表示限定查询范围,只有一个数,表示从0开始;有两个数,表示从第一个数,限制到第一个数后面多少条;

select * from tb_stu limit 0, 5;

# 从0开始,0可以省略
select * from tb_stu limit 5;

在这里插入图片描述

(2)查询第2页学生信息,每页展示5条记录;

注意不要写成:limit 5,10,

select * from tb_stu limit 5, 5;

在这里插入图片描述
(3)查询第3页学生信息,每页展示5条记录;

值得注意的是,limit 10,5 超出数据库的范围,但不会报错;

select * from tb_stu limit 10, 5;

在这里插入图片描述

(4)分页查询

实际项目中的分页,肯定不会像上面这样,每次翻页都写一条新的SQL语句。而是用一个SQL语句,完成所有的翻页操作,只需要将SQL语句的内容改成下面这样:

select * from tb_stu limit (当前页码 - 1), 每页显示记录条数;

当前页码和每页显示记录条数,会有前端传参数进来

扩展

我们的数据库中存储的性别、类别类型是由数字代替的,访问数据传回到Service(业务逻辑层)时,会将数据处理,返给给前端时,将会恢复成(男、女)或(其他、小说家、作家、诗人)的具体类型名。在MySQL数据库中,也提供了对应的操作,可以在查询数据时,就将数据更改为对应的类型名。

(1)统计学生类别的数量(类似if三元表达式);

select if(gender=1, '男生','女生') name,count(*) vaule from tb_emp group by gender;

(此次查询并非来自上面创建的学生表中,因为学生表中的gender不是用数字表示的,无法展示)
在这里插入图片描述

(2)统计学生的类型数量(类似switch语句)

select case classify

    when '0' then '其他'

    when '1' then '小说家'

    when '2' then '作家'

    when '3' then '诗人'

    else '未分配' end name,

       count(*) value from tb_stu group by classify;

在这里插入图片描述

总结

(1)以上查询用到的关键字及作用如下:
在这里插入图片描述

(2)扩展中使用到的数据库提供的对数据进行转换的函数,不推荐使用。因为对请求的数据进行处理,这是三层架构的Service层中的任务,不应该放在数据库中操作。

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

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

相关文章

金融数据获取:通过Ajax跳转的网页怎么爬?以东方财富基金净值数据为例

你是否碰到过点击网站上的按钮或链接,网页数据进行了刷新,但浏览器上显示的网址却没有任何变化的情况,这其实就是利用Ajax跳转的网页。本期笔者将以东方财富网为例展示如何获取Ajax跳转的网页内容,本文主要内容如下: 目…

MyBatis(多表查询,动态SQL的使用)

目录 多表查询 查询文章详情 查询一个用户底下的所有文章 动态SQL的使用 if 标签 trim 标签 where 标签 set 标签 foreach 标签 多表查询 现在有俩张表,一张是文章表,一张是用户表.如下: 查询文章详情 我们现在想查询得到一张表,表里面的内容和文章表大多一致,只是要在…

银行从业资格证(初级) 5天零基础拿证攻略【个人经历,亲测】

我的科目:《法律法规》、《个人理财》 方法 直接做真题,做真题错题总结归纳。 教材可买可不买,时间不够可以不看教材。 可以买天一金融的真题汇编,它附赠一个考点整理的小册子。 一定要自己整理知识框架。 看个人习惯选择网上做…

chatgpt赋能python:Python列表中随机抽取6个元素的简单方法

Python列表中随机抽取6个元素的简单方法 在Python编程中,列表是一种常用的数据类型,它允许我们存储和操作一系列数据。有时候,我们需要从列表中随机抽取一些元素,比如从一组名字中随机选择几个人参加抽奖等。本文将介绍如何使用P…

MIT 6.824 lab distributed system 分布式系统

https://youtu.be/cQP8WApzIQQ 概念 为什么需要分布式系统? high performanceparallelism:分布式系统可以实现CPU、内存、硬盘的并行运行fault tolerancephysical:security / isolated 分布式系统的困难 concurrency:各个并行的…

【unity小技巧】使用贝塞尔曲线实现导弹随机攻击敌人,也可以用于拾取物品

文章目录 先看效果代码实现1.导弹代码2.玩家生成导弹代码3.玩家挂载代码4.导弹挂载代码先看效果 代码实现 1.导弹代码 记得配置敌人为enemy标签 using System.Collections; using System.Collections.Generic; using

Nautilus Chain:独特且纯粹的创新型 Layer3

以 Layer3 架构为主要特点的模块化公链 Nautilus Chain 即将在近期上线主网,这也进一步引发了行业关于 Layer3 的讨论。 实际上,在2022年以太坊的创始人 Vitalik 提出了三大目标:Layer2 用于扩展,Layer3 用于定制功能,…

Transformer模型原理—论文精读

文章目录 前言模型架构Encoder和DecoderEncoderDecoder AttentionFFNEmbeddings和Positional EncodingEmbeddingsPositional Encoding 总结 前言 今天来看一下Transformer模型,由Google团队提出,论文名为《Attention Is All You Need》。论文地址。 正如…

Openwrt_XiaoMiR3G路由器_刷入OpenWrt

刷入Openwrt之前请保证小米R3G路由器已经刷入Breed控制台固件。 刷入Breed请参考: Openwrt_XiaoMiR3G路由器_刷入Breed固件 路由器具体配置参考 小米路由器3G参数 - 小米商城 既然要刷入OpwnWrt就需要线编译固件,使用lede的OpenWrt源码编译。 进入 …

K8S集群安装(二)

目录 1 安装说明.... 1 1.1 安装环境.... 1 1.2 生产环境可部署Kubernetes集群的两种方式.... 2 1.3 操作系统初始化配置.... 3 2 安装Docker/kubeadm/kubelet【所有节点】.... 4 2.1 安装Docker. 4 2.2 添加阿里云YUM软件源.... …

《Apollo 智能驾驶进阶课程》

来自 : https://www.bilibili.com/video/BV1G341117NQ/ https://apollo.baidu.com/ 主要学习资源如下: Apollo社区公众号,直接有整个视频教程的微信推文教程:链接一个CSDN博主记录的笔记: https://blog.csdn.net/qq_45…

08 redis经典五种数据类型及底层实现

redis是字典数据库KV键值对是什么 redis 是 key-value 存储系统,其中key类型一般为字符串,value 类型则为redis对象(redisObject)Redis定义了redisObjec结构体来表示string、hash、list、set、zset等数据类型 C语言struct结构体语法简介Redis 中每个对象…

【华为机试】死记硬背没思路?一般人我劝你还是算了吧

大家好,我是哪吒。 五月份之前,如果你参加华为OD机试,收到的应该是2022Q4或2023Q1,这两个都是A卷题。 5月10日之后,很多小伙伴收到的是B卷,那么恭喜你看到本文了,抓紧刷题吧。B卷新题库正在更…

Spring依赖注入解析

目录 依赖注入大致要点 依赖注入大致流程 Bean的预实例化 doGetBean createBean 完备Bean的创建过程 createBeanInstance populateBean 依赖注入大致要点 Spring在Bean实例的创建过程中做了很多精细化控制finishBeanFactoryInitialization方法里面的preInstantiateSing…

【计算机网络复习】第六章 局域网 LAN

局域网( LAN)概述 LAN的特点 • 覆盖范围小 房间、建筑物、园区范围 • 高传输速率 10Mb/s~1000Mb/s • 低误码率 10-8 ~ 10-11 • 拓扑:总线型、星形、环形 • 介质:UTP、Fiber、C…

6年测试经验之谈,为什么要做自动化测试?

一、自动化测试 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。 个人认为,只要能服务于测试工作,能够帮助我们提升工作效率的,不管是所谓的自动化工具,还是简单的SQL 脚本、批处理脚本,还是自己编写…

智能优化算法:指数分布优化算法-附代码

智能优化算法:指数分布优化算法 文章目录 智能优化算法:指数分布优化算法1.指数分布优化算法1.1种群初始化1.2EDO开发1.3EDO探索 2.实验结果3.参考文献4.Matlab5.python 摘要:指数分布优化算法(Exponential distribution optimize…

全新好用的窗口置顶工具WindowTop

打开WindowTop软件,所有已打开的窗口都会在左上角出现一个置顶栏,点击置顶栏的置顶复选框即可置顶窗口或取消窗口。   在WindowTop软件的置顶栏一项里可以自由调整置顶栏的元素(包含增删位置)。   可改变置顶栏的外观&#x…

剖析ffmpeg视频解码播放:时间戳的处理

一、视频播放基础理论 1.1 视频编码和解码基础 视频编码和解码是视频播放的基础,理解它们的工作原理对于深入理解视频播放至关重要。在这一部分,我们将详细介绍视频编码和解码的基础知识。 视频编码(Video Encoding)是将原始视…