数据库设计——DQL

news2024/11/17 23:36:29

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.coloradmin.cn/o/1359255.html

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

相关文章

2024最新Java基础面试题大全(一)

1、String可以被继承&#xff1f; 不能被继承&#xff0c;因为String类有final修饰符&#xff0c;而final修饰的类是不能被继承的。 public final class String implements java.io.Serializable, Comparable<String>, CharSequence {// 省略...  }2、常见集合类 Java…

C语言编译器(C语言编程软件)完全攻略(第十七部分:Dev C++使用教程(使用Dev C++编写C语言程序))

介绍常用C语言编译器的安装、配置和使用。 十七、Dev C使用教程&#xff08;使用Dev C编写C语言程序&#xff09; 前面我们给出了一段完整的C语言代码&#xff0c;就是在显示器上输出“C语言中文网”&#xff0c;如下所示&#xff1a; #include <stdio.h> int main() {…

Java 新手如何使用Spring MVC RestAPI的加密

目录 前言 为什么需要加密RestAPI&#xff1f; 使用Spring Boot创建RestAPI 使用HTTPS加密RestAPI 使用Spring Security增加安全性 使用JWT实现令牌身份验证 使用Postman测试加密的RestAPI 总结 前言 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业…

HarmonyOS应用开发之DevEco Studio安装与初次使用

1、DevEco Studio介绍 DevEco Studio是基于IntelliJ IDEA Community开源版本打造&#xff0c;面向华为终端全场景多设备的一站式集成开发环境&#xff08;IDE&#xff09;&#xff0c;为开发者提供工程模板创建、开发、编译、调试、发布等E2E的HarmonyOS应用/服务的开发工具。…

【谷歌云】注册谷歌云 创建Compute Engine

文章目录 一、Google Cloud注册1.1 账号信息1.2 付款信息验证1.3 验证成功 二、Compute Engine创建2.1 启动Compute Engine API2.2 创建实例2.3 新建虚拟机实例2.4 等待实例创建完成2.5 查看虚拟机配置信息2.6 创建防火墙规则2.7 SSH远程连接虚拟机 三、参考链接 一、Google Cl…

坐标经纬度的基本运算(2个坐标经纬度的距离、中心点坐标经纬度范围内的坐标计算)

现在的应用大都居于LBS服务&#xff0c;用户地理位置的获取&#xff08;经纬度坐标、所属行政区域&#xff09;&#xff0c;提供服务场所的地理位置也有行政区域信息和坐标信息。 用户与服务场所的联系&#xff0c;就近服务原则的设计&#xff0c;服务场所相对于用户的排序。 …

Java JDBC整合(概述,搭建,PreparedStatement和Statement,结果集处理)

一、JDBC的概述&#xff1a; JDBC&#xff1a;是一种执行sql语句的Java APL&#xff0c;可以为多种关系类型数据库提供统一访问&#xff0c;它由一组用Java语言编写的类和接口组成。有了JDBC&#xff0c;Java人员只需要编写一次程序就可以访问不同的数据库。 JDBC APL&#xf…

代码随想录算法训练营第17天 |110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和

目录 110.平衡二叉树 &#x1f4a1;解题思路 递归 &#x1f4bb;实现代码 257. 二叉树的所有路径 &#x1f4a1;解题思路 递归 &#x1f4bb;实现代码 404.左叶子之和 &#x1f4a1;解题思路 # 递归法 &#x1f4bb;实现代码 110.平衡二叉树 题目链接&#xff1a;…

Spring整合MyBatis项目代码示例

文章目录 Spring整合MyBatis项目代码示例1、创建如下结构的项目Spring_MyBatis2、在pom.xml文件中添加以下依赖并刷新maven3、在resources文件夹下添加spring等配置文件&#xff08;applicationContext.xml&#xff0c;db.properties&#xff0c;log4j.properties&#xff09;4…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)主线程反应堆模型的事件添加和处理详解

>>服务器和客户端建立连接和通信流程&#xff1a; 基于多反应堆模型的服务器结构图&#xff0c;这主要是一个TcpServer&#xff0c;关于HttpServer,主要是用了Http协议&#xff0c;核心模块是TcpServer。这里边有两种线程&#xff1a;主线程和子线程。子线程是在线程池里…

LeGO-LOAM 几个特有函数的分析(2)

接上回LeGO-LOAM 几个特有函数的分析&#xff08;1&#xff09; 二、广度优先遍历 广度优先遍历&#xff08;Breadth-First Search, BFS&#xff09;是一种用于遍历或搜索树或图的算法。这种算法从树的根&#xff08;或图的某一指定节点&#xff09;开始&#xff0c;然后探索…

软件测试|教你如何使用UPDATE修改数据

简介 在SQL&#xff08;Structured Query Language&#xff09;中&#xff0c;UPDATE语句用于修改数据库表中的数据。通过UPDATE语句&#xff0c;我们可以更新表中的特定记录或多条记录&#xff0c;从而实现数据的修改和更新。本文将详细介绍SQL UPDATE语句的语法、用法以及一…

selenium 用webdriver.Chrome 访问网页闪退解决方案

1.1.1. 解决方案&#xff1a; 1.1.1.1. 移动插件到谷歌的安装目录下 1.1.1.2. 设置环境变量 1.1.1.3. 重启电脑检查成功 解决时间&#xff1a;5min

Windows系统中Wireshark抓包工具的安装使用

在使用Windows服务器时&#xff0c;如果我们发现网络流量异常或存在异常的外发数据包行为&#xff0c;我们可以利用抓包工具来捕获网络流量包&#xff0c;并对这些流量包进行特征分析&#xff0c;以查看其来源和目的地。通过这些信息&#xff0c;我们可以进一步诊断问题。 以下…

第01章_C语言入门

第01章_C语言入门 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 适合对象 考研同学&#xff0c;且考试科目中包含数据结构等&#xff08;需要使用C/C写代码&#xff09;考研同学&#xff0c;考…

EG网关网口连接触控一体机操作说明V1.0 20210809

前言&#xff1a;工业现场中&#xff0c;很多情况下都会使用触摸屏连接PLC这一套设备&#xff0c;此一体机是将触摸屏和PLC两款设备集成到一起&#xff0c;可以简化现场设备结构&#xff0c;方便维护。同时&#xff0c;使用蓝蜂 EG系列网关&#xff0c;可以实现远程在线监控数据…

Unity AVProVideo安卓播放视频问题

Pico4播放全景8K视频播放不了&#xff0c;普通视频也播放不了解决方案&#xff1a; 1.Vulkan去掉&#xff0c;或者优先级放下面2.Pico4打包ARM64&#xff0c;插件里arm64里的几个库都设置arm64&#xff0c;平台选择安卓 Pico其他设置参考官方文档即可。

新手学习易语言中文编程,易语言从入门到精通教学

一、教程描述 本套教程共有100集&#xff0c;并且有大量的课件资料&#xff0c;可能是截止到目前为止&#xff0c;最为全面系统的易语言教程了&#xff0c;其中有些视频是.exe文件&#xff0c;可以下载到本地播放。本套易语言教程&#xff0c;大小14.59G&#xff0c;共有6个压…

凝聚层次聚类及DBscan算法详解与Python实例

凝聚层次聚类及DBscan算法详解与Python实例 凝聚层次聚类DBscan算法实例演示 在本篇博客中&#xff0c;我们将深入探讨凝聚层次聚类&#xff08;Agglomerative Hierarchical Clustering&#xff09;和DBscan算法&#xff0c;并通过Python实例演示它们的应用。这两种算法都属于聚…

Es6的Proxy代理是什么?有哪些用法?

一.什么是Proxy? Proxy 对象是ES6新出的一个特性&#xff0c;用于创建一个对象的代理&#xff0c;从而实现基本操作的拦截和自定义&#xff08;如属性查找、赋值、枚举、函数调用等&#xff09;。 需要知道的是&#xff0c;在Vue2中双向数据绑定原理&#xff08;数据劫持&…