mysql学习

DISTINCT 检索不同行

该关键字的作用就是用来去重,可以将你所要展示的数据中完全相同的去重,只展示一个;

LIMIT 限制结果

该关键字的作用就是你限制它返回几条数据,比如你想要获得前面5行的据,就可以使用limit 5,加在sql语句最后面;你也可以指定返回指定位置的数据,LIMIT 5,5表示MySQL返回从行5开始的5行,第一个数为开始位置,第二个数为要检索的行数;此处要注意的是,检索出来的第一行为行0而不是行1;这点和数组很相似,都是在0索引开始储存数据;

ORDER BY 对结果进行排序

ORDER BY 关键字是默认升序排列,要是想要降序排列,就要使用DESC关键字;

注意:这里排序的依据是根据字母顺序来进行排序的,但是对数字也使用;

IN操作符

IN操作符起到的作用和or是一样的

NOT操作符

它的功能只有一个,就是否定它之后所跟的所有条件;

LIKE操作符

在搜索子句使用通配符,必须使用LIKE操作符

最常用的通配符是百分号(%)。在搜索串中,%表示任何字符出现任意次数。(注意不能匹配NULL)

还有一个有用的通配符就是下划线(_),下划线的用途和%一样,但是下划线只匹配单个字符而不是多个字符。

通配符可以在搜索模式中任意位置使用,并且可以使用多个通配符

与%能够匹配0个字符不一样,_总是匹配一个字符,不能多也不能少。

使用通配符的技巧

1.不要过度使用通配符,如果其他操作符能够达到相同的目的,应该使用其他的通配符;

2.在确实需要使用通配符时,除非绝对有必要,否则不要把他们用在搜索模式的开始处,把通配符置于搜索模式的开始处,搜索起来是最慢的;

3.仔细注意通配符的位置,如果放错地方,就可能不会返回想要的数据;

REGEXP操作符

REGEXP后面跟的东西作为正则表达式处理;

然后[ ]是另一种形式的OR语句,[123]Ton是[1|2|3]Ton的缩写,也可以使用后者。

字符集合也可以被否定,在集合的开始处放一个^即可,因此尽管[123]匹配字符1,2或3,但是[^123]却匹配出这些字符外的任何东西。

然后可以表示查找范围,[0123456789]表示可以查找0~9的所有数字,为了简化,可以用[0-9]表示;不仅只适用于数字,[a-z]匹配任意字母字符。

有的时候想要查找一些特殊字符,这时候就需要使用\\为前导,\\-表示查找-,\\.表示查找 . 。

正则表达式内具有特殊意义的所有字符都必须以这种方式转义;

你可能会需要寻找所有的数,不管数字中包含多少数字,或者你可能想寻找一个单词并且还能够适应一个尾随的s,等等;

拼接字段

Concat操作符

在MySQL的select语句里面,可使用Concat( )这个函数来实现拼接两个列。

注意:

多数DBMS使用+或||来实现拼接,MySQL则使用Concat( )这个函数来实现,当把SQL语句转换成MySQL语句时一定要把这个区别铭记在心。

当你的数据库里面的数据最右边有空格,但是你又不想得到得到这些空格,这可以通过使用MySQL的PTrim()函数来实现,如下所示:

AS操作符

从前面的输出中可以看到,select语句拼接地址字段工作的很好,但此新计算列的名字是什么呢?实际上它没有名字,它只是一个值。如果仅仅只是查看的话没有任何问题,但是如果你要是使用里面的数据的话,就要用AS关键字赋予别名,之后就可以通过别名来进行调用该拼接的数据;

对数据进行计算(可以通过AS命名来直接得到计算后的结果列)

细节:select Now();可以返回当前日期和时间;

函数

大多数SQL实现支持以下类型的函数:

  • 用于处理文本串(如删除或者填充值,转换值为大写或者小写)的文本函数;
  • 用于在数值数据上进行算数操作(如返回绝对值,进行代数运算)的数值函数;
  • 用于处理日期和时间值并且从这些值中提取特定的成分(例如,返回两个日期值差,检查日期有效性等)的日期和时间函数。
  • 返回DBMS正使用的特殊信息(如返回用户登录信息,检查版本细节)的系统函数;

函数例子:

一般,应用程序不使用用来存储日期和时间的格式,因此日期和时间函数总是被用来读取,统计和处理这些值。由于这个原因,日期和时间函数在MySQL语言中具有重要的作用。

小细节,在数据库中存储时间一般都是日期加时间,如下所示:

然而我们查找数据的时候有时只用查找它的日期,这个时候就要用Date( )函数来得到这个日期;

如果要的是日期,请使用Date();如果你想要的仅仅是日期,则使用Data()是一个良好的习惯;

数值处理函数

数值处理函数仅用于处理数值数据,这些函数一般主要用于代数,三角或者几何运算,因此没有串或者日期-时间处理函数的使用那么频繁,但是具有讽刺意义的是,在主要的DBMS的函数中,数值函数是最一致最同意的函数。(用的少却最统一)

聚集函数

我们经常需要汇总数据而不用将它们实际检索出来。为此MySQL提供了专门的函数。使用这些函数,MySQL查询可用于检索数据,以便分析和报表生成,这种类型的检索例子有以下几种:

  • 需要得到表中行数(或者满足某个条件或者包含某个特定值的行数)。
  • 获得表中行组的和。
  • 找出表列(或所有行或者某些特定的行)的最大值,最小值和平均值。

聚集函数:运行在行组上,计算和返回单个值的函数。

小细节:AVG( )函数在使用时会忽略值为NULL的,而不是看为0来计算;

COUNT( )函数

COUNT( )函数进行计算,可利用COUNT()确定表中行的数目或者符合特定条件的行的数目;

COUNT( )函数有两种使用方式。

  • 使用COUNT(*)对表中的数目进行计算,不管表列种包含的是空值(NULL)还是非空值;
  • 使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值。

这个就是返回demo1表中的行数。

这个就是根据age列的数据来确定行数,这种算法忽略了age为NULL的行;

注意:如果指定列名,这指定列的值为NULL的行会被忽略,但是如果COUNT( )函数中使用的是星号( * ),则不忽略NULL;(我的理解就是 * 就是对所有的列进行检索,因为一行不可能所有的值都为NULL,所以COUNT(*)会得到所有的行数)

DISTINCT关键字

DISTINCT关键字就相当于去重的功能,就是相同的数据就只算它一次

例如下面的例子:

select avg(distinct age) from demo1;

这个在计算demo1中的平均年龄时,就只考虑不相同的数据,出现过的年龄就不会在计算了;

这里用单条SELECT语句执行了四个聚集计算,返回4个值;

小结:聚集函数用来汇总数据,MySQL支持一系列聚集函数,可以用多种方法使用它们以返回所需的结果,这些函数是高效设计的,他们返回结果一般比你在自己的客户机应用程序中计算要快的多。(其实我们可以将所有的数据得到,然后自己在客户端进行计算得到最大值,最小值,平均值等,但是这样的话用的时间会很多,想要节省时间的话,就可以使用聚集函数来计算,这样是很高效的)

分组数据

学习了聚集函数,我们就可以计算指定数据的行数,最大值,最小值等,但是每次只能计算一组,比如说我想知道每个群聊的群聊人数,不使用分组数据的话,就只能使用where来一个群聊一个群聊的查询,但是使用了分组数据之后, 我们就能够一次性查询到所有群聊的人数啥的,大大减少代码量和提高速度;

要用到GROUP BY子句;

上面的SELECT语句指定了两个列,一个是group_id(群id),另一个num_user是计算字段(用COUNT(*)函数建立),GROUP BY子句指示MySQL按group_id排序并且分组数据,这导致对每个group_id而不是整个表计算num_user一次;

除了能用GROUP BY分组数据为,MySQL还允许过滤分组,就是得到满足一些条件的分组,这就要用到HAVING关键字;

这个例子过滤了群聊人数小于4的组;

HAVING和WHERE的差别

这里有另一种理解方法,WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤(在书写时也是WHERE在GROUP BY 的前面,HAVING在后面);

这个例子是先将群成员里面等级等于1的数据过滤掉,然后再过滤群人数小于3的组;

SELECT子句顺序

小结:这里主要学习了如何用SQL聚集函数对数据进行汇总计算,学会了使用GROUP BY子句对数据组进行这些汇总计算,还学会了使用HAVING子句过滤特定的组,还知道了ORDER BY和GROUP BY之间以及WHERE和HAVING之间的差异;

子查询

当我们使用关系表来存储数据时,想要查询数据就会变的麻烦一点,就比如用户表和好友关系表,当我要查询一个用户的所有好友的好友信息时,就要先再关系表里面找到他的好友的id然后根据这个id在用户表中得到该好友的所有信息,这样会比较麻烦,我们可以使用子查询来节省时间和提高效率;

这个例子就是现在关系表里面找到该用户的所有好友id,然后通过这个id在用户表里面查询好友资料;

子查询虽然能够达到这个效果,但是使用子查询并不总是执行这种类型的数据检索的最有效的方法;后面还会学习有关的方法;

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

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

相关文章

java 区分缺陷Defects/感染Infections/失败Failure

java 区分缺陷Defects/感染Infections/失败Failure 缺陷Defects 软件故障总是从代码中一个或多个缺陷的执行开始。 缺陷只是一段有缺陷、不正确的代码。 缺陷可能是程序语句的一部分或完整部分,也可能对应于不存在但应该存在的语句。 尽管程序员要对代码中的缺陷负…

利用Servlet编写第一个“hello world“(续)

利用Servlet编写第一个“hello world“ 🔎通过插件 Smart Tomcat 简化 打包代码 与 部署 操作下载Smart Tomcat配置Smart Tomcat 🔎Servlet 中的常见错误404(Not Found)🍭请求路径出错🍭war 包未被正确加载 405(Method Not Allowe…

【ChatGPT】ChatGPT自动生成思维导图

参考视频:https://edu.csdn.net/learn/38346/613917 应用场景:自学,“研一学生如何学习机器学习”的思维导图 问:写一个“研一学生如何学习机器学习”的思维导图内容,以markdown代码块格式输出 # 研一学生如何学习…

统计学的假设检验/置信区间计算

假设检验的核心其实就是反证法。反证法是数学中的一个概念,就是你要证明一个结论是正确的,那么先假设这个结论是错误的,然后以这个结论是错误的为前提条件进行推理,推理出来的结果与假设条件矛盾,这个时候就说明这个假…

《JavaEE》HTTPS

文章目录 HTTPS起源HTTPS对称加密非对称加密两者的区别 HTTPS的安全问题使用对称加密正常交互黑客入侵解决方案 非对称加密引入非对称加密后的流程 中间人攻击黑客的入侵方案加入后的流程解决方案黑客再次加注解决方案 ​👑作者主页:Java冰激凌 &#x1…

毫米波雷达信号处理中的通道间相干与非相干积累问题

说明 相干和非相干积累是雷达信号处理中的常用方法,这两个概念一般是用在多脉冲积累这个问题上:积累可以提高信号的SNR,从而提高检出概率。不过本文内容与脉冲积累无关,本文讨论的话题是将这两个概念(non-coherent combination、c…

HCIA-MSTP替代技术之链路捆绑(LACP模式)

目录 手工链路聚合的不足: LACP链路聚合的原理 LACP模式: LACPDU: 1,设备优先级: 设备优先级的比较是:先比较优先级大小,0到32768,越小优先级越高,如果优先级相同&a…

OpenAI再出新作,AIGC时代,3D建模师的饭碗危险了!

大家好,我是千与千寻,也可以叫我千寻哥,说起来,自从ChatGPT发布之后,我就开始焦虑,担心自己程序员的饭碗会不会哪天就被AIGC取代了。 有人说我是过度焦虑了,但是我总觉有点危机感肯定没有坏处。…

【017】C++ 指针变量详解,理解指针变量

C 指针变量详解 引言一、内存概述二、指针变量2.1、地址和指针变量的关系2.2、定义指针变量2.3、指针变量的初始化2.4、指针类型2.5、案例2.6、注意事项 三、数组元素的指针3.1、概述3.2、在使用中 [ ] 就是 *()的缩写3.3、指向同一数组的元素的两个指针变量间的关系 四、字符串…

UOS桌面系统使用RLinux恢复数据

UOS桌面系统使用RLinux恢复数据 一、工具介绍二、注意事项三、准备四、制作live系统启动盘五、拷贝文件六、进入live系统一、工具介绍 R-Linux 是一款用于 Linux 和某些 Unixes 操作系统 Ext2/Ext3/Ext4 FS 文件系统的免费文件恢复实用工具。R-Linux 与 R-Studio 使用相同的 I…

病毒分析丨plubx

作者丨黑蛋 一、基本信息 文件名称 00fbfaf36114d3ff9e2c43885341f1c02fade82b49d1cf451bc756d992c84b06 文件格式 RAR 文件类型(Magic) RAR archive data, v5 文件大小 157.74KB SHA256 00fbfaf36114d3ff9e2c43885341f1c02fade82b49d1cf451bc756d992c84b06 SHA1 1c251974b2e…

Nova 和 SuperNova:无需通用电路的通用机器执行证明系统

1. 引言 前序博客有: Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记SuperNova:为多指令虚拟机执行提供递归证明基于Nova/SuperNova的zkVMSangria:PLONK Folding2023年 ZK Hack以及ZK Summit 亮点记Sangria&…

ptp4l测试-LinuxPTP\ptp4l配置与问题排查

目录 一、前言 1.1 什么是ptp4l 1.2 描述 1.3 官网连接 1.4 目的 1.5 平台 二、 平台必要软件 2.1 linux物理机 2.2 imx6ull开发板 三、检查硬件是否支持 3.1 ifconfig查看当前网卡的名称 3.2 ethtool检查驱动和网卡是否支持 四、开启ptp4l服务 4.1 方法一&#x…

leetcode--环形链表.找到入环节点(java)

环形链表II 环形链表.找到入环节点题目描述解题思路 环形链表.找到入环节点 LeetCode 142:环形链表II 可以在这里测试 题目描述 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节…

电压放大器的主要指标有哪些方面

电压放大器是电子电路中常用的器件,在选择和评估电压放大器时,需要考虑以下几个主要指标: 输入电阻(Input Resistor):输入电阻是指放大器输入端的电阻值,它反映了放大器将输入信号转换成输出信号…

Linux驱动入门(二)——嵌入式处理器介绍和构建驱动程序开发环境

文章目录 嵌入式处理器和开发板介绍处理器简述处理器种类Intel的PXA系列处理器StrongARM系列处理器MIPS处理器摩托罗拉龙珠(DragonBall)系列处理器日立SH3处理器德州仪器OMAP系列处理器 ARM处理器ARM处理器简介ARM处理器的特点ARM处理器系列ARM处理器的应用ARM处理器选型 STM32…

Jupyter Notebook如何导入导出文件

目录 0.系统:windows 1.打开 Jupyter Notebook 2.Jupyter Notebook导入文件 3.Jupyter Notebook导出文件 0.系统:windows 1.打开 Jupyter Notebook 1)下载【Anaconda】后,直接点击【Jupyter Notebook】即可在网页打开 Jupyte…

初阶数据结构之栈的实现(五)

文章目录 😏专栏导读🤖文章导读🙀什么是栈?🙀画图描述 😳栈的代码实现及其各类讲解😳栈的初始化代码实现及其讲解😳栈的初始化 😳栈的销毁代码实现及其讲解😳…

PLX31-EIP-SIE 以太网/IP到西门子工业以太网

ProSoft Technology的EtherNet/IP to Siemens工业以太网通信网关允许支持EtherNet/IP的控制器或设备与西门子S7 PACs(包括S7-200s、S7-300s、S7-400s、S7-1200和S7-1500 PACs)之间进行高速双向数据传输。 此外,该网关还包括几个功能,包括数据优先级&…

横向移动-传递攻击SMB服务利用psexecsmbexec

win2012以上版本,关闭了wdigest 或者安装了 KB287199补丁。无法获取明文密码 总的来说就是win2012后无法获取明文密码 解决办法就是: 1.可以利用哈希hash传递(pth,ptk等进行移动) 2.利用其他服务协议(S…