MySQL

本文所有内容均基于文末附上的数据库

第 1 课:了解 SQL

数据库

数据库 (database):保存有组织的数据的容器(通常是一个文件或一组文件)

数据库管理系统 (DBMS):DBMS 是用来创建和操作数据库的容器,简称数据库软件

表 (table)

表是一种结构化的文件,可用来存储某种特定类型的数据

image-20220226163831741 注意:数据库中的每个表都有一个名字来标识自己。这个名字是唯一的,即数据库中没有其他表具有相同的名字

列 (column) 和数据类型

列 (column):表中的一个字段。所有表都是由一个或多个列组成的

数据类型:允许什么类型的数据。每个表列都有相应的数据类型,它限制 (或允许) 该列中存储的数据

行 (row)

行 (row):表中的一个记录

主键 (primary key)

主键 (primary key):一列(或几列) ,其值能够唯一标识表中每一行

表中的任何列都可以作为主键,只要它满足以下条件:

主键通常定义在表的一列上,但并不是必须这么做,也可以一起使用多个列作为主键。在使用多列作为主键时,上述条件必须应用到所有列,所有列值的组合必须是唯一的

SQL 语句

SQL(发音为字母 S-Q-L 或 sequel)是 Structured Query Language (结构化查询语言) 的缩写。SQL 是一种专门用来与数据库沟通的语言

SQL 语句不区分大小写。习惯:SQL 关键字使用大写;列名 or 表名使用小写

多条 SQL 语句必须以分号(; )分隔

在处理 SQL 语句时,其中所有空格都被忽略

SQL 下标都是从 0 开始

单引号用来限定字符串,数值不需要

第 2 课:检索数据 (SELECT)

SELECT 语句:从一个或多个表中检索信息

小试牛刀:

第 3 课:排序检索数据 (ORDER BY)

SELECT检索出来的数据是特定顺序的

子句:SQL 语句由子句构成,有些子句是必需的,有些则是可选的。一个子句通常由一个关键字加上所提供的数据组成

ORDER BY 子句:取一个或多个列的名字,据此对输出进行排序

image-20220226163831741 注意:在指定一条 ORDER BY 子句时,应该保证它是 SELECT 语句中最后一条子句

image-20220226163831741 注意:如果不指定排序的顺序 (默认升序 ASC),降序 DESC (只应用到直接位于其前面的列名,如果想在多个列上进行降序排序,必须对每一列指定 DESC 关键字)

小试牛刀:

第 4 课:过滤数据 (WHERE)

数据库表一般包含大量的数据,很少需要检索表中的所有行。通常只会根据特定操作或报告的需要提取表数据的子集。只检索所需数据需要指定搜索条件 (search criteria),搜索条件也称为过滤条件 (filter condition)

WHERE 子句:数据根据 WHERE 子句中指定的搜索条件进行过滤

image-20220226163831741 注意:WHERE 子句在表名 (FROM 子句) 之后给出

image-20220226164025008 总结:ORDER BY 放最后;WHERE 放 FROM table 后

WHERE 子句操作符

image-20220226163831741 注意: NULL = no value,与字段包含 0,空字符串,仅仅包含空格不同

image-20220226163831741 注意:通过过滤选择不包含指定值的所有行时, 无法返回含 NULL 值的行

操作符说明
=等于
<>不等于
! =不等于
<小于
< =小于等于
!<不小于
>大于
> =大于等于
!>不大于
BETWEEN xx AND xx在指定的两个值之间
IS NULL为 NULL 的值

小试牛刀:

第 5 课:高级数据过滤 (AND/OR/IN/NOT)

image-20220226163831741 注意:在处理 OR 操作符前,优先处理 AND 操作符

IN 操作符:IN 操作符用来指定条件范围,范围中的每个条件都可以进行匹配

IN 操作符优点:

NOT 操作符:否定其后所跟的任何条件

因为 NOT 从不单独使用 (它总是与其他操作符一起使用),所以它的语法与其他操作符有所不同。NOT 关键字可以用在要过滤的列前,而不仅是在其后

NOT 操作符优点:与 IN 操作符联合使用时,可NOT IN (xx, xxx, xxx)

小试牛刀:

第 6 课:用通配符进行过滤

LIKE 操作符:匹配非确定性过滤,一般都是配合「通配符」一起使用

通配符:用来匹配值的一部分的特殊字符

百分号 (%) 通配符:任何字符出现任意次数 (0, 1, 多次)

下划线 (_) 通配符:匹配单个字符一次

方括号 ([]) 通配符:指定一个字符集,它必须匹配指定位置 (通配符的位置) 的一个字符 (Mysql 不支持)

image-20220226163831741 注意:根据不同的配置,搜索可以是区分大小写的

image-20220226163831741 注意:WHERE prod_name LIKE '%'不会匹配产品名称为 NULL 的行

image-20220226163831741 注意:有些 DBMS 用空格来填补字段的内容。例如某列有 50 个字符,但是只存储了 (Fish bean bag toy) 17 个字符的内容,则剩余 33 个字符用「空格」填充。如果此时需要用F%y来匹配 Fish bean bag toy,则会失败,因为字符后面空格,结尾并不是 y。可以修改匹配规则为F%y%

使用通配符的技巧:

小试牛刀:

第 7 课:创建计算字段

未完待续 ...