Mysql注意事项(二)

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_idFROM productsWHERE 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.xdnf.cn/news/1486214.html

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

相关文章

英伟达、Mistral AI 开源企业级大模型,120亿参数、可商用

全球AI领导者英伟达&#xff08;Nvidia&#xff09;和著名开源大模型平台Mistral.ai联合开源了&#xff0c;企业级大模型Mistral NeMo 12B。&#xff08;以下简称“MN 12B”&#xff09; 据悉&#xff0c;MN 12B一共有基础和指令微调两种模型&#xff0c;支持128K上下文长度&a…

Spark-第一周

一、spark是什么 Spark是一种快速、通用、可扩展的大数据分析引擎 2009年诞生于加州大学伯克利分校AMPLab&#xff0c;2010年开源&#xff0c;2013年6月成为Apache孵化项目&#xff0c;2014年2月成为Apache顶级项目。 目前&#xff0c;Spark生态系统已经发展成为一个包含多个…

大语言模型-Bert-Bidirectional Encoder Representation from Transformers

一、背景信息&#xff1a; Bert是2018年10月由Google AI研究院提出的一种预训练模型。 主要用于自然语言处理&#xff08;NLP&#xff09;任务&#xff0c;特别是机器阅读理、文本分类、序列标注等任务。 BERT的网络架构使用的是多层Transformer结构&#xff0c;有效的解决了长…

如何用JavaScript实现视频观看时间追踪

在网页开发中&#xff0c;跟踪用户与多媒体内容&#xff08;如视频&#xff09;的互动是一项常见需求。无论是教育平台、数据分析&#xff0c;还是用户参与度统计&#xff0c;监控用户如何观看视频内容都能提供宝贵的见解。这篇文章将探索如何使用JavaScript实现视频播放时长的…

DC系列靶场---DC 2靶场的渗透测试(一)

信息收集 Nmap扫描 nmap -sV -p- -sC -T4 172.30.1.141 域名解析 echo 172.30.1.141 dc-2 >> /etc/hosts 目录枚举 gobuster dir -u http://172.30.1.141 -w work/lab/CTF/ATT_CK_01/SecLists-master/Discovery/Web-Content/big.txt -x .php,.rar,.html,.zip -t 20 -b…

【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…

ElMessage自动引入,样式缺失和ts esline 报错问题解决

一. 环境 "unplugin-auto-import": "^0.17.6", "vue": "^3.3.8", "vite": "^5.0.0", "typescript": "^5.2.2",二. ElMessage样式缺失问题. 以下有两种解决方法 方法一: 配置了自动引用后…

移动UI:运动风格具备什么特征,如何识别。

在移动UI设计中&#xff0c;具备以下特征可以归为运动风格&#xff1a; 1. 流畅的动画效果&#xff1a; 运动风格的UI设计通常会运用流畅的动画效果&#xff0c;例如过渡动画、元素的缓动效果等&#xff0c;以增强用户体验和吸引用户的注意力。 2. 动态的交互设计&#xff1a…

八股文之java基础

jdk9中对字符串进行了一个什么优化&#xff1f; jdk9之前 字符串的拼接通常都是使用进行拼接 但是的实现我们是基于stringbuilder进行的 这个过程通常比较低效 包含了创建stringbuilder对象 通过append方法去将stringbuilder对象进行拼接 最后使用tostring方法去转换成最终的…

python+onlyoffice+vue3项目实战20240722笔记,环境搭建和前后端基础代码

开发后端 先创建data目录,然后在data目录下创建一个test.docx测试文档。 后端代码: import json import req import api from api import middleware, PlainTextResponseasync def doc_callback(request):data = await api.req.get_json(request)print("callback ==…

PingCAP 王琦智:下一代 RAG,tidb.ai 使用知识图谱增强 RAG 能力

导读 随着 ChatGPT 的流行&#xff0c;LLMs&#xff08;大语言模型&#xff09;再次进入人们的视野。然而&#xff0c;在处理特定领域查询时&#xff0c;大模型生成的内容往往存在信息滞后和准确性不足的问题。如何让 RAG 和向量搜索技术在实际应用中更好地满足企业需求&#…

java之利用二维数组来计算年利润和每个季度的营业额

public class TwodimensionDemo2 {public static void main(String[] args) {//创建二维数组来存储数据int [][]yearArrArr{{22,66,44},{77,33,88},{25,45,65},{11,66,99}};int yearSum0;//遍历二维数组&#xff0c;得到每一个一维数组并求和for (int i 0; i < yearArrArr.…

Nginx 怎样处理请求的重试机制?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; 文章目录 Nginx 怎样处理请求的重试机制&#xff1f;一、为何需要重试机制&#xff1f;二、Nginx 中的重试机制原理三、Nginx 重试机制的配置参数四、Nginx 重试机制的实际…

新手小白的pytorch学习第十弹----多类别分类问题模型以及九、十弹的练习

目录 1 多类别分类模型1.1 创建数据1.2 创建模型1.3 模型传出的数据1.4 损失函数和优化器1.5 训练和测试1.6 衡量模型性能的指标 2 练习Exercise 之前我们已经学习了 二分类问题&#xff0c;二分类就像抛硬币正面和反面&#xff0c;只有两种情况。 这里我们要探讨一个 多类别…

LeetCode 中有关数组的题目(JAVA代码实现)

1.两数之和 作为力扣的第一题&#xff0c;我估计很多新手在这里就被劝退了&#xff0c;但其实这道题不难&#xff0c;我们用map存储我们找到的目标整数&#xff0c;当循环结束之后&#xff0c;如果找到&#xff0c;就返回找到的两个整数的数组&#xff0c;如果没找到&#xff0…

pycharm创建新python环境(切换版本)详细图解版——最简单的方法实现python环境切换

先按操作&#xff0c;进行python版本的切换 下面这种方式是切换你本地已经下载了的python环境 我比较推荐下面这种方法&#xff0c;前提是你已经安装了anaconda 在这里&#xff0c;你可以创建2.7到3.10任意版本的虚拟环境 选择了创建好的环境后&#xff0c;如果对你所需要的…

鸿蒙仓颉语言【模块module】

module 模块 模块配置文件&#xff0c;这里指项目的modules.json 文件&#xff0c;用于描述代码项目的基础元属性。 {"name": "file name", //当前项目的名称"description": "项目描述", //项目描述"version": "1.0…

【数据脱敏】⭐️SpringBoot 整合 Jackson 实现隐私数据加密

目录 &#x1f378;前言 &#x1f37b;一、Jackson 序列化库 &#x1f37a;二、方案实践 2.1 环境准备 2.2 依赖引入 2.3 代码编写 &#x1f49e;️三、接口测试 &#x1f379;四、章末 &#x1f378;前言 小伙伴们大家好&#xff0c;最近也是很忙啊&#xff0c;上次的文章…

好玩新游:辛特堡传说中文免费下载,Dungeons of Hinterberg 游戏分享

在游戏中&#xff0c;你将扮演Luisa&#xff0c;一个被现实生活拖得疲惫不堪的法律实习生。她决定暂时远离快节奏的公司生活&#xff0c;踏上征服辛特堡地下城的旅程…她会在第一天就被击退&#xff0c;还是能成为顶级猎魔人呢&#xff1f;只有一个办法可以找到答案... 体验刺激…

Go语言os包全攻略:文件、目录、环境变量与进程管理

Go语言os包全攻略&#xff1a;文件、目录、环境变量与进程管理 简介文件操作文件创建与删除文件创建文件删除 文件读写操作基本的文件读写操作使用缓冲区的文件读写 文件信息获取与修改文件路径操作获取绝对路径路径分割与合并 目录操作目录创建与删除目录创建目录删除 目录遍历…