Mysql注意事项(一)

news2024/9/21 19:29:05

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.coloradmin.cn/o/1943568.html

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

相关文章

每日刷题记录(codetop版)

7.21 7.22 7.23 复习7.21和7.22

每日OJ_牛客DD1 连续最大和

目录 牛客DD1 连续最大和 解析代码 牛客DD1 连续最大和 连续最大和_牛客题霸_牛客网 解析代码 本题是一个经典的动规问题,简称dp问题,但这个问题是非常简单的dp问题,而且经常会考察,所以一定要把这个题做会。本题题意很简单&am…

探寻安全新时代:叉车AI智能影像防撞系统,守护生命之光

在繁忙的工业现场,叉车司机常常面临着视线受阻的困境,那些被货物遮挡的盲区,仿佛隐藏着无法预知的危险。然而,这样的隐患在一次惨痛的事故中暴露无遗,一名无辜的行人因叉车司机的视线受阻而不幸被撞身亡。这起悲剧让我…

机械设计基础B(学习笔记)

绪论 机构:是一些具备各自特点的和具有确定的相对运动的基本组合的统称。 组成机构的各个相对运动部分称为构件。构件作为运动单元,它可以是单一的整体,也可以是由几个最基本的事物(通常称为零件)组成的刚性结构。 构件…

python·数据分析基础知识

numpy 一个数值计算包 python列表与numpy矩阵区别 python中修改列表元素和列表相加 for循环 :[x1 for x in a] 多个元素需要用zip捆绑:[xy for(x,y) in zip(a,b)] numpy矩阵自动进行相应元素计算 np.array()1各元素1 ab各元素相加 a*b矩阵相乘或者是…

爬虫学习4:爬取王者荣耀技能信息

爬虫:爬取王者荣耀技能信息(代码和代码流程) 代码 # 王者荣耀英雄信息获取 import time from selenium import webdriver from selenium.webdriver.common.by import By if __name__ __main__:fp open("./honorKing.txt", "…

C++的UI框架和开源项目介绍

文章目录 1.QT2.wxWidgets3.Dear ImGui 1.QT QT的开源项目:QGIS(地理信息系统) https://github.com/qgis/QGIS?tabreadme-ov-file 2.wxWidgets wxWidgets的开源项目:filezilla https://svn.filezilla-project.org/svn/ wxWidg…

Matplotlib折线图绘制秘籍:让你的数据线条比过山车还刺激!

1. Matplotlib_折线图 折线图(line chart)是我们日常工作中经常使用的一种图表,它可以直观的反应数据的变化趋势 # 导包 import numpy as np import pandas as pd import matplotlib.pyplot as plt# 如果浏览器不显示图片,就需要…

面试场景题系列--(1)如果系统的 QPS 突然提升 10 倍该怎么设计?--xunznux

1. 如果系统的 QPS 突然提升 10 倍该怎么设计? 1.1 硬件的扩展微服务的拆分 如果所有的业务包括交易系统、会员信息、库存、商品等等都夹杂在一起,当流量一旦起来之后,单体架构的问题就暴露出来了,机器挂了所有的业务就全部无法…

kafka集群搭建-使用zookeeper

1.环境准备: 使用如下3台主机搭建zookeeper集群,由于默认的9092客户端连接端口不在本次使用的云服务器开放端口范围内,故端口改为了8093。 172.2.1.69:8093 172.2.1.70:8093 172.2.1.71:8093 2.下载地址 去官网下载,或者使用如…

达梦索引组织表和堆表

达梦数据库默认创建的是索引组织表,‌而Oracle数据库默认创建的是堆表。‌这两种表类型的区别主要体现在数据存储和组织方式上: 索引组织表(‌Index Organized Table, IOT):‌ 索引组织表‌有且仅有一个聚簇索引键。索引组织表也称“普通表”…

UGUI优化篇--UGUI合批

UGUI合批 UGUI合批规则概述UGUI性能查看工具合批部分的特殊例子一个白色image、蓝色image覆盖了Text,白色image和Text哪个先渲染 Mask合批Mask为什么会产生两个drawcallMask为什么不能合批Mask注意要点 RectMask2D为什么RecMask2D比Mask性能更好主要代码RectMask2D注…

【笔记】学习记录

2024年7月23日 1.图的5中存储方式 2.二叉树的先序,中序,后序遍历。 学了图的存储方式之后,二叉树好像就是小菜一碟一样。注意一下名词的顺序就可以了。 所谓先中后序,就是先根,中根,后根的差别。没有其…

数据库练习-3

查询要求: 查询代码:

Apache2服务介绍

apache2 安装使用配置web访问配置虚拟主机配置代理正向代理反向代理 官网 互联网上排名第一的 HTTP 服务器,Apache HTTP 服务器项目致力于开发和维护适用于现代操作系统(包括 UNIX 和 Windows)的开源 HTTP 服务器。该项目的目标是提供安全、…

【系列教程之】1、点亮一个LED灯

1、点亮一个LED灯 作者将狼才鲸创建日期2024-07-23 CSDN教程目录地址:【目录】8051汇编与C语言系列教程本Gitee仓库原始地址:才鲸嵌入式/8051_c51_单片机从汇编到C_从Boot到应用实践教程 本源码包含C语言和汇编工程,能直接在电脑中通过Keil…

SQL性能优化秘籍:如何避免计算导致索引失效

适用于MySQL、PostgreSQL、Oracle等各种数据库的优化技巧 问题剖析 设想我们为customer表的c_acctbal列创建了一个B树索引c_acctbal_idx,以加速相关查询。然而,一个看似无害的计算可能会阻碍索引的使用。比如这样的查询: SELECT * FROM cus…

二次元手游《交错战线》游戏拆解

交错战线游戏拆解案 游戏亮点即核心趣味 一、关键词: 回合制游戏、二次元、机甲、横板、剧情、养成、异星探索。 二、游戏亮点: 符合目标群体审美的原画。 三、核心趣味: 抽卡、肝或者氪金解锁新皮肤。 核心玩法及系统规则 核心玩法&…

海外IP代理科普:代理池有什么用?代理池大小的影响

在当今数字化时代,网络爬虫已经成为获取各类信息必不可少的工具。在大规模数据抓取中,使用单一 IP 地址或同一 IP 代理往往会面临抓取可靠性降低、地理位置受限、请求次数受限等一系列问题。为了克服这些问题,构建代理池成为一种有效的解决方…

【Android Compose】ListView效果

【Android Compose】ListView效果 1、Column、Row 和 Box2、LazyColumn和LazyRow3、Compose 中的状态4、ListView效果5、android-compose-codelabs Jetpack Compose 使用入门 Jetpack Compose 教程 Jetpack Compose 1、Column、Row 和 Box Compose 中的三个基本标准布局元素是 …