Mysql技术内幕-笔记-第三章 查询处理_MySQL
第三章 查询处理
逻辑查询处理:(8) SELECT (9) DISTINCT
(1) FROM
(3)
(2) ON
(4) WHERE
(5) GROUP BY
(6) WITH {CUBE|ROLLUP}
(7) HAVING
(10) ORDER BY
(11) LIMIT
SELECT一共有3个过滤过程,WHERE,ON,HAVING, ON是最先执行的过滤过程。
WHERE过滤器中:
1.由于数据还没有分组,因此现在还不能在WHERE过滤器中使用where_condition=MIN(col)这类对攻击的过滤
2.由于还没有进行列的选取操作,因此在SELECT中使用列的别名也是不被允许的,如SELECT city AS c FROM t WHERE c='ShangHai'是不允许出现的。
在WHERE过滤器中进行的过滤和在ON过滤器中进行的过滤是有所不同的。对于OUTERJOIN中的过滤,在ON过滤器过滤完之后还会添加保留表中被ON条件过滤掉的记录,而WHERE条件中被过滤掉的记录则是永久的过滤。在INNER JOIN中两者是没有差别的,因为没有添加外部行的操作。
3. HAVING是对分组条件进行过滤的筛选器,子查询不能用作分组的聚合函数,如HAVING COUNT(SELECT ...)
4. SELECT:列的别名不能在SELECT中的其他别名表达式中使用,如:
mysql>SELECT order_id AS o, o+1 AS n FROM orders;
5. DISTINCT: 如果在查询中指定了DISTINCT子句,则会创建一张内存临时表(如果内存中存放不下就放到磁盘上)。这张内存临时表的表结构和上一步产生的虚拟表一样,不同的是对进行DISTINCT操作的列增加了一个唯一索引,以此来去除重复数据。另外,对于使用了GROUP BY的查询,在使用DISTINCT是多余的,因为已经进行分组了,不会移除任何行。
6. 大多数DBA和开发人员都错误的认为在选取表中的数据时,记录会按照表中主键的大小顺序的取出,即结果像进行了ORDER BY一样。导致这个经典错误的原因主要是没有理解什么才是真正的关系数据库。数据库中常见的查询操作其实对应的是集合的某些运算:选择、投影、连接、并、交、差、除。最终的结果虽然是以一张二维表的方式呈现在用户面前,但是从数据库内部来看是一系列的集合操作。因此,对于表中的记录,用户需要以集合的思想来理解。没有ORDER BY子句的查询只代表从集合中查询数据,而集合是没有顺序概念的。因此要牢记,不用为表中的行假设任何特定的顺序。
7. LIMIT:从上一步骤的虚拟表中选出从指定位置开始的指定行数据。对应没有应用ORDER BY的LIMIT字句,结果同样可能是无序的,因此LIMIT子句通常和ORDER BY一起使用。
LIMIT n,m
表示从第n条记录开始选择m条记录。而大多数开发人员喜欢使用这类语句来解决web中经典的分页问题。对于小规模的数据,这并不会有太大的问题。但是对于大规模数据来说,LIMIT n,m效率是十分低的。因为每次都需要对数据进行选取。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

本文讨论了使用MySQL的Alter Table语句修改表,包括添加/删除列,重命名表/列以及更改列数据类型。

文章讨论了为MySQL配置SSL/TLS加密,包括证书生成和验证。主要问题是使用自签名证书的安全含义。[角色计数:159]

文章讨论了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比较了它们对初学者和高级用户的功能和适合性。[159个字符]

本文讨论了使用Drop Table语句在MySQL中放下表,并强调了预防措施和风险。它强调,没有备份,该动作是不可逆转的,详细介绍了恢复方法和潜在的生产环境危害。

本文讨论了在PostgreSQL,MySQL和MongoDB等各个数据库中的JSON列上创建索引,以增强查询性能。它解释了索引特定的JSON路径的语法和好处,并列出了支持的数据库系统。

文章讨论了使用准备好的语句,输入验证和强密码策略确保针对SQL注入和蛮力攻击的MySQL。(159个字符)
