Mysql注意事项(一)

Mysql注意事项(一)

最近回顾了一下MySQL,发现了一些MySQL需要注意的事项,同时也作为学习笔记,记录下来。–2020年05月13日

1、通配符*

检索所有的列。

不建议使用

通常,除非你确定需要表中的每个列,否则最好别使用*通配符,虽然使用通配符可能会使你自己省事,不用明确列出所需列,但检索不需要的列通常会降低检索和应用程序的性能。

优点

由于不明确指定列名(因为星号检索每个列),所以能检索出名字未知的列。

2、DISTINCT

用于检索不同的行(去重)。

不能部分使用DISTINCT

DISTINCT关键字应用于所有列而不仅是前置它的列。如果给出SELECT DISTINCT vend_id,prod_price FROM products ;会查找出vend_id和prod_price都不相同的内容,而不是vend_id去除重复,除非指定的两个列都不同,否则所有列都将被检索出来。

示例:

表数据:z

SELECT * FROM products;

结果:共14条记录

表数据

使用DISTINCT获取供应商

SELECT DISTINCT vend_id FROM products;

结果:共4条记录

获取供应商

部分使用DISTINCT

SELECT DISTINCT vend_id,prod_price FROM products;

结果:共12条记录

部分使用DISTINCT

结果查出了vend_id和prod_price都不相同的内容;

3、LIMIT

限制结果,指定返回的行

使用方法

示例:

SELECT prod_name 
FROM products
LIMIT 5;

结果:返回前5行

LIMIT使用

示例:获取行3开始的4行,即第4至第8行

SELECT prod_name 
FROM products
LIMIT 3,4;

等价于:从行3开始取4行

SELECT prod_name 
FROM products
LIMIT 4 OFFSET 3;

LIMIT使用

注意:行0

行0 :检索出来的第一行为行0而不是行1.因此,LIMIT 1,1将检索出第二行而不是第一行。

4、ORDER BY

排序数据,降序DESC,升序ASC(默认,即如果不指定DESC、也不指定ASC,则默认为ASC)

在多个列上降序排序

如果想在多个列上进行降序排序,必须对每个列指定DESC关键字。

ORDER BY 子句的位置

在给出ORDER BY 子句时,应该保证它位于FROM子句之后,如果使用LIMIT,它必须位于ORDER BY 之后。使用子句的次序不对将产生错误消息。

5、WHERE

过滤数据

  1. WHERE子句的位置

    在给出WHERE子句时,应该保证它位于FROM子句之后,如果同时使用ORDER BY,应该让ORDER BY位于WHERE 之后,否则将会产生错误。

  2. BETWEEN 范围值检查

    BETWEEN匹配范围中的所有值,包括指定的开始值和结束值

  3. NULL 空值检查

    NULL 无值,它与字段包含0,、空字符串或仅仅包含空格不同。

  4. NULL与不匹配

    IS NULLIS NOT NULL为空不为空

    --IS NULL
    SELECT cust_id 
    From customers
    where cust_email IS NULL;-- IS NOT NULL
    SELECT cust_id 
    From customers
    where cust_email  IS NOT NULL;
    

    在过滤数据时,一定要验证返回数据中确定给出了被过滤列具有NULL的行。

  5. AND、OR

    注意:AND比OR的优先级更高,建议在WHERE子句中使用圆括号;

    示例:(未使用圆括号)

    SELECT prod_name,prod_price
    FROM products
    WHERE vend_id=1002 OR vend_id=1003 AND prod_price>=10;
    

    结果:

    LIMIT使用

    分析:

    SQL在处理OR操作符之前,优先处理AND操作符。当SQL看到上述的WHERE子句时,它理解为由供应商1003制造的任何价格为10美元(含)以上的产品,或者由供应商1002制造的任何产品,不管其价格如何。换句话说,由于AND在计算次序中优先级更高,操作符被错误的组合了。

  6. IN、NOT

    • IN操作符

      与OR操作符相比较,IN有如下优点(建议替换OR):

      • 在使用长的合法选项清单时,IN操作符的语法更清楚且更直观;
      • 在使用IN时,计算次序更容易管理(因为使用的操作符更少);
      • IN操作符一般比OR操作符清单执行更快;
      • IN最大的优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。
    • NOT操作符

      使用NOT对IN、BETWEEN和EXISTS子句取反。

6、LIKE、通配符%和_

LIKE指示MYSQL,后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较,匹配整个列

示例1:

SELECT prod_name
FROM products
WHERE prod_name LIKE '1000'

结果:不会返回prod_name为1000的行

%表示任何字符出现任意次数;

示例2:使用了通配符%的LIKE

SELECT prod_name
FROM products
WHERE prod_name LIKE '%1000'

结果:不会返回prod_name为1000的行

LIMIT使用

_表示任意单个字符出现一次。

通配符搜索的处理一般比其他搜索所花时间更长

NULL与%通配符

%通配符几乎可以匹配任何东西,但是不能匹配NULL

通配符使用技巧

  • 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
  • 在确定需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始出。把通配符置于搜索模式的开始处,搜索起来是最慢的。
  • 仔细注意通配符的配置。如果放错地方,可能不会返回想要的数据。

7、日期和时间处理函数

MySQL使用的日期格式为yyyy-mm-dd;

日期比较

示例:

SELECT cust_id,order_num,order_date
FROM orders
WHERE order_date='2005-09-01'

结果:

LIMIT使用

注意:使用*WHERE order_date=’2005-09-01*‘ 可靠吗?

order_date的数据类型为datetime,这种类型存储日期和时间值,表中的时间值为*00:00:00*,但实际中很可能并不总是这样。比如:order_date值为2005-09-01 11:30:05,则*WHERE order_date=’2005-09-01’*失败,即使给出具有该日期的一行,也不会检索出来,因为WHERE匹配失败

解决方案

使用Date()函数。*Date(order_date)*函数指示MySQL仅提取列的日期部分,更可靠的SELECT语句为:

SELECT cust_id,order_num,order_date
FROM orders
WHERE DATE(order_date)='2005-09-01'

结果:

LIMIT使用

建议

如果要的是日期,请使用Date()

如果你想要的仅是日期,则使用Date()是一个良好的习惯,即使你如果知道相应的列只包含日期也是如此。这样,如果由于某种原因表中以后有日期和时间值,你的SQL代码也不用改变。当然,也存在一个Time()函数,在你只想要时间时应该使用它。

8、聚集函数

AVG()函数

通过对表中行数计算并计算特定列值之和,求得该列的平均值。

只能用于单列 。AVG()只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出。为了获得多个列的平均值,必须使用多个AVG()函数。

NULL值 。AVG()函数忽略列值为NULL的行。

COUNT()函数

  • 使用COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值

  • 使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值

    示例1:

SELECT COUNT(*) AS num_cust
FROM customers;

结果1:对所有行计数,不管行中各列有什么值

LIMIT使用

示例2:

SELECT COUNT(cust_email) AS num_cust
FROM customers;

结果2:对cust_email列中有值的计数

LIMIT使用

### MAX()函数、MIN()函数

MAX()返回指定列中的最大值;

MIN()返回指定列中的最小值。

对非数值数据使用MAX()或MIN() 返回文本列中的最大值或最小值。

SUM()函数

用来返回指定列值的和(总计)。

示例1:

SELECT SUM(quantity) AS items_ordered
FROM orderitems
WHERE order_num=20005;

结果1:

LIMIT使用

在多列上进行计算 利用标准的算术操作符,所有聚集函数都可用来执行多个列上的计算。

示例2:

SELECT SUM(item_price*quantity) AS items_ordered
FROM orderitems
WHERE order_num=20005;

结果2:

LIMIT使用

聚集不同值

对聚合函数AVG()、COUNT()、MAX()、MIN()、SUM()的使用:

  • 对所有的行执行计算,指定ALL参数或不给参数(因为ALL是默认行为);
  • 只包含不同的值,指定DISTINCT参数。

使用DISTINCT,查询特定供应商提供的产品的平均价格。

示例:

SELECT AVG(DISTINCT prod_price) AS avg_price
FROM products
WHERE vend_id=1003;

结果:使用了DISTINCT,平均值只考虑各个不同的价格

LIMIT使用

注意:如果指定列名,则DISTINCT只能用于COUNT()。DISTINCT不能用于COUNT(),因此不允许使用COUNT(DISTINCT)*,否则会产生错误。类似的,DISTINCT必须使用列名,不能用于计算或表达式。

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

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

相关文章

vue3前端开发-小兔鲜项目-form表单的统一校验

vue3前端开发-小兔鲜项目-form表单的统一校验!实际上,为了安全起见,用户输入的表单信息,要满足我们的业务需求,参数类型等种种标准之后,才会允许用户向服务器发送登录请求。为此,有必要进行一次…

重拾CSS,前端样式精读-函数(颜色,计算,图像和图形)

前言 本文收录于CSS系列文章中,欢迎阅读指正 在计算机编程中,函数有着重要的作用和意义,它可以实现封装,复用,模块化,参数等功能效果,在如何在CSS中写变量?一文带你了解前端样式利…

sql注入的专项练习 sqlilabs(含代码审计)

在做题之前先复习了数据库的增删改查,然后自己用本地的环境,在自己建的库里面进行了sql语句的测试,主要是回顾了一下sql注入联合注入查询的语句和sql注入的一般做题步骤。 1.获取当前数据库 2.获取数据库中的表 3.获取表中的字段名 一、sql…

Python升级打怪—Django入门

目录 一、Django简介 二、安装Django 三、创建Dajngo项目 (一) 创建项目 (二) 项目结构介绍 (三) 运行项目 (四) 结果 一、Django简介 Django是一个高级Python web框架,鼓励快速开发和干净、实用的设计。由经验丰富的开发人员构建,它解决了web开…

学习笔记-系统框图简化求传递函数公式例题

简化系统结构图求系统传递函数例题 基础知识回顾 第四讲 控制系统的方框图 (zhihu.com) 「自控原理」2.3 方框图的绘制及化简_方框图化简-CSDN博客 自动控制原理笔记-结构图及其等效变换_结构图等效变换-CSDN博客 例子一 「自控原理」2.3 方框图的绘制及化简_方框图化简-CS…

PYTHON学习笔记(八、字符串及的使用)

目录 1、字符串 1.1、字符串的常用操作 1.2、格式化字符串 1.2.1、占位符格式化字符串 1.2.2、f-string格式化字符串 1.2.3、str.format( )格式化字符串 1.3、数据的验证 1.4、正则表达式 1.5.1元字符 1.5.2限定符 1.5.3其他字符 1.5.4re模块 1、字符串 1.1、字符…

文件解析的终极工具:Apache Tika

文件解析的终极工具:Apache Tika Apache Tika 简介 Apache Tika 是一个开源的、跨平台的库,用于检测、提取和解析各种类型文件的元数据。 它支持多种文件格式,包括文档、图片、音频和视频。 Tika是一个底层库,经常用于搜索引擎…

Python | Leetcode Python题解之第279题完全平方数

题目: 题解: class Solution { public:// 判断是否为完全平方数bool isPerfectSquare(int x) {int y sqrt(x);return y * y x;}// 判断是否能表示为 4^k*(8m7)bool checkAnswer4(int x) {while (x % 4 0) {x / 4;}return x % 8 7;}int numSquares(i…

【Linux】基本指令1

文章目录 1. find2. which3. alias4.whereis5.grep6. sort 、uniq7. linux怎么编辑文件中的内容 1. find 1.1 find: 查找文件所在的位置。(当我们进行find搜索的时候,可能需要访问磁盘进而导致效率低下。) 1.2 find / file.txt 在Linux系统是…

室内消防逃生通道占用检测AI算法:科技筑防,守护生命通道

随着城市化进程的加快,高层建筑和大型公共场所的数量急剧增加,消防安全问题愈发凸显。其中,室内消防逃生通道的畅通性直接关系到火灾发生时人员的安全疏散。然而,由于各种原因,如杂物堆放、车辆停放等,消防…

使用nginx解决本地环境访问线上接口跨域问题

前言 前端项目开发过程中,经常会遇到各种各样的跨域问题。 虽然大部分时候,由脚手架自带的proxy功能即可解决问题,如webpack,vite等;但是若没有通过脚手架搭建项目,或者必须使用某些特殊规则转发时&#…

== 与 equals 的区别

概念 它的作用是判断两个对象的地址是不是相等,判断两个对象是不是同一个对象基本数据类型比较的是值是否相等引用数据类型比较的是内存地址是否相等 equals() 概念 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:情况1:类没有…

Typora笔记上传到CSDN

1.Typora 安装 Typora链接:百度网盘 提取码:b6d1 旧版本是不需要破解的 后来的版本比如1.5.9把放在typora的根目录下就可以了 2.上传到CSDN 步骤 csdn 写文章-使用MD编辑器-导入本地md文件即可 问题 图片没法显示 原因 图片的链接是本地的 当然没法…

洛谷 P9854 [CCC 2008 J1] Body Mass Index

这题让我们计算出 BMI 值,随后判断属于哪个等级。 BMI 值计算公式: ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​。 BMI 范围 对应信息 …

C++ | Leetcode C++题解之第279题完全平方数

题目: 题解: class Solution { public:// 判断是否为完全平方数bool isPerfectSquare(int x) {int y sqrt(x);return y * y x;}// 判断是否能表示为 4^k*(8m7)bool checkAnswer4(int x) {while (x % 4 0) {x / 4;}return x % 8 7;}int numSquares(i…

PDF解锁网站

https://smallpdf.com/cn/unlock-pdfhttps://smallpdf.com/cn/unlock-pdfhttps://www.freemypdf.comhttps://www.freemypdf.com

hadoop完全分布模式搭建

本次搭建是基于伪分布式进行的,所以配置之前需要搭建好伪分布式 我使用的ubuntu版本见下 虚拟机之前安装过在此不在记录 伪分布式的搭建过程在之前的第一次实验报告上有详细的记录 修改主机名 设置 hosts 文件 ssh 无密码登录 过程不再演示 免密登录成功图 …

基于联咏 NT98692芯片赋能边缘计算IP摄像机与XVR监控系统解决方案

联咏 NT98692 是一款新世代整合度极高的 SoC,具有高影像品质、低位元率、低功耗,针对 8Kp30 边缘运算 IP 摄影机与后端监控系统 XVR 应用。此 SoC 整合了 ARM Quad Cortex A73 CPU 核心、新一代 ISP 和 AI ISP、H.265/H.264 视讯压缩编解码器、DSP、高效…

【微信小程序实战教程】之微信小程序原生开发详解

微信小程序原生开发详解 微信小程序的更新迭代非常频繁,几乎每个月都会有新版本发布,这就会让初学者感觉到学习的压力和难度。其实,我们小程序的每次版本迭代都是在现有小程序架构基础之上进行更新的,如果想要学好小程序开发技术&…

Pytorch使用教学4-张量的索引

1 张量的符号索引 张量也是有序序列,我们可以根据每个元素在系统内的顺序位置,来找出特定的元素,也就是索引。 1.1 一维张量的索引 一维张量由零维张量构成 一维张量索引与Python中的索引一样是是从左到右,从0开始的&#xff…