数据库设计——DQL

D Q L \huge{DQL} DQL
⭐⭐⭐⭐⭐
DQL:数据库查询语言,用来查询数据库中的记录,非常的重要,对于数据库的操作修改相对来讲还是较少部分,绝大多数操作都是数据查询。
整体的语法结构:
在这里插入图片描述

基本查询

在这里插入图片描述
示例:

-- ---------------DQL基本查询-----------------
-- 1. 查询指定字段 name,entrydate 并返回
select name,entrydate from tb_emp;-- 2. 查询返回所有字段
select id, username, password, name, gender, image, job, entrydate, create_time, update_time  from tb_emp;
-- 不推荐(性能低)
select * from tb_emp;-- 3. 查询所有员工的 name,entrydate,并且起一个别名
select name as 姓名,entrydate as 入职日期 from tb_emp;select name 姓名,entrydate 入职日期 from tb_emp;-- 4. 查询已有的员工关联了哪几种职位(不要重复)
select distinct job from tb_emp;

❗注意事项:

  1. distinct关键字用来去重
  2. 如果要查询表中所有字段的数据,最好还是将所有的字段都列一遍。使用 * 的表示法效率比较低(底层实现问题)。

条件查询

有了限制条件的查询(where)
在这里插入图片描述
常见的条件关系表:
在这里插入图片描述
在这里插入图片描述
⭐⭐⭐注意:

  1. 注意相等的匹配符号,不是其他编程语言中的"==“,而是”="。
  2. 如果判断一个字段是不是空,不是用" = null",而是"is null"
  3. 模糊匹配很重要

示例:

-- ------------------DQL条件查询------------------
-- 1. 查询姓名为夜神月的员工
select * from tb_emp where name = '夜神月';-- 2. 查询ID小于等于5
select * from tb_emp where id <= 5;-- 3. 查询没有分配职位的员工信息(职位为空)
select * from tb_emp where job is null;-- 4. 查询有职位的员工信息(职位不为空)
select * from tb_emp where job is not null;-- 5. 查询密码字段不是'123456'的员工信息
select * from tb_emp where password != '123456';
select * from tb_emp where password <> '123456';	-- <>也是不等于-- 6. 查询入职日期在’2000-01-01‘(包含)到’2010-01-01’(包含)之间的员工信息
select * from tb_emp where entrydate >= '2000-01-01' and entrydate <= '2010-01-01';
select * from tb_emp where entrydate between '2000-01-01' and '2010-01-01';-- 7. 查询入职时间在'2000-01-01'(包含)到‘2010-01-01’(包含)之间并且性别是女的员工信息
select * from tb_emp where entrydate between '2000-01-01' and '2010-01-01' and gender = 2;-- 8. 查询职位是2(讲师),3(学工主管),4(教学主管)的员工信息
select * from tb_emp where job = 2 or job = 3 or job = 4;
select * from tb_emp where job in (2,3,4);-- 9. 查询姓名为两个字的员工信息
select * from tb_emp where name like '__';-- 10. 查询姓张的员工
select * from tb_emp where name like '张%';

💥💥💥💥上述代码中的一些细节和其他实现方式:

  1. 判空is null,判非空 is not null
  2. <>也是不等于的意思
  3. 关于between and:and左边是最小值,and右边是最大值,并且这个范围是闭区间。
  4. 多值判断可以用in (范围值集合)
  5. 模糊匹配中:一个_就代表一个字符。一个%代表任意多的字符,所以’张%'的意思就是以’张’为开头,任意长度的名字。

分组查询

分组查询就是将已知的数据进行分组,然后可能会求组内的整体数据特征。首先要先知道怎么求一些整体数据特征,DQL中的聚合函数可以完成这个任务。
在这里插入图片描述

常见的聚合函数:
在这里插入图片描述
示例:

-- 聚合函数
-- 1. 该企业员工的数量  -- count
-- A.count(字段)
-- count字段的时候是不计数null,所以count求所有记录的个数的时候要count一个非空的字段
select count(id) from tb_emp;
select count(username) from tb_emp;
select count(job) from tb_emp;
-- B.count(常量)
select count('A') from tb_emp;-- C.count(*)
-- mysql底层对于count(*)做了优化处理,建议使用count(*)
select count(*) from tb_emp;-- 2. 统计最早入职的员工 -min
select min(entrydate) from tb_emp;-- 3. 统计最迟入职的员工 -max
select max(entrydate) from tb_emp;-- 4. 统计该企业员工的ID的平均值 -avg
select  avg(id) from tb_emp;-- 5. 统计该企业员工的ID之和 -sum
select sum(id) from tb_emp;

❗❗❗代码细节:

  1. 求记录个数的时候最好用count(*),底层有优化,效率更高
  2. ⭐⭐⭐数据表中的null不会参与聚合函数的运算,如果要求数据中的记录总数记得count(非空字段)

分组查询
在这里插入图片描述
⭐⭐⭐注意一下group by的位置,是放在了where之后
示例:

-- 分组查询
-- 1. 根据性别分组,统计男性和女性员工的数量 -count(*)
select gender,count(*) from tb_emp group by gender;-- 2. 查询入职时间在‘2015-01-01’(包含)以前的员工,并对结果根据职位分组,获取员工数量大于等于2的职位
-- where 之后不能用聚合函数,分组过滤的过滤条件就写在 group by 之后
select job,count(*) from tb_emp where entrydate <= '2015-01-01' group by job having count(*) >= 2;
-- where 与 having 之间的区别
-- 1. 执行时机不同:where是分组之前进行过滤,不满足where条件都不会参与分组,而having后面的条件是对结果进行过滤
-- 2. 判断的条件不同:where不能对聚合函数进行判断,但是having可以-- 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段没有任何的意义
-- 执行顺序:where > 聚合函数 > having

解析以下这段代码(个人理解)

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

意思为再tb_emp表中按照gender进行分组,最后表的列有两列,一列是gender,另一列是对应gender下的成员的个数。
查询结果:
在这里插入图片描述
也就是说聚合函数是在group by分组之后才会发生作用,分别求每个组中的成员个数。

❗❗where与having的区别(大重点):

  1. 执行的时机不同:where是在分组之前进行过滤,不满足where后条件的数据连分组都不会参与。而having是对分组之后的数据进行筛选。
  2. 判断条件不同:where后面无法跟聚合函数,但是having后面可以跟聚合函数。
  3. 更多细节:分组之后一般查询的字段就是聚合函数。因为如果分组之后还查询某个数据为什么不一开始就直接查某个数据呢?
    语句执行的顺序: where > 聚合函数 > having

排序查询

在这里插入图片描述
排序方式就下面两种
在这里插入图片描述
示例:

-- 排序查询
-- 1. 根据入职时间,对员工进行升序排序 -asc
select * from tb_emp order by entrydate asc;
select * from tb_emp order by entrydate;-- 2. 根据入职时间,对员工进行降序排序
select * from tb_emp order by entrydate desc;-- 3. 根据入职时间,对公司的员工进行 升序排序, 入职时间相同,再按照更新时间进行 降序排序
select * from tb_emp order by entrydate , update_time desc;
-- 只有当第一个字段相同的时候,第二个字段的排序才会生效

⭐⭐⭐如果多字段查询,当第一个字段相同的时候,才会按照规定的第二个字段的排序顺序进行排序。

select * from tb_emp order by entrydate , update_time desc;

当entrydate相同的时候才会按照update_time的降序进行排序。
还有,排序默认是按照升序进行排序。

分页查询

在这里插入图片描述
这种查询的理解就是网站中的翻页功能。数据量太大的时候不可能直接将所有的数据全部一次性加载到网页中,可以一页一页的加载,当前浏览哪一页就查询哪一页的数据。
在这里插入图片描述
示例:

-- -----------分页查询-------------
-- 1. 从起始的索引0 开始查询员工数据,每页展示5条记录
select * from tb_emp limit 0,5;-- 2. 查询第一页员工数据,每页展示5条数据-- 3. 查询第二页员工数据,每页展示5条数据
select * from tb_emp limit 5,5;-- 4. 查询第三页员工数据,每页展示5条记录
select * from tb_emp limit 10,5;-- 起始索引计算公式:起始索引 = (页码 - 1)* 每页展示记录数

limit后面两个参数的通俗理解
起始索引:查询的起始位置
查询记录数:每页展示多少数据
limit 10,5:从10索引开始查询,每页显示5条数据。

⭐⭐⭐⭐⭐起始索引计算公式
起始索引 = ( 页码 − 1 ) ∗ 每页展示数据数 起始索引 = (页码 - 1) * 每页展示数据数 起始索引=(页码1)每页展示数据数
索引是从0开始算的

附带两个SQL函数

  1. if表达式
if(表达式,tvalue,fvalue):表达式为true时,值为tvalue。表达式为false时,值为fvalue
  1. case表达式
case 表达式 when1 then 结果1 when2 then 结果2 ... else .. end

类似于switch语句

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

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

相关文章

FPGA项目(14)——基于FPGA的数字秒表设计

1.功能设计 设计内容及要求: 1.秒表最大计时范围为99分59. 99秒 2.6位数码管显示&#xff0c;分辨率为0.01秒 3.具有清零、启动计时、暂停及继续计时等功能 4.控制操作按键不超过二个。 2.设计思路 所采用的时钟为50M&#xff0c;先对时钟进行分频&#xff0c;得到100HZ频率…

编程基础 - 初识Linux

编程基础 - 初识Linux 返回序言及专栏目录 文章目录 编程基础 - 初识Linux前言一、Linux发展简介二、现代Linux三、Linux系统各发行版小结 前言 为什么要学习Linux呢&#xff1f;我这Windows用得好好的&#xff0c;简单易用傻瓜式、用的人还超多&#xff01;但是我要告诉你的…

Transformer模型中前置Norm与后置Norm的区别

主要介绍原始Transformer和Vision Transformer中的Norm层不同位置的区别。 文章目录 前言 不同位置的作用 总结 前言 在讨论Transformer模型和Vision Transformer (ViT)模型中归一化层位置的不同&#xff0c;我们首先需要理解归一化层&#xff08;Normalization&#xff09;在…

阿里云大模型「让照片跳舞」刷屏朋友圈,有哪些信息值得关注?

介绍 大家好&#xff0c;我分享聊聊阿里通义千问APP中全民舞王功能。 网络热舞结合AI视频&#xff0c;这是以后不用学习跳舞&#xff1f; 可以尝试下效果&#xff0c;一张图片生成视频。 APP快速使用 搜索下载通义千问APP 打开APP&#xff0c;选中一张照片来跳舞。 这里…

了解webpack

1 概念 webpack是一个模块打包工具&#xff0c;他将各种不同类型的文件最终都打包成.js、.css、.png、.jpg4个类型的静态资源。 2 特点 模块化开发 用webpack之前&#xff0c;项目都是在html中引入一个个js文件来开发&#xff1b;而在webpack中&#xff0c;一切皆模块&#xf…

我的2023年总结:往前看,别回头

2023年已经结束&#xff0c;我借此机会回顾一下我的2023年&#xff0c;同时也为2024年立好flag。 文章目录 2023印象深刻的实战经历技术成长与规划技术分享与交流CSDN博客参加百度apollo技术讨论会 深入学习Redis源码多彩的生活张杰演唱会《漫长的季节》&#xff1a;往前看&am…

bat批处理文件_输出内容到文本

文章目录 1、echo str > test.txt&#xff08;覆盖原有内容&#xff09;2、echo str >> test.txt&#xff08;不覆盖原有内容&#xff0c;追加&#xff09; 1、echo str > test.txt&#xff08;覆盖原有内容&#xff09; 2、echo str >> test.txt&#xff0…

代码随想录 718. 最长重复子数组

题目 给两个整数数组 nums1 和 nums2 &#xff0c;返回 两个数组中 公共的 、长度最长的子数组的长度 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,3,2,1], nums2 [3,2,1,4,7] 输出&#xff1a;3 解释&#xff1a;长度最长的公共子数组是 [3,2,1] 。 示例 2&#xff1…

如何用离散二维卷积公式描述卷积过程(说实话,我没搞懂为什么索引为什么设置成对称的模式。)

问题描述&#xff1a;如何用离散二维卷积公式描述卷积过程&#xff08;说实话&#xff0c;我没搞懂为什么索引为什么设置成对称的模式。&#xff09; 众所周知&#xff0c;描述图像卷积过程&#xff0c;可以使用图形法描述&#xff0c;也可以用公式法描述&#xff0c;但是具体用…

第十课:计算机心理学、教育科技及奇点,天网,计算机的未来

第十课&#xff1a;计算机心理学、教育科技及奇点&#xff0c;天网&#xff0c;计算机的未来 第三十八章&#xff1a;计算机心理学0、计算机中用到的心理学原理1、易用度2、颜色强度排序和颜色排序3、分组更好记4、直观功能5、认出VS回想6、让机器有一定的情商以及Facebook的研…

新兴电商平台都有哪些?新手做哪个比较盈利?

我是电商珠珠 近年来的电商平台层出不穷&#xff0c;由于购物方式发生了改变&#xff0c;传统的电商模式已经不能满足当前人们的需求&#xff0c;所以在抖音推出电商-抖音小店后&#xff0c;让整个电商圈发生了全新的改变。 抖音小店的出现顺势将直播电商带了起来&#xff0c…

计算机研究生论文检索方法汇总

计算机研究生论文检索方法汇总 作为一名优质(冤种)计算机在读研究生&#xff0c;检索论文是一项不可或缺的技能之一。 一、paperwithcode paperswithcode是一个免费开放的资源平台&#xff0c;提供了机器学习领域的论文、代码、数据集、方法和评估表。在这里我们可以检索不同…

Python|使用Missingno库可视化缺失值(NaN)

在真实世界数据集的情况下&#xff0c;数据集中的某些值丢失是非常常见的。我们将这些缺失值表示为NaN&#xff08;非数字&#xff09;值。但是要构建一个好的机器学习模型&#xff0c;我们的数据集应该是完整的。这就是为什么我们使用一些插补技术来用一些可能的值替换NaN值。…

DevOps(6)

目录 26.如何在Linux下跨不同的虚拟桌面共享程序&#xff1f; 27.无名&#xff08;空&#xff09;目录代表什么&#xff1f; 29.什么是守护进程&#xff1f; 30.如何从一个桌面环境切换到另一个桌面环境&#xff0c;例如从KDE切换到Gnome? 26.如何在Linux下跨不同的虚拟桌面…

你的网站或许不需要前端构建(二)

前一阵&#xff0c;有朋友问我&#xff0c;能否在不进行前端编译构建的情况下&#xff0c;用现代语法开发网站界面。 于是&#xff0c;就有了这篇文章中提到的方案。 写在前面 这篇文章&#xff0c;依旧不想讨论构建或不构建&#xff0c;哪一种方案对开发更友好&#xff0c;…

MySQL——视图

目录 一.视图介绍 二.基本使用 三.视图规则和限制 一.视图介绍 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表&#xff0c;基表的数据变化也会影响到视图。 二.基本使用 创…

【mysql django】解决Django提示mysql版本过低

目录 一、解决Django提示mysql版本过低&#xff1a;django.db.utils.NotSupportedError: MySQL 8 or later is required (found 5.7.26) 一、解决Django提示mysql版本过低&#xff1a;django.db.utils.NotSupportedError: MySQL 8 or later is required (found 5.7.26) 报错&…

Netty初探:掌握高性能网络通信框架,提升Java网络编程技能

Netty初探 NIO 的类库和 API 繁杂 &#xff0c; 使用麻烦&#xff1a; 需要熟练掌握Selector、 ServerSocketChannel、SocketChannel、 ByteBuffer等。 开发工作量和难度都非常大&#xff1a; 例如客户端面临断线重连、 网络闪断、心跳处理、半包读写、 网络拥塞和异常流的处…

2.C++的编译:命令行、makefile和CMake

1. 命令行编译 命令行编译是指直接在命令行中输入以下指令&#xff1a; 预处理&#xff1a;gcc -E main.c -o main.i 编译&#xff1a;gcc -S main.i -o main.s 汇编&#xff1a;gcc -c main.s -o main.o 链接&#xff1a;gcc main.o -o main 命令汇总&#xff1a;gcc main.c …