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.xdnf.cn/news/1486460.html

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

相关文章

微软研发致胜策略 06:学无止境

这是一本老书,作者 Steve Maguire 在微软工作期间写了这本书,英文版于 1994 年发布。我们看到的标题是中译版名字,英文版的名字是《Debugging the Development Process》,这本书详细阐述了软件开发过程中的常见问题及其解决方案&a…

【运维】软件运维方案(2024word完整版)

1. 文档介绍 2. 人员与责任 3. 运维过程内容 4. 运维资源 5. 运维服务规划保障 6. 事件处置 7. 质量改进 8. 运维边界及内容 获取方式: 本文末个人名片直接获取。

2024年技校大数据实验室建设及大数据实训平台整体解决方案

随着信息技术的迅猛发展,大数据已成为推动产业升级和社会进步的重要力量。为适应市场需求,培养高素质的大数据技术人才,技校作为职业教育的重要阵地,亟需加强大数据实验室的建设与实训平台的打造。本方案旨在提出一套全面、可行的…

宿舍生活新升级:智能指纹锁的便捷体验(嘉立创EDA设计)

宿舍生活新升级:智能指纹锁的便捷体验 引言 宿舍生活总是充满挑战和乐趣,但有时也会因为一些小事情而变得复杂。比如,忘记带钥匙或者需要频繁地给室友开门。随着科技的发展,智能设备逐渐走进我们的生活,为日常带来便…

土耳其媒体发稿深化项目投放战略-脱颖而出

土耳其媒体发稿深化项目投放战略-脱颖而出 一、土耳其媒体的发展概况 土耳其拥有丰富的媒体资源,其中包括许多知名的新闻机构和周刊。随着互联网的普及和信息传播方式的变革,土耳其媒体不断调整发展策略,通过深化项目投放和多元化传播&…

代码随想录——一和零(Leetcode474)

题目链接 0-1背包 class Solution {public int findMaxForm(String[] strs, int m, int n) {// 本题m,n为背包两个维度// dp[i][j]:最多右i个0和j个1的strs的最大子集大小int[][] dp new int[m 1][n 1];// 遍历strs中字符串for(String str : strs){int num0 …

JESD204B学习与仿真

平台:vivado2018.3 芯片:xcku115-flva1517-2-i 场景:在高速ADC和DAC芯片中,有使用源同步的时钟和数据同步传输的方式,但是需要在逻辑内部对其进行校准。如果使用jesd204b接口传输数据,设计人员不需要了解…

从零训练一个多模态LLM:预训练+指令微调+对齐+融合多模态+链接外部系统

本文尝试梳理一个完整的多模态LLM的训练流程。包括模型结构选择、数据预处理、模型预训练、指令微调、对齐、融合多模态以及链接外部系统等环节。 01 准备阶段 1 模型结构 目前主要有三种模型架构,基于Transformer解码器,基于General Language Model&a…

【Python系列】Excel 文件到文本文件的转换

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

深入浅出理解 C 语言中的 qsort 函数

目录 引言 一、什么是qsort 二、函数原型 1.qsort函数 2.比较函数 三、qsort函数使用示例 1.使用qsort排序整形数据 2.使用qsort排序结构数据 总结 引言 在编程中,排序是一个常见且重要的操作。C 语言标准库提供了一系列排序函数,其中 qsort 函…

【java计算机毕设】在线教学平台MySQL springboot vue HTML maven小组设计项目源代码+文档 寒暑假作业

目录 1项目功能 2项目介绍 3项目地址 1项目功能 【java计算机毕设】在线教学平台MySQL springboot vue HTML maven小组设计项目源代码文档 寒暑假作业 2项目介绍 系统功能: 在线教学平台包括管理员、用户、教师三种角色。 管理员功能包括个人中心模块用于修改个…

BioVendor:hsa-miR-21-5p miREIA kit

hsa-miR-21-5p是最具代表性的miRNA生物标志物。 hsa-miR-21-5p作为典型的onco-miRNA,它能够调节多种癌症相关的靶基因,如脑癌,肺癌,结肠直肠癌,胰腺癌,乳腺癌,胃癌,食管癌和肝细胞癌…

【自动驾驶汽车通讯协议】SPI通讯:深入理解与应用

文章目录 0. 前言1. 工作原理2. 模式与配置2.1 CPOL (Clock Polarity)2.2 CPHA (Clock Phase)2.3 组合模式 3. 特性与优势4. 在自动驾驶汽车中的应用5. 结论 0. 前言 按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见…

LeetCode 58.最后一个单词的长度 C++

LeetCode 58.最后一个单词的长度 C 思路🤔: 先解决当最后字符为空格的情况,如果最后字符为空格下标就往后移动,直到不为空格才停止,然后用rfind查询空格找到的就是最后一个单词的起始位置,最后相减就是单词…

建投数据人力资源系列产品获得欧拉操作系统及华为鲲鹏技术认证书

近日,经欧拉生态创新中心和华为技术有限公司测评,建投数据自主研发的人力资源管理系统、招聘管理系统、绩效管理系统、培训管理系统,完成了基于欧拉操作系统openEuler 22.03、华为鲲鹏Kunpeng 920(Taisha 200)的兼容性…

Python:字典进一步应用

tips:window用win; 调出表情包,mac用ctrcmd空格键 try!不同心情对应不同的表情包 messageinput(">") # 分隔符 将字符串以 为终止符,进行划分 wordsmessage.split( ) emojis{":)":"😄&qu…

深度刨析C语言中的动态内存管理

文章目录 1.为什么会存在动态内存分配2.动态内存函数介绍2.1 [malloc](https://legacy.cplusplus.com/reference/cstdlib/malloc/?kwmalloc)与[free](https://legacy.cplusplus.com/reference/cstdlib/free/?kwfree)2.2 [calloc](https://legacy.cplusplus.com/reference/cst…

Unity 批处理详讲(含URP)

咱们在项目中,优化性能最重要的一个环节就是合批处理,,在早期Unity中,对于合批的处理手段主要有三种: Static Batching Dynamic Batching GPU Instancing 如今Unity 为了提升合批范围与效率,提供了…

防火墙中的会话表及用户认证

防火墙相关技术: 1.会话表技术 会话表技术 --- 提高转发效率的关键 --- 老化机制 1,会话表老化时间过长 --- 占用资源,导致一些会话无法正常建立 2,老化时间过短 --- 会导致一些需要长时间发送一次的报文强行终端,…

Windows下ORACLE数据泵expdp和impdp使用

Windows下ORACLE数据泵expdp和impdp使用 一、基础环境 操作系统:Windows server 2008; 数据库版本:Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production 数据库工具:PL/SQL 12.0.7 实验内容&…