Mysql注意事项(二)

news2024/11/24 3:04:38

Mysql注意事项(二)

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

接上一篇Mysql注意事项(一)

9、分组数据

GROUP BY

规定:

  • GROUP BY子句可以包含任意数目的列
  • 如果在GROUP BY子句中嵌套了分组,数据将在最后规定的分组上进行汇总
  • GROUP BY 子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式。不能使用别名
  • 除聚集函数外,SELECT语句中的每个列都必须在GROUP BY子句中给出
  • 如果分组中具有NULL值,则NULL将作为一个分组返回。如果有多行NULL值,它们将分为一组
  • GROUP BY 子句必须出现在WHERE子句之后,ORDER BY子句之前

使用ROLLUP

使用WITH ROLLUP关键字,可以得到每个分组以及每个分组汇总级别的值,即聚合函数结果的总数。

示例1:

select vend_id,sum(prod_price) as num_prods
from products
group by vend_id WITH ROLLUP;

结果1:

使用ROLLUP

示例2:

select vend_id,count(*) as num_prods
from products
group by vend_id WITH ROLLUP;

结果2:

使用ROLLUP

HAVING(过滤分组)

HAVING基于完整的分组进行过滤,WHERE过滤指定的是行而不是分组。

WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤

分组和排序

ORDER BYGROUP BY
排序产生的输出分组行。但输出可能不是分组的顺序
任意列都可以使用(甚至非选择的列也可以使用)只可能使用选择列或表达式列,而且必须使用每个选择表达式
不一定需要如果与聚集函数一起使用(或表达式),则必须使用

不要忘记ORDER BY

一般在使用GROUP BY子句时,应该也给出ORDER BY子句。这是保证数据正确排序的唯一方法。千万不要仅依赖GROUP BY排序数据。

10、SELECT子句及其顺序(非常重要)

从上到下,依次执行

子句说明是否必须使用
SELECT要返回的列或表达式
FROM从中检索数据的表仅在从表选择数据时使用
WHERE行级过滤
GROUP BY分组说明仅在按组计算聚集时使用
HAVING组级过滤
ORDER BY输出排序顺序
LIMIT要检索的行数

11、子查询

子查询:嵌套在其他查询中的查询。

  1. 子查询总是从内向外查询。

  2. 列必须匹配

    在WHERE子句中使用子查询,应该保证SELECT语句具有与WHERE子句中相同数目的列。通常,子查询将返回单个列并且与单个列匹配,但如果需要也可以使用多个列。

  3. 子查询和性能

    使用子查询并不总是执行这种类型的数据检索的最有效的方法。

12、JOIN(联结)

联结是一种机制,用来在一条SELECT语句中关联表,因此称之为联结。

维护引用完整性 指示MySQL只允许在products表的供应商ID列中出现合法值(即出现在vendors表中的供应商)。这就是维护引用完整性。通过在表的定义中指定主键和外键来实现

完全限定列名 在引用的列可能出现二义性时,必须使用完全限定列名(用一个点分隔的表名和列名)。

不要忘了WHERE子句 应该保证所有联结都有WHERE子句,否则MySQL将返回比想象的数据多得多的数据。

性能考虑 MySQL运行在运行时关联指定的每个表以处理联结。这种处理可能是非常耗费资源的,因此应该仔细,不要联结不必要的表,联结的表越多,性能下降越厉害。

INNER JOIN(内部联结)

基于两个表中间的相等测试的联结,称为等值联结,也称为内部联结。

示例:

SELECT vend_name,prod_name,prod_price
FROM vendors INNER JOIN products
ON vendors.vend_id = products.vend_id;

自联结

示例:

使用子查询:

SELECT prod_id,prod_name
FROM products
WHERE vend_id = (SELECT vend_id
                FROM products
                WHERE prod_id = 'DTNTR')

使用自联结:

SELECT p1.prod_id,p1.prod_name
FROM products AS p1,products AS p2
WHERE p1.vend_id = p2.vend_id
AND p2.prod_id = 'DTNTR';

用自联结而不用子查询

自联结通常作为外部语句用来替代从相同表中检索数据时使用的子查询语句。虽然最终的结果是相同的。但有时候处理联结远比处理子查询快得多。应该试一下两种方法,以确定哪一种的性更好。

外部联结(OUTER JOIN)

联结包含了那些在相关表中没有关联行的行,这种类型的联结称为外部联结。

使用OUTER JOIN语法时,必须使用RIGHT或LEFT关键字指定包括其所有行的表,RIGHT指出的是OUTER JOIN右边的表,二LEFT指出的是OUTER JOIN左边的表。

示例:LEFT OUTER JOIN(左联结)

SELECT customers.cust_id,orders.order_num
FROM customers LEFT OUTER JOIN orders
ON customers.cust_id = orders.cust_id;

结果:

LEFT_JOIN

示例:RIGHT OUTER JOIN(右联结)

SELECT customers.cust_id,orders.order_num
FROM customers RIGHT OUTER JOIN orders
ON customers.cust_id = orders.cust_id;

结果:

RIGHT_JOIN

使用带聚集函数的联结

示例:

SELECT customers.cust_name,
customers.cust_id,
COUNT(orders.order_num) AS num_ord
FROM customers LEFT OUTER JOIN orders
ON customers.cust_id = orders.cust_id
GROUP BY customers.cust_id;

结果:

LEFT_JOIN_COUNT

13、UNOIN(组合查询)

执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回,这些组合查询通常称为并(union)或复合查询(compound query)。

示例:

SELECT vend_id,prod_id,prod_price
FROM products
WHERE prod_price <= 5
UNION
SELECT vend_id,prod_id, prod_price
FROM products
WHERE vend_id IN (1001,1002);

结果:

UNION

UNION规则

  • UNOIN必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔。
  • UNION中的每个查询必须包含相同的列、表达式或聚集函数
  • 列数据类型必须兼容:类型不必完全相同,但必须是DBMS可以隐含地转换的类型。

包含或取消重复的行

UNION从查询结果集中自动去除了重复的行。

如果想返回所有的行(不去除重复的行),可以使用UNION ALL而不是UNION

对组合查询结果排序

在使用UNION组合查询时,只能使用一条ORDER BY子句,它必须出现在最后一条SELECT语句之后

示例:

SELECT vend_id,prod_id,prod_price
FROM products
WHERE prod_price <= 5
UNION
SELECT vend_id,prod_id, prod_price
FROM products
WHERE vend_id IN (1001,1002)
ORDER BY vend_id,prod_price;

结果:

UNION_ORDER_BY

14、全文本搜索

并非所有引擎都支持全文本搜索。

为进行全文本搜索,必须索引被搜索的列。

在索引之后,SELECT可与Match()和Against()一起使用以实际执行搜索。

示例:

SELECT note_text
FROM productnotes
WHERE Match(note_text) Against('rabbit');

结果:

Match_Against

注意:productnotes表中的note_text必须添加索引。

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

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

相关文章

数据库对象中出现复杂的对象嵌套,如何使用Mybatis plus优雅的解决这个问题:

起因 类原型&#xff1a; 在User类&#xff1a; package com.itheima.mp.domain.po;import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType; import java.time…

小技巧:如何在已知PDF密码情况下去掉PDF的密码保护

第一步&#xff0c;用Edge打开你的pdf&#xff0c;输入密码进去 第二步&#xff0c;点击打印 第三步&#xff0c;选择导出PDF&#xff0c;选择彩印 第四步&#xff0c;选择导出位置&#xff0c;导出成功后打开发现没有密码限制了&#xff01;

Json结构解析比较

文章目录 前言正文一、项目简介二、核心代码1、 JavaBeanParser2、 JsonStructCompare3、 Client 测试结果 前言 本次练习&#xff0c;主要是针对于两个Json的结构差异。 多用于测试场景&#xff0c;比如一个很大的Json报文&#xff0c;需要和现有的Json报文对比&#xff0c;看…

Robot Operating System——Service的同步/异步通信

大纲 Service模式的服务端请求响应函数启动Service停止Service完整代码 Service模式的客户端异步模式的客户端完整代码 同步模式的客户端完整代码 测试长期运行的服务发送请求响应一次的服务发送请求 参考资料 在ROS 2中&#xff0c;除了 《Robot Operating System——topic的…

汇昌联信科技拼多多怎么样?

汇昌联信科技拼多多怎么样?汇昌联信科技是一家专注于提供电子商务解决方案的公司&#xff0c;其业务涉及多个电商平台&#xff0c;其中就包括了国内知名的电商平台——拼多多。对于汇昌联信科技在拼多多上的表现&#xff0c;我们可以从以下几个方面来进行深入的探讨和分析。 一…

智慧校园灵动资源调配系统【SpringBoot+Vue】(Java课设)

客官进来看一眼呗&#xff0c;有惊喜&#xff01;【帮你解决烦恼】&#xff1a;Java课设和计Java毕设太难不会做怎么办&#xff1f; 系统类型 【SpringBootVue】类型的系统 使用范围 适合作为Java课设&#xff01;&#xff01;&#xff01; 部署环境 jdk1.8Idea 运行效果…

2024.7.22 作业

1.将双向链表和循环链表自己实现一遍&#xff0c;至少要实现创建、增、删、改、查、销毁工作 循环链表 looplinklist.h #ifndef LOOPLINKLIST_H #define LOOPLINKLIST_H#include <myhead.h>typedef int datatype;typedef struct Node {union {int len;datatype data;}…

Jetpack Compose 通过 OkHttp 发送 HTTP 请求的示例

下面是一个使用 Kotlin 和 Jetpack Compose 来演示通过 OkHttp 发送 HTTP 请求的示例。这个示例包括在 Jetpack Compose 中发送一个 GET 请求和一个 POST 请求&#xff0c;并显示结果。 添加okhttp依赖 首先&#xff0c;在你的 build.gradle.kts 文件中添加必要的依赖&#xf…

解决:uniapp 小程序 使用swiper 内部嵌套另外一个拥有左右滑动组件导致滑动冲突

解决办法 在swiper-item 内增加这个属性进行包裹 touchmove.stop <div touchmove.stop><qiun-data-charts type"area" :opts"optsStg" :chartData"dateDataStg" /> </div>

最优化理论与方法-第十讲-对偶理论的基本性质和割平面法

文章目录 1. 向量化拉格朗日对偶函数2. 对偶问题是凹函数3. 对偶问题转换4. 外逼近法4.1 步骤4.2 注意事项 1. 向量化拉格朗日对偶函数 ( D ) max ⁡ d ( λ , μ ) s t . λ i ≥ 0 , i 1 , ⋯ , m , d ( λ , μ ) min ⁡ x ∈ X { f ( x ) ∑ i 1 m λ i g i ( x ) ∑ …

传神社区|数据集合集第7期|法律NLP数据集合集

自从ChatGPT等大型语言模型&#xff08;Large Language Model, LLM&#xff09;出现以来&#xff0c;其类通用人工智能&#xff08;AGI&#xff09;能力引发了自然语言处理&#xff08;NLP&#xff09;领域的新一轮研究和应用浪潮。尤其是ChatGLM、LLaMA等普通开发者都能运行的…

CrowdStrike更新致850万Windows设备宕机,微软紧急救火!

7月18日&#xff0c;网络安全公司CrowdStrike发布了一次软件更新&#xff0c;导致全球大范围Windows系统宕机。 预估CrowdStrike的更新影响了将近850万台Windows设备&#xff0c;多行业服务因此停滞&#xff0c;全球打工人原地放假&#xff0c;坐等吃瓜&#xff0c;网络上爆梗…

TCP并发服务器多线程

1.创建线程‐‐pthread_create int pthread_create( pthread_t *thread, // 线程 ID 无符号长整型 const pthread_attr_t *attr, // 线程属性&#xff0c; NULL void *(*start_routine)(void *), // 线程处理函数 void *arg); // 线程处理函数 参数&#xff1a; pthrea…

EXCEL怎么自动添加表格吗?

第一步&#xff0c;选中需要添加表格的范围 第二步&#xff0c;点击开始&#xff0c;选择条件格式&#xff0c;“使用公式确定要设置格式的单元格” 第三步&#xff0c;编辑规则说明加上<>"" 第四步&#xff0c;点击边框&#xff0c;选择外边框确定即可&#x…

STM32CubeIDE(CAN)

目录 一、概念 1、简述 2、CAN 的几种模式 二、实践 1、环回模式轮询通信 1.1 软件配置 1.2 代码编写 2、环回模式中断通信 2.1 软件配置 2.2 代码编写 一、概念 1、简述 STM32微控制器系列包含多个型号&#xff0c;其中一些型号集成了CAN&#xff08;Controller Are…

用移动硬盘装系统里面资料会全删吗?误装系统怎么办

使用‌移动硬盘装系统是一种可行的选择&#xff0c;尤其是当你需要在多台电脑上使用相同的操作系统时。然而&#xff0c;对于初次尝试的新手来说&#xff0c;可能会有一些疑虑&#xff1a;在将移动硬盘用作系统安装盘后&#xff0c;原有的数据是否会被完全删除&#xff1f;如果…

邮件安全篇:邮件反垃圾系统运作机制简介

1. 什么是邮件反垃圾系统&#xff1f; 邮件反垃圾系统是一种专门设计用于检测、过滤和阻止垃圾邮件的技术解决方案。用于保护用户的邮箱免受未经请求的商业广告、诈骗信息、恶意软件、钓鱼攻击和其他非用户意愿接收的电子邮件的侵扰。 反垃圾系统的常见部署形式 2. 邮件反垃圾…

3GPP眼中的XR及其技术特点

3GPP R18 支持了XR Services。XR需要高数据速率和低延迟通信&#xff0c;这也真是5G可以大展身手的地方。这篇就从3GPP的角度看下XR是什么以及XR有哪些技术特点。 Extended Reality (XR) 是指由计算机技术和可穿戴设备生成的所有现实与虚拟相结合的环境和人机交互技术。 实际上…

【ELK】window下ELK的安装与部署

ELK的安装与部署 1. 下载2. 配置&启动2.1 elasticsarch2.1.1 生成证书2.1.2 生成秘钥2.1.3 将凭证迁移到指定目录2.1.4 改配置2.1.5 启动2.1.6 访问测试2.1.7 生成kibana账号 2.2 kibana2.2.1 改配置2.2.2 启动2.2.3 访问测试 2.3 logstash2.3.1 改配置2.3.2 启动 2.4 file…

SQL injection UNION attacks SQL注入联合查询攻击

通过使用UNION关键字&#xff0c;拼接新的SQL语句从而获得额外的内容&#xff0c;例如 select a,b FROM table1 UNION select c,d FROM table2&#xff0c;可以一次性查询 2行数据&#xff0c;一行是a&#xff0c;b&#xff0c;一行是c&#xff0c;d。 UNION查询必须满足2个条…