数据库设计——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语句

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java】LockSupport原理与使用

LockSupport&#xff1a; 关键字段&#xff1a; private static final sun.misc.Unsafe UNSAFE;private static final long parkBlockerOffset; Unsafe&#xff1a;"魔法类"&#xff0c;较为底层&#xff0c;在LockSupport类中用于线程调度(线程阻塞、线程恢复等)。…

【Unity】如何在Unity中使用C#的NuGet 包资源

【背景】 Unity的脚本语言是C#&#xff0c;而C#有很多功能和能力可以通过nuget包提供。有没有办法把这些能力结合到Unity中一起使用呢&#xff1f;如果可以&#xff0c;那将大大扩展Unity中各类功能实现的便捷性。 【方法】 答案是&#xff1a;你可以&#xff01; 获取Nuge…

经典八股文之RocketMQ

核心概念 NameServer nameserver是整个rocketmq的大脑&#xff0c;是rocketmq的注册中心。broker在启动时向所有nameserver注册。生产者在发送消息之前先从 NameServer 获取 Broker 服务器地址列表(消费者一 样)&#xff0c;然后根据负载均衡算法从列表中选择一台服务器进行消…

SSM在线手机品牌商城----计算机毕业设计

项目介绍 该项目为前后台项目&#xff0c;分为普通用户与管理员两种角色&#xff0c;前台普通用户登录&#xff0c;后台管理员登录&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,用户管理,品牌管理,子品牌管理,商品管理,订单管理,留言板管理等功能。 用户角…

Note: A Journey Across Canada

A Journey Across Canada 一场横穿加拿大的旅行 across journey After a quiz last autumn, Kuang crossed the continent eastward to Toronto to visit his schoolmate, the distance measuring approximately 5000 kilometers. 去年秋天一次考试后&#xff0c;Kuang向东穿…

Ubuntu 安装 JMeter:为你的服务器配置做好准备

Apache JMeter 是一个开源的负载测试工具&#xff0c;可以用于测试静态和动态资源&#xff0c;确定服务器的性能和稳定性。在本文中&#xff0c;我们将讨论如何下载和安装 JMeter。 安装 Java&#xff08;已安装 Java 的此步骤可跳过&#xff09; 要下载 Java&#xff0c;请遵…

AI小冰入驻淘宝 将提供虚拟人陪伴服务

AI小冰正式入驻淘宝&#xff01; 据悉&#xff0c;小冰在淘宝开出了“小冰旗舰店”、以及手淘小程序“X Eva 克隆人的平行世界”&#xff0c;为消费者提供基于KOL虚拟人带来的陪伴服务体验。用户搜索“小冰旗舰店”就可以直达店铺进行选购。 ​小冰旗舰店的首批商品包括冰花直充…

【设计模式-5】抽象工厂模式的代码实现及使用场景

前面我们了解到工厂方法模式通过引入抽象工厂的概念&#xff0c;使得产品对象的创建可以依赖于具体工厂&#xff0c;但是这种设计模式最大的问题是会造成类的数量爆炸式增长。对于这个问题&#xff0c;抽象工厂模式通过引入两个新的概念&#xff1a;产品等级与产品簇&#xff0…

ant-design-vue 使用本地iconfont.js

createFromIconfontCN只能使用【在线资源】&#xff0c;但是在线资源存在不稳定的风险 有人提了issue&#xff0c;不过目前也没有解决&#xff0c;但是有人提出了一种新的的解决方案 参考链接&#xff1a; https://github.com/ant-design/ant-design/issues/16480 main.js im…

【UML建模】部署图(Deployment Diagram)

1.概述 部署图是一种结构图&#xff0c;用于描述软件系统在不同计算机硬件或设备上的部署和配置情况&#xff0c;以图形化的方式展示系统中组件、节点和连接之间的物理部署关系。 通过部署图&#xff0c;可以清晰地了解系统的物理结构和部署方式&#xff0c;包括系统组件和节…

prometheus grafana mysql监控配置使用

文章目录 前传bitnami/mysqld-exporter:0.15.1镜像出现了问题.my.cnf可以用这个"prom/mysqld-exporter:v0.15.0"镜像重要的事情mysql监控效果外传 前传 prometheus grafana的安装使用&#xff1a;https://nanxiang.blog.csdn.net/article/details/135384541 本文说…

软件测试|SQL AND和OR运算符解析

简介 在SQL&#xff08;Structured Query Language&#xff09;中&#xff0c;AND和OR是两个常用的逻辑运算符。它们用于组合条件来构建复杂的查询语句&#xff0c;帮助我们更精确地过滤和检索数据。本文将详细介绍SQL中的AND和OR运算符&#xff0c;包括其语法、用法以及使用时…

Matlab绘制动态心形线

1. 代码 for alpha0:0.1:30 x-1.8:0.001:1.8; y(x.^2).^(1/3)0.9*(3.3-x.^2).^(1/2).*sin(alpha*pi*x); plot(x,y,r-,LineWidth,1.2); set(gca,YGrid,on); axis([-3,3,-2,4]); text(-2,3.35,$f(x)x^{\frac{2}{3}}0.9(3.3-x^2)^{\frac{1}{2}}sin(\alpha\pi x)$,Interpreter,lat…

Python Gui图形化开发

PyQt5、Tkinter、Kivy等GUI工具&#xff0c;助你轻松构建Python应用。新手友好的PySimpleGUI&#xff0c;高交互性的PyForms&#xff0c;助你搭建理想用户界面。 学习编程&#xff0c;不仅要学习MySQL以及编程语言和并行架构之间的关系这类基础知识&#xff0c;还有一个重要的…

openGauss 5.0.0企业版一主一备安装部署

目录 一、环境准备 1. 华为云购买两台ECS 1.1查看openEuler版本&#xff0c;操作系统版本及CPU的制式是基础 1.2查看CPU模式 1.3操作系统环境准备 2. 集群配置XML文件准备&#xff1a; 2.1集群参数配置&#xff1a; 2.2主机参数配置&#xff1a; 2.3备机参数配置&…

静态网页设计——校园官网(HTML+CSS+JavaScript)

前言 声明&#xff1a;该文章只是做技术分享&#xff0c;若侵权请联系我删除。&#xff01;&#xff01; 使用技术&#xff1a;HTMLCSSJS 主要内容&#xff1a;对学校官网的结构进行模仿&#xff0c;对布局进行模仿。 主要内容 1、首页 首页以多个div对页面进行分割和布局…

Fiddler抓包工具之fiddler界面工具栏介绍

Fiddler界面工具栏介绍 &#xff08;1&#xff09;WinConfig&#xff1a;windows 使用了一种叫做“AppContainer”的隔离技术&#xff0c;使得一些流量无法正常捕获&#xff0c;在 fiddler中点击 WinConfig 按钮可以解除这个诅咒&#xff0c;这个与菜单栏 Tools→Win8 Loopback…

CSS 缩小旋转动画

<template><div class="container" @mouseenter="startAnimation" @mouseleave="stopAnimation"><!-- 旋方块 --><div class="box" :class="{ rotate-scale-down: isAnimating }"><!-- 元素内容…

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…

JavaWeb基础(3)-会话技术(cookie和session),过滤器(Filter),监听器(Listener)

JavaWeb基础&#xff08;3&#xff09;-会话技术(cookie和session)&#xff0c;过滤器(Filter)&#xff0c;监听器(Listener) 文章目录 JavaWeb基础&#xff08;3&#xff09;-会话技术(cookie和session)&#xff0c;过滤器(Filter)&#xff0c;监听器(Listener)8 会话技术(Coo…