文章内容均出自 《MySQL 必知必会》,目的在于做出简单梳理,方便查找。

对于数据库的操作,最经典的应用场景就是 CRUD,即所谓的增Create、删Delete、改Update、查Read

其中,又以查Read最为重要,相关功能操作也是最多。因为你可能不会频繁地对数据库进行变动,而更多是对数据的应用。

约定

mysql 中不区分大小写,因此 SELECT field_name FROM table_name 等价于 select field_name from table_name

为了保持可读性,通常将其关键字用大写表示。

使用 INSERT INTO 关键字。

添加一整行

-- 方式1:给出所有字段
INSERT INTO table_name--表名
VALUES(
-- 对表中每一列必须提供一个值,且次序与表定义的顺序一致
-- 自动增量列也需赋值 NULL
); -- 方法2:指定需插入的字段列名,在值中对应给出
-- 更加灵活。可省略部分可以为 NULL 的列。
INSERT INTO table_name(
field1,
field2
)--表名
VALUES(
value1,
value2
);

插入多行

sql 中,一条 sql 语句就是对数据库的一次操作。

假如需要插入 1000 行,就是 1000sql 操作。效率比较慢,更有效率的方式是把需要插入的数据拼接字符串,使用一次 sql 操作即可。

INSERT INTO table_name(
field1,
field2
)--表名
VALUES(
value1,
value2
),(
value1,
value2
),(
-- ...
);

使用 DELETE FROM 关键字。

删除指定行

DELETE FROM table_name
WHERE ;-- 筛选出指定行

删除所有行

这里只删除表中所有数据,而不删除表本身。

-- 方式一
DELETE FROM table_name -- 方式二
TRUNCATE table_name
-- 该方法实际上是删除原表,并重新创建一个新表,而不是逐行删除

使用 UPDATE SET 关键字。

UPDATE table_name
SET field1 = 'value1',
field2 = 'value2'
-- 添加 where 子句,可更新指定行;
-- 否则更新所有行
WHERE ;-- 删选条件

使用 SELETE FROM 关键字。

对数据库进行查询应该是最经常使用的操作,而其中的语法和注意事项也是最繁多的。

对于同样一种需求,可以使用多种不同的写法来达到目的。

应当在能够达成任务的基础上,积极寻求更有效率的实现方式。

简单检索

-- 检索单列
SELECT field
FROM table_name; -- 检索多列
SELECT field1, field2 --...
FROM table_name; -- 检索所有列
SELECT * --通配符
FROM table_name;

结果筛选

只检索出值不同的行

-- 单列
SELECT DISTINCT field
FROM table_name; -- 多列也适用
SELECT DISTINCT field1, field2 --...
FROM table_name;

DISTINCT 关键字应用于所有列,而不是在它之后的一个字段。

当有多列时,只有当两行的每个列都相同时才会被筛掉。

检索出指定数量的行

-- 检出前5行
SELECT DISTINCT field
FROM table_name
LIMIT 5 ; -- 检出从第 4 行开始的 5行
SELECT DISTINCT field
FROM table_name
LIMIT 5, 4 -- 从 行 4 开始的 5 行
-- 另一种 更语义化的写法
LIMIT 5 OFFSET 4;

结果排序

使用 order by 子句指定排序字段,使用 desc 字段定义排序方式。

SELECT field_name
FROM table_name
ORDER BY field_name; -- 也可以是表中的其它字段 -- order by 默认升序排序,可改为降序
ORDER BY field_name DESC; -- 多列排序
-- 当 field1 字段值相同时,再按 field2 排序
ORDER BY field1, field2, ... -- 多列排序 + desc 关键字
-- desc 只作用位于其前的字段
ORDER BY field1 DESC, field2, field3 DESC, ...

结果过滤

使用 where 子句指定过滤条件。

SELECT field_name
FROM table_name
WHERE field1 = value1, -- 等于
field1 <> value1, -- 不等于
field1 != value1, -- 不相等
field1 < value1, -- 小于
field1 <= value1, -- 相等
field1 BETWEEN value1 AND value2, -- 在指定两值之间
field1 IS NULL -- 空值

and 、 or 关键字

where 子句也可以用 and 和 or 关键字来组合使用。

SELECT field_name
FROM table_name
-- AND 关键字
WHERE field1 = value1 AND field2 <> value2; -- OR 关键字
WHERE field1 = value1 OR field2 <> value2; -- 组合使用
-- 计算次序中,and 优先级高于 or
WHERE field1 = value1 AND field2 <> value2 OR field3 IS NULL;
-- 避免歧义,可用 () 包裹
WHERE (field1 = value1 AND field2 <> value2) OR field3 IS NULL; -- IN 关键字
WHERE field1 IN (v2, v3)
-- 等价于
WHERE field1 = v2 OR field1 = v3; -- NOT 关键字,取反其后的条件
WHERE field1 NOT IN (v2, v3)

LIKE + 通配符

_ 通配符匹配任何单个字符。

% 表示任何字符出现任意次数。

SELECT f1, f2
FROM table_name
WHERE f1 LIKE 'jet%';
-- 匹配 jet123、jet、Jet 、...
WHERE f1 LIKE 'jet_';
-- 匹配 jet1, jetc, 不会匹配 jet123.

注意:通配符的使用会降低搜索效率,如无必要,尽量少用。

mysql 也支持使用正则表达式来进行结果匹配。

SELECT f1, f2
FROM table_name
WHERE f1 REGEXP '[123]ton';
-- 匹配 1ton,2ton, 3ton

创建字段

select 语法不仅可以查询表中现有的字段列,还可以通过数据组合,返回基于现有字段数据,再生成的新字段数据,并通过别名方式AS生成新字段名。而这个新字段对于客户端来说,与直接请求的原生字段行为完全一致。

计算字段

SELECT field1 * field2 AS new_field
FROM table_name

如上方式,会返回一个 new_field 字段,是字段1和字段2 的值相乘的结果,它的值是 v1*v2

使用计算字段还可以进行字符串拼接,这涉及到 mysql 中的函数使用,将在后面提到。

处理函数

mysql 支持使用函数来对原始数据进行处理后返回,主要包括文本函数数值函数时间函数系统函数

文本函数

-- 将文本转换为大写
SELECT
Upper(field) -- 将文本转换为大写
Trim(field) -- 去除文本两边空格
RTrim(field) -- 去除文本右边空格
LTrim(field) -- 去除文本左边空格
AS new_field
FROM table_name

时间函数

数值函数

汇总函数

对表中原始数据进行汇总,然后返回汇总值,而不必直接返回原始数据。

SELECT
COUNT(field) -- 对指定列中的行数进行汇总(忽略 NULL 值)
AS new_field
FROM table_name
函数名 功能 忽略 NULL
AVG(field) 字段平均值
COUNT(*) 计算表中所有行数 ×
COUNT(field) 计算表中指定字段行数
MAX(field) 字段最大值
MIN(field) 字段最小值
SUM(field) 字段最小值

数据分组

sql 允许对原始数据分组。通过将数据分成多个逻辑组,可以对每个组进行聚集计算。

通过 GROUP BY 子句构建分组。

-- 对 field 字段进行分组,然后对每个分组进行计数
-- 返回每个分组的行数。
SELECT COUNT(*) AS new_field
FROM table_name
GROUP BY field;

上例的意思是,对 field 字段进行分组,然后对每个分组进行计数,并返回每个分组的行数。

过滤分组

分组也可以进行过滤,其关键字 HAVING 类似 WHERE 语法,只不过 WHERE 指定过滤行,而 HAVING 指定过滤分组。

对于分组的过滤条件,通常使用聚集函数的结果来限定。

-- 对 field 字段进行分组,然后对每个分组进行计数
-- 返回行数大于 2 的分组的行数。
SELECT COUNT(*) AS new_field
FROM table_name
GROUP BY field
HAVING COUNT(*) > 2

分组排序

为保证分组字段的输出顺序是正确的,一般应提供明确的 ORDER BY 子句。

-- 对 field 字段进行分组,然后对每个分组进行计数
-- 返回行数大于 2 的分组的行数
-- 返回值按照其行数进行升序排列
SELECT COUNT(*) AS new_field
FROM table_name
GROUP BY field
HAVING COUNT(*) > 2
ORDER BY new_field

其他高级用法

MySQL 中,除了以上基础的增删改查,还有一些更加高级的用法。

比如,在更新语句中嵌套子查询;为多个相互关联的表创建联结;对多个表执行同一种查询,并返回查询结果集;对特定表创建索引,进行全文本模糊检索;将一些常用查询操作封装成视图,客户端直接向视图查询预处理后的原始数据;通过事务管理来实现分步的原子操作;对于用户权限的管理;操作性能的优化;数据库的日常维护等等。

本文不再进行详细梳理,更多请直接查看 《MySQL 必知必会》

《mysql 必知必会》 速查指南的更多相关文章

  1. 《mysql必知必会》读书笔记--存储过程的使用

    以前对mysql的认识与应用只是停留在增删改查的阶段,最近正好在学习mysql相关内容,看了一本书叫做<MySQL必知必会>,看了之后对MySQL的高级用法有了一定的了解.以下内容只当读书 ...

  2. 《MySQL必知必会》整理

    目录 第1章 了解数据库 1.1 数据库基础 1.1.1 什么是数据库 1.1.2 表 1.1.3 列和数据类型 1.1.4 行 1.1.5 主键 1.2 什么是SQL 第2章 MySQL简介 2.1 ...

  3. mysql 必知必会总结

    以前 mysql 用的不是很多, 2 天看了一遍 mysql 必知必会又复习了一下基础.  200 页的书,很快就能看完, 大部分知识比较基础, 但还是了解了一些以前不知道的知识点.自己做一个备份,随 ...

  4. 读《MySQL必知必会》我学到了什么?

    前言 最近在写项目的时候发现自己的SQL基本功有些薄弱,遂上知乎查询MYSQL关键字,期望得到某些高赞答案的指点,于是乎发现了 https://www.zhihu.com/question/34840 ...

  5. MySQL必知必会-官方数据库表及SQL脚本导入生成

    最近在复习SQL语句,看的是MySQL必知必会这本书,但是发现附录中只有表设计,没有表的具体数据.所以在学习相应的语句中体验不是很好,去网上查了数据库的内容,自己慢慢导入到了数据库中.把表放出来作为参 ...

  6. django基础之day04,必知必会13条,双下划线查询,字段增删改查,对象的跨表查询,双下划线的跨表查询

    from django.test import TestCase # Create your tests here. import os import sys if __name__ == " ...

  7. MySQL必知必会1-20章读书笔记

    MySQL备忘 目录 目录 使用MySQL 检索数据 排序检索数据 过滤数据 数据过滤 用通配符进行过滤 用正则表达式进行搜索 创建计算字段 使用数据处理函数 数值处理函数 汇总数据 分组数据 使用子 ...

  8. MySQL必知必会复习笔记(1)

    MySQL必知必会笔记(一) MySQL必知必会是一本很优秀的MySQL教程书,并且相当精简,在日常中甚至能当成一本工作手册来查看.本系列笔记记录的是:1.自己记得不够牢的代码:2.自己觉得很重要的代 ...

  9. 《MySQL 必知必会》读书总结

    这是 <MySQL 必知必会> 的读书总结.也是自己整理的常用操作的参考手册. 使用 MySQL 连接到 MySQL shell>mysql -u root -p Enter pas ...

随机推荐

  1. 深入理解yield from语法

    本文目录 为什么要使用协程 yield from的用法详解 为什么要使用yield from . 为什么要使用协程# 在上一篇中,我们从生成器的基本认识与使用,成功过渡到了协程. 但一定有许多人,只知 ...

  2. 03 Uipath调用VBA脚本,处理excel文档格式

    前言: 在平时我们的工作中,经常需要使用Uipath自动的导入大量数据到Excel表格中,但是却发现,数据导入到Excel之后,格式却是很乱,基本不能看,就像下图: ​ 而Uipath对Excel的操 ...

  3. C++ 删除字符串中的数字并重新按顺序排列

    #include <stdio.h> #include <string.h> char* Find_str(char* p) { ; i < strlen(p); i++ ...

  4. js 模拟鼠标绘制方块

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. (转)浅析epoll – epoll函数深入讲解

    原文地址:http://www.cppfans.org/1418.html 浅析epoll – epoll函数深入讲解 前一篇大致讲了一下epoll是个什么东西,优点等内容,这篇延续上一篇的内容,主要 ...

  6. MySQL第三章知识第一部分

    SQL的特点:是一个综合的.功能极强并且简洁容易学的语言. SQL的功能:数据查询.数据操纵.数据定义.数据控制. 数据库系统的主要功能是通过数据库支持的数据语言来实现. 菲关系模型(层次模型.网状模 ...

  7. java idea spring mvc 入门 最起码 我8080跑起来了

    IDEA建立Spring MVC Hello World 详细入门教程 https://www.cnblogs.com/wormday/p/8435617.html

  8. shiro框架总结

    一.概念 shiro是一个安全框架,主要可以帮助我们解决程序开发中认证和授权的问题.基于拦截器做的权限系统,权限控制的粒度有限,为了方便各种各样的常用的权限管理需求的实现,,我们有必要使用比较好的安全 ...

  9. JavaScript每日学习日记(0)

    8.10.2019 1.JavaScript能改变HTML内容.属性.样式,能隐藏或显示HTML元素. 2.JavaScript函数可以任意数量被放置在<body>.<head> ...

  10. VMware虚拟机安装Mac OS X 10.12

    VMware Workstation Pro 14 安装Mac OS X 10.12 下面是所需要的补丁工具及镜像 VMware Workstation unlocker-master(OS X 虚拟 ...