在MySQL中,`SELECT`查询语句的各个部分按照特定的逻辑顺序执行,尽管在编写SQL时它们的顺序是固定的。以下是这些关键字及它们在MySQL查询中的作用和执行流程:
1. **SELECT**
- 作用:指定从数据库表中选择哪些列或表达式(包括计算字段、聚合函数等)包含在查询结果集中。
- 示例:`SELECT column1, column2, AVG(column3) AS avg_value FROM ...`
- 注释:在GROUP BY和HAVING子句中使用时,可以指明对分组后的数据进行何种计算或提取哪些非聚合列。
2. **FROM**
- 作用:指定要查询的数据源,即从哪一张或多张表中获取数据,也可以包括JOIN操作来连接多个表。
- 示例:`FROM table1 JOIN table2 ON table1.id = table2.id`
3. **WHERE**
- 作用:定义一个搜索条件,用来过滤FROM子句中选定表的原始记录行。WHERE子句中的条件会在任何分组或聚合之前应用到单行记录上。
- 示例:`WHERE column4 > 100 AND column5 = 'some_value'`
4. **GROUP BY**
- 作用:将查询结果按一个或多个列的值进行分组,这样每个分组内的所有行具有相同的列值。只有那些出现在GROUP BY子句中的列(或其派生列),或者在SELECT列表中出现的聚合函数才能出现在查询结果中。
- 示例:`GROUP BY column1, column3`
5. **HAVING**
- 作用:应用于GROUP BY的结果集,用于筛选满足某些条件的组,类似于WHERE子句但针对的是分组后的汇总数据,而不是单行记录。
- 示例:`HAVING COUNT(*) > 10 OR SUM(column3) < 1000`
6. **ORDER BY**
- 作用:对最终查询结果集进行排序,可以根据一列或多列的值来指定升序(ASC)或降序(DESC)排列。
- 示例:`ORDER BY column2 DESC, column1 ASC`
7. **LIMIT**
- 作用:限制返回结果的数量,可以用于实现分页效果。LIMIT接受一个或两个参数,第一个参数表示起始位置(通常是0开始的索引),第二个参数表示要返回的记录数量。
- 示例:
- `LIMIT 10` 表示只返回前10条记录。
- `LIMIT 5, 10` 表示跳过前5条记录,然后返回接下来的10条记录。
执行顺序总结如下:
1. FROM
2. JOIN
3. WHERE
4. GROUP BY
5. HAVING
6. SELECT
7. DISTINCT
8. ORDER BY
9. LIMIT
注意:虽然上述顺序描述了逻辑执行流程,但在实际处理过程中,MySQL会对查询进行优化并可能改变部分步骤的实际执行顺序以提高效率。例如,在某些情况下,WHERE条件的部分过滤可能会与JOIN操作同时进行。不过,对于开发者来说,理解这种逻辑顺序有助于正确构建查询语句以及预测查询结果。
-----------
在MySQL中,TEXT类型有四种不同的大小规格:
TINYTEXT:最大长度为 255 字节,存储非常短的文本串。
TEXT:最大长度为 65,535 字节,适合存储较长的文章、描述等。
MEDIUMTEXT:最大长度为 16,777,215 字节(约16MB),适合存储更大篇幅的文章或日志记录。
LONGTEXT:最大长度为 4,294,967,295 字节(约4GB),适用于存储超长文本内容。
--------
1. 数值类型整数类型: - BIT: 可变长度的位字段。
- BOOL 或 BOOLEAN: 实际上是 TINYINT(1) 的别名,用于存储布尔值。
- TINYINT: 有符号范围为 -128 到 127,无符号范围为 0 到 255。
- SMALLINT: 较小的整数范围。
- MEDIUMINT: 中等大小的整数。
- INT 或 INTEGER: 常用的整数类型,通常占用4个字节。
- BIGINT: 存储大整数。
浮点数和定点数类型: - FLOAT: 单精度浮点数,不精确但存储空间较小。
- DOUBLE 或 DOUBLE PRECISION: 双精度浮点数,提供更高的精度。
- DECIMAL: 定点数类型,用于需要高精度且不允许舍入误差的场合。
2. 字符串类型固定长度字符: - CHAR(size): 固定长度的字符串,不足部分以空格填充。
可变长度字符: - VARCHAR(size): 可变长度的字符串,只存储实际使用的字符数量,节省空间。
文本类型: - TINYTEXT: 最多能存储 2^8 字节的文本。
- TEXT: 最多能存储 2^16 字节的文本。
- MEDIUMTEXT: 最多能存储 2^24 字节的文本。
- LONGTEXT: 最多能存储 2^32 字节的文本。
3. 日期和时间类型- DATE: 存储年-月-日格式的日期。
- TIME: 存储时-分-秒格式的时间。
- DATETIME: 存储包含日期和时间的完整信息。
- TIMESTAMP: 同样存储日期和时间,但根据系统设置可能自动更新当前时间。
- YEAR: 存储两位或四位表示的年份。
4. 二进制类型(BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR)- BINARY(size): 固定长度的二进制数据。
- VARBINARY(size): 可变长度的二进制数据。
5. 二进制大对象类型(BLOBs)- TINYBLOB: 最多能存储 2^8 字节的二进制数据。
- BLOB: 最多能存储 2^16 字节的二进制数据。
- MEDIUMBLOB: 最多能存储 2^24 字节的二进制数据。
- LONGBLOB: 最多能存储 2^32 字节的二进制数据。
6. 其他特殊类型- ENUM: 枚举类型,允许在列中存储指定列表中的一个值。
- SET: 集合类型,允许在列中存储多个来自预定义列表的值集合。
|