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.mzph.cn/pingmian/50488.shtml

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

相关文章

51单片机-第四节-定时器

一、定时器: 1.介绍: 单片机内部实现的计时系统。 作用:代替长时间Daley,提高cpu效率。 数量:至少2个,T0,T1,T2等。其中T0,T1为所有51单片机共有,T2等为不…

爬虫提速!用Python实现多线程下载器!

✨ 内容: 在网络应用中,下载速度往往是用户体验的关键。多线程下载可以显著提升下载速度,通过将一个文件分成多个部分并行下载,可以更高效地利用带宽资源。今天,我们将通过一个实际案例,学习如何用Python实…

typecho仿某度响应式主题Xaink

新闻类型博客主题,简洁好看,适合资讯类、快讯类、新闻类博客建站,响应式设计,支持明亮和黑暗模式 直接下载 zip 源码->解压后移动到 Typecho 主题目录->改名为xaink->启用。 演示图: 下载链接: t…

【proteus经典项目实战】51单片机用计数器中断实现100以内的按键计数并播放音乐

一、简介 一个基于8051微控制器的计数器系统,该系统能够通过按键输入递增计数,并且能够在达到100时归零。该系统将使用计数器中断和外部中断来实现其功能。 51单片机因其简单易用和成本效益高,成为电子爱好者和学生的首选平台。通过编程单片…

最新风车IM即时聊天源码及完整视频教程2024年7月版

堡塔面板 试验性Centos/Ubuntu/Debian安装命令 独立运行环境(py3.7) 可能存在少量兼容性问题 不断优化中 curl -sSO http://io.bt.sy/install/install_panel.sh && bash install_panel.sh 1.宝塔环境如下: Nginx 1.20 Tomcat 8 MySQL 8.0 R…

构造+有序集合,CF 1023D - Array Restoration

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1023D - Array Restoration 二、解题报告 1、思路分析 先考虑合法性检查: 对于数字x,其最左位置和最右位置 之间如果存在数字比x小,则非法 由于q次操作,第q…

GPT-4o mini:AI技术的平民化革命

目录 引言一、GPT-4o mini简介二、性能表现三、技术特点四、价格与市场定位五、应用场景六、安全性与可靠性七、未来展望八、代码示例结语 引言 在人工智能的浪潮中,大模型技术一直是研究和应用的热点。然而,高昂的成本和复杂的部署常常让许多企业和开发…

基于DMASM镜像的DMDSC共享存储集群部署

DMv8镜像模式共享存储集群部署 环境说明 操作系统:centos7.6 服务器:2台虚拟机 达梦数据库版本:达梦V8 安装前准备工作 参考文档《DM8共享存储集群》-第11、12章节 参考文档《DM8_Linux服务脚本使用手册》 1、系统环境(all nodes) 1…

学生党蓝牙耳机什么牌子的比较好?四大高性价比蓝牙耳机推荐

作为学生党,如果在有限的预算内选到一款合适自己的蓝牙耳机,那我们的生活和学习会增加很多的乐趣和便利,那面对市面上百元到千元不等的蓝牙耳机,学生党蓝牙耳机什么牌子的比较好?身为一名蓝牙耳机重度依赖者&#xff0…

AES算法分析:加密解密

✨主题简介 🔐 随着信息安全的重要性日益凸显,数据加密成为保护隐私和敏感信息的关键手段。本期我们将带你用Python实现AES加密解密,掌握这一强大的数据保护技术! 📚内容介绍 🔍 AES(Advanced…

结构型设计模式-组合模式

一、组合模式 对于这个图片肯定会非常熟悉,上图我们可以看做是一个文件系统,对于这样的结构我们称之为树形结构。在树形结构中可以通过调用某个方法来遍历整个树,当我们找到某个叶子节点后,就可以对叶子节点进行相关的操作。可以将…

开始尝试从0写一个项目--前端(三)

器材管理板块 添加器材管理导航 src\views\home\Home.vue src\router\index.js src\views\equipment\Equipment.vue <template><div>hello!</div></template> 测试 搜索导航分页查询 src\views\equipment\Equipment.vue <template><div&…

Discourse 备份和恢复中有关附件的问题

下面的这个问题是在官方论坛上网友问的内容是&#xff1a; 我想问一下&#xff0c;备份和附件分别挂载了不同的S3 备份的时候会把附件的S3里面的内容也都一起备份了吗&#xff1f;如果不选择包含上传的图片和附件&#xff0c;那么恢复备份的时候&#xff0c;附件用的S3里面的内…

【区块链+绿色低碳】雄韬智慧锂电储能管理系统 | FISCO BCOS应用案例

雄韬智慧锂电储能管理系统&#xff08;Energy Management System&#xff0c;以下简称 EMS&#xff09;是雄韬集团响应国家实现新型电力 系统建设&#xff0c;助力“碳达峰、碳中和”目标而自主开发的创新智慧锂电储能系统。 系统采用了 FISCO BCOS 联盟链&#xff0c;融合了物…

Java 8 中 20 个高频面试题及答案

文章目录 前言20 道高频题问题 1&#xff1a;给定一个整数列表&#xff0c;使用 Stream 函数找出列表中所有的偶数&#xff1f;问题 2&#xff1a;给定一个整数列表&#xff0c;使用 Stream 函数找出所有以 1 开头的数字&#xff1f;问题 3&#xff1a;如何使用 Stream 函数在给…

【C++题解】1782. 字符图形2-星号倒直角

问题&#xff1a;1782. 字符图形2-星号倒直角 类型&#xff1a;嵌套循环、图形输出 题目描述&#xff1a; 打印字符图形。 输入&#xff1a; 一个整数&#xff08; 0<n<10 &#xff09;。 输出&#xff1a; 一个字符图形。 样例&#xff1a; 输入&#xff1a; 3…

微信Android一面凉经(2024)

微信Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《微信Android一面凉经(2024)》。 面试职位: 微信-客户端开发工程师-基础功能(广州) And…

D语言

提起编程语言&#xff0c;相信大家第一时间想到的肯定都是C,但是相信资历较大的程序员们都不会忘记D语言 D语言自 1999 年发布至今已发展了 20 年 它既拥有 Java 那样强大的表现力 又具有 C 相当的性能 却因为 2.x 版本破坏性升级 导致社区大量核心开发者将其放弃。 2010 年——…

Ubuntu22.04系统安装nodejs 14 保姆级教程

下载软件包 从NodeSource 的官方源下载并安装 Node.js 14.x 版本的软件包&#xff0c;适用于 Debian 和 Ubuntu 系统&#xff1a; curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - 更新软件源 更新软件源 sudo apt-get update 下载bodejs14 下载nodejs14 sud…

双指针算法的实现(三题详解)

这是C算法基础-基础算法专栏的第十五篇文章&#xff0c;专栏详情请见此处。 ps&#xff1a;转眼间暑假已过半&#xff0c;我在这段时间也积累了很多文章&#xff0c;所以到开学&#xff08;9月1日&#xff09;为止&#xff0c;每个周我将会在周三和周六发文章(o&#xff9f;▽&…